// Start is called before the first frame update
    void Start()
    {
        Elevators = new List <GameObject>();
        Floors    = new List <GameObject>();
        Monkeys   = new List <GameObject>();

        CallQueue = new List <CallRecord>();

        // Calculate how many tiles wide the building should be
        if (numberOfElevators == 1)
        {
            tilesPerFloor = 2;
        }
        else
        {
            tilesPerFloor = numberOfElevators * 2 - 1;
        }

        // Calculate edges of the building to use as camera movement constraints
        topEdge    = numberOfFloors * TILE_HEIGHT - MIN_CAMERA_SIZE;
        bottomEdge = -MIN_CAMERA_SIZE;
        leftEdge   = -(tilesPerFloor * TILE_WIDTH) / 2;
        rightEdge  = (tilesPerFloor * TILE_WIDTH) / 2;

        // Create elevators
        for (int i = 0; i < numberOfElevators; i++)
        {
            float xPosition = GetXPositionForTileIndex(i * 2);
            Elevators.Add(Instantiate(ElevatorPrefab, transform));
            Elevators[i].transform.localPosition         = new Vector3(xPosition, 0, 100);
            Elevators[i].GetComponent <Elevator>().Index = i;
        }

        // Create floors
        for (int i = 0; i < numberOfFloors; i++)
        {
            Floors.Add(Instantiate(FloorPrefab, transform));
            Floors[i].transform.localPosition      = new Vector3(0, -MIN_CAMERA_SIZE + TILE_HEIGHT * (i + 0.5f), 0);
            Floors[i].GetComponent <Floor>().Index = i;
        }

        // UI elements set up
        NormalViewButton.interactable = false;

        FloorSelector floorSelectorScript = FloorSelectorObject.GetComponent <FloorSelector>();

        floorSelectorScript.UpdateNumberOfFloors(numberOfFloors);
        floorSelectorScript.AddFloorSelectionCancelledListener(HandleOnFloorSelectionCancelled);
        floorSelectorScript.AddFloorSelectedListener(HandleOnFloorSelected);
        FloorSelectorObject.SetActive(false);
    }
Ejemplo n.º 2
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var uiapp = commandData.Application;
            var uidoc = uiapp.ActiveUIDocument;
            var doc   = uidoc.Document;
            var view  = uidoc.ActiveGraphicalView;

            var           dimensionTypes = doc.TCollector <DimensionType>();
            FloorSelector fsui           = FloorSelector.Instance;

            fsui.LabelName.Text             = "选择标注样式";
            fsui.FloorBox.ItemsSource       = dimensionTypes;
            fsui.FloorBox.DisplayMemberPath = "Name";
            fsui.FloorBox.SelectedIndex     = 0;

            // fsui.Title = "选择标注样式";

            fsui.ShowDialog();
            // var targetDimensionType = fsui.FloorBox.SelectionBoxItem as DimensionType;
            string targetDimensionTypeName = ((DimensionType)fsui.FloorBox.SelectionBoxItem).Name;
            // TaskDialog.Show("tips", targetDimensionTypeName);


            var filledRegions = FindFilledRegions(doc, view.Id);

            using (var transaction = new Transaction(doc, "filled regions dimensions"))
            {
                transaction.Start();

                foreach (var filledRegion in filledRegions)
                {
                    CreateDimensions(filledRegion, -1 * view.RightDirection, targetDimensionTypeName);

                    CreateDimensions(filledRegion, view.UpDirection, targetDimensionTypeName);
                }

                transaction.Commit();
            }
            return(Result.Succeeded);
        }
Ejemplo n.º 3
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiapp  = commandData.Application;
            UIDocument    uidoc  = uiapp.ActiveUIDocument;
            Document      doc    = uidoc.Document;
            Selection     sel    = uidoc.Selection;
            var           acview = doc.ActiveView;

            var viewfamilytypes    = doc.TCollector <ViewFamilyType>();
            var viewplanfamilytype = viewfamilytypes.Where(m => m.ViewFamily == ViewFamily.FloorPlan).First();
            var view3Dfamilytype   = viewfamilytypes.Where(m => m.ViewFamily == ViewFamily.ThreeDimensional).First();

            var levels = doc.TCollector <Level>();

            FloorSelector fsui = FloorSelector.Instance;

            fsui.FloorBox.ItemsSource       = levels;
            fsui.FloorBox.DisplayMemberPath = "Name";
            fsui.FloorBox.SelectedIndex     = 0;
            fsui.ShowDialog();

            var targetfloor = fsui.FloorBox.SelectionBoxItem as Level;
            var upperfloor  = levels.Where(m => m.Elevation > targetfloor.Elevation)?.OrderBy(m => m.Elevation)?.FirstOrDefault();

            var categories      = doc.Settings.Categories;
            var modelcategories = categories.Cast <Category>().Where(m => m.CategoryType == CategoryType.Model).ToList();

            var filterslist = new List <ElementFilter>();

            foreach (var modelcategory in modelcategories)
            {
                var categoryfilter = new ElementCategoryFilter(modelcategory.Id);
                filterslist.Add(categoryfilter);
            }
            var logicOrFilter = new LogicalOrFilter(filterslist);
            var collector     = new FilteredElementCollector(doc);
            var modelelements = collector.WherePasses(logicOrFilter).WhereElementIsNotElementType().Where(m => m.Category.CategoryType == CategoryType.Model);

            var modelelementsids = modelelements.Select(m => m.Id).ToList();

            var temboundingbox = default(BoundingBoxXYZ);

            Transaction temtran = new Transaction(doc, "temtransaction");

            temtran.Start();
            var temgroup = doc.Create.NewGroup(modelelementsids);
            var temview  = ViewPlan.Create(doc, viewplanfamilytype.Id, targetfloor.Id);

            temboundingbox = temgroup.get_BoundingBox(temview);
            temtran.RollBack();

            var zMin = targetfloor.Elevation;
            var zMax = upperfloor?.Elevation ?? temboundingbox.Max.Z;

            var oldmin = temboundingbox.Min;
            var oldmax = temboundingbox.Max;

            BoundingBoxXYZ newbox = new BoundingBoxXYZ();

            newbox.Min = new XYZ(oldmin.X, oldmin.Y, zMin);
            newbox.Max = new XYZ(oldmax.X, oldmax.Y, zMax);
            var new3dview = default(View3D);

            doc.Invoke(m =>
            {
                new3dview = View3D.CreateIsometric(doc, view3Dfamilytype.Id);
                new3dview.SetSectionBox(newbox);
            }, "楼层三维");

            uidoc.ActiveView = new3dview;

            return(Result.Succeeded);
        }