예제 #1
0
        protected override Result RunCommand(Rhino.RhinoDoc doc, RunMode mode)
        {
            const ObjectType geometryFilter = ObjectType.Mesh;

            GetObject go = new GetObject();

            go.SetCommandPrompt("Select meshes to compute contacts");
            go.GeometryFilter  = geometryFilter;
            go.GroupSelect     = true;
            go.SubObjectSelect = false;
            go.EnableClearObjectsOnEntry(false);
            go.EnableUnselectObjectsOnExit(false);
            go.DeselectAllBeforePostSelect = false;

            GetResult res = go.GetMultiple(1, 0);

            if (res != GetResult.Object)
            {
                return(Result.Cancel);
            }

            Rhino.RhinoApp.WriteLine(res.GetType().ToString())

            return(Result.Success);
        }
예제 #2
0
    public static Result MeshVolume(RhinoDoc doc)
    {
        var gm = new GetObject();
        gm.SetCommandPrompt("Select solid meshes for volume calculation");
        gm.GeometryFilter = ObjectType.Mesh;
        gm.GeometryAttributeFilter = GeometryAttributeFilter.ClosedMesh;
        gm.SubObjectSelect = false;
        gm.GroupSelect = true;
        gm.GetMultiple(1, 0);
        if (gm.CommandResult() != Result.Success)
          return gm.CommandResult();

        double volume = 0.0;
        double volume_error = 0.0;
        foreach (var obj_ref in gm.Objects())
        {
          if (obj_ref.Mesh() != null)
          {
        var mass_properties = VolumeMassProperties.Compute(obj_ref.Mesh());
        if (mass_properties != null)
        {
          volume += mass_properties.Volume;
          volume_error += mass_properties.VolumeError;
        }
          }
        }

        RhinoApp.WriteLine("Total volume = {0:f} (+/- {1:f})", volume, volume_error);
        return Result.Success;
    }
예제 #3
0
    public static Result MeshVolume(RhinoDoc doc)
    {
        var gm = new GetObject();

        gm.SetCommandPrompt("Select solid meshes for volume calculation");
        gm.GeometryFilter          = ObjectType.Mesh;
        gm.GeometryAttributeFilter = GeometryAttributeFilter.ClosedMesh;
        gm.SubObjectSelect         = false;
        gm.GroupSelect             = true;
        gm.GetMultiple(1, 0);
        if (gm.CommandResult() != Result.Success)
        {
            return(gm.CommandResult());
        }

        double volume       = 0.0;
        double volume_error = 0.0;

        foreach (var obj_ref in gm.Objects())
        {
            if (obj_ref.Mesh() != null)
            {
                var mass_properties = VolumeMassProperties.Compute(obj_ref.Mesh());
                if (mass_properties != null)
                {
                    volume       += mass_properties.Volume;
                    volume_error += mass_properties.VolumeError;
                }
            }
        }

        RhinoApp.WriteLine("Total volume = {0:f} (+/- {1:f})", volume, volume_error);
        return(Result.Success);
    }
예제 #4
0
 public static void LoadLevel(string name)
 {
     GetObject.ClearReferences();
     Time.timeScale = 1;
     RPG.LoadLevel(name, false);
     GameMaster.GamePaused = false;
 }
예제 #5
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            go.SetCommandPrompt("Select 2, 3, or 4 open curves");
            go.GeometryFilter          = ObjectType.Curve;
            go.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
            go.GetMultiple(2, 4);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            var curves = go.Objects().Select(o => o.Curve());

            var brep = Brep.CreateEdgeSurface(curves);

            if (brep != null)
            {
                doc.Objects.AddBrep(brep);
                doc.Views.Redraw();
            }

            return(Result.Success);
        }
예제 #6
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // TODO: complete command.
            RhinoApp.WriteLine("The {0} command is under construction.", EnglishName);
            GetObject gbrep = new GetObject();

            gbrep.SetCommandPrompt("get the brep");
            gbrep.GeometryFilter  = Rhino.DocObjects.ObjectType.Brep;
            gbrep.SubObjectSelect = false;
            gbrep.Get();
            if (gbrep.CommandResult() != Rhino.Commands.Result.Success)
            {
                return(gbrep.CommandResult());
            }
            Rhino.DocObjects.ObjRef      my_objref = gbrep.Object(0);
            Rhino.DocObjects.RhinoObject my_obj    = my_objref.Object();
            if (my_obj == null)
            {
                return(Rhino.Commands.Result.Failure);
            }
            Brep brep = my_objref.Brep();

            if (brep == null)
            {
                return(Result.Failure);
            }
            my_obj.Select(false);
            RhinoApp.WriteLine("the name of the object is {0}", brep.UserDictionary.GetString("name"));
            return(Result.Success);
        }
예제 #7
0
 public static void LoadLevel(int index)
 {
     GetObject.ClearReferences();
     Time.timeScale = 1;
     SceneManager.LoadScene(index);
     GameMaster.GamePaused = false;
 }
예제 #8
0
        public GH_GetterResult LoadFromSelection(out PointCloud pc)
        {
            var go = new GetObject();

            go.GeometryFilter = Rhino.DocObjects.ObjectType.Point | Rhino.DocObjects.ObjectType.PointSet;
            if (go.GetMultiple(1, 0) == Rhino.Input.GetResult.Cancel)
            {
                pc = null;
                return(GH_GetterResult.cancel);
            }
            pc = new PointCloud();

            for (int i = 0; i < go.ObjectCount; i++)
            {
                var obj   = go.Object(i);
                var rhObj = obj.Object();
                if (rhObj.ObjectType == ObjectType.Point)
                {
                    var pt  = obj.Point().Location;
                    var col = rhObj.Attributes.ObjectColor;
                    pc.Add(pt, col);
                }
                else if (rhObj.ObjectType == ObjectType.PointSet)
                {
                    using (PointCloud cloud = obj.PointCloud())
                    {
                        foreach (var item in cloud.AsEnumerable())
                        {
                            pc.Add(item.Location, item.Normal, item.Color);
                        }
                    }
                }
            }
            return(GH_GetterResult.success);
        }
