public void Execute(UIApplication uiapp) { try { UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; using (Transaction tx = new Transaction(doc)) { tx.Start("EE06_PlaceFamily"); FamilySymbol myFamilySymbol_Platform = myMethod_CheckExistanceOfFamily(doc, myString_Family_Platform, myString_Type_Platform); if (myFamilySymbol_Platform == null) { return; } FamilySymbol myFamilySymbol_Chair = null; if (myBool_AlsoPlaceAChair) { myFamilySymbol_Chair = myMethod_CheckExistanceOfFamily(doc, myString_Family_Chair, myString_Type_Chair); if (myFamilySymbol_Chair == null) { return; } } Level myLevel = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().First() as Level; Reference pickedRef = null; XYZ myXYZ = null; try { SketchPlane sp = SketchPlane.Create(doc, myLevel.GetPlaneReference()); doc.ActiveView.SketchPlane = sp; // doc.ActiveView.ShowActiveWorkPlane(); //clearing existing command SetForegroundWindow(uidoc.Application.MainWindowHandle); myXYZ = uiapp.ActiveUIDocument.Selection.PickPoint(); pickedRef = sp.GetPlaneReference(); //pickedRef = uiapp.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.PointOnElement, "Please select a Face"); } #region catch and finally catch (Exception ex) { } finally { } #endregion if (pickedRef == null) { return; } FamilyInstance myFamilyInstance_New = doc.Create.NewFamilyInstance(XYZ.Zero, myFamilySymbol_Platform, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); doc.Regenerate(); IList <ElementId> placePointIds_1338 = AdaptiveComponentInstanceUtils.GetInstancePointElementRefIds(myFamilyInstance_New); ReferencePoint myReferencePoint_Centre = doc.GetElement(placePointIds_1338.First()) as ReferencePoint; //UV point_in_3d_UV = pickedRef.UVPoint; UV point_in_3d_UV = new UV(myXYZ.X, myXYZ.Y); PointOnPlane myPointOnPlane = uidoc.Application.Application.Create.NewPointOnPlane(doc.ActiveView.SketchPlane.GetPlaneReference(), point_in_3d_UV, UV.BasisU, 0.0); myReferencePoint_Centre.SetPointElementReference(myPointOnPlane); doc.Regenerate(); myReferencePoint_Centre.get_Parameter(BuiltInParameter.POINT_ELEMENT_DRIVEN).Set(0); ElementTransformUtils.MoveElement(doc, myReferencePoint_Centre.Id, myReferencePoint_Centre.GetCoordinateSystem().OfPoint(new XYZ(0, 0, 0.1)) - myReferencePoint_Centre.Position); if (myFamilySymbol_Chair != null) { GeometryElement myGeomeryElement = myFamilyInstance_New.get_Geometry(new Options() { ComputeReferences = true }); GeometryInstance myGeometryInstance = myGeomeryElement.First() as GeometryInstance; GeometryElement myGeomeryElementSymbol = myGeometryInstance.GetSymbolGeometry(); GeometryObject myGeometryObject = myGeomeryElementSymbol.Where(x => (x as Solid) != null).First(); PlanarFace myPlanarFace = ((Solid)myGeometryObject).Faces.get_Item(0) as PlanarFace; doc.Create.NewFamilyInstance(myPlanarFace, myReferencePoint_Centre.Position, myReferencePoint_Centre.GetCoordinateSystem().OfVector(new XYZ(1, 0, 0)), myFamilySymbol_Chair); } tx.Commit(); uidoc.Selection.SetElementIds(new List <ElementId>() { myReferencePoint_Centre.Id }); myWindow1.mySelectMethod(myIntUPDown); myIntUPDown.Value = myFamilyInstance_New.Id.IntegerValue; } myWindow1.setSlider(myWindow1.myIntUpDown_Middle2, myWindow1.mySlider_Rotate_BasisZ, false); myWindow1.setSlider(myWindow1.myIntUpDown_Middle2, myWindow1.mySlider_Rotate_BasisX, false); myWindow1.setSlider(myWindow1.myIntUpDown_Middle2, myWindow1.mySlider_Rotate_BasisY, true); } #region catch and finally catch (Exception ex) { _952_PRLoogleClassLibrary.DatabaseMethods.writeDebug("EE06_PlaceFamily" + Environment.NewLine + ex.Message + Environment.NewLine + ex.InnerException, true); } finally { } #endregion }
private static bool Prefix(StationController __instance, StationJobGenerationRange ___stationRange, Station ___logicStation, ref bool ___attemptJobOverviewGeneration, ref bool ___playerEnteredJobGenerationZone, ref HashSet <Job> ___processedNewJobs, ref List <JobOverview> ___spawnedJobOverviews, PointOnPlane ___jobBookletSpawnSurface) { if (NetworkManager.IsClient()) { if (___logicStation == null || !SaveLoadController.carsAndJobsLoadingFinished) { return(false); } if (___stationRange.IsPlayerInRangeForBookletGeneration(___stationRange.PlayerSqrDistanceFromStationOffice) && ___attemptJobOverviewGeneration) { for (int i = 0; i < ___logicStation.availableJobs.Count; i++) { Job job = ___logicStation.availableJobs[i]; if (!___processedNewJobs.Contains(job)) { PointOnPlane pointOnPlane = ___jobBookletSpawnSurface; ValueTuple <Vector3, Quaternion> valueTuple = (pointOnPlane != null) ? pointOnPlane.GetRandomPointWithRotationOnPlane() : new ValueTuple <Vector3, Quaternion>(__instance.transform.position, __instance.transform.rotation); Transform parent = SingletonBehaviour <WorldMover> .Exists ? SingletonBehaviour <WorldMover> .Instance.originShiftParent : null; JobOverview item = BookletCreator.CreateJobOverview(job, valueTuple.Item1, valueTuple.Item2, parent); ___spawnedJobOverviews.Add(item); ___processedNewJobs.Add(job); } } ___attemptJobOverviewGeneration = false; } if (NetworkManager.IsHost() && SingletonBehaviour <NetworkPlayerManager> .Exists && SingletonBehaviour <NetworkPlayerManager> .Instance.IsSynced && SingletonBehaviour <NetworkJobsManager> .Exists) { if (SingletonBehaviour <NetworkPlayerManager> .Instance.newPlayerConnecting) { return(false); } float playerSqrDistanceFromStationCenter = ___stationRange.PlayerSqrDistanceFromStationCenter; bool isHostInGenerationZone = ___stationRange.IsPlayerInJobGenerationZone(playerSqrDistanceFromStationCenter); if (isHostInGenerationZone && !___playerEnteredJobGenerationZone) { Main.Log("Generating jobs because host is in area"); __instance.ProceduralJobsController.TryToGenerateJobs(); ___playerEnteredJobGenerationZone = true; } else if (!isHostInGenerationZone && !___playerEnteredJobGenerationZone) { if (SingletonBehaviour <NetworkPlayerManager> .Instance.GetPlayers().Any(p => ___stationRange.IsPlayerInJobGenerationZone((p.transform.position - ___stationRange.stationCenterAnchor.position).sqrMagnitude))) { Main.Log("Generating jobs because a client is in area"); __instance.ProceduralJobsController.TryToGenerateJobs(); ___playerEnteredJobGenerationZone = true; } } else if (___playerEnteredJobGenerationZone) { if (SingletonBehaviour <NetworkPlayerManager> .Instance.GetPlayers().All(p => !___stationRange.IsPlayerInJobGenerationZone((p.transform.position - ___stationRange.stationCenterAnchor.position).sqrMagnitude)) && !isHostInGenerationZone) { ___playerEnteredJobGenerationZone = false; Main.Log("No one in area reseting generation flag"); SingletonBehaviour <NetworkJobsManager> .Instance.ExpireJobsUnTakenInStation(__instance); SingletonBehaviour <NetworkJobsManager> .Instance.SendJobsExpirationInStation(__instance.logicStation.ID); } } } return(false); } return(true); }