BIM建筑网
更专业的BIM技术学习网站!


Revit二次开发----分割族

免费的Ai上线啦!
BIM建筑网自主研发,你想要Ai功能都在这里!
Ai·提升效率 技术答疑

****

其实在revit里是不存在分割族的概念。

对于基于线形的族,截面沿线都是一样,要想达到分割的状态,只需要把族基于线的那条线变短,然后再在分割点复制一个新的族即可。

过程是先获得线的均分点,然后把族的线缩短,接着再复制族,即可变成均分的效果。主要方法见代码:

private void DevideFamilyInstance(FamilyInstance famIns,int n, Document revitDoc)
 {
 LocationCurve locationCurve = famIns.Location as LocationCurve;
 XYZ stratPoint = locationCurve.Curve.GetEndPoint(0);
 XYZ endPoint = locationCurve.Curve.GetEndPoint(1);

 IList<XYZ> devidePoint = InsertPoint(stratPoint, endPoint,n);

 Transaction transaction = new Transaction(revitDoc);
 transaction.Start("将族复制到相应位置");
 locationCurve.Curve = Line.CreateBound(stratPoint, devidePoint[0]);
 List<ElementId> list = new List<ElementId>();
 list.Add(famIns.Id);
 ICollection<ElementId> elementIds = list;
 for (int j=1;j<n;j++)
 {
 XYZ tanslation = new XYZ(devidePoint[j - 1].X - stratPoint.X, devidePoint[j - 1].Y - stratPoint.Y, devidePoint[j - 1].Z - stratPoint.Z); 
 ElementTransformUtils.CopyElements(revitDoc, elementIds, tanslation);
 
 }
 transaction.Commit();


 }
 private List<XYZ> InsertPoint(XYZ stratPoint, XYZ endPoint,int n)
 {
 List<XYZ> listPoint = new List<XYZ>();
 double x, y, z;
 for(int i=1;i<n;i++)
 {
 x = stratPoint.X+(endPoint.X- stratPoint.X)*i/n;
 y = stratPoint.Y + (endPoint.Y - stratPoint.Y) * i / n;
 z= stratPoint.Z + (endPoint.Z - stratPoint.Z) * i / n;
 XYZ point = new XYZ(x,y,z);
 listPoint.Add(point);
 }

微信公众号:xuebim
关注建筑行业BIM发展、研究建筑新技术,汇集建筑前沿信息!
← 微信扫一扫,关注我们+
赞(0) 打赏
BIM建筑网 » Revit二次开发----分割族

评论 抢沙发

评论前必须登录!

 

BIM建筑网,更专业的BIM技术学习网站!

关注建筑新动态,分享建筑新技术

联系我们关于BIM建筑网

觉得文章有用就打赏一下小编吧

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

扫码登录

微信「关注」,快捷登录
扫码关注后会自动登录
注册登录代表您已同意《用户许可协议》
账号登录 | 其他登录

|登录

找回密码

|账号登录注册