예제 #9
0
        /// <summary>
        /// Add objects to list with a GetObject
        /// </summary>
        /// <param name="go">Setup the GetObject, i.e. prompt, geometry filter, allow pre/post select
        /// before passing it as an argument.</param>
        /// <param name="allowGrips">Specifically allow grips to be selected.  if true, grips must also be included in geometry filter
        /// of the GetObject in order to be selected.</param>
        /// <returns>Number of objects selected.</returns>
        /// <since>6.0</since>
        public int AddObjects(GetObject go, bool allowGrips)
        {
            IntPtr const_ptr_getobj = go.ConstPointer();
            IntPtr ptr_this         = NonConstPointer();

            return(UnsafeNativeMethods.CRhinoXformObjectList_AddObjects(ptr_this, const_ptr_getobj, allowGrips));
        }
예제 #10
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            go.SetCommandPrompt("Select polygon meshes to unweld");
            go.GeometryFilter = ObjectType.Mesh;
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            foreach (var obj_ref in go.Objects())
            {
                var old_mesh = obj_ref.Mesh();
                if (null != old_mesh)
                {
                    var new_mesh = UnweldMesh(old_mesh);
                    if (null != new_mesh && new_mesh.IsValid)
                    {
                        doc.Objects.Replace(go.Object(0), new_mesh);
                    }
                }
            }

            doc.Views.Redraw();

            return(Result.Success);
        }
예제 #11
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // TODO: complete command.

            GetObject gpath = new GetObject();

            gpath.SetCommandPrompt("get the pathp");
            gpath.GeometryFilter  = Rhino.DocObjects.ObjectType.Curve;
            gpath.SubObjectSelect = false;
            gpath.Get();
            if (gpath.CommandResult() != Rhino.Commands.Result.Success)
            {
                return(gpath.CommandResult());
            }
            Rhino.DocObjects.ObjRef      my_objref = gpath.Object(0);
            Rhino.DocObjects.RhinoObject my_obj    = my_objref.Object();
            if (my_obj == null)
            {
                return(Rhino.Commands.Result.Failure);
            }
            int path_number = my_obj.Geometry.UserDictionary.Getint("path_number", -1);

            RhinoApp.WriteLine("the number of the object is {0}", path_number);
            return(Result.Success);
        }
예제 #12
0
        protected override Result RunCommand(Rhino.RhinoDoc doc, RunMode mode)
        {
            GetObject go = Selection.GetValidExportObjects("Select objects to export.");

            var dialog = GetSaveFileDialog();

            var fileSelected = dialog.ShowSaveDialog();

            if (!fileSelected)
            {
                return(Result.Cancel);
            }

            bool binary = GlTFUtils.IsFileGltfBinary(dialog.FileName);

            if (!GetExportOptions(mode, out glTFExportOptions opts))
            {
                return(Result.Cancel);
            }

            Rhino.DocObjects.RhinoObject[] rhinoObjects = go.Objects().Select(o => o.Object()).ToArray();

            if (!DoExport(dialog.FileName, opts, binary, doc, rhinoObjects, doc.RenderSettings.LinearWorkflow))
            {
                return(Result.Failure);
            }

            return(Result.Success);
        }
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            go.SetCommandPrompt("Select curves to extract min/max radius points");
            go.GeometryFilter = ObjectType.Curve;
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            for (var i = 0; i < go.ObjectCount; i++)
            {
                var curve = go.Object(i).Curve();
                if (null != curve)
                {
                    var points = new List <Point3d>();
                    if (GetMinMaxRadiusPoints(curve, points))
                    {
                        doc.Objects.AddPoints(points);
                    }
                }
            }

            doc.Views.Redraw();

            return(Result.Success);
        }
    protected override Result RunCommand(RhinoDoc doc, RunMode mode)
    {
      var go = new GetObject();
      go.SetCommandPrompt("Select mesh");
      go.GeometryFilter = ObjectType.Mesh;
      go.Get();
      if (go.CommandResult() != Result.Success)
        return go.CommandResult();

      var mesh = go.Object(0).Mesh();
      if (null == mesh)
        return Result.Failure;

      var unwelded_count = 0;
      for (var topei = 0; topei < mesh.TopologyEdges.Count; topei++)
      {
        if (IsUweldedMeshEdge(mesh, topei))
        {
          RhinoApp.WriteLine("Edge({0}) is unwelded", topei);
          unwelded_count++;
        }
      }
      RhinoApp.WriteLine("Unwelded edge count = {0}", unwelded_count);

      return Result.Success;
    }
    public static Result ProjectPointsToBreps(RhinoDoc doc)
    {
        var gs = new GetObject();
        gs.SetCommandPrompt("select surface");
        gs.GeometryFilter = ObjectType.Surface | ObjectType.PolysrfFilter;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.Get();
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();
        var brep = gs.Object(0).Brep();
        if (brep == null)
          return Result.Failure;

        var points = Intersection.ProjectPointsToBreps(
                 new List<Brep> {brep}, // brep on which to project
                 new List<Point3d> {new Point3d(0, 0, 0), new Point3d(3,0,3), new Point3d(-2,0,-2)}, // some random points to project
                 new Vector3d(0, 1, 0), // project on Y axis
                 doc.ModelAbsoluteTolerance);

        if (points != null && points.Length > 0)
        {
          foreach (var point in points)
          {
        doc.Objects.AddPoint(point);
          }
        }
        doc.Views.Redraw();
        return Result.Success;
    }
