Esempio n. 1
0
        //吊杆族实例化
        private void createHangerRod(ModelLine modelLine, FamilySymbol familySymbol, ExternalCommandData commandData)
        {
            Document    revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
            Application revitApp = commandData.Application.Application;               //取得应用程序
            UIDocument  uiDoc    = commandData.Application.ActiveUIDocument;          //取得当前活动文档
            //依据线创建一个包含这条线的面
            XYZ         p1          = modelLine.GeometryCurve.GetEndPoint(0);
            XYZ         p2          = modelLine.GeometryCurve.GetEndPoint(1);
            XYZ         LineVec     = new XYZ(p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z);
            XYZ         vectemp     = new XYZ(1, 1, 1);
            XYZ         normal      = LineVec.CrossProduct(vectemp);
            Plane       plane       = Plane.CreateByNormalAndOrigin(normal, p1);
            SketchPlane sketchPlane = SketchPlane.Create(uiDoc.Document, plane);
            Reference   reference   = sketchPlane.GetPlaneReference();



            //Line line = modelLine.GeometryCurve as Line;


            Line line = Line.CreateBound(p1, p2);

            FamilyInstance familyInstance = revitDoc.Create.NewFamilyInstance(reference, line, familySymbol);
        }
Esempio n. 2
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
        }
Esempio n. 3
0
        Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document    revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
            Application revitApp = commandData.Application.Application;               //取得应用程序
            UIDocument  uiDoc    = commandData.Application.ActiveUIDocument;          //取得当前活动文档


            Window1        window1        = new Window1();
            Color          colorOrigin    = new Color(0, 0, 0);
            FamilyInstance familyInstance = null;


            //窗口输入参数模块
            if (window1.ShowDialog() == true)
            {
                //窗口打开并停留,只有点击按键之后,窗口关闭并返回true
            }

            //按键会改变window的属性,通过对属性的循环判断来实现对按键的监测
            while (!window1.Done)
            {
                //选择横梁
                if (window1.Selected)
                {
                    Selection sel  = uiDoc.Selection;
                    Reference ref1 = sel.PickObject(ObjectType.Element, "选择一个横梁");
                    Element   elem = revitDoc.GetElement(ref1);
                    familyInstance = elem as FamilyInstance;

                    using (Transaction tran = new Transaction(uiDoc.Document))
                    {
                        tran.Start("创建吊杆模型线");

                        //改变选中实例轮廓颜色
                        colorOrigin = changeProfileColor(familyInstance, commandData);

                        //创建吊杆所要用到的模型线
                        List <ModelLine> modelLines = createHangerROdModelLines(familyInstance, commandData);
                        //注意此处模型线底部高度是随意设置的,到时候要进行修改

                        FamilySymbol familySymbol;
                        //载入吊杆族
                        string file = @"C:\Users\zyx\Desktop\2RevitArcBridge\hangerRod\hangerRod\source\hangerRod.rfa";
                        familySymbol = loadFaimly(file, commandData);
                        familySymbol.Activate();

                        ////创建族实例
                        //createHangerRod(modelLine, familySymbol, commandData); 创建基于线的族实例失效,但是已经定义好工作平面,此步可以通过手动实现


                        //创建并激活形成一个工作平面
                        XYZ p1 = modelLines[0].GeometryCurve.Evaluate(0, true);
                        XYZ p2 = modelLines[0].GeometryCurve.Evaluate(1, true);
                        XYZ p3 = modelLines[1].GeometryCurve.Evaluate(0, true);
                        XYZ p4 = modelLines[1].GeometryCurve.Evaluate(1, true);

                        XYZ vec1   = p1.Subtract(p4);
                        XYZ vec2   = p2.Subtract(p3);
                        XYZ normal = vec1.CrossProduct(vec2);

                        Plane       plane       = Plane.CreateByNormalAndOrigin(normal, p1);
                        SketchPlane sketchPlane = SketchPlane.Create(uiDoc.Document, plane);


                        uiDoc.Document.ActiveView.SketchPlane = sketchPlane;
                        uiDoc.Document.ActiveView.ShowActiveWorkPlane();
                        Reference reference = sketchPlane.GetPlaneReference();

                        tran.Commit();
                    }

                    window1.Selected = false;
                }


                if (window1.ShowDialog() == true)
                {
                    //窗口打开并停留,只有点击按键之后,窗口关闭并返回true
                }
            }


            //恢复轮廓线颜色
            using (Transaction tran = new Transaction(uiDoc.Document))
            {
                tran.Start("恢复轮廓线的颜色");

                //恢复实例轮廓颜色
                recoverProfileColor(familyInstance, colorOrigin, commandData);

                tran.Commit();
            }


            return(Result.Succeeded);
        }