internal LitMath.Vector2 Snap(LitMath.Vector2 posInCanvas) { LitMath.Vector2 posInModel = _presenter.CanvasToModel(posInCanvas); foreach (Entity entity in _presenter.currentBlock) { List <ObjectSnapPoint> snapPnts = entity.GetSnapPoints(); if (snapPnts == null || snapPnts.Count == 0) { continue; } foreach (ObjectSnapPoint snapPnt in snapPnts) { double dis = (snapPnt.position - posInModel).length; double disInCanvas = _presenter.ModelToCanvas(dis); if (disInCanvas <= _threshold) { _currObjectSnapPoint = snapPnt; return(snapPnt.position); } } } _currObjectSnapPoint = null; return(posInModel); }
private void GetVector(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { Point p = e.GetPosition(main.grdMain); ObjectSnapPoint snapPoint = main.ChangeToSnapPointAndDrawMark(ref p); Point3D p3; if (snapPoint == null) { //SnapPoint가 없는 경우 if (Settings.Default.isOnOrthogonal & isSecondPointOfVectorInput == true) { //수직선 옵션이 켜 있는 경우 p3 = main.mouseInputGuide3d.GetOrthogonalPoint3dFromPoint2d(ref p); } else { //수직선 옵션이 꺼 있는 경우 그냥 대응하는 3차원 점 반환 p3 = main.Draw.GetPoint3dOnBasePlaneFromPoint2D(p); } } else { //SnapPoint가 있는 경우 p3 = snapPoint.point; } main.MouseDown -= GetVector; isMouseInput = true; main.Cmd.Call(p3.X + "," + p3.Y + "," + p3.Z); isSecondPointOfVectorInput = true; } }
internal void Draw(ObjectSnapPoint objectSnapPoint) { Clear(); if (objectSnapPoint == null) { return; } Point center = objectSnapPoint.point2d; Shape2D shape = new Shape2D(); switch (objectSnapPoint.snapType) { case ObjectSnapPoint.Types.End: case ObjectSnapPoint.Types.Node: double size = markSize; shape = shapes.AddSquare(center, size); break; case ObjectSnapPoint.Types.Mid: double radius = markSize / 2; shape = shapes.AddTriangleReqular(center, radius); break; case ObjectSnapPoint.Types.Center: break; default: break; } if (shape == null) { return; } shape.Color = color; shape.Thickness = thickness; objectSnapPoint.object_ = shape.object_; shapes.DrawAtGrid(grid); }
void GetPointsAndGetVector_Moving(object sender, MouseEventArgs e) { currentMousePoint = e.GetPosition(main.grdMain); //개체선택용 MouseInputGuide 클래스 사용 시 Cross 옵션인 경우 첫번째 점을 입력하기 전부터 시작되어야 함. if (viewType == MouseInputGuide.ViewType.Cross & !main.mouseInputGuide3d.started) { main.mouseInputGuide.viewType = viewType; main.mouseInputGuide.Start(currentMousePoint); } //SnapPoint 그리기. ObjectSnapPoint snapPoint = main.ChangeToSnapPointAndDrawMarkAndPutEvent(ref currentMousePoint, eventAtSnapMark); //Points 입력 요청일 때 2번째 입력값 부터 InputGuideLine생성. if (userInputPoints.Count > 0) { if (snapPoint == null & Settings.Default.isOnOrthogonal) { main.mouseInputGuide3d.GetOrthogonalPoint3dFromPoint2d(ref currentMousePoint); } main.mouseInputGuide3d.Move(currentMousePoint); } }
public void Clear() { _currObjectSnapPoint = null; }