예제 #16
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var gm = new GetObject();

            gm.SetCommandPrompt("Select open mesh");
            gm.GeometryFilter          = ObjectType.Mesh;
            gm.GeometryAttributeFilter = GeometryAttributeFilter.OpenMesh;
            gm.Get();
            if (gm.CommandResult() != Result.Success)
            {
                return(gm.CommandResult());
            }
            var mesh = gm.Object(0).Mesh();

            if (mesh == null)
            {
                return(Result.Failure);
            }

            var polylines = mesh.GetNakedEdges();

            foreach (var polyline in polylines)
            {
                doc.Objects.AddPolyline(polyline);
            }

            return(Result.Success);
        }
    public static Result DupMeshBoundary(RhinoDoc doc)
    {
        var gm = new GetObject();

        gm.SetCommandPrompt("Select open mesh");
        gm.GeometryFilter          = ObjectType.Mesh;
        gm.GeometryAttributeFilter = GeometryAttributeFilter.OpenMesh;
        gm.Get();
        if (gm.CommandResult() != Result.Success)
        {
            return(gm.CommandResult());
        }
        var mesh = gm.Object(0).Mesh();

        if (mesh == null)
        {
            return(Result.Failure);
        }

        var polylines = mesh.GetNakedEdges();

        foreach (var polyline in polylines)
        {
            doc.Objects.AddPolyline(polyline);
        }

        return(Result.Success);
    }
예제 #18
0
    public static Result PickPoint(RhinoDoc doc)
    {
        // this creates a point where the mouse is clicked.
        var gp = new GetPoint();
        gp.SetCommandPrompt("Click for new point");
        gp.Get();
        if (gp.CommandResult() != Result.Success)
          return gp.CommandResult();
        var point3d = gp.Point();
        doc.Objects.AddPoint(point3d);
        doc.Views.Redraw();

        // selects a point that already exists
        ObjRef obj_ref;
        var rc = RhinoGet.GetOneObject("Select point", false, ObjectType.Point, out obj_ref);
        if (rc != Result.Success)
          return rc;
        var point = obj_ref.Point();
        RhinoApp.WriteLine("Point: x:{0}, y:{1}, z:{2}",
          point.Location.X,
          point.Location.Y,
          point.Location.Z);
        doc.Objects.UnselectAll();

        // selects multiple points that already exist
        ObjRef[] obj_refs;
        rc = RhinoGet.GetMultipleObjects("Select point", false, ObjectType.Point, out obj_refs);
        if (rc != Result.Success)
          return rc;
        foreach (var o_ref in obj_refs)
        {
          point = o_ref.Point();
          RhinoApp.WriteLine("Point: x:{0}, y:{1}, z:{2}",
        point.Location.X,
        point.Location.Y,
        point.Location.Z);
        }
        doc.Objects.UnselectAll();

        // also selects a point that already exists.
        // Used when RhinoGet doesn't provide enough control
        var go = new GetObject();
        go.SetCommandPrompt("Select point");
        go.GeometryFilter = ObjectType.Point;
        go.GetMultiple(1, 0);
        if (go.CommandResult() != Result.Success)
          return go.CommandResult();
        foreach (var o_ref in  go.Objects())
        {
          point = o_ref.Point();
          if (point != null)
        RhinoApp.WriteLine("Point: x:{0}, y:{1}, z:{2}",
          point.Location.X,
          point.Location.Y,
          point.Location.Z);
        }

        doc.Views.Redraw();
        return Result.Success;
    }
예제 #19
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            using (var go = new GetObject())
            {
                go.SetCommandPrompt("Please select planer shade surfaces");
                go.GeometryFilter  = ObjectType.Surface | ObjectType.Brep;
                go.GroupSelect     = false;
                go.SubObjectSelect = false;
                go.GetMultiple(1, 0);

                if (go.CommandResult() != Result.Success)
                {
                    return(go.CommandResult());
                }

                if (go.Objects().Count() == 0)
                {
                    return(Result.Failure);
                }

                var SelectedObjs = go.Objects();


                //prepare BrepObjects
                var shades = SelectedObjs.ToList();

                //add shades to model
                ConvertToShades(doc, shades);

                return(Result.Success);
            }
        }
예제 #20
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            go.SetCommandPrompt("Select objects");
            go.GroupSelect = true;
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            for (var i = 0; i < go.ObjectCount; i++)
            {
                var obj_ref = go.Object(i);
                var obj     = obj_ref.Object();
                if (null != obj)
                {
                    var value = obj.Attributes.GetUserString(SampleCsUserStringData.Key);
                    if (!string.IsNullOrEmpty(value))
                    {
                        RhinoApp.WriteLine(string.Format("<{0}> {1}", SampleCsUserStringData.Key, value));
                    }
                }
            }

            return(Result.Success);
        }
