////////////////////////////////////////////////////////////////////////////////////////////// // Draws dimension graphics // ////////////////////////////////////////////////////////////////////////////////////////////// DimData DrawDimension(Point point1, Point point2, Point dimText, Vector normal) { // Compute extension points Vector xAxis = point1.VectorTo(point2); Vector upVector = normal.CrossProduct(xAxis); upVector.Normalize(); Plane plane = _Tg.CreatePlane(point1, normal); Point dimTextProj = AdnInventorUtilities.ProjectOnPlane(dimText, plane); double dotP1 = point1.VectorTo(dimTextProj).DotProduct(upVector); double dotP2 = point2.VectorTo(dimTextProj).DotProduct(upVector); Point extP1 = _Tg.CreatePoint( point1.X + upVector.X * dotP1, point1.Y + upVector.Y * dotP1, point1.Z + upVector.Z * dotP1); Point extP2 = _Tg.CreatePoint( point2.X + upVector.X * dotP2, point2.Y + upVector.Y * dotP2, point2.Z + upVector.Z * dotP2); double dimValue = extP1.DistanceTo(extP2); GraphicsNode node = _clientGraphicsMng.CreateNewGraphicsNode(); LineGraphics extLine1 = _clientGraphicsMng.DrawLine( AdnInventorUtilities.ToArray(point1), AdnInventorUtilities.ToArray(extP1), node); LineGraphics extLine2 = _clientGraphicsMng.DrawLine( AdnInventorUtilities.ToArray(point2), AdnInventorUtilities.ToArray(extP2), node); LineGraphics dimLine = _clientGraphicsMng.DrawLine( AdnInventorUtilities.ToArray(extP1), AdnInventorUtilities.ToArray(extP2), node); extLine1.LineType = LineTypeEnum.kDashedLineType; extLine2.LineType = LineTypeEnum.kDashedLineType; UnitVector v = extP1.VectorTo(extP2).AsUnitVector(); double length = 20.0; double radius = 7.0; Point bottom1 = _Tg.CreatePoint( extP1.X + length * v.X, extP1.Y + length * v.Y, extP1.Z + length * v.Z); Point bottom2 = _Tg.CreatePoint( extP2.X - length * v.X, extP2.Y - length * v.Y, extP2.Z - length * v.Z); SurfaceBody cone1 = _TBrep.CreateSolidCylinderCone( bottom1, extP1, radius, radius, 0.0, null); SurfaceBody cone2 = _TBrep.CreateSolidCylinderCone( bottom2, extP2, radius, radius, 0.0, null); GraphicsNode dimNode = _clientGraphicsMng.CreateNewGraphicsNode(); SurfaceGraphics arrow1 = _clientGraphicsMng.DrawSurface(cone1, dimNode); SurfaceGraphics arrow2 = _clientGraphicsMng.DrawSurface(cone2, dimNode); arrow1.SetTransformBehavior(extP1, DisplayTransformBehaviorEnum.kPixelScaling, 1.0); arrow2.SetTransformBehavior(extP2, DisplayTransformBehaviorEnum.kPixelScaling, 1.0); TextGraphics text = _clientGraphicsMng.DrawText( AdnInventorUtilities.GetStringFromAPILength(dimValue), false, dimNode); text.Font = "Arial"; text.Bold = false; text.Italic = false; text.FontSize = 20; text.PutTextColor(221, 0, 0); text.VerticalAlignment = VerticalTextAlignmentEnum.kAlignTextMiddle; text.HorizontalAlignment = HorizontalTextAlignmentEnum.kAlignTextLeft; Point txtPos = _Tg.CreatePoint( (extP1.X + extP2.X) * 0.5, (extP1.Y + extP2.Y) * 0.5, (extP1.Z + extP2.Z) * 0.5); text.Anchor = txtPos ; text.SetTransformBehavior(txtPos, DisplayTransformBehaviorEnum.kFrontFacingAndPixelScaling, 1.0); node.Selectable = true; dimNode.Selectable = true; return new DimData(point1, point2, extLine1, extLine2, dimLine, dimNode); }