////////////////////////////////////////////////////////////////////////////////////////////// // SelectEvent lets the user pick up vertex or workpoint // ////////////////////////////////////////////////////////////////////////////////////////////// void SelectEvents_OnSelect(ObjectsEnumerator JustSelectedEntities, SelectionDeviceEnum SelectionDevice, Point ModelPosition, Point2d ViewPosition, View View) { switch (_mode) { case ModeEnum.kPoint1: { _point1 = ModelPosition; _mode = ModeEnum.kPoint2; _interactionManager.InteractionEvents.StatusBarText = "Select dimension second point: "; break; } case ModeEnum.kPoint2: { _point2 = ModelPosition; Vector normal = View.Camera.Eye.VectorTo(View.Camera.Target); _dimData = DrawDimension(_point1, _point2, ModelPosition, normal); _clientGraphicsMng.UpdateView(); _interactionManager.InteractionEvents.StatusBarText = "Select dimension text position: "; _interactionManager.MouseEvents.MouseMoveEnabled = true; _interactionManager.SelectEvents.OnSelect -= new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect); _interactionManager.MouseEvents.OnMouseDown += new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown); _interactionManager.MouseEvents.OnMouseMove += new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove); _mode = ModeEnum.kDimText; break; } default: break; } }
////////////////////////////////////////////////////////////////////////////////////////////// // Update the position of dimension lines and text // ////////////////////////////////////////////////////////////////////////////////////////////// void UpdateDimension(DimData dimData, Point dimText, Vector normal) { Vector xAxis = dimData.Point1.VectorTo(dimData.Point2); Vector upVector = normal.CrossProduct(xAxis); upVector.Normalize(); Plane plane = _Tg.CreatePlane(dimData.Point1, normal); Point dimTextProj = AdnInventorUtilities.ProjectOnPlane(dimText, plane); double dotP1 = dimData.Point1.VectorTo(dimTextProj).DotProduct(upVector); double dotP2 = dimData.Point2.VectorTo(dimTextProj).DotProduct(upVector); Point extP1 = _Tg.CreatePoint( dimData.Point1.X + upVector.X * dotP1, dimData.Point1.Y + upVector.Y * dotP1, dimData.Point1.Z + upVector.Z * dotP1); Point extP2 = _Tg.CreatePoint( dimData.Point2.X + upVector.X * dotP2, dimData.Point2.Y + upVector.Y * dotP2, dimData.Point2.Z + upVector.Z * dotP2); dimData.ExtLine1.CoordinateSet[1] = dimData.Point1; dimData.ExtLine1.CoordinateSet[2] = extP1; dimData.ExtLine2.CoordinateSet[1] = dimData.Point2; dimData.ExtLine2.CoordinateSet[2] = extP2; dimData.DimLine.CoordinateSet[1] = extP1; dimData.DimLine.CoordinateSet[2] = extP2; Point midPoint = _Tg.CreatePoint( (extP1.X + extP2.X - dimData.Point1.X - dimData.Point2.X) * 0.5, (extP1.Y + extP2.Y - dimData.Point1.Y - dimData.Point2.Y) * 0.5, (extP1.Z + extP2.Z - dimData.Point1.Z - dimData.Point2.Z) * 0.5); SetNodePosition(dimData.DimNode, midPoint); }