示例#1
0
        public MarkingMenu(ref Scene scene, MenuLayout2 layout = MenuLayout2.MainMenu) : base(ref scene)
        {
            mScene                  = scene;
            mLayout                 = layout;
            mNumSectors             = getNumSectors(layout);
            mFirstSectorOffsetAngle = getAngularMenuOffset(mNumSectors);
            mCurrentSelection       = -1;

            if (scene.isOculus)
            {
                mMinSelectionRadius   = 0.2f;
                mOuterSelectionRadius = 0.8f;
            }
            else
            {
                mMinSelectionRadius   = 0.4f;
                mOuterSelectionRadius = 0.6f;
            }


            Geometry.Geometry g = new Geometry.Geometry("C:\\workspace\\SparrowHawk\\src\\resources\\circle.obj");
            switch (mLayout)
            {
            }
            radialMenuMat        = new Material.RadialMenuMaterial(mScene.rhinoDoc, getTexturePath(mLayout));
            mSceneNode           = new SceneNode("MarkingMenu", ref g, ref radialMenuMat);
            mSceneNode.transform = new OpenTK.Matrix4(2, 0, 0, 0,
                                                      0, 0, -2, 0,
                                                      0, 2, 0, 0,
                                                      0, 0, 0, 1);

            UtilOld.showLaser(ref mScene, false);
        }
示例#2
0
        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("MoveP"))
                    {
                        UtilOld.removeRhinoObject(ref mScene, curveOnObjRef.ObjectId);
                    }
                }
                mScene.iCurveList.RemoveAt(mScene.iCurveList.Count - 1);

                pointOnObjRef = null;
            }

            if (drawnType != DrawnType.In3D && drawnType != DrawnType.None)
            {
                UtilOld.showLaser(ref mScene, true);
                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);
                drawPoint = new SceneNode("drawPoint", ref geo, ref m);
                UtilOld.addSceneNode(ref mScene, ref drawPoint);
            }
            else
            {
                UtilOld.showLaser(ref mScene, false);
            }
        }
示例#3
0
        public CreatePatch(ref Scene s) : base(ref s)
        {
            mScene       = s;
            stroke_g     = new Geometry.GeometryStroke(ref mScene);
            stroke_m     = new Material.SingleColorMaterial(1, 0, 0, 1);
            mesh_m       = new Material.RGBNormalMaterial(.5f);
            currentState = State.READY;

            //TODO-support both controllers
            if (mScene.mIsLefty)
            {
                primaryDeviceIndex = (uint)mScene.leftControllerIdx;
            }
            else
            {
                primaryDeviceIndex = (uint)mScene.rightControllerIdx;
            }

            UtilOld.showLaser(ref mScene, false);
        }
示例#4
0
        public override void init()
        {
            resetVariables();

            //support undo function
            if (mScene != null && (afterCurveCount - beforeCurveCount) > 0)
            {
                //don't have curveOnObject don't need to do anything
                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("MoveP"))
                    {
                        UtilOld.removeRhinoObject(ref mScene, curveOnObjRef.ObjectId);
                    }
                }
                mScene.iCurveList.RemoveAt(mScene.iCurveList.Count - 1);
                if (renderObjSN != null)
                {
                    UtilOld.removeSceneNode(ref mScene, ref renderObjSN);
                    renderObjSN = null;
                }
            }

            // Set initial timeout that cannot be skipped to prevent double selections.
            mInitialSelectOKTime = mScene.gameTime + defaultInitialDelay;

            if (drawnType == DrawnType.Reference)
            {
                isProjection = true;
            }
            else
            {
                isProjection = false;
            }

            UtilOld.showLaser(ref mScene, false);
        }