예제 #21
0
        public override PanelElementCollection EnterPanelElements(string prompt = "Enter panel elements")
        {
            GetObject gO = new GetObject();

            gO.SetCustomGeometryFilter(new GetObjectGeometryFilter(FilterHandles));
            gO.GeometryFilter = ObjectType.Surface | ObjectType.Mesh;
            gO.SetCommandPrompt(prompt);
            if (gO.GetMultiple(1, 0) == GetResult.Cancel)
            {
                throw new OperationCanceledException("Operation cancelled by user");
            }
            foreach (ObjRef rObj in gO.Objects())
            {
                var result = new PanelElementCollection();
                if (Host.Instance.Handles.Links.ContainsSecond(rObj.ObjectId))
                {
                    Guid    guid    = Host.Instance.Handles.Links.GetFirst(rObj.ObjectId);
                    Element element = Core.Instance.ActiveDocument?.Model?.Elements[guid];
                    if (element != null && element is PanelElement)
                    {
                        result.Add((PanelElement)element);
                    }
                }
                return(result);
            }
            return(null);
        }
예제 #22
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            GetObject go = new GetObject();

            go.SetCommandPrompt("Select surfaces, polysurfaces, or meshes");
            go.GroupSelect     = true;
            go.SubObjectSelect = false;
            go.EnableClearObjectsOnEntry(false);
            go.EnableUnselectObjectsOnExit(false);
            go.DeselectAllBeforePostSelect = false;
            bool bHavePreselectedObjects = false;

            for (; ;)
            {
                GetResult res = go.GetMultiple(1, 0);

                if (res == GetResult.Option)
                {
                    go.EnablePreSelect(false, true);
                    continue;
                }

                else if (res != GetResult.Object)
                {
                    return(Result.Cancel);
                }

                if (go.ObjectsWerePreselected)
                {
                    bHavePreselectedObjects = true;
                    go.EnablePreSelect(false, true);
                    continue;
                }

                break;
            }


            BoundingBox box = BoundingBox.Empty;

            for (int i = 0; i < go.ObjectCount; i++)
            {
                RhinoObject rhinoObject = go.Object(i).Object();
                if (null != rhinoObject)
                {
                    box.Union(rhinoObject.Geometry.GetBoundingBox(true));
                }
                rhinoObject.Select(false);
            }

            if (box.IsValid)
            {
                RFContext.ClippingBox = new Box(box);
                //RFContext.Clip = true;

                return(Result.Success);
            }

            return(Result.Nothing);
        }
예제 #23
0
파일: UIManager.cs 프로젝트: weacw/Anywhere
        private bool m_Isdownitemab;       //是否在下载AB

        /// <summary>
        /// 实时更新下载状态
        /// </summary>
        private void DownLoadListItemAB()
        {
            if (m_Isdownitemab)
            {
                if (GetObject.GetDownLoadState() == DownLoadState.DOWNLOADING)
                {
                    if (m_Downloadabitem == null)
                    {
                        return;
                    }
                    m_Downloadabitem.OnABDownloading();
                }

                if (GetObject.GetDownLoadState() == DownLoadState.DOWNLOADCOMPLETE)
                {
                    if (m_Downloadabitem == null)
                    {
                        return;
                    }
                    m_Downloadabitem.OnABDownloadComplete();
                    m_Downloadabitem = null;
                    m_Isdownitemab   = false;
                }
            }
        }
예제 #24
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            //GetObject is more general, and allows you to select any type of object.

            go.GeometryFilter = Rhino.DocObjects.ObjectType.Point;

            //user can only select points

            go.GetMultiple(1, 0);

            if (go.CommandResult() ! = Result.Success)
            {
                return(go.CommandResult());
            }
            // if statement above is just a check to tell us what to do if the command is a success/failure

            var points = new List <Point>(go.ObjectCount);

            // now we have a list, we just have to save them.  Let's use a different type of array using
            // the System.Collections namespace.  The size of the array will be the size of the ObjectCount list.

            for (var i = 0; i < go.ObjectCount; i++)
            {
                var point = go.Object(i).Point();
                if (null != point)
                {
                }
            }

            RhinoApp.WriteLine("The user selected {0} points successfully", points.Count.ToString());

            return(Result.Success);
        }
예제 #25
0
        private UI.FrixelReferenceData MainWindow_ReferenceFromClient(double xSize, double ySize)
        {
            // Tell user to select objects from doc
            var go = new GetObject();

            go.SetCommandPrompt("Select a closed curve");
            go.GeometryFilter          = ObjectType.Curve;
            go.GeometryAttributeFilter = GeometryAttributeFilter.ClosedCurve;
            go.Get();
            var curves = go.Objects().Select(o => o.Curve());

            if (curves.Count() == 0)
            {
                return(null);
            }

            this._lastReffedCurve = curves.First();
            this._xSize           = xSize;
            this._ySize           = ySize;
            this._spine           = GetSpine();

            if (this._lastReffedCurve != null && this._spine != null)
            {
                return(Regenerate());
            }
            else
            {
                return(null);
            }
        }
