public void modelCompleted(IAsyncResult R) { if (dynamicBrep != null) { if (modelName == "tprint") { UtilOld.updateSceneNode(ref mScene, dynamicBrep, ref mesh_m, modelName, ref renderObjSN); } //fix the issue, update mSceneNode /* * if (currentState == State.READY) * { * mScene.iCurveList.Clear(); * mScene.iCurveList = localListCurve; * afterCurveCount = mScene.iCurveList.Count; * mScene.pushInteractionFromChain(); * } */ } dynamicBrep = null; backgroundStart = false; displacement = 0; if (currentState == State.END) { mScene.pushInteractionFromChain(); } }
private void createModel() { /* * Rhino.Geometry.Point3d origin = Util.openTkToRhinoPoint(Util.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(0, 0, 0))); * Rhino.Geometry.Point3d normalP1 = Util.openTkToRhinoPoint(Util.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(0, 0, -0.05f))); * Rhino.Geometry.Point3d normalP2 = Util.openTkToRhinoPoint(Util.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(0, 0, -1))); * Rhino.Geometry.Vector3d normal = new Rhino.Geometry.Vector3d(normalP2.X - normalP1.X, normalP2.Y - normalP1.Y, normalP2.Z - normalP1.Z); * Plane plane = new Plane(origin, normal); * float radius = 20; * Rhino.Geometry.Circle circle = new Rhino.Geometry.Circle(plane, origin, radius); * NurbsCurve circleCurve = circle.ToNurbsCurve(); * * //compute transform to follow controllers * OpenTK.Matrix4 tansform = mScene.robotToPlatform * mScene.vrToRobot * Util.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx); * Transform t = Util.OpenTKToRhinoTransform(tansform); * circleCurve.Transform(t); * Brep[] shapes = Brep.CreatePlanarBreps(circleCurve); * Brep circle_s = shapes[0]; * Brep circleBrep = circle_s; * * Guid renderObjId = Util.addSceneNode(ref mScene, circleBrep, ref mesh_m, "circle"); */ //offset the point a little bit to make the plane better OpenTK.Vector4 controller_p = UtilOld.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 0, -0.05f, 1); OpenTK.Vector4 controller_pZ = UtilOld.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 0, -1, 1); Point3d controller_pRhino = UtilOld.openTkToRhinoPoint(UtilOld.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_p.X, controller_p.Y, controller_p.Z))); Point3d controller_pZRhin = UtilOld.openTkToRhinoPoint(UtilOld.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_pZ.X, controller_pZ.Y, controller_pZ.Z))); //fix the x and y axis of the model Plane OpenTK.Vector4 controller_x1 = UtilOld.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx) * new OpenTK.Vector4(1, 0, 0, 1); OpenTK.Vector4 controller_y1 = UtilOld.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 1, 0, 1); Point3d controller_x1Rhino = UtilOld.openTkToRhinoPoint(UtilOld.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_x1.X, controller_x1.Y, controller_x1.Z))); Point3d controller_y1Rhino = UtilOld.openTkToRhinoPoint(UtilOld.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_y1.X, controller_y1.Y, controller_y1.Z))); OpenTK.Vector4 controller_o = UtilOld.getControllerTipPosition(ref mScene, primaryControllerIdx == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 0, 0, 1); Point3d controller_oRhino = UtilOld.openTkToRhinoPoint(UtilOld.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_o.X, controller_o.Y, controller_o.Z))); Rhino.Geometry.Vector3d normal = new Rhino.Geometry.Vector3d(controller_pZRhin.X - controller_oRhino.X, controller_pZRhin.Y - controller_oRhino.Y, controller_pZRhin.Z - controller_oRhino.Z); normal.Unitize(); modelPlane = new Plane(controller_oRhino, normal); if (shapeType == ShapeType.Circle) { Rhino.Geometry.Circle circle = new Rhino.Geometry.Circle(modelPlane, controller_oRhino, radius); modelcurve = circle.ToNurbsCurve(); } else if (shapeType == ShapeType.Rect) { Rhino.Geometry.Vector3d xAxis = new Rhino.Geometry.Vector3d(controller_x1Rhino.X - controller_oRhino.X, controller_x1Rhino.Y - controller_oRhino.Y, controller_x1Rhino.Z - controller_oRhino.Z); xAxis.Unitize(); Rhino.Geometry.Vector3d yAxis = new Rhino.Geometry.Vector3d(controller_y1Rhino.X - controller_oRhino.X, controller_y1Rhino.Y - controller_oRhino.Y, controller_y1Rhino.Z - controller_oRhino.Z); yAxis.Unitize(); modelPlane.XAxis = xAxis; modelPlane.YAxis = yAxis; //Rectangle3d rect = new Rectangle3d(modelPlane, width, height); Rectangle3d rect = new Rectangle3d(modelPlane, new Interval(-width / 2, width / 2), new Interval(-height / 2, height / 2)); modelcurve = rect.ToNurbsCurve(); } if (modelcurve != null) { Brep[] shapes = Brep.CreatePlanarBreps(modelcurve); modelBrep = shapes[0]; UtilOld.updateSceneNode(ref mScene, modelBrep, ref mesh_m, "3D-" + shapeType.ToString(), ref previewObjSN); } }