private void clearDrawingPop() { if (drawnType == DrawnType.Plane) { //resetPlane mScene.xyPlane.resetOrgin(); mScene.yzPlane.resetOrgin(); mScene.xzPlane.resetOrgin(); UtilOld.setPlaneAlpha(ref mScene, 0.0f); } //clear the curve and points UtilOld.removeSceneNode(ref mScene, ref strokeSN); UtilOld.removeSceneNode(ref mScene, ref drawPoint); if (snapPointSN != null) { UtilOld.removeSceneNode(ref mScene, ref snapPointSN); } //remove railPlane if (drawnType == DrawnType.Reference && railPlaneSN != null) { //TODO-if we remove here, press undo will casue an error UtilOld.removeRhinoObjectSceneNode(ref mScene, ref railPlaneSN); railPlaneSN = null; } if (renderObjSN != null) { UtilOld.removeSceneNode(ref mScene, ref renderObjSN); renderObjSN = null; } }
protected void handleSignals() { SparrowHawkSignal s = SparrowHawkEventListeners.Instance.getOneSignal(); if (s == null) { return; } switch (s.type) { case SparrowHawkSignal.ESparrowHawkSigalType.InitType: if (s.data.Length >= 3) { //To compute VRtoRobot matrix, press V key 8 times. //robotPoint is in mm unit so the calibration result already deal with scale issue Vector3 robotPoint = new Vector3(s.data[0], s.data[1], s.data[2]); robotCallibrationPoints.Add(robotPoint); Rhino.RhinoApp.WriteLine("add robotPoint: " + robotPoint.ToString()); if (mIsLefty && mScene.leftControllerIdx < 0 || !mIsLefty && mScene.leftControllerIdx < 0) { break; } } break; case SparrowHawkSignal.ESparrowHawkSigalType.LineType: if (s.data.Length >= 4) { if (s.data[0] == 0) { OpenTK.Vector3 p1 = new Vector3(s.data[1], s.data[2], s.data[3]); p1 = UtilOld.platformToVRPoint(ref mScene, p1); OpenTK.Vector3 p2 = new Vector3(s.data[4], s.data[5], s.data[6]); p2 = UtilOld.platformToVRPoint(ref mScene, p2); if (((Geometry.RobotPrintStroke)printStroke).mPoints.Count == 0) { printStroke = new Geometry.RobotPrintStroke(ref mScene); ((Geometry.RobotPrintStroke)printStroke).addEdge(p1, p2); printStrokeSN = new SceneNode("PrintStroke", ref printStroke, ref printStroke_m); mScene.tableGeometry.add(ref printStrokeSN); } else { ((Geometry.RobotPrintStroke)printStroke).addEdge(p1, p2); printStrokeSN.geometry = printStroke; } } else { OpenTK.Vector3 p1 = new Vector3(s.data[1], s.data[2], s.data[3]); p1 = UtilOld.platformToVRPoint(ref mScene, p1); //((Geometry.GeometryStroke2)printStroke).addPoint(p1); ((Geometry.RobotPrintStroke)printStroke).addEdge(((Geometry.RobotPrintStroke)printStroke).mPoints[((Geometry.RobotPrintStroke)printStroke).mPoints.Count - 1], p1); printStrokeSN.geometry = printStroke; } } break; case SparrowHawkSignal.ESparrowHawkSigalType.CutType: string guidStr = s.strData; Guid delId = new Guid(guidStr); UtilOld.removeRhinoObjectSceneNode(ref mScene, delId); //removePrintStroke and show the model again ((Geometry.RobotPrintStroke)printStroke).removePoint(); //mScene.tableGeometry.remove(ref printStrokeSN); //already remove Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) { if (rhObj.Attributes.Name.Contains("aprint")) { SceneNode sn = mScene.BiDictionaryRhinoVR.GetByFirst(rhObj.Id); Material.LambertianMaterial show_m = new Material.LambertianMaterial(((Material.LambertianMaterial)sn.material).mColor.R, ((Material.LambertianMaterial)sn.material).mColor.G, ((Material.LambertianMaterial)sn.material).mColor.B, .3f); sn.material = show_m; } } mScene.rhinoDoc.Views.Redraw(); break; case SparrowHawkSignal.ESparrowHawkSigalType.EncoderType: //for rhino object OpenTK.Matrix4 currentRotation = mScene.platformRotation; float theta = (float)(s.data[0] / 360f * 2 * Math.PI); mScene.rhinoTheta = theta; Rhino.RhinoApp.WriteLine("Theta = " + theta); Matrix4.CreateRotationZ(-theta, out mScene.platformRotation); mScene.platformRotation.Transpose(); //rotate Rhino objects OpenTK.Matrix4 rotMRhino = mScene.platformRotation * currentRotation.Inverted(); mScene.transM = new Transform(); for (int row = 0; row < 4; row++) { for (int col = 0; col < 4; col++) { mScene.transM[row, col] = rotMRhino[row, col]; } } /* * Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); * settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; * foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) * { * if (mScene.brepToSceneNodeDic.ContainsKey(rhObj.Id) && !rhObj.Attributes.Name.Contains("planeXY") && !rhObj.Attributes.Name.Contains("planeXZ") * && !rhObj.Attributes.Name.Contains("planeYZ")) * { * //SceneNode sn = mScene.brepToSceneNodeDic[rhObj.Id]; * //mScene.brepToSceneNodeDic.Remove(rhObj.Id); * * Guid newGuid = mScene.rhinoDoc.Objects.Transform(rhObj.Id, mScene.transM, true); * Rhino.RhinoApp.WriteLine("transM " + mScene.transM.ToString()); * mScene.rhinoDoc.Views.Redraw(); * * //mScene.brepToSceneNodeDic.Add(newGuid, sn); * //mScene.SceneNodeToBrepDic[sn.guid] = mScene.rhinoDoc.Objects.Find(newGuid); * } * * }*/ //rotate the current interaction curve as well /* * foreach(Curve iCurve in mScene.iCurveList) * { * iCurve.Transform(transM); * * } * if (mScene.peekInteraction().GetType() == typeof(Interaction.EditPoint2)) * { * mScene.peekInteraction().init(); * }*/ break; } }
public override void init() { resetVariables(); //support undo function if (mScene != null && (afterCurveCount - beforeCurveCount) > 0) { if (mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString()) != "") { Guid curveOnObjId = new Guid(mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.CurveOnObj.ToString())); ObjRef curveOnObjRef = new ObjRef(curveOnObjId); if (curveOnObjRef.Object().Attributes.Name.Contains("railPlane") || curveOnObjRef.Object().Attributes.Name.Contains("MoveP")) { UtilOld.removeRhinoObject(ref mScene, curveOnObjRef.ObjectId); } } mScene.iCurveList.RemoveAt(mScene.iCurveList.Count - 1); UtilOld.removeSceneNode(ref mScene, ref strokeSN); strokeSN = null; //need to clear stroke tprint SceneNode as well here if (renderObjSN != null) { UtilOld.removeSceneNode(ref mScene, ref renderObjSN); renderObjSN = null; } //Util.removeRhinoObject(ref mScene, curveOnObjRef.ObjectId); curveOnObjRef = null; if (railPlaneSN != null) { UtilOld.removeRhinoObjectSceneNode(ref mScene, ref railPlaneSN); railPlaneSN = null; } } if (drawnType != DrawnType.In3D && drawnType != DrawnType.None) { UtilOld.showLaser(ref mScene, true); //create and add referece planes to scene if (drawnType == DrawnType.Reference) { Vector3 railPlaneNormal = UtilOld.RhinoToOpenTKVector(UtilOld.getVectorfromString(mScene.iCurveList[mScene.iCurveList.Count - 1].GetUserString(CurveData.PlaneNormal.ToString()))); OpenTK.Vector3 worldUpAxis = new Vector3(0, 0, 1); //trick to avoid cross product of 2 parallel vetors if (railPlaneNormal.X == 0 && railPlaneNormal.Y == 0 && railPlaneNormal.Z == 1) { railPlaneNormal = new Vector3(0, 0.005f, 1); } Plane railPlane = new Plane(mScene.iCurveList[mScene.iCurveList.Count - 1].GetBoundingBox(true).Center, UtilOld.openTkToRhinoVector(Vector3.Cross(railPlaneNormal, worldUpAxis))); float planeSize = 240; PlaneSurface plane_surface2 = new PlaneSurface(railPlane, new Interval(-planeSize, planeSize), new Interval(-planeSize, planeSize)); Brep railPlane2 = Brep.CreateFromSurface(plane_surface2); Guid railPlaneGuid = UtilOld.addRhinoObjectSceneNode(ref mScene, ref railPlane2, ref railPlane_m, "railPlane", out railPlaneSN); } else if (drawnType == DrawnType.Plane) { UtilOld.setPlaneAlpha(ref mScene, 0.4f); } //init rayCastingObjs Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) { bool b1 = (drawnType == DrawnType.Plane) && rhObj.Attributes.Name.Contains("plane"); bool b2 = (drawnType == DrawnType.Surface) && (rhObj.Attributes.Name.Contains("brepMesh") || rhObj.Attributes.Name.Contains("aprint") || rhObj.Attributes.Name.Contains("patchSurface")); bool b3 = (drawnType == DrawnType.Reference) && rhObj.Attributes.Name.Contains("railPlane"); if (b1 || b2 || b3) { rayCastingObjs.Add(new ObjRef(rhObj.Id)); } } Geometry.Geometry geo = new Geometry.DrawPointMarker(new OpenTK.Vector3(0, 0, 0)); Material.Material m = new Material.SingleColorMaterial(1, 1, 1, 0);//TODO: teseting alpha working or not drawPoint = new SceneNode("drawPoint", ref geo, ref m); UtilOld.addSceneNode(ref mScene, ref drawPoint); } else { UtilOld.showLaser(ref mScene, false); } //generate snap points when we need to draw from the center of the shapes, drawnType could be DrawnType.Reference or DrawnType.In3D if (dynamicRender == "Extrude" || dynamicRender == "Sweep" || drawnType == DrawnType.Reference) { shouldSnap = true; ShapeType shapeType = (ShapeType)mScene.selectionDic[SelectionKey.Profile1Shape]; Circle circle; Rectangle3d rect; if (shapeType == ShapeType.Circle) { if (mScene.iCurveList[mScene.iCurveList.Count - 1].TryGetCircle(out circle)) { snapPointsList.Add(circle.Center); } } else if (shapeType == ShapeType.Rect) { Rhino.Geometry.Polyline polyline; if (mScene.iCurveList[mScene.iCurveList.Count - 1].TryGetPolyline(out polyline)) { rect = Rectangle3d.CreateFromPolyline(polyline); snapPointsList.Add(rect.Center); } } //visualize the snap points Geometry.Geometry geo = new Geometry.DrawPointMarker(new Vector3(0, 0, 0)); Material.Material m = new Material.SingleColorMaterial(0, 1, 0, 1); UtilOld.MarkPointVR(ref mScene, UtilOld.platformToVRPoint(ref mScene, UtilOld.RhinoToOpenTKPoint(snapPointsList[0])), ref geo, ref m, out snapPointSN); } d = new generateModel_Delegate(generateModel); }