/// <summary>
        /// Generate representations for nodes
        /// </summary>
        /// <param name="node"></param>
        protected void GenerateRepresentations(Node node)
        {
            Guid objID = Guid.Empty;

            if (!Links.ContainsFirst(node.GUID))
            {
                if (!node.IsDeleted)
                {
                    objID = RhinoOutput.BakePoint(node.Position);
                    Links.Add(node.GUID, objID);
                }
            }
            else
            {
                objID = Links.GetSecond(node.GUID);
                if (node.IsDeleted)
                {
                    RhinoOutput.DeleteObject(objID);
                    objID = Guid.Empty;
                }
                else
                {
                    objID = RhinoOutput.BakeOrReplacePoint(objID, node.Position);
                    Links.Set(node.GUID, objID);
                }
            }
            if (objID != Guid.Empty)
            {
                RhinoOutput.SetOriginalIDUserString(objID);
                string layerPath = NodesLayerName;
                RhinoOutput.SetObjectLayer(objID, layerPath);
                RhinoOutput.SetObjectName(objID, node.Description);
            }
        }
 /// <summary>
 /// Delete all Rhino handle objects linked to model objects by this layer
 /// </summary>
 public void DeleteAllHandles()
 {
     foreach (Guid guid in Links.Values)
     {
         RhinoOutput.DeleteObject(guid);
     }
     RhinoOutput.DeleteEmptySubLayers(BaseLayerName);
 }
 /// <summary>
 /// Is the handle of this object (if it has one) currently hidden in Rhino?
 /// </summary>
 /// <param name="unique"></param>
 /// <returns></returns>
 public bool IsHandleHidden(Unique unique)
 {
     if (Links.ContainsFirst(unique.GUID))
     {
         return(!RhinoOutput.ObjectVisible(Links.GetSecond(unique.GUID)));
     }
     return(false);
 }
        public void SelectHandle(ModelObject mObj)
        {
            Guid hID = LinkedHandle(mObj);

            if (hID != Guid.Empty)
            {
                RhinoOutput.SelectObject(hID);
            }
        }
 /// <summary>
 /// Do any handle objects exist?
 /// </summary>
 /// <returns></returns>
 public bool HandlesExist()
 {
     foreach (Guid guid in Links.Keys)
     {
         if (RhinoOutput.ObjectExists(guid))
         {
             return(true);
         }
     }
     return(false);
 }
        /// <summary>
        /// Generate the handle representation of an element
        /// </summary>
        /// <param name="element"></param>
        protected void GenerateRepresentations(Element element)
        {
            Guid objID = Guid.Empty;

            if (!Links.ContainsFirst(element.GUID))
            {
                if (!element.IsDeleted)
                {
                    string idString = element.GetGeometry()?.Attributes?.SourceID;
                    if (!string.IsNullOrWhiteSpace(idString))
                    {
                        objID = new Guid(idString);
                        if (!RhinoOutput.ObjectExists(objID))
                        {
                            objID = Guid.Empty;
                        }
                    }
                    objID = RhinoOutput.BakeOrReplace(objID, element.GetGeometry());
                    Links.Add(element.GUID, objID);
                }
            }
            else
            {
                objID = Links.GetSecond(element.GUID);
                if (element.IsDeleted)
                {
                    RhinoOutput.DeleteObject(objID);
                    objID = Guid.Empty;
                }
                else
                {
                    if (!_Undeleting && !_Replacing)
                    {
                        objID = RhinoOutput.BakeOrReplace(objID, element.GetGeometry());
                        Links.Set(element.GUID, objID);
                    }
                }
            }
            if (objID != Guid.Empty)
            {
                RhinoOutput.SetOriginalIDUserString(objID);
                string layerPath = ElementsLayerPath;
                if (element.GetFamily() != null)
                {
                    layerPath += element.GetFamily().Name;
                }
                RhinoOutput.SetObjectLayer(objID, layerPath);
                RhinoOutput.SetObjectName(objID, element.Description);
            }
        }
Exemple #7
0
 public bool Select(IList items, bool clear = false)
 {
     if (clear)
     {
         RhinoOutput.UnselectAllObjects();
     }
     foreach (object item in items)
     {
         if (item is ModelObject)
         {
             Handles.SelectHandle((ModelObject)item);
         }
     }
     return(true);
 }
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            Host.EnsureInitialisation();

            PanelElementCollection elements = Core.Instance.ActiveDocument.Model.Elements.PanelElements;

            foreach (PanelElement lEl in elements)
            {
                RhinoMeshAvatar mAv = new RhinoMeshAvatar();
                ((IMeshAvatar)mAv).Builder.AddPanelPreview(lEl);
                ((IMeshAvatar)mAv).FinalizeMesh();
                RhinoOutput.BakeMesh(mAv.RenderMesh);
            }
            Host.Instance.Refresh();
            return(Result.Success);
        }
Exemple #9
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            Host.EnsureInitialisation();

            LinearElementCollection elements = Core.Instance.ActiveDocument.Model.Elements.LinearElements;

            foreach (LinearElement lEl in elements)
            {
                if (!lEl.IsDeleted)
                {
                    Extrusion extrusion = ToRC.ConvertToExtrusion(lEl);
                    Guid      guid      = Guid.Empty;
                    if (extrusion != null)
                    {
                        guid = RhinoOutput.BakeExtrusion(extrusion);
                    }
                    else
                    {
                        Brep brep = ToRC.ConvertToBrep(lEl);
                        if (brep != null)
                        {
                            guid = RhinoOutput.Bake(brep);
                        }
                    }
                    if (guid != Guid.Empty)
                    {
                        RhinoOutput.SetObjectName(guid, lEl.Name);
                        if (lEl.Family != null)
                        {
                            RhinoOutput.SetObjectUserString(guid, "Family", lEl.Family.Name);
                            if (lEl.Family.GetPrimaryMaterial() != null)
                            {
                                RhinoOutput.SetObjectUserString(guid, "Material", lEl.Family.GetPrimaryMaterial().Name);
                            }
                            if (lEl.Family.Profile != null)
                            {
                                RhinoOutput.SetObjectUserString(guid, "Profile", lEl.Family.Profile.ToString());
                            }
                        }
                    }
                }
            }
            Host.Instance.Refresh();

            return(Result.Success);
        }
 public override void InvalidateOnUpdate(object modified, PropertyChangedEventArgs e)
 {
     if (modified is Family && e.PropertyName == "Name" && e is PropertyChangedEventArgsExtended)
     {
         var    e2      = (PropertyChangedEventArgsExtended)e;
         string oldName = ((string)e2.OldValue).Trim();
         if (string.IsNullOrWhiteSpace(oldName))
         {
             oldName = "_UNNAMED_";
         }
         string newName = ((string)e2.NewValue).Trim();
         if (string.IsNullOrWhiteSpace(newName))
         {
             newName = "_UNNAMED_";
         }
         RhinoOutput.ChangeLayerName(ElementsLayerPath + oldName, newName);
     }
     base.InvalidateOnUpdate(modified, e);
 }
Exemple #11
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            Host.EnsureInitialisation();

            LinearElementCollection elements = Core.Instance.ActiveDocument.Model.Elements.LinearElements;

            foreach (LinearElement lEl in elements)
            {
                if (!lEl.IsDeleted)
                {
                    RhinoMeshAvatar mAv = new RhinoMeshAvatar();
                    ((IMeshAvatar)mAv).Builder.AddSectionPreview(lEl);
                    ((IMeshAvatar)mAv).FinalizeMesh();
                    Guid guid = RhinoOutput.BakeMesh(mAv.RenderMesh);

                    if (guid != Guid.Empty)
                    {
                        RhinoOutput.SetObjectName(guid, lEl.Name);
                        if (lEl.Family != null)
                        {
                            RhinoOutput.SetObjectUserString(guid, "Family", lEl.Family.Name);
                            if (lEl.Family.GetPrimaryMaterial() != null)
                            {
                                RhinoOutput.SetObjectUserString(guid, "Material", lEl.Family.GetPrimaryMaterial().Name);
                            }
                            if (lEl.Family.Profile != null)
                            {
                                RhinoOutput.SetObjectUserString(guid, "Profile", lEl.Family.Profile.ToString());
                            }
                        }
                    }
                }
            }
            Host.Instance.Refresh();
            return(Result.Success);
        }
 private void HandlesAddRhinoObject(object sender, RhinoObjectEventArgs e)
 {
     if (!RhinoOutput.Writing && !_Replacing)
     {
         if (e.TheObject.Attributes.HasUserData)
         {
             string data = e.TheObject.Attributes.GetUserString("SAL_ORIGINAL");
             if (!string.IsNullOrEmpty(data) && data != e.ObjectId.ToString())
             {
                 Guid storedGuid = new Guid(data);
                 if (this.Links.ContainsSecond(storedGuid))
                 {
                     ModelObject mO = LinkedModelObject(storedGuid);
                     //Create copy of object:
                     if (mO is Element)
                     {
                         VertexGeometry geometry = FromRC.Convert(e.TheObject.Geometry);
                         Element        element  = null;
                         if (mO is LinearElement)
                         {
                             LinearElement lElement = ((LinearElement)mO).Duplicate();//Core.Instance.ActiveDocument?.Model?.Create.CopyOf((Element)mO, geometry);
                             bool          split    = false;
                             if (geometry is Curve)
                             {
                                 Curve newCrv = (Curve)geometry;
                                 if (lElement.Geometry != null)
                                 {
                                     Curve oldCrv = lElement.Geometry;
                                     if (newCrv.Length < oldCrv.Length)
                                     {
                                         //TODO: Check end point distance to curve
                                         double maxDist = 0;
                                         foreach (Vertex v in newCrv.Vertices)
                                         {
                                             double dist = oldCrv.DistanceToSquared(v.Position);
                                             if (dist > maxDist)
                                             {
                                                 maxDist = dist;
                                             }
                                         }
                                         if (maxDist < Tolerance.Distance)
                                         {
                                             split = true;
                                         }
                                     }
                                 }
                                 lElement.ReplaceGeometry(newCrv, split);
                             }
                             lElement.GenerateNodes(new NodeGenerationParameters());
                             element = lElement;
                         }
                         if (mO is PanelElement)
                         {
                             PanelElement pElement = ((PanelElement)mO).Duplicate();//Core.Instance.ActiveDocument?.Model?.Create.CopyOf((Element)mO, geometry);
                             if (geometry is Surface)
                             {
                                 pElement.ReplaceGeometry((Surface)geometry);
                             }
                             element = pElement;
                         }
                         RhinoOutput.SetOriginalIDUserString(e.ObjectId);
                         if (element != null)
                         {
                             Links.Set(element.GUID, e.ObjectId);
                             Core.Instance.ActiveDocument.Model.Add(element);
                         }
                     }
                     else if (mO is Node)
                     {
                         if (e.TheObject.Geometry is RC.Point)
                         {
                             Node     node = ((Node)mO).Duplicate();
                             RC.Point pt   = (RC.Point)e.TheObject.Geometry;
                             node.Position = FromRC.Convert(pt).Position;
                             RhinoOutput.SetOriginalIDUserString(e.ObjectId);
                             Links.Set(node.GUID, e.ObjectId);
                             Core.Instance.ActiveDocument.Model.Add(node);
                         }
                     }
                 }
             }
         }
     }
 }