Revit二次开发之“族”操作

风管 - 类别Category
圆形风管 - 族Family
T形三通 - 族型号FamilySymbol
画出来 - 族实例FamilyInstance

加载族

复制代码
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
public   class  LoadFamily : IExternalCommand
{
    
public  Result Execute(ExternalCommandData commandData,  ref   string  messages, ElementSet elements)
    {
        Document doc 
=  commandData.Application.ActiveUIDocument.Document;
        doc.LoadFamily(
@" C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa " );
        
return  Result.Succeeded;
    }
}
复制代码
end
复制代码
    [Transaction(TransactionMode.Automatic)]
    [Regeneration(RegenerationOption.Manual)]
    [Journaling(JournalingMode.NoCommandData)]
    
public   class  LoadFamily : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData commandData,  ref   string  messages, ElementSet elements)
        {
            Document doc 
=  commandData.Application.ActiveUIDocument.Document;
            
// 加载族
            
// doc.LoadFamily(@"C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa");
            
// 加载族中的一个Symbol
            
// doc.LoadFamilySymbol(@"C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa"
            
// , "0406 x 0610 mm");
            
// 遍历族
            TraversqlFamily(doc);

            
return  Result.Succeeded;
        }
        
public  Result TraversqlFamily(Document doc)
        {
            Family family 
=   null ;
            FilteredElementCollector collector 
=   new  FilteredElementCollector(doc);
            ICollection
< Element >  collection  =  collector.OfClass( typeof (Family)).ToElements();
            
string  sMsg  =   " Standard families already loaded in this model: " ;
            
foreach  (Element e  in  collection)
            {
                family 
=  e  as  Family;
                
if  ( null   !=  family)
                {
                    
/*
                    //获得族的类别名称
                    string famCatName = (null == family.FamilyCategory) ? "?" : family.FamilyCategory.Name;
                    sMsg += "\r\n Name=" + family.Name + ";Category=" + famCatName;

                    if (family.Name == "M_圆形四通")//M_风管尺寸标记//M_圆形软风管标记
                        MessageBox.Show(family.Name);
                    if (family.Name == "风管")
                        MessageBox.Show(family.Name);
                    if (family.Name == "圆形风管")
                        MessageBox.Show(family.Name);
                    if (family.Name == "接头")
                        MessageBox.Show(family.Name);

                    if (family.Name.Contains("风管"))
                        MessageBox.Show(family.Name);
*/
                    
if  (family.FamilyCategory.Name  ==   " 圆形风管 " )
                    
// if (family.FamilyCategory.Name == "风管")
                        sMsg  +=   " \r\n Name= "   +  family.Name  +   " ;Category= "   +  family.FamilyCategory.Name;
                }
            }
            MessageBox.Show(sMsg);

            
return  Result.Succeeded;
        }
复制代码
end 
创建族实例
复制代码
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Automatic)]
public   class  CreateFamilyInstance : IExternalCommand
{
    
public  Result Execute(ExternalCommandData commandData,  ref   string  message, ElementSet elements)
    {
        UIApplication uiApp 
=  commandData.Application;
        Document doc 
=  uiApp.ActiveUIDocument.Document;
        Selection sel 
=  uiApp.ActiveUIDocument.Selection;

        FamilySymbol familySymbol 
=   null ;
        FilteredElementCollector collector 
=   new  FilteredElementCollector(doc); // 过滤元素
        ICollection < Element >  collection  =  collector.OfClass( typeof (FamilySymbol)).ToElements();

        
foreach  (Element e  in  collection)
        {
            familySymbol 
=  e  as  FamilySymbol;
            
if  ( null   !=  familySymbol.Category)
            {
                
if  ( " 风管管件 "   ==  familySymbol.Category.Name) // 这里不知道怎样用内参BuiltInCategory.o
                {
                    
if  (familySymbol.Family.Name  ==   " 矩形弯头 - 法兰 " )
                    {
                        
// 遍历族符号的方法
                        FamilySymbolSetIterator symbolItor  =  familySymbol.Family.Symbols.ForwardIterator();
                        FamilySymbol fs 
=   null ;
                        
while  (symbolItor.MoveNext())
                        {
                            fs 
=  symbolItor.Current  as  FamilySymbol;
                        }
                        
break ;
                    }
                }
            }
        }

        XYZ point 
=   new  XYZ( 10 10 10 );

        
// 创建族实例
        FamilyInstance fi  =  doc.Create.NewFamilyInstance(point, familySymbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);

        
// 修改族实例
        FamilySymbol newFamilySymbol  =   null ;
        
foreach  (Element e  in  collection)
        {
            newFamilySymbol 
=  e  as  FamilySymbol;
            
if  ( null   !=  newFamilySymbol.Category)
            {
                
if  ( " 风管管件 "   ==  newFamilySymbol.Category.Name)
                {
                    
if  (newFamilySymbol.Family.Name  ==   " 矩形弯头 - 平滑半径 - 法兰 " )
                    {
                        FamilySymbolSetIterator symbolItor 
=  newFamilySymbol.Family.Symbols.ForwardIterator();
                        FamilySymbol fs 
=   null ;
                        
while  (symbolItor.MoveNext())
                        {
                            fs 
=  symbolItor.Current  as  FamilySymbol;
                            
// MessageBox.Show(fs.Name);
                        }
                        
break ;
                    }
                }
            }
        }
        fi.Symbol 
=  newFamilySymbol;

        
return  Result.Succeeded;
    }
}
复制代码
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值