DM_query_descriptor.py
1 ## @package python.demo.DM_query_descriptor
2 #
3 # howto handle pyDM.QueryDescriptor objects
4 #
5 
6 from opals import pyDM
7 
8 #queryText = "circle(r=10)"
9 queryText = "window(s=10)"
10 #queryText = "cylinder(r=10 z=4)"
11 
12 support3D = True # set to False if only circle and window queries are allowed
13 refPt = pyDM.Point(-3, 2, 0)
14 
15 vocType = pyDM.QueryDescriptor.Vocabulary.neighborhood3d if support3D else pyDM.QueryDescriptor.Vocabulary.minimal
16 queryDescr = pyDM.QueryDescriptor(queryText, vocType)
17 
18 if queryDescr.hasQuery():
19  query = queryDescr.query()
20  print(f"query text='{query}'")
21  print(f"\tquery type={query.type()}")
22  if isinstance(query, pyDM.QueryGeometry):
23  print(f"\tquery is a QueryGeometry object")
24  print(f"\tgeometryType={query.geometryType()}")
25  #geo = query.geometryFromRefPt(-3, 2)
26  geo = query.geometryFromRefPt(refPt)
27  if geo.type() == pyDM.GeometryType.circle:
28  print(f"\tcircle=(x={geo.x}, y={geo.y}, r={geo.r})")
29  elif geo.type() == pyDM.GeometryType.window:
30  print(f"\twindow=(x={geo.xmin}, y={geo.ymin})-(x={geo.xmax}, y={geo.ymax})")
31  elif geo.type() == pyDM.GeometryType.box:
32  print(f"\tbox=(x={geo.xmin}, y={geo.ymin}, z={geo.zmin})-(x={geo.xmax}, y={geo.ymax}, z={geo.zmax})")
33  elif geo.type() == pyDM.GeometryType.sphere:
34  print(f"\tsphere=(x={geo.x}, y={geo.y}, z={geo.z}, r={geo.r})")
35  elif geo.type() == pyDM.GeometryType.cylinder:
36  print(f"\tcylinder=(x={geo.x}, y={geo.y}, zmin={geo.zmin}, zmax={geo.zmax}, r={geo.r})")
37  else:
38  print(f"\tgeometry type not supported yet")
39 
40  print(f"\tmaxSearchDistance2D={query.maxSearchDistance2D()}")