- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi, I am trying to highlight components on a drawing view as solid red using client graphics. I am using the componentoccurrence of the assembly in the drawing view to create surfacegraphics and display that. It is working where it will display what i was expecting but I am stuck trying to position it, it defaults to the center of the view. I can move it with SetTransformBehavior but I can't get an accurate position based on the part itself.
So my question is how do we get the part origin point in drawing/drawing view space using a componentoccurrence
This loops through each view
For Each oDrawingView In sparesSheet.DrawingViews
Try
oDataSets = oDrawingView.GraphicsDataSetsCollection.Item("CG_Test3")
oDataSets.Delete
oDataSets = oDrawingView.GraphicsDataSetsCollection.Add("CG_Test3")
Catch
oDataSets = oDrawingView.GraphicsDataSetsCollection.Add("CG_Test3")
End Try
Try
oClientGraphics = oDrawingView.ClientGraphicsCollection.Item("CG_Test3")
oClientGraphics.Delete
oClientGraphics = oDrawingView.ClientGraphicsCollection.Add("CG_Test3")
Catch
oClientGraphics = oDrawingView.ClientGraphicsCollection.Add("CG_Test3")
End Try
Dim oModelDoc As Document
oModelDoc = oDrawingView.ReferencedDocumentDescriptor.ReferencedDocument
TraverseAssembly(oModelDoc.ComponentDefinition.Occurrences)
iLogicVb.UpdateWhenDone = True
Next
Here is the part actually creating client graphics within the traverseassembly loop
Dim oLineNode As GraphicsNode
oLineNode = oClientGraphics.AddNode(1)
Dim oTransientBRep As TransientBRep
oTransientBRep = ThisApplication.TransientBRep
'By Transient Brep Class To copy the surface body
Dim oBody As SurfaceBody
oBody = oTransientBRep.Copy(oOcc.Definition.SurfaceBodies.Item(1))
' Create client graphics based on the transient body
Dim oSurfaceGraphics As SurfaceGraphics
oSurfaceGraphics = oLineNode.AddSurfaceGraphics(oBody)
oSurfaceGraphics.Color = oColor
oSurfaceGraphics.BurnThrough = True
'oSurfaceGraphics.SetViewSpaceAnchor(oTG.CreatePoint(0,0,0), oTG.CreatePoint2d(10,10), ViewLayoutEnum.kBottomLeftViewCorner)
Dim temp As WorkPoint
temp = oOcc.Definition.WorkPoints(1)
Dim tempproxy As WorkPointProxy
oOcc.CreateGeometryProxy(temp, tempproxy)
oSurfaceGraphics.SetTransformBehavior(oTg.CreatePoint(tempproxy.Point.X, tempproxy.Point.Y, tempproxy.Point.Z), DisplayTransformBehaviorEnum.kFrontFacing)
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I was able to figure it out. I got the transformation of the occurrence in the assembly and combined it with the transform of the assembly within the view and set the graphics node transform to that and it worked perfect.
Dim oLineNode As GraphicsNode
oLineNode = oClientGraphics.AddNode(1)
Dim oOccPtInAssem As Matrix
oOccPtInAssem = oOcc.Transformation
Dim oAssemPtInView As Matrix
oAssemPtInView = oDrawingView.ModelToDrawingViewTransform
oOccPtInAssem.PreMultiplyBy(oAssemPtInView)
oLineNode.Transformation = oOccPtInAssem