How to get a body or node id associated with a known coordinate point/location

Erik Kostson
Member, Moderator, Employee Posts: 312
✭✭✭✭
Say we have a point/location of interest (x,y,z coordinates), is there a way to get a body closest to this point?
Tagged:
0
Comments
-
Below is a sample code that does this (can of course be done in other ways also). Given a location it will find the nearest body centroid to that point and create a named selection.
- bx=0.50 # location of interest
- by=0.50
- bz=4.50
- dist=1E9
- bodies = ExtAPI.DataModel.Project.Model.GetChildren(DataModelObjectCategory.Body,True)
- for body in bodies:
- bc=body.GetGeoBody().Centroid
- cx=bc[0]
- cy=bc[1]
- cz=bc[2]
- distc=sqrt((bx-cx)**2+(by-cy)**2+(bz-cz)**2)
- if distc<dist:
- myb=body.GetGeoBody().Id
- dist=distc
- selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
- selection.Ids=[myb]
- ns=ExtAPI.DataModel.Project.Model.AddNamedSelection()
- ns.Location=selection
Same thing (find nearest node to location of interest) can be done for a node:
- bx=1.00
- by=0.50
- bz=1.00
- dist=1E9
- meshData= ExtAPI.DataModel.Project.Model.Analyses[0].MeshData
- nodes=meshData.Nodes
- for node in nodes:
- cx=node.X
- cy=node.Y
- cz=node.Z
- distc=sqrt((bx-cx)**2+(by-cy)**2+(bz-cz)**2)
- if distc<dist:
- myn=node.Id
- myb=node.BodyIds[0] # body id containing node
- dist=distc
- selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.MeshNodes)
- selection.Ids=[myn]
- ns=ExtAPI.DataModel.Project.Model.AddNamedSelection()
- ns.Location=selection
- selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
- selection.Ids=[myb]
- ns=ExtAPI.DataModel.Project.Model.AddNamedSelection()
- ns.Location=selection
0
This discussion has been closed.