protected override Rhino.Commands.Result  RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode)
 {
     //List<Rhino.DocObjects.RhinoObject> ObjectList = new List<Rhino.DocObjects.RhinoObject>();
     Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
     settings.DeletedObjects = false;
     settings.HiddenObjects = false;
     settings.LockedObjects = true;
     settings.NormalObjects = true;
     settings.VisibleFilter = true;
     settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep & Rhino.DocObjects.ObjectType.Surface & Rhino.DocObjects.ObjectType.Extrusion;
     List<Rhino.DocObjects.RhinoObject> RC_List = new List<Rhino.DocObjects.RhinoObject>();
     foreach (Rhino.DocObjects.RhinoObject RHobj in Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(settings))
     {
         if (RHobj.ObjectType == Rhino.DocObjects.ObjectType.Brep || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Surface || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Extrusion)
         {
             RC_List.Add(RHobj);
         }
     }
     if (RC_List.Count != 0)
     {
         Ret_NURBS_Scene = new RhCommon_Scene(RC_List, Air_Temp, Rel_Humidity, Atm_pressure, Atten_Choice, Edge_Freq, false);
         if (!Ret_NURBS_Scene.Valid) return Rhino.Commands.Result.Failure;
         Ret_Mesh_Scene = new Polygon_Scene(RC_List, Air_Temp, Rel_Humidity, Atm_pressure, Atten_Choice, Edge_Freq, false);
         if (!Ret_Mesh_Scene.Valid) return Rhino.Commands.Result.Failure;
     }
     C_Result = Rhino.Commands.Result.Success;
     return Rhino.Commands.Result.Success;
 }
            protected override Rhino.Commands.Result  RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode)
            {
                //List<Rhino.DocObjects.RhinoObject> ObjectList = new List<Rhino.DocObjects.RhinoObject>();
                Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
                settings.DeletedObjects   = false;
                settings.HiddenObjects    = false;
                settings.LockedObjects    = true;
                settings.NormalObjects    = true;
                settings.VisibleFilter    = true;
                settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep & Rhino.DocObjects.ObjectType.Surface & Rhino.DocObjects.ObjectType.Extrusion;
                List <Rhino.DocObjects.RhinoObject> RC_List = new List <Rhino.DocObjects.RhinoObject>();

                foreach (Rhino.DocObjects.RhinoObject RHobj in Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(settings))
                {
                    if (RHobj.ObjectType == Rhino.DocObjects.ObjectType.Brep || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Surface || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Extrusion)
                    {
                        RC_List.Add(RHobj);
                    }
                }
                if (RC_List.Count != 0)
                {
                    Ret_NURBS_Scene = new RhCommon_Scene(RC_List, Air_Temp, Rel_Humidity, Atm_pressure, Atten_Choice, Edge_Freq, false);
                    if (!Ret_NURBS_Scene.Valid)
                    {
                        return(Rhino.Commands.Result.Failure);
                    }
                    Ret_Mesh_Scene = new RhCommon_PolygonScene(RC_List, Register_Edges, Air_Temp, Rel_Humidity, Atm_pressure, Atten_Choice, Edge_Freq, false);
                    if (!Ret_Mesh_Scene.Valid)
                    {
                        return(Rhino.Commands.Result.Failure);
                    }
                }
                C_Result = Rhino.Commands.Result.Success;
                return(Rhino.Commands.Result.Success);
            }
Пример #3
0
    public static Rhino.Commands.Result FindObjectsByName(Rhino.RhinoDoc doc)
    {
        const string name = "abc";

        Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
        settings.NameFilter = name;
        System.Collections.Generic.List <Guid> ids = new System.Collections.Generic.List <Guid>();
        foreach (Rhino.DocObjects.RhinoObject rhObj in doc.Objects.GetObjectList(settings))
        {
            ids.Add(rhObj.Id);
        }

        if (ids.Count == 0)
        {
            Rhino.RhinoApp.WriteLine("No objects with the name " + name);
            return(Rhino.Commands.Result.Failure);
        }

        Rhino.RhinoApp.WriteLine("Found {0} objects", ids.Count);
        foreach (Guid id in ids)
        {
            Rhino.RhinoApp.WriteLine("  {0}", id);
        }

        return(Rhino.Commands.Result.Success);
    }
Пример #4
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            bool delete = false;

            DA.GetData(0, ref delete);

            Rhino.DocObjects.Tables.ObjectTable ot = Rhino.RhinoDoc.ActiveDoc.Objects;
            if (delete)
            {
                List <Rhino.DocObjects.RhinoObject>       objects = new List <Rhino.DocObjects.RhinoObject>();
                Rhino.DocObjects.ObjectEnumeratorSettings s       = new Rhino.DocObjects.ObjectEnumeratorSettings
                {
                    HiddenObjects = true,
                    LockedObjects = true
                };

                foreach (Rhino.DocObjects.RhinoObject obj in RhinoDoc.ActiveDoc.Objects.GetObjectList(s))
                {
                    if (obj.Name.StartsWith("Y:") || obj.Name.StartsWith("X:") || obj.Name.StartsWith("Z:"))
                    {
                        ot.Delete(obj.Id, true);
                    }
                }
            }
        }
    public static Rhino.Commands.Result FindObjectsByName(Rhino.RhinoDoc doc)
    {
        const string name = "abc";
        Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
        settings.NameFilter = name;
        System.Collections.Generic.List<Guid> ids = new System.Collections.Generic.List<Guid>();
        foreach (Rhino.DocObjects.RhinoObject rhObj in doc.Objects.GetObjectList(settings))
          ids.Add(rhObj.Id);

        if (ids.Count == 0)
        {
          Rhino.RhinoApp.WriteLine("No objects with the name " + name);
          return Rhino.Commands.Result.Failure;
        }

        Rhino.RhinoApp.WriteLine("Found {0} objects", ids.Count);
        foreach (Guid id in ids)
          Rhino.RhinoApp.WriteLine("  {0}", id);

        return Rhino.Commands.Result.Success;
    }
            /// <summary>
            /// Shorthand tool to obtain Polygon_Scene object.
            /// </summary>
            /// <param name="Rel_Humidity">in percent</param>
            /// <param name="AirTempC">in degrees C.</param>
            /// <param name="AirPressurePa">in Pascals</param>
            /// <param name="AirAttenMethod"></param>
            /// <param name="EdgeFreq">Use edge frequency correction?</param>
            /// <returns></returns>
            public static Environment.Polygon_Scene Get_Poly_Scene(double Rel_Humidity, bool edges, double AirTempC, double AirPressurePa, int AirAttenMethod, bool EdgeFreq)
            {
                Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
                settings.DeletedObjects   = false;
                settings.HiddenObjects    = false;
                settings.LockedObjects    = true;
                settings.NormalObjects    = true;
                settings.VisibleFilter    = true;
                settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep & Rhino.DocObjects.ObjectType.Surface & Rhino.DocObjects.ObjectType.Extrusion;
                List <Rhino.DocObjects.RhinoObject> RC_List = new List <Rhino.DocObjects.RhinoObject>();

                foreach (Rhino.DocObjects.RhinoObject RHobj in Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(settings))
                {
                    if (RHobj.ObjectType == Rhino.DocObjects.ObjectType.Brep || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Surface || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Extrusion)
                    {
                        RC_List.Add(RHobj);
                    }
                }
                if (RC_List.Count != 0)
                {
                    return(new Environment.RhCommon_PolygonScene(RC_List, edges, AirTempC, Rel_Humidity, AirPressurePa, AirAttenMethod, EdgeFreq, false));
                }
                return(null);
            }
Пример #7
0
        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;
            }
        }
Пример #8
0
        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;
            }
        }
