Ejemplo n.º 1
0
        void OnSelectObjects(object sender, RhinoObjectSelectionEventArgs args)
        {
            if (args.Selected) // objects were selected
            {
                //Control if all selected RhinoObjects are static (if only one object is not static or not a jittershape, uncheck the box)
                bool isStatic    = true;
                bool jitterShape = true;
                for (int i = 0; i < args.RhinoObjects.Length; i++)
                {
                    RhinoObject obj = args.RhinoObjects[i];
                    Guid        id  = obj.Id;
                    if (RigidBodyManager.GuidList.Contains(id))
                    {
                        int index = RigidBodyManager.GuidList.IndexOf(id);
                        if (!RigidBodyManager.RigidBodies[index].IsStatic)
                        {
                            isStatic = false;
                        }
                    }
                    else
                    {
                        jitterShape = false;
                    }
                }
                //If all RhinoObjects are static set check otherwise uncheck
                TimePanel.Instance.IsStaticCheckBoxChecked = isStatic;

                //if there is minimum one selected shape that is not a jitter shape, so disable the checkbox
                TimePanel.Instance.IsStaticCheckBoxEnabled = jitterShape;

                //Now show the checked box with the correct value
                TimePanel.Instance.PropertiesGroupShow();
            }
        }
Ejemplo n.º 2
0
 private void HandlesSelectObjects(object sender, RhinoObjectSelectionEventArgs e)
 {
     if (!RhinoOutput.Writing)
     {
         foreach (RhinoObject rObj in e.RhinoObjects)
         {
             Core.Instance.Selected.Select(LinkedModelObject(rObj.Id));
         }
     }
 }
Ejemplo n.º 3
0
        public void OnSelectionDecrease(object sender, RhinoObjectSelectionEventArgs ea, bool sendBool)
        {
            sendBool = utils.properties.getSelPushState();

            if (sendBool == false)
            {
                //Do nothing.
            }
            else if (sendBool == true)
            {
                outbound.push.selectionDecrease(ea.RhinoObjects);
            }
        }
Ejemplo n.º 4
0
        private static void On_DeselectObjects(object sender, RhinoObjectSelectionEventArgs e)
        {
            if (DEBUG)
            {
                log.debug(g._RhinoDoc, "On_DeselectObjects");
            }
            if (Viewport.DEBUG)
            {
                log.temp("!!! REDRAW:   On_DeselectObjects");
            }
            IsSelectionMayHaveChangedSinceLastOnIdle = true;
            IsSelectionMayHaveChangedSinceLastOnIdle10timesOnSecond = true;
            OnIdleClearHighlightLayer = true;

            if (DeselectObjects == null)
            {
                return;
            }
            Shared.TryCatchAction(() => DeselectObjects(sender, e), g._RhinoDoc, "exception in On_DeselectObjects event");
        }
Ejemplo n.º 5
0
        private void RhinoDoc_SelectObjects(object sender, RhinoObjectSelectionEventArgs e)
        {
            //Interop.AddText("selected something!");

            if (e.Selected) // objects were selected
            {
                // do something
                foreach (RhinoObject obj in e.RhinoObjects)
                {
                    //RhinoApp.Writeline(obj.Id + " was selected");
                    //Interop.AddText(obj.Id + " was selected");
                    //Interop.AddText(obj.Attributes.UserStringCount + " total strings");
                    var     userStrings          = obj.Attributes.GetUserStrings();
                    JObject selectedObjectParams = new JObject();
                    selectedObjectParams.Add(new JProperty("guid", obj.Id));
                    selectedObjectParams.Add(new JProperty("name", obj.Name));
                    JArray userDataJArray = new JArray();
                    foreach (var key in userStrings.AllKeys)
                    {
                        //Interop.AddText(key + ": " + userStrings[key]);
                        userDataJArray.Add(new JObject(
                                               new JProperty("key", key),
                                               new JProperty("value", userStrings[key])));
                    }
                    selectedObjectParams.Add(new JProperty("userdata", userDataJArray));
                    Interop.AddJSON(selectedObjectParams.ToString(Newtonsoft.Json.Formatting.None));
                }
            }
            else //objects were de-selected
            {
                // do something
                foreach (RhinoObject obj in e.RhinoObjects)
                {
                    //RhinoApp.Writeline(obj.Id + " was deselected");
                    //Interop.AddText(obj.Id + " was deselected");
                }
            }
        }
