Revit API批量布置函數doc.Create.NewFamilyInstances();


start
using ACreat = Autodesk.Revit.Creation;
// 批量布置doc.Create.NewFamilyInstances();
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public  class cmd : IExternalCommand
{
     public Result Execute(ExternalCommandData cmdData,  ref  string msg, ElementSet elements)
    {
        UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
        UIApplication uiApp = cmdData.Application;
        Document doc = uiDoc.Document;
        Selection sel = uiDoc.Selection;

        Transaction ts =  new Transaction(doc,  " http://revit.5d6d.com ");
         try
        {
            ts.Start();
             // 找一個管件
            FilteredElementCollector collector =  new FilteredElementCollector(uiDoc.Document);
            IList<Element> collection = collector.OfClass( typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_DuctFitting).ToElements();
            FamilySymbol familySymbol = collection[ 0as FamilySymbol;
             // 區域布置
            PickedBox pb = sel.PickBox(PickBoxStyle.Directional,  " 請選擇區域 ");
            List<XYZ> listXYZ =  new List<XYZ>(); // 判斷一些布置點
             double dDistance =  3; // 間距
            XYZ xyzStart = pb.Min; // Max右下點Min左上點,暫時這樣理解。
             bool bWhile =  true;
             while (bWhile)
            {
                xyzStart +=  new XYZ(dDistance, -dDistance,  0);
                 if (xyzStart.X > pb.Max.X || xyzStart.Y < pb.Max.Y)
                    bWhile =  false;
                 else
                    listXYZ.Add(xyzStart);
            }
             // 批量布置
            List<ACreat.FamilyInstanceCreationData> fiCreationDatas =  new List<ACreat.FamilyInstanceCreationData>();
             foreach (XYZ item  in listXYZ)
            {
                ACreat.FamilyInstanceCreationData fiCreationData =
                     new ACreat.FamilyInstanceCreationData(item, familySymbol, familySymbol.Level, StructuralType.NonStructural);
                 if ( null != fiCreationData)
                {
                    fiCreationDatas.Add(fiCreationData);
                }
            }
            doc.Create.NewFamilyInstances(fiCreationDatas);

            ts.Commit();
        }
         catch (Exception ex)
        {
            ts.RollBack();
        }

         return Result.Succeeded;
    }
}
url: http://greatverve.cnblogs.com/p/revit-api-NewFamilyInstances.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM