예제 #1
0
        public static void CreateRenderMeshes(bool showProgress, MeshingParameterStyle meshingStyle, List<RhinoObject> objs = null, RhinoDoc doc = null)
        {
            if (doc == null)
            {
                doc = RhinoDoc.ActiveDoc;
            }
            if (doc == null) return;

            if (objs == null)
            {
                objs = doc.Objects.Where(o => o.GetMeshes(MeshType.Render).Length == 0).ToList();
            }
            else
            {
                objs = objs.Where(o => o.GetMeshes(MeshType.Render).Length == 0).ToList();
            }
            
            if (objs.Count == 0) return;

            using (var meshingParametersU = doc.GetMeshingParameters(meshingStyle))
            {
                var meshingParameters = meshingParametersU;
                var caption = String.Format("Creating meshes for {0} objects ...", objs.Count);
                objs._ForeachParallel_WithOrWithoutProgressWindow(showProgress, caption, obj => obj.CreateMeshes(MeshType.Render, meshingParameters, false));
            }
        }
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            Rhino.Geometry.MeshingParameters mp = doc.GetMeshingParameters(Rhino.Geometry.MeshingParameterStyle.Custom);
            double relativeTolerance            = mp.RelativeTolerance;

            Rhino.Input.Custom.GetNumber gn = new Rhino.Input.Custom.GetNumber();
            gn.SetCommandPrompt("Custom render mesh density");
            gn.SetDefaultNumber(relativeTolerance);
            gn.SetLowerLimit(0.0, false);
            gn.SetUpperLimit(1.0, false);
            gn.AcceptNothing(true);
            gn.Get();
            if (gn.CommandResult() != Result.Success)
            {
                return(gn.CommandResult());
            }

            double newTolerance = gn.Number();

            if (newTolerance == relativeTolerance)
            {
                return(Result.Nothing);
            }

            Rhino.Geometry.MeshingParameters new_mp = new Rhino.Geometry.MeshingParameters();
            new_mp = mp;
            new_mp.RelativeTolerance = newTolerance;

            doc.SetCustomMeshingParameters(new_mp);

            // Toggling the meshing parameter style will destroy existing render meshes,
            // which will be recreated when the scene is redrawn.
            if (doc.MeshingParameterStyle == Rhino.Geometry.MeshingParameterStyle.Custom)
            {
                doc.MeshingParameterStyle = Rhino.Geometry.MeshingParameterStyle.Fast;
            }
            doc.MeshingParameterStyle = Rhino.Geometry.MeshingParameterStyle.Custom;

            doc.Views.Redraw();

            return(Result.Success);
        }