예제 #26
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var go = new GetObject();

            go.SetCommandPrompt("Select closed, planar curves for containment test");
            go.GeometryFilter          = ObjectType.Curve;
            go.GeometryAttributeFilter = GeometryAttributeFilter.ClosedCurve;
            go.GetMultiple(2, 2);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            var plane = go.View().ActiveViewport.ConstructionPlane();
            var tol   = doc.ModelAbsoluteTolerance;

            var crvs = new Curve[2];

            for (var i = 0; i < 2; i++)
            {
                var rh_ref = go.Object(i);
                var rh_obj = rh_ref.Object();
                crvs[i] = rh_ref.Curve();
                if (null == rh_obj || null == crvs[i])
                {
                    return(Result.Failure);
                }

                if (!crvs[i].IsPlanar(tol))
                {
                    RhinoApp.WriteLine("Curve is not planar");
                    rh_obj.Select(true);
                    doc.Views.Redraw();
                    return(Result.Failure);
                }
            }

            var result = Curve.PlanarClosedCurveRelationship(crvs[0], crvs[1], plane, tol);

            switch (result)
            {
            case RegionContainment.Disjoint:
                RhinoApp.WriteLine("There is no common area between the two regions.");
                break;

            case RegionContainment.MutualIntersection:
                RhinoApp.WriteLine("The two curves intersect. There is therefore no full containment relationship either way.");
                break;

            case RegionContainment.AInsideB:
                RhinoApp.WriteLine("The region bounded by the first curve is inside of the second curve.");
                break;

            case RegionContainment.BInsideA:
                RhinoApp.WriteLine("The region bounded by the second curve is inside of the second first.");
                break;
            }

            return(Result.Success);
        }
예제 #27
0
 protected override Result RunCommand(RhinoDoc doc, RunMode mode)
 {
     // TODO: start here modifying the behaviour of your command.
     //Select objects
     try
     {
         GetObject go = new GetObject();
         go.EnablePreSelect(true, true);
         go.EnablePostSelect(true);
         go.SetCommandPrompt("Super Intersection | Advanced Boolean Intersection:");
         go.GetMultiple(1, 0);
         if (go.ObjectCount > 0)
         {
             RhinoApp.RunScript("_BooleanIntersection", true);
             RhinoApp.RunScript("_SelLast", true);
             RhinoApp.RunScript("_MergeAllFaces", true);
             RhinoApp.RunScript("_ShrinkTrimmedSrf", true);
         }
         return(Result.Success);
     }
     catch
     {
         return(Result.Failure);
     }
 }
예제 #28
0
        public override NodeCollection EnterNodes(string prompt = "Enter nodes")
        {
            GetObject gO = new GetObject();

            gO.SetCustomGeometryFilter(new GetObjectGeometryFilter(FilterHandles));
            gO.GeometryFilter = ObjectType.Point;
            gO.SetCommandPrompt(prompt);
            if (gO.GetMultiple(1, 0) == GetResult.Cancel)
            {
                throw new OperationCanceledException("Operation cancelled by user");
            }
            var result = new NodeCollection();

            foreach (ObjRef rObj in gO.Objects())
            {
                if (Host.Instance.Handles.Links.ContainsSecond(rObj.ObjectId))
                {
                    Guid guid = Host.Instance.Handles.Links.GetFirst(rObj.ObjectId);
                    Node node = Core.Instance.ActiveDocument?.Model?.Nodes[guid];
                    if (node != null && node is Node)
                    {
                        result.Add(node);
                    }
                }
            }
            return(result);
        }
예제 #29
0
        public static Result Create(int packId)
        {
            var pack = GetObject.GetById <Pack>(packId);

            if (string.IsNullOrEmpty(pack.Code))
            {
                return(new Result("系统中不包含箱体,ID:" + packId));
            }
            var content = Common.PACK_DETAILS_WEB_SITE_URL.Replace("[pack_code]", pack.Code);

            var result = Arthur.Core.Coder.QRCoder.Create(content, 5, 4, AppDomain.CurrentDomain.BaseDirectory + "Images\\gmcc_logo_4_qrcode.png", 36);

            if (result.IsFailed)
            {
                return(result);
            }
            var bimg = (Bitmap)result.Data;

            var dirPath = GetSaveQRCodeDirPath(pack.SortResult);

            if (!Directory.Exists(dirPath))
            {
                Directory.CreateDirectory(dirPath);
            }

            return(Arthur.Core.Coder.QRCoder.SaveQRCode(bimg, dirPath + string.Format("\\{0}.png", pack.Code)));
        }
예제 #30
0
        public override ElementCollection EnterElements(string prompt = "Enter elements")
        {
            GetObject gO = new GetObject();

            gO.SetCustomGeometryFilter(new GetObjectGeometryFilter(FilterHandles));
            //gO.GeometryFilter = ObjectType.Curve;
            gO.SetCommandPrompt(prompt);
            if (gO.GetMultiple(1, 0) == GetResult.Cancel)
            {
                throw new OperationCanceledException("Operation cancelled by user");
            }
            var result = new ElementCollection();

            foreach (ObjRef rObj in gO.Objects())
            {
                if (Host.Instance.Handles.Links.ContainsSecond(rObj.ObjectId))
                {
                    Guid guid = Host.Instance.Handles.Links.GetFirst(rObj.ObjectId);

                    ElementTable elementTable = Core.Instance.ActiveDocument?.Model?.Elements;
                    if (elementTable != null && elementTable.Contains(guid))
                    {
                        Element element = Core.Instance.ActiveDocument?.Model?.Elements[guid];
                        if (element != null)
                        {
                            result.Add(element);
                        }
                    }
                }
            }
            return(result);
        }
예제 #31
0
    public static Result DrawMesh(RhinoDoc doc)
    {
        var gs = new GetObject();
        gs.SetCommandPrompt("select sphere");
        gs.GeometryFilter = ObjectType.Surface;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.Get();
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();

        Sphere sphere;
        gs.Object(0).Surface().TryGetSphere(out sphere);
        if (sphere.IsValid)
        {
          var mesh = Mesh.CreateFromSphere(sphere, 10, 10);
          if (mesh == null)
        return Result.Failure;

          var conduit = new DrawBlueMeshConduit(mesh) {Enabled = true};
          doc.Views.Redraw();

          var in_str = "";
          Rhino.Input.RhinoGet.GetString("press <Enter> to continue", true, ref in_str);

          conduit.Enabled = false;
          doc.Views.Redraw();
          return Result.Success;
        }
        else
          return Result.Failure;
    }
