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(); } }
private void HandlesSelectObjects(object sender, RhinoObjectSelectionEventArgs e) { if (!RhinoOutput.Writing) { foreach (RhinoObject rObj in e.RhinoObjects) { Core.Instance.Selected.Select(LinkedModelObject(rObj.Id)); } } }
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); } }
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"); }
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"); } } }
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(); }