Beispiel #1
0
        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
        }
Beispiel #2
0
        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);
        }