예제 #32
0
        /// <summary>
        /// This function selects points
        /// </summary>
        /// <param name="message"></param>
        /// <param name="pointer"></param>
        public static void XSelectPoints(string message, out Point3dList pointer)
        {
            // variables are:
            // string message
            // out Point3dList points - the out won't be recognized unless you have Rhino.Collections and the 'out parameters
            // have to be filled in the function.
            // don't need a doc because we won't write anything to the document table, only reading.


            pointer = new Point3dList();

            var go = new GetObject();

            go.GeometryFilter = Rhino.DocObjects.ObjectType.Point;
            go.SetCommandPrompt(message);
            go.GetMultiple(1, 0);

            if (go.CommandResult() != Result.Success)
            {
                return;
            }

            for (var i = 0; i < go.ObjectCount; i++)
            {
                var point = go.Object(i).Point();
                if (null != point)
                {
                    pointer.Add(point.Location);
                }
            }
        }
예제 #33
0
        /// <summary>
        /// This function selects breps
        /// </summary>
        ///
        ///
        public static bool XSelectBreps(string message, out RhinoList <Brep> breps)
        {
            breps = new RhinoList <Brep>();

            int i;

            var gc = new GetObject();


            gc.SetCommandPrompt("Select some Breps");
            gc.EnablePreSelect(true, true);
            gc.GeometryFilter = Rhino.DocObjects.ObjectType.Brep;
            gc.GetMultiple(1, 0);

            //we do our double check to make sure the user selected something

            if (gc.CommandResult() != Result.Success)
            {
                return(false);
            }


            for (i = 0; i < gc.ObjectCount; i++)
            {
                var brep = gc.Object(i).Brep();
                if (null != brep)
                {
                    breps.Add(brep);
                }
            }

            return(true);
        }
