public bool ExecuteCommand() { if (VoiceController.IsEnabled && VoiceController.RecognizedText != "") { RhinoApp.SendKeystrokes(VoiceController.RecognizedText, true); VoiceController.RecognizedText = ""; } else { if (this._selectedToolGroup == null) { return(false); } for (int index = 0; index < this._selectedToolGroup.Length; ++index) { if (this._selectedToolGroup[index].IconBound.Contains(RiftViewportConduit.CursorInLeftViewport)) { RhinoApp.SendKeystrokes(this._selectedToolGroup[index].EnglishName, true); } } } this._selectedToolGroup = (RhinoTool[])null; this._voiceOn = true; VoiceController.StopVoice(); return(true); }
public List <Point3d> GetRoadPoints() { ButtonStateCheck(ButtonState.None); RhinoApp.SendKeystrokes("Cancel", true); RhinoApp.Wait(); bool newPoint = true; List <Point3d> newpoints = new List <Point3d>(); List <Rhino.DocObjects.PointObject> newpointobjects = new List <Rhino.DocObjects.PointObject>(); while (newPoint) { newPoint = RhinoApp.RunScript("Point", false); var guid = RhinoDoc.ActiveDoc.Objects.ElementAt(0).Id; Rhino.DocObjects.PointObject pointobject = RhinoDoc.ActiveDoc.Objects.Find(guid) as Rhino.DocObjects.PointObject; newpointobjects.Add(pointobject); Rhino.Geometry.Point point = pointobject.PointGeometry; Point3d point3d = point.Location; newpoints.Add(point3d); if (!newPoint) { var result = MessageBox.Show("Yes = 끝내기 No = 이전 취소 Cancle = 취소", "도로 선택 완료", MessageBoxButton.YesNoCancel); if (result == MessageBoxResult.Cancel) { foreach (var pobj in newpointobjects) { Rhino.RhinoDoc.ActiveDoc.Objects.Delete(pobj, true); } Rhino.RhinoDoc.ActiveDoc.Views.Redraw(); } else if (result == MessageBoxResult.No) { var lastguid = RhinoDoc.ActiveDoc.Objects.ElementAt(0).Id; RhinoDoc.ActiveDoc.Objects.Delete(lastguid, true); Rhino.RhinoDoc.ActiveDoc.Views.Redraw(); newPoint = true; } } ////show/hide작업 } return(newpoints); }
public static void CreateMiniViewports() { DisplayModeDescription displayModeDescription = (DisplayModeDescription)null; foreach (DisplayModeDescription displayMode in VR_PANEL.DisplayModes) { if (displayMode.EnglishName == "VrForModeling") { displayModeDescription = displayMode; } } for (int index = 0; index < 3; ++index) { if (Viewports._miniViews[index] == null) { Viewports._miniViews[index] = RhinoDocument.ActiveDoc.Views.Find(Viewports._miniViewportTitles[index], false); if (index < 2) { if (Viewports._miniViews[index] == null) { Viewports._miniViews[index] = RhinoDocument.ActiveDoc.Views.Add(Viewports._miniViewportTitles[index], (DefinedViewportProjection)7, new Rectangle(new System.Drawing.Point(Viewports._eyeScreenX + (Viewports._riftHor / 2 - Viewports._miniHor) / 2 + Viewports._riftHor / 2 * index, Viewports._eyeScreenY + (Viewports._riftVer - Viewports._miniVer) / 2), new Size(Viewports._miniHor, Viewports._miniVer)), true); } } else if (Viewports._miniViews[index] == null) { Viewports._miniViews[index] = RhinoDocument.ActiveDoc.Views.Add(Viewports._miniViewportTitles[index], (DefinedViewportProjection)7, new Rectangle(new System.Drawing.Point((Viewports._riftHor / 2 - Viewports._miniHor) / 2, (Viewports._riftVer - Viewports._miniVer) / 2), new Size(Viewports._miniHor, Viewports._miniVer)), true); } Viewports._miniViews[index].TitleVisible = (false); Viewports._miniViews[index].MainViewport.WorldAxesVisible = (true); Viewports._miniViews[index].MainViewport.DisplayMode = (displayModeDescription); Viewports._miniViewportInfo[index] = new ViewportInfo(Viewports._miniViews[index].MainViewport); } } if (!Viewports._miniViews[2].MainViewport.ZoomExtentsSelected()) { Viewports._miniViews[2].MainViewport.ZoomExtents(); } else { Viewports._objLocked = true; RhinoApp.SendKeystrokes("_invert _lock", true); } }
public static void CloseMiniViewports() { for (int index = 0; index < 3; ++index) { if (Viewports._miniViews[index] != null) { if (Viewports._miniViews[index].Document != null) { Viewports._miniViews[index].Close(); } if (Viewports._objLocked) { RhinoApp.SendKeystrokes("unlock", true); Viewports._objLocked = false; } Viewports._miniViewportInfo[index].Dispose(); Viewports._miniViewportInfo[index] = (ViewportInfo)null; Viewports._miniViews[index] = (RhinoView)null; } } }
private void ButtonStateCheck(ButtonState after) { string before = buttonstate.ToString(); string afters = after.ToString(); switch (buttonstate) { case ButtonState.GetWidth: case ButtonState.GetHeight: RhinoApp.SendKeystrokes("!Cancel", true); buttonstate = after; //RhinoApp.WriteLine(before + "에서" + afters); break; case ButtonState.None: default: buttonstate = after; //RhinoApp.WriteLine(before + "에서" + afters); break; } }
private void Btn_SetWidth_Click(object sender, RoutedEventArgs e) { ButtonStateCheck(ButtonState.GetWidth); RhinoApp.SendKeystrokes("Cancel", true); RhinoApp.Wait(); UIManager.getInstance().SnapSetter(UIManager.SnapMode.OffAll); if (TuringAndCorbusierPlugIn.InstanceClass.plot == null) { MessageBox.Show("먼저 커브를 선택하세요"); return; } if (TuringAndCorbusierPlugIn.InstanceClass.plot.Boundary.ClosedCurveOrientation(Plane.WorldXY) == CurveOrientation.Clockwise) { TuringAndCorbusierPlugIn.InstanceClass.plot.Boundary.Reverse(); } List <Curve> inputList = TuringAndCorbusierPlugIn.InstanceClass.plot.Boundary.DuplicateSegments().ToList(); List <ConduitLine> tempConduitLine = new List <ConduitLine>(); if (inputList.Count == TuringAndCorbusierPlugIn.InstanceClass.plot.Surroundings.Length) { foreach (Curve i in inputList) { Rhino.Geometry.Line tempLine = new Rhino.Geometry.Line(i.PointAt(i.Domain.T0), i.PointAt(i.Domain.T1)); ConduitLine tempTempConduitLine = new ConduitLine(tempLine, TuringAndCorbusierPlugIn.InstanceClass.plot.Surroundings[inputList.IndexOf(i)]); tempConduitLine.Add(tempTempConduitLine); } } else { TuringAndCorbusierPlugIn.InstanceClass.plot.Surroundings = new int[inputList.Count]; foreach (Curve i in inputList) { Rhino.Geometry.Line tempLine = new Rhino.Geometry.Line(i.PointAt(i.Domain.T0), i.PointAt(i.Domain.T1)); ConduitLine tempTempConduitLine = new ConduitLine(tempLine); TuringAndCorbusierPlugIn.InstanceClass.plot.Surroundings[inputList.IndexOf(i)] = 4; tempConduitLine.Add(tempTempConduitLine); } } Corbusier.conduitLines.Clear(); Corbusier.conduitLines = tempConduitLine; Corbusier.conduitLineDisplay = new LinesConduit(Corbusier.conduitLines); Corbusier.conduitLineDisplay.Enabled = true; RhinoDoc.ActiveDoc.Views.Redraw(); var gcl = new GetConduitLine(Corbusier.conduitLines); RhinoApp.WriteLine("늘리거나 줄일 도로 선택 ( 클릭 = 늘리기 , Ctrl + 클릭 = 줄이기 , Shift + 클릭 = 전체 늘리기 , Shift + Ctrl + 클릭 = 전체 줄이기 , ESC = 마침"); while (!endWhileLoop) { gcl.AcceptNothing(true); gcl.Get(true); RhinoDoc.ActiveDoc.Views.Redraw(); if (gcl.CommandResult() != Rhino.Commands.Result.Success) { break; } } if (TuringAndCorbusierPlugIn.InstanceClass.kdgInfoSet.boundary.ClosedCurveOrientation(Plane.WorldXY) == CurveOrientation.CounterClockwise) { TuringAndCorbusierPlugIn.InstanceClass.kdgInfoSet.boundary.Reverse(); } Curve[] boundarysegs = TuringAndCorbusierPlugIn.InstanceClass.kdgInfoSet.boundary.DuplicateSegments(); /////대지경계선후퇴적용 //for (int i = 0; i < Corbusier.RoadWidth.Count; i++) //{ // if (Corbusier.RoadWidth[i] < 4 && Corbusier.RoadWidth[i] >= 0) // { // Vector3d curvev = boundarysegs[i].PointAtEnd - boundarysegs[i].PointAtStart; // curvev.Rotate(RhinoMath.ToRadians(-90), Vector3d.ZAxis); // curvev.Unitize(); // boundarysegs[i].Translate(curvev * ((Corbusier.RoadWidth[i] - 4) * 500)); // boundarysegs[i].Extend(CurveEnd.Both, 1000, CurveExtensionStyle.Line); // LoadManager.getInstance().DrawObjectWithSpecificLayer(boundarysegs[i], LoadManager.NamedLayer.Guide); // } //} //for (int i = 0; i < boundarysegs.Length; i++) //{ // int i2 = (i + 1) % boundarysegs.Length; // var intersection = Rhino.Geometry.Intersect.Intersection.CurveCurve(boundarysegs[i], boundarysegs[i2], 0, 0); // foreach (var x in intersection) // { // if (x.ParameterA != 1) // boundarysegs[i] = boundarysegs[i].Split(x.ParameterA)[0]; // if (x.ParameterB != 1) // boundarysegs[i2] = boundarysegs[i2].Split(x.ParameterB)[1]; // } //} //List<Curve> tojoin = new List<Curve>(); //for (int i = 0; i < boundarysegs.Length; i++) //{ //} //Curve[] joined = Curve.JoinCurves(boundarysegs); //TuringAndCorbusierPlugIn.InstanceClass.kdgInfoSet.setbackBoundary = joined[0]; //대지경계선후퇴 끝 //kdginfoset 의 setbackBoundary에 저장. //LoadManager.getInstance().DrawObjectWithSpecificLayer(TuringAndCorbusierPlugIn.InstanceClass.kdgInfoSet.setbackBoundary, LoadManager.NamedLayer.Model); Corbusier.conduitLineDisplay.Enabled = false; TuringAndCorbusierPlugIn.InstanceClass.plot.Surroundings = Corbusier.conduitLines.Select(n => n.RoadWidth * 1000).ToArray(); // .RoadWidth.Select(n=>n*1000).ToArray(); TuringAndCorbusierPlugIn.InstanceClass.plot.UpdateSimplifiedSurroundings(); //TuringAndCorbusierPlugIn.InstanceClass.plot.Adjust(); UIManager.getInstance().SnapSetter(UIManager.SnapMode.Current); ButtonStateCheck(ButtonState.None); RhinoDoc.ActiveDoc.Views.Redraw(); }