Пример #9
0
        /***************************************************/

        // Build CalculiX input file.
        public virtual void BuildGmshFile(Rhino.RhinoDoc doc, MeshUtil.GmshParams gmshParams)
        {
            doc.Views.RedrawEnabled = false;

            // Hide all existing Rhino objects.
            Rhino.DocObjects.ObjectEnumeratorSettings all;
            all = new Rhino.DocObjects.ObjectEnumeratorSettings();
            all.ObjectTypeFilter = Rhino.DocObjects.ObjectType.AnyObject;
            foreach (Rhino.DocObjects.RhinoObject ro in doc.Objects.GetObjectList(all))
            {
                doc.Objects.Hide(ro.Id, true);
            }

            // Add bar curves to Rhino.
            for (int i = this._bars.Count - 1; i >= 0; i--)
            {
                doc.Objects.Add(this._bars[i].Curve);
            }

            // Add panel surfaces to Rhino.
            for (int i = this._panels.Count - 1; i >= 0; i--)
            {
                doc.Objects.Add(this._panels[i].Surface);
            }

            // Export the geometry to .iges files.
            string curveFilePath   = this.GetModelFilePath() + "_Curves.iges";
            string surfaceFilePath = this.GetModelFilePath() + "_Surfaces.iges";

            if (File.Exists(curveFilePath))
            {
                File.Delete(curveFilePath);
            }
            if (File.Exists(surfaceFilePath))
            {
                File.Delete(surfaceFilePath);
            }

            string exportCrvCom = "-_export _selcrv _enter \"" + curveFilePath + "\" _enter";
            string exportSrfCom = "-_export _selsrf _enter \"" + surfaceFilePath + "\" _enter";

            Rhino.RhinoApp.RunScript(exportCrvCom, false);
            Rhino.RhinoApp.RunScript(exportSrfCom, false);
            Rhino.RhinoDoc.ActiveDoc.Views.RedrawEnabled = true;

            string name = this._name;

            if (this._directory == GuanacoUtil.TempDir)
            {
                name += this.GetTempSuffix();
            }

            System.IO.TextWriter tw = new System.IO.StreamWriter(this.GetModelFilePath(GuanacoUtil.FileType.geo));
            foreach (String s in MeshUtil.GmshInput(name, doc.ModelAbsoluteTolerance, gmshParams))
            {
                tw.WriteLine(s);
            }
            tw.Close();

            this._GmshFileBuilt = true;
        }
Пример #10
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            String[] matName = new String[] { "WhiteGold_18ct", "YellowGold_18ct", "RedGold_18ct", "RodiumBlack_18ct", "Silver_925", "Platinum_960", "Ruby", "Emerald", "Saphir", "Paraiba", "Granat", "Amethyst", "Morganite", "Diamond" };

            Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
            settings.VisibleFilter = true;
            System.Collections.Generic.List <Guid> ids = new System.Collections.Generic.List <Guid>();

            List <string> allItems           = new List <string>();
            List <string> metalItems         = new List <string>();
            List <string> stoneItems         = new List <string>();
            List <double> circleStones       = new List <double>();
            List <int>    quantCirclesStones = new List <int>();


            foreach (Rhino.DocObjects.RhinoObject rhObj in doc.Objects.GetObjectList(settings))
            {
                var  objType = rhObj.ObjectType;
                Guid objGuid = rhObj.Id;
                Rhino.DocObjects.ObjRef objref = new Rhino.DocObjects.ObjRef(objGuid);

                if (objType == Rhino.DocObjects.ObjectType.Curve)
                {
                    Curve  curveRadius  = objref.Curve();
                    Circle circleRadius = new Circle();
                    var    circlefound  = curveRadius.TryGetCircle(out circleRadius, doc.ModelAbsoluteTolerance);
                    if (circlefound)
                    {
                        double diamStone = Math.Round(circleRadius.Diameter, 2, MidpointRounding.AwayFromZero);

                        int match = circleStones.IndexOf(diamStone);

                        if (match == -1)
                        {
                            circleStones.Add(diamStone);
                            quantCirclesStones.Add(1);
                        }
                        else
                        {
                            int currVal = quantCirclesStones[match];
                            quantCirclesStones[match] = currVal + 1;
                        }
                    }
                }

                Rhino.DocObjects.Material mat = rhObj.GetMaterial(true);
                var objMatName = mat.Name;
                int pos        = Array.IndexOf(matName, objMatName);
                if (pos == -1)
                {
                    continue;
                }
                switch (pos)
                {
                //18ctGold
                case int n when(n < 4):
                    double gold18ct = 0.016;

                    CalMat(doc, gold18ct, objType, objref, metalItems, matName, pos, " g");
                    break;

                //Silver
                case 4:
                    double silver = 0.0105;
                    CalMat(doc, silver, objType, objref, metalItems, matName, pos, " g");
                    break;

                //Platinum
                case 5:
                    double platinum = 0.0203;
                    CalMat(doc, platinum, objType, objref, metalItems, matName, pos, " g");
                    break;

                //ColorStones ruby=4g Emerald=2.65g saphr=4g Paraiba=3g Granat=3.9g Amethyst=2.65 Morganite=2.65
                case 6:
                    double ruby = 0.02;
                    CalMat(doc, ruby, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 7:
                    double emerald = 0.0133;
                    CalMat(doc, emerald, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 8:
                    double saphir = 0.02;
                    CalMat(doc, saphir, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 9:
                    double paraiba = 0.015;
                    CalMat(doc, paraiba, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 10:
                    double granat = 0.0195;
                    CalMat(doc, granat, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 11:
                    double amethyst = 0.0133;
                    CalMat(doc, amethyst, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                case 12:
                    double morganite = 0.0133;
                    CalMat(doc, morganite, objType, objref, stoneItems, matName, pos, " ct");
                    break;

                //Diamond
                case 13:
                    double diamond = 0.02;
                    CalMat(doc, diamond, objType, objref, stoneItems, matName, pos, " ct");
                    break;
                }
            }

            metalItems.Sort();
            stoneItems.Sort();


            allItems.Add("------Metals(g)/Stones(ct) from solids-------");

            for (int i = 0; i < materials.Length; i++)
            {
                if (materials[i] == 0)
                {
                    continue;
                }
                allItems.Add(matName[i] + ": " + materials[i]);
            }

            /*
             * allItems.Add("--------------Metals--------------");
             * for (int i = 0; i < metalItems.Count; i++)
             * {
             *  allItems.Add(metalItems[i]);
             * }
             *
             * allItems.Add("--------------Stone---------------");
             * for (int i = 0; i < stoneItems.Count; i++)
             * {
             *  allItems.Add(stoneItems[i]);
             * }
             */
            allItems.Add("-----------------------------------------------");
            allItems.Add("");
            allItems.Add("-----------Brillants from circles------------");

            double totalCt = 0.0;

            for (int i = 0; i < circleStones.Count; i++)
            {
                double ct;
                ct = Math.Round((circleStones[i] * circleStones[i] * circleStones[i] * 0.6 * 0.0061), 4, MidpointRounding.AwayFromZero);
                allItems.Add("Brill: " + quantCirclesStones[i] + " x " + circleStones[i] + " mm " + ct + " ct Total: " + ct * quantCirclesStones[i] + " ct");
                totalCt = totalCt + ct * quantCirclesStones[i];
            }

            allItems.Add("Total brillant weight: " + totalCt + " ct");
            allItems.Add("-----------------------------------------------");

            String clipboardString = "";

            foreach (String o in allItems)
            {
                clipboardString = clipboardString + o + "\n";
            }

            Clipboard.SetText(clipboardString);

            if (open > 0)
            {
                Dialogs.ShowMessage("At least one object is not closed. Weights might be false.", "Warning!");
            }

            Dialogs.ShowListBox("Report", "This data is copied to your clipboard \n Use Ctrl+V to paste", allItems);

            materials = new double[14];
            open      = 0;

            return(Result.Success);
        }
 /// <summary>
 /// Shorthand tool to obtain Polygon_Scene object.
 /// </summary>
 /// <param name="Rel_Humidity">in percent</param>
 /// <param name="AirTempC">in degrees C.</param>
 /// <param name="AirPressurePa">in Pascals</param>
 /// <param name="AirAttenMethod"></param>
 /// <param name="EdgeFreq">Use edge frequency correction?</param>
 /// <returns></returns>
 public static Environment.Polygon_Scene Get_Poly_Scene(double Rel_Humidity, double AirTempC, double AirPressurePa, int AirAttenMethod, bool EdgeFreq)
 {
     Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings();
     settings.DeletedObjects = false;
     settings.HiddenObjects = false;
     settings.LockedObjects = true;
     settings.NormalObjects = true;
     settings.VisibleFilter = true;
     settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep & Rhino.DocObjects.ObjectType.Surface & Rhino.DocObjects.ObjectType.Extrusion;
     List<Rhino.DocObjects.RhinoObject> RC_List = new List<Rhino.DocObjects.RhinoObject>();
     foreach (Rhino.DocObjects.RhinoObject RHobj in Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(settings))
     {
         if (RHobj.ObjectType == Rhino.DocObjects.ObjectType.Brep || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Surface || RHobj.ObjectType == Rhino.DocObjects.ObjectType.Extrusion)
         {
             RC_List.Add(RHobj);
         }
     }
     if (RC_List.Count != 0)
     {
         return new Environment.Polygon_Scene(RC_List, AirTempC, Rel_Humidity, AirPressurePa, AirAttenMethod, EdgeFreq, false);
     }
     return null;
 }