예제 #34
0
        /// <summary>
        /// This function selects some curves
        /// </summary>
        ///
        ///
        public static bool XSelectCurves(string message, out CurveList curves)
        {
            curves = new CurveList();

            var gc = new GetObject();

            gc.SetCommandPrompt(message);
            gc.GeometryFilter = Rhino.DocObjects.ObjectType.Curve;
            gc.GetMultiple(1, 0);

            if (gc.CommandResult() != Result.Success)
            {
                return(false);
            }

            for (var i = 0; i < gc.ObjectCount; i++)
            {
                var curve = gc.Object(i).Curve();
                if (null != curve)
                {
                    curves.Add(curve);
                }
            }

            return(true);
        }
    public static Result FilletCurves(RhinoDoc doc)
    {
        var gc1 = new GetObject();
        gc1.DisablePreSelect();
        gc1.SetCommandPrompt("Select first curve to fillet (close to the end you want to fillet)");
        gc1.GeometryFilter = ObjectType.Curve;
        gc1.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
        gc1.Get();
        if (gc1.CommandResult() != Result.Success)
          return gc1.CommandResult();
        var curve1_obj_ref = gc1.Object(0);
        var curve1 = curve1_obj_ref.Curve();
        if (curve1 == null) return Result.Failure;
        var curve1_point_near_end = curve1_obj_ref.SelectionPoint();
        if (curve1_point_near_end == Point3d.Unset)
          return Result.Failure;

        var gc2 = new GetObject();
        gc2.DisablePreSelect();
        gc2.SetCommandPrompt("Select second curve to fillet (close to the end you want to fillet)");
        gc2.GeometryFilter = ObjectType.Curve;
        gc2.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
        gc2.Get();
        if (gc2.CommandResult() != Result.Success)
          return gc2.CommandResult();
        var curve2_obj_ref = gc2.Object(0);
        var curve2 = curve2_obj_ref.Curve();
        if (curve2 == null) return Result.Failure;
        var curve2_point_near_end = curve2_obj_ref.SelectionPoint();
        if (curve2_point_near_end == Point3d.Unset)
          return Result.Failure;

        double radius = 0;
        var rc = RhinoGet.GetNumber("fillet radius", false, ref radius);
        if (rc != Result.Success) return rc;

        var join = false;
        var trim = true;
        var arc_extension = true;
        var fillet_curves = Curve.CreateFilletCurves(curve1, curve1_point_near_end, curve2, curve2_point_near_end, radius,
          join, trim, arc_extension, doc.ModelAbsoluteTolerance, doc.ModelAngleToleranceDegrees);
        if (fillet_curves == null /*|| fillet_curves.Length != 3*/)
          return Result.Failure;

        foreach(var fillet_curve in fillet_curves)
          doc.Objects.AddCurve(fillet_curve);
        doc.Views.Redraw();
        return rc;
    }
    public static Result CustomGeometryFilter(RhinoDoc doc)
    {
        m_tolerance = doc.ModelAbsoluteTolerance;

        // only use a custom geometry filter if no simpler filter does the job

        // only curves
        var gc = new GetObject();
        gc.SetCommandPrompt("select curve");
        gc.GeometryFilter = ObjectType.Curve;
        gc.DisablePreSelect();
        gc.SubObjectSelect = false;
        gc.Get();
        if (gc.CommandResult() != Result.Success)
          return gc.CommandResult();
        if (null == gc.Object(0).Curve())
          return Result.Failure;
        Rhino.RhinoApp.WriteLine("curve was selected");

        // only closed curves
        var gcc = new GetObject();
        gcc.SetCommandPrompt("select closed curve");
        gcc.GeometryFilter = ObjectType.Curve;
        gcc.GeometryAttributeFilter = GeometryAttributeFilter.ClosedCurve;
        gcc.DisablePreSelect();
        gcc.SubObjectSelect = false;
        gcc.Get();
        if (gcc.CommandResult() != Result.Success)
          return gcc.CommandResult();
        if (null == gcc.Object(0).Curve())
          return Result.Failure;
        Rhino.RhinoApp.WriteLine("closed curve was selected");

        // only circles with a radius of 10
        var gcc10 = new GetObject();
        gcc10.SetCommandPrompt("select circle with radius of 10");
        gc.GeometryFilter = ObjectType.Curve;
        gcc10.SetCustomGeometryFilter(CircleWithRadiusOf10GeometryFilter); // custom geometry filter
        gcc10.DisablePreSelect();
        gcc10.SubObjectSelect = false;
        gcc10.Get();
        if (gcc10.CommandResult() != Result.Success)
          return gcc10.CommandResult();
        if (null == gcc10.Object(0).Curve())
          return Result.Failure;
        RhinoApp.WriteLine("circle with radius of 10 was selected");

        return Result.Success;
    }
    public static Result ReadDimensionText(RhinoDoc doc)
    {
        var go = new GetObject();
        go.SetCommandPrompt("Select annotation");
        go.GeometryFilter = ObjectType.Annotation;
        go.Get();
        if (go.CommandResult() != Result.Success)
          return Result.Failure;
        var annotation = go.Object(0).Object() as AnnotationObjectBase;
        if (annotation == null)
          return Result.Failure;

        RhinoApp.WriteLine("Annotation text = {0}", annotation.DisplayText);

        return Result.Success;
    }
    public static Result CurveSurfaceIntersect(RhinoDoc doc)
    {
        var gs = new GetObject();
        gs.SetCommandPrompt("select brep");
        gs.GeometryFilter = ObjectType.Brep;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.Get();
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();
        var brep = gs.Object(0).Brep();

        var gc = new GetObject();
        gc.SetCommandPrompt("select curve");
        gc.GeometryFilter = ObjectType.Curve;
        gc.DisablePreSelect();
        gc.SubObjectSelect = false;
        gc.Get();
        if (gc.CommandResult() != Result.Success)
          return gc.CommandResult();
        var curve = gc.Object(0).Curve();

        if (brep == null || curve == null)
          return Result.Failure;

        var tolerance = doc.ModelAbsoluteTolerance;

        Point3d[] intersection_points;
        Curve[] overlap_curves;
        if (!Intersection.CurveBrep(curve, brep, tolerance, out overlap_curves, out intersection_points))
        {
          RhinoApp.WriteLine("curve brep intersection failed");
          return Result.Nothing;
        }

        foreach (var overlap_curve in overlap_curves)
          doc.Objects.AddCurve(overlap_curve);
        foreach (var intersection_point in intersection_points)
          doc.Objects.AddPoint(intersection_point);

        RhinoApp.WriteLine("{0} overlap curves, and {1} intersection points", overlap_curves.Length, intersection_points.Length);
        doc.Views.Redraw();

        return Result.Success;
    }
    public static Result FurthestZOnSurfaceGivenXY(RhinoDoc doc)
    {
        #region user input
        // select a surface
        var gs = new GetObject();
        gs.SetCommandPrompt("select surface");
        gs.GeometryFilter = ObjectType.Surface;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.Get();
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();
        // get the brep
        var brep = gs.Object(0).Brep();
        if (brep == null)
          return Result.Failure;

        // get X and Y
        double x = 0.0, y = 0.0;
        var rc = RhinoGet.GetNumber("value of X coordinate", true, ref x);
        if (rc != Result.Success)
          return rc;
        rc = RhinoGet.GetNumber("value of Y coordinate", true, ref y);
        if (rc != Result.Success)
          return rc;
        #endregion

        // an earlier version of this sample used a curve-brep intersection to find Z
        //var maxZ = maxZIntersectionMethod(brep, x, y, doc.ModelAbsoluteTolerance);

        // projecting points is another way to find Z
        var max_z = MaxZProjectionMethod(brep, x, y, doc.ModelAbsoluteTolerance);

        if (max_z != null)
        {
          RhinoApp.WriteLine("Maximum surface Z coordinate at X={0}, Y={1} is {2}", x, y, max_z);
          doc.Objects.AddPoint(new Point3d(x, y, max_z.Value));
          doc.Views.Redraw();
        }
        else
          RhinoApp.WriteLine("no maximum surface Z coordinate at X={0}, Y={1} found.", x, y);

        return Result.Success;
    }
예제 #40
0
    public static Result ExtendCurve(RhinoDoc doc)
    {
        ObjRef[] boundary_obj_refs;
        var rc = RhinoGet.GetMultipleObjects("Select boundary objects", false, ObjectType.AnyObject, out boundary_obj_refs);
        if (rc != Result.Success)
          return rc;
        if (boundary_obj_refs == null || boundary_obj_refs.Length == 0)
          return Result.Nothing;

        var gc = new GetObject();
        gc.SetCommandPrompt("Select curve to extend");
        gc.GeometryFilter = ObjectType.Curve;
        gc.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
        gc.DisablePreSelect ();
        gc.Get();
        if (gc.CommandResult() != Result.Success)
          return gc.CommandResult();
        var curve_obj_ref = gc.Object(0);

        var curve = curve_obj_ref.Curve();
        if (curve == null) return Result.Failure;
        double t;
        if (!curve.ClosestPoint(curve_obj_ref.SelectionPoint(), out t))
          return Result.Failure;
        var curve_end = t <= curve.Domain.Mid ? CurveEnd.Start : CurveEnd.End;

        var geometry = boundary_obj_refs.Select(obj=> obj.Geometry());
        var extended_curve = curve.Extend(curve_end, CurveExtensionStyle.Line, geometry);
        if (extended_curve != null && extended_curve.IsValid)
        {
          if (!doc.Objects.Replace(curve_obj_ref.ObjectId, extended_curve))
        return Result.Failure;
          doc.Views.Redraw();
        }
        else
        {
          RhinoApp.WriteLine("No boundary object was intersected so curve not extended");
          return Result.Nothing;
        }

        return Result.Success;
    }