示例#5
0
        protected void setupScene()
        {
            mScene = new Scene(ref mDoc, ref mHMD);
            mScene.setWindowSize(this.Width, this.Height);
            mScene.mIsLefty = mIsLefty;


            if (mStrDriver.Contains("oculus"))
            {
                mScene.isOculus = true;
            }
            else
            {
                mScene.isOculus = false;
            }

            if (mHMD != null)
            {
                mHMD.GetRecommendedRenderTargetSize(ref mRenderWidth, ref mRenderHeight);
            }

            //visualizing axises
            OpenTK.Vector3    x0      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(-240, 0, 0));
            OpenTK.Vector3    x1      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(240, 0, 0));
            OpenTK.Vector3    y0      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(0, -240, 0));
            OpenTK.Vector3    y1      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(0, 240, 0));
            OpenTK.Vector3    z0      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(0, 0, -240));
            OpenTK.Vector3    z1      = UtilOld.platformToVRPoint(ref mScene, new OpenTK.Vector3(0, 0, 240));
            Geometry.Geometry xAxis_g = new Geometry.GeometryStroke(ref mScene);
            Material.Material xAxis_m = new Material.SingleColorMaterial(1, 1, 1, 0);
            ((Geometry.GeometryStroke)xAxis_g).addPoint(x0);
            ((Geometry.GeometryStroke)xAxis_g).addPoint(x1);
            mScene.xAxis = new SceneNode("xAxis", ref xAxis_g, ref xAxis_m);
            mScene.staticGeometry.add(ref mScene.xAxis);

            Geometry.Geometry yAxis_g = new Geometry.GeometryStroke(ref mScene);
            Material.Material yAxis_m = new Material.SingleColorMaterial(1, 1, 1, 0);
            ((Geometry.GeometryStroke)yAxis_g).addPoint(y0);
            ((Geometry.GeometryStroke)yAxis_g).addPoint(y1);
            mScene.yAxis = new SceneNode("yAxis", ref yAxis_g, ref yAxis_m);
            mScene.staticGeometry.add(ref mScene.yAxis);


            Geometry.Geometry zAxis_g = new Geometry.GeometryStroke(ref mScene);
            Material.Material zAxis_m = new Material.SingleColorMaterial(1, 1, 1, 0);
            ((Geometry.GeometryStroke)zAxis_g).addPoint(z0);
            ((Geometry.GeometryStroke)zAxis_g).addPoint(z1);
            mScene.zAxis = new SceneNode("zAxis", ref zAxis_g, ref zAxis_m);
            mScene.staticGeometry.add(ref mScene.zAxis);


            // LeftController Point and Laser
            //g = new Geometry.Geometry("C:/workspace/Kestrel/resources/meshes/bunny.obj");
            //m = new Material.RGBNormalMaterial(1);
            Geometry.Geometry controllerL_g = new Geometry.PointMarker(new Vector3(0, 0, 0));
            Material.Material controllerL_m = new Material.SingleColorMaterial(1, 0, 0, 1);
            SceneNode         controllerL_p = new SceneNode("Left Cursor", ref controllerL_g, ref controllerL_m);

            mScene.leftControllerNode.add(ref controllerL_p);
            controllerL_p.transform = new Matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);//mScene.mLeftControllerOffset;

            Geometry.Geometry controllerR_g = new Geometry.PointMarker(new Vector3(0, 0, 0));
            Material.Material controllerR_m = new Material.SingleColorMaterial(1, 0, 0, 1);
            SceneNode         controllerR_p = new SceneNode("Right Cursor", ref controllerR_g, ref controllerR_m);

            mScene.rightControllerNode.add(ref controllerR_p);
            controllerR_p.transform = new Matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);

            Geometry.Geometry controllerLRay_g = new Geometry.GeometryStroke(ref mScene);
            Material.Material controllerLRay_m = new Material.SingleColorMaterial(1, 0, 0, 1);
            ((Geometry.GeometryStroke)controllerLRay_g).addPoint(new Vector3(0, 0, 0));
            ((Geometry.GeometryStroke)controllerLRay_g).addPoint(new Vector3(0, 0, -1));
            SceneNode rayTraceL = new SceneNode("ControllerRay", ref controllerLRay_g, ref controllerLRay_m);

            if (mIsLefty)
            {
                mScene.leftControllerNode.add(ref rayTraceL);
            }
            else
            {
                mScene.rightControllerNode.add(ref rayTraceL);
            }
            rayTraceL.transform = new Matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);//mScene.mLeftControllerOffset;

            UtilOld.showLaser(ref mScene, false);

            mScene.xzPlane = new DesignPlane(ref mScene, XYZPlanes.XZ);
            mScene.xyPlane = new DesignPlane(ref mScene, XYZPlanes.XY);
            mScene.yzPlane = new DesignPlane(ref mScene, XYZPlanes.YZ);
        }
示例#6
0
        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);
        }