private void createPlaneBrep() { Plane plane = new Plane(); if (type == XYZPlanes.YZ) { plane = new Plane(origin, new Rhino.Geometry.Vector3d(1, 0, 0)); } else if (type == XYZPlanes.XZ) { plane = new Plane(origin, new Rhino.Geometry.Vector3d(0, 1, 0)); } else if (type == XYZPlanes.XY) { plane = new Plane(origin, new Rhino.Geometry.Vector3d(0, 0, 1)); } PlaneSurface plane_surface = new PlaneSurface(plane, new Interval(-size, size), new Interval(-size, size)); Brep planeBrep = Brep.CreateFromSurface(plane_surface); if (planeBrep != null) { Guid guid = UtilOld.addRhinoObjectSceneNode(ref mScene, ref planeBrep, ref mesh_m, "plane" + type.ToString(), out planeSN, true); planeObjRef = new Rhino.DocObjects.ObjRef(guid); } }
public void renderPatch() { //Brep patchSurface = Brep.CreatePatch(curvelist, 4, 4, mScene.rhinoDoc.ModelAbsoluteTolerance); Brep patchSurface = Brep.CreatePatch(allPoints, 10, 10, mScene.rhinoDoc.ModelAbsoluteTolerance); Guid planGuid = UtilOld.addRhinoObjectSceneNode(ref mScene, ref patchSurface, ref mesh_m, "patchSurface", out planeSN); //clear profile curves foreach (Guid id in curveGuids) { foreach (SceneNode sn in mScene.tableGeometry.children) { if (sn.guid == id) { mScene.tableGeometry.children.Remove(sn); break; } } } allPoints.Clear(); curvelist.Clear(); }
protected override void OnKeyPress(OpenTK.KeyPressEventArgs e) { if (e.KeyChar == 'C' || e.KeyChar == 'c') { ((VrRenderer)mRenderer).ovrvision_controller.getMatrixHeadtoCamera(0); mScene.popInteraction(); mScene.pushInteraction(new Interaction.CalibrationAR(ref mScene, ref mRenderer.ovrvision_controller)); } if (e.KeyChar == 'D' || e.KeyChar == 'd') { mRenderer.ovrvision_controller.setDefaultMatrixHC(); } if (e.KeyChar == 'J' || e.KeyChar == 'j') { //mScene.popInteraction(); //mScene.pushInteraction(new Interaction.EditPlane(ref mScene, ref xyPlane, ref xzPlane, ref yzPlane)); //mScene.pushInteraction(new Interaction.RotatePlane(ref mScene, ref xyPlane2, ref xzPlane2, ref yzPlane2)); //clear the stroke foreach (SceneNode sn in mScene.tableGeometry.children) { if (sn.name == "PrintStroke") { mScene.tableGeometry.children.Remove(sn); break; } } } if (e.KeyChar == 'M' || e.KeyChar == 'm') { mScene.popInteraction(); mScene.pushInteraction(new Interaction.Stroke(ref mScene)); } if (e.KeyChar == 'V' || e.KeyChar == 'v') { calibrationVRtoRobot(); } if (e.KeyChar == 'P' || e.KeyChar == 'p') { /* * mScene.popInteraction(); * controllerP = new List<Vector3>(); * mScene.pushInteraction(new Interaction.PickPoint(ref mScene, ref controllerP)); */ Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; Brep teapotBody = new Brep(); Brep teapotSprout = new Brep(); Brep teapotHandle = new Brep(); foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) { if (rhObj.Attributes.Name == "aprinteGZx3Sz91Ag") { teapotBody = ((Brep)rhObj.Geometry).DuplicateBrep(); mScene.rhinoDoc.Objects.Delete(rhObj.Id, true); } else if (rhObj.Attributes.Name == "aprintS8FyJC391Ag") { teapotSprout = ((Brep)rhObj.Geometry).DuplicateBrep(); mScene.rhinoDoc.Objects.Delete(rhObj.Id, true); } else if (rhObj.Attributes.Name == "aprintVBE2eS391Ag") { teapotHandle = ((Brep)rhObj.Geometry).DuplicateBrep(); mScene.rhinoDoc.Objects.Delete(rhObj.Id, true); } } Material.Material mesh_m = new Material.LambertianMaterial(.7f, .7f, .7f, .3f); string modelName = "aprint"; SceneNode teapotBodySN; UtilOld.addRhinoObjectSceneNode(ref mScene, ref teapotBody, ref mesh_m, modelName, out teapotBodySN); SceneNode teapotSproutSN; UtilOld.addRhinoObjectSceneNode(ref mScene, ref teapotSprout, ref mesh_m, modelName, out teapotSproutSN); SceneNode teapotHandleSN; UtilOld.addRhinoObjectSceneNode(ref mScene, ref teapotHandle, ref mesh_m, modelName, out teapotHandleSN); } if (e.KeyChar == 'A' || e.KeyChar == 'a') { //mScene.popInteraction(); //mScene.pushInteraction(new Interaction.Align(ref mScene)); //for rhino object OpenTK.Matrix4 currentRotation = mScene.platformRotation; float theta = (float)(90.0f / 360f * 2 * Math.PI); Rhino.RhinoApp.WriteLine("Theta = " + theta); Matrix4.CreateRotationZ(theta, out mScene.platformRotation); mScene.platformRotation.Transpose(); //rotate Rhino objects OpenTK.Matrix4 rotMRhino = mScene.platformRotation * currentRotation.Inverted(); Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); 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]; } } settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) { SceneNode sn; if (mScene.BiDictionaryRhinoVR.TryGetByFirst(rhObj.Id, out sn) && !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); } } } if (e.KeyChar == 'O' || e.KeyChar == 'o') { mScene.popInteraction(); UtilOld.clearAllModel(ref mScene); } if (e.KeyChar == 'Q' || e.KeyChar == 'q') { //print out debug info foreach (var item in mScene.selectionDic) { Rhino.RhinoApp.WriteLine(item.Key.ToString() + ": " + item.Value.ToString()); } } if (e.KeyChar == 'Z' || e.KeyChar == 'z') { while (!mScene.interactionStackEmpty()) { mScene.popInteraction(); } } if (e.KeyChar == 'X' || e.KeyChar == 'x') { mScene.popInteraction(); mScene.pushInteraction(new Interaction.CreatePatch(ref mScene)); } if (e.KeyChar == '[' || e.KeyChar == '{') { mScene.popInteraction(); mScene.pushInteraction(new Interaction.PickPoint(ref mScene, ref mLeftControllerPoses)); current_i = null; } if (e.KeyChar == ']' || e.KeyChar == '}') { mScene.popInteraction(); mScene.pushInteraction(new Interaction.PickPoint(ref mScene, ref mRightControllerPoses)); current_i = null; } }
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); }