예제 #41
0
    public static Result Loft(RhinoDoc doc)
    {
        // select curves to loft
        var gs = new GetObject();
        gs.SetCommandPrompt("select curves to loft");
        gs.GeometryFilter = ObjectType.Curve;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.GetMultiple(2, 0);
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();

        var curves = gs.Objects().Select(obj => obj.Curve()).ToList();

        var breps = Brep.CreateFromLoft(curves, Point3d.Unset, Point3d.Unset, LoftType.Tight, false);
        foreach (var brep in breps)
          doc.Objects.AddBrep(brep);

        doc.Views.Redraw();
        return Result.Success;
    }
    public static Result DetermineNormalDirectionOfBrepFace(RhinoDoc doc)
    {
        // select a surface
        var gs = new GetObject();
        gs.SetCommandPrompt("select surface");
        gs.GeometryFilter = ObjectType.Surface;
        gs.DisablePreSelect();
        gs.SubObjectSelect = false;
        gs.Get();
        if (gs.CommandResult() != Result.Success)
          return gs.CommandResult();
        // get the selected face
        var face = gs.Object(0).Face();
        if (face == null)
          return Result.Failure;

        // pick a point on the surface.  Constain
        // picking to the face.
        var gp = new GetPoint();
        gp.SetCommandPrompt("select point on surface");
        gp.Constrain(face, false);
        gp.Get();
        if (gp.CommandResult() != Result.Success)
          return gp.CommandResult();

        // get the parameters of the point on the
        // surface that is clesest to gp.Point()
        double u, v;
        if (face.ClosestPoint(gp.Point(), out u, out v))
        {
          var direction = face.NormalAt(u, v);
          if (face.OrientationIsReversed)
        direction.Reverse();
          RhinoApp.WriteLine(
        string.Format(
          "Surface normal at uv({0:f},{1:f}) = ({2:f},{3:f},{4:f})",
          u, v, direction.X, direction.Y, direction.Z));
        }
        return Result.Success;
    }
예제 #43
0
    public static Result EdgeSrf(RhinoDoc doc)
    {
        var go = new GetObject();
        go.SetCommandPrompt("Select 2, 3, or 4 open curves");
        go.GeometryFilter = ObjectType.Curve;
        go.GeometryAttributeFilter = GeometryAttributeFilter.OpenCurve;
        go.GetMultiple(2, 4);
        if (go.CommandResult() != Result.Success)
          return go.CommandResult();

        var curves = go.Objects().Select(o => o.Curve());

        var brep = Brep.CreateEdgeSurface(curves);

        if (brep != null)
        {
          doc.Objects.AddBrep(brep);
          doc.Views.Redraw();
        }

        return Result.Success;
    }
예제 #44
0
 public GetObjectResponse GetObject(GetObjectRequest request)
 {
     EnsureAbsoluteUri(request);
     var command = new GetObject(_userId, _secret, _builder, _authenticator) { Parameters = request };
     return (GetObjectResponse)((ICommandExecutor) this).Execute(command);
 }
예제 #45
0
        private void getJsonItems(string filename)
        {
            URLLookup uRLLookupChoreo = new URLLookup(session);

            // Set inputs
            uRLLookupChoreo.setAccessToken(accessToken);
            uRLLookupChoreo.setIDs(pageURL);

            // Execute Choreo
            URLLookupResultSet uRLLookupResults = uRLLookupChoreo.execute();

            // Print results
            //Console.WriteLine(uRLLookupResults.Response);
            string s_lookup = uRLLookupResults.Response;
            JObject json_lookup = JObject.Parse(s_lookup);

            string page_id = (string)json_lookup[pageURL]["id"];
            Console.WriteLine("page ID = " + page_id);

            GetObject getObjectChoreo = new GetObject(session);

            // Set inputs
            getObjectChoreo.setAccessToken(accessToken);
            getObjectChoreo.setFields("insights");
            getObjectChoreo.setObjectID(page_id);

            // Execute Choreo
            GetObjectResultSet getObjectResults = getObjectChoreo.execute();

            string search_it = getObjectResults.Response;
            JObject j_search_it = JObject.Parse(search_it);
            System.IO.StreamWriter file = new System.IO.StreamWriter(filename);

            int i = 0;
            string name_token = (string)j_search_it["insights"]["data"][0]["name"];

            while (name_token != null)
            {
                file.WriteLine("name: " + (string)j_search_it["insights"]["data"][i]["name"]);
                file.WriteLine("title: " + (string)j_search_it["insights"]["data"][i]["title"]);
                file.WriteLine("description: " + (string)j_search_it["insights"]["data"][i]["description"]);
                file.WriteLine("");
                i++;
                try
                {
                    name_token = (string)j_search_it["insights"]["data"][i]["name"];
                }
                catch
                {
                    name_token = null;
                }

            }
            file.Close();
        }