Ejemplo n.º 6
0
 private void RhinoDoc_SelectObjects(object sender, RhinoObjectSelectionEventArgs e)
 {
     Debug.WriteLine("Select objs event");
     SelectionInfoNeedsToBeSentYeMighty = true;
     return;
 }
        private void RhinoDoc_SelectObjects(object sender, RhinoObjectSelectionEventArgs e)
        {
            var selectedObjs = e.RhinoObjects.Select(_ => _);

            if (this._mergedCounts > 0)
            {
                //Get all pasted in objects one by one.
                while (this._mergedCounts > _rhinoObjectsMergedIn.Count + 1)
                {
                    this._rhinoObjectsMergedIn.AddRange(selectedObjs);
                    return;
                }
                //Get the last one
                this._rhinoObjectsMergedIn.AddRange(selectedObjs);
                //All pasted objects
                selectedObjs = this._rhinoObjectsMergedIn.GetRange(0, this._mergedCounts);

                //reset the counts.
                this._mergedCounts = 0;
                this._rhinoObjectsMergedIn.Clear();
            }

            //var selectedGroupEntities = selectedObjs.Select(_ => GroupEntity.TryGet(_));
            var selectedRooms     = selectedObjs.Where(_ => _.Geometry.IsRoom()).Select(_ => new ObjRef(_.Id));
            var selectedApertures = selectedObjs.Where(_ => _.Geometry.IsAperture()).Select(_ => new ObjRef(_.Id));
            var selectedDoors     = selectedObjs.Where(_ => _.Geometry.IsDoor()).Select(_ => new ObjRef(_.Id));

            //TODO: work on this later
            //var selectedShds = selectedObjs.Where(_ => _.IsShade());

            if (this._isObjectCopied)
            {
                CheckCopiedObjs(selectedRooms, selectedApertures, selectedDoors);
                //reset the flag.
                this._isObjectCopied = false;
            }

            //currently there is one object is double clicked,
            //it is under editing, and no need to select the entire groupEntity.
            if (this.m_mc.IsEditingRoom)
            {
                return;
            }

            //Subobject is selected
            var subs = selectedObjs.ElementAt(0).GetSelectedSubObjects();

            if (subs != null)
            {
                return;
            }

            //Only make the room obj as the entry point for selecting the entire group entity.
            var roomCounts = selectedRooms.Count();

            SelectHighlightObj(selectedRooms, selectedApertures, selectedDoors);


            if (roomCounts > 1)
            {
                RhinoApp.WriteLine($"Honeybee Rhino Plugin: {selectedRooms.Count()} Honeybee rooms are selected");
            }



            //local method
            void CheckCopiedObjs(IEnumerable <ObjRef> rooms, IEnumerable <ObjRef> apertures, IEnumerable <ObjRef> doors)
            {
                //Dictionary<OldRoomID, (newRoomID, newApertureList)>();
                Dictionary <Guid, (Guid newRoomId, List <(ObjRef newApt, Guid oldAptID)> apertures, List <(ObjRef newDoor, Guid olddoorID)> doors)>
                roomAptDoorMatch =
                    rooms.ToDictionary(
                        _ => _.Geometry().TryGetRoomEntity().HostObjRef.ObjectId,
                        _ => (_.ObjectId, new List <(ObjRef, Guid)>(), new List <(ObjRef, Guid)>())
                        );


                //update Apertures
                foreach (var newAperture in apertures)
                {
                    //TODO: refactor this later
                    var ent         = newAperture.TryGetApertureEntity();
                    var oldHost     = ent.HostObjRef;
                    var oldHostRoom = ent.HostRoomObjRef;
                    if (oldHostRoom != null)
                    {
                        //keep tracking of new aperture with its host room
                        var newMatch = roomAptDoorMatch[oldHostRoom.ObjectId];
                        newMatch.apertures.Add((newAperture, oldHost.ObjectId));

                        //attach aperture to new host room
                        ent.HostRoomObjRef = new ObjRef(newMatch.newRoomId);
                    }
                    //update host brep
                    ent.UpdateHostFrom(newAperture);
                    //TODO: update hostRoomObjRef to new obj
                }

                //update Doors
                foreach (var newDoor in doors)
                {
                    var ent         = newDoor.TryGetDoorEntity();
                    var oldHost     = ent.HostObjRef;
                    var oldHostRoom = ent.HostRoomObjRef;
                    if (oldHostRoom != null)
                    {
                        //keep tracking of new aperture with its host room
                        var newMatch = roomAptDoorMatch[oldHostRoom.ObjectId];
                        newMatch.doors.Add((newDoor, oldHost.ObjectId));

                        //attach aperture to new host room
                        ent.HostRoomObjRef = new ObjRef(newMatch.newRoomId);
                    }
                    //update host brep
                    ent.UpdateHostFrom(newDoor);
                }


                //update room
                foreach (var newRoom in rooms)
                {
                    var roomEnt   = newRoom.Brep().TryGetRoomEntity();
                    var oldHostId = roomEnt.HostObjRef.ObjectId;
                    var matchDic  = roomAptDoorMatch[oldHostId];
                    //update aperture on faces
                    var matchApts = matchDic.apertures;
                    if (matchApts.Any())
                    {
                        //update sub face entities
                        //Figure out all new copied windows' ownership
                        var brepFaces = newRoom.Brep().Faces;
                        foreach (var bface in brepFaces)
                        {
                            var ent = bface.TryGetFaceEntity();
                            ent.UpdateApertures(matchApts);
                        }
                    }
                    //update aperture on faces
                    var matchDoors = matchDic.doors;
                    if (matchDoors.Any())
                    {
                        //update sub face entities
                        //Figure out all new copied matchDoors' ownership
                        var brepFaces = newRoom.Brep().Faces;
                        foreach (var bface in brepFaces)
                        {
                            var ent = bface.TryGetFaceEntity();
                            ent.UpdateDoors(matchDoors);
                        }
                    }

                    roomEnt.UpdateHost(newRoom);

                    //Add to HB Model
                    var model = HoneybeeRhinoPlugIn.Instance.ModelEntityTable.First().Value;
                    model.Rooms.Add(new ObjRef(newRoom.ObjectId));
                }
            }

            void SelectHighlightObj(IEnumerable <ObjRef> rooms, IEnumerable <ObjRef> apertures, IEnumerable <ObjRef> doors)
            {
                foreach (var room in rooms)
                {
                    var entity = room.Geometry().TryGetRoomEntity();
                    if (!entity.IsValid)
                    {
                        continue;
                    }

                    entity.SelectAndHighlight();

                    if (roomCounts == 1)
                    {
                        RhinoApp.WriteLine($"Honeybee Rhino Plugin: {entity.Name}; Window: {entity.ApertureCount}");
                    }
                }
                foreach (var apt in apertures)
                {
                    var entity = apt.Geometry().TryGetApertureEntity();
                    if (!entity.IsValid)
                    {
                        continue;
                    }

                    entity.SelectAndHighlightRoom();
                }

                foreach (var door in doors)
                {
                    var entity = door.Geometry().TryGetDoorEntity();
                    if (!entity.IsValid)
                    {
                        continue;
                    }

                    entity.SelectAndHighlightRoom();
                }
            }
        }
 /// <summary>
 /// Called when objects are deselected
 /// </summary>
 private void OnDeselectObjects(object sender, RhinoObjectSelectionEventArgs e)
 {
     DebugWriteMethod();
 }