bim翻模是什么意思

最近有看到粉丝让我写一篇关于柱子一键翻模的案例,我答应粉丝的就一定会行动,这不趁着周末赶紧码代码和测试,然后就顺理成章,这篇文章的内容就信手拈来啦!

一、传统的翻模方法

说起一键翻模,咱要先理清一下思路,如何进行翻模,现在市场上的传统的翻模方法和工具非常多,各种方法都有,我总结的有以下几种方法可供选择:

和CAD开发结合,利用CAD开发导出线数据通过Revit开发进行读取和直接生成模型。

在Revit里通过链接CAD然后通过识别图层的方式进行获取线数据,再进行模型生成。

在Revit里通过链接CAD然后通过点击线来获取该图层下的线数据,进行模型生成。

第一种办法比较灵活,但涉及CAD开发以及需要数据传输比较麻烦(主要是帅编的CAD开发最近刚自学,还不熟练!!);第二种办法是适合设计部内部使用的,需要知道各个图层的命名规则,这样可以省去点选图层的步骤;第三种是这次讲解使用的方法,适合对图纸图层不太熟悉,需要手动去拾取图层的办法。

腿腿教学网-有可以一键翻模的BIM软件吗?revit二次开发就可以!

二、一键翻模的源代码

下面是全部的源代码:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.IO;

usingSystem.Data;

usingAutodesk.Revit;

usingAutodesk.Revit.UI;

usingAutodesk.Revit.UI.Selection;

usingAutodesk.Revit.DB;

usingAutodesk.Revit.DB.Architecture;

usingAutodesk.Revit.DB.Mechanical;

usingAutodesk.Revit.DB.Plumbing;

usingAutodesk.Revit.DB.Electrical;

usingAutodesk.Revit.DB.Structure;

usingAutodesk.Revit.ApplicationServices;

usingSystem.Data.SqlClient;

//usingTeigha.Geometry;

//usingTeigha.Runtime;

//usingTeigha.DatabaseServices;

namespacezpxzpx

{[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)][Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)][Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]

classGenerateColu:IExternalCommand

{

publicAutodesk.Revit.UI.ResultExecute(ExternalCommandDatacommandData,refstringmessage,Autodesk.Revit.DB.ElementSetelements)

{

//创建应用程序对象

Autodesk.Revit.ApplicationServices.Applicationapp=commandData.Application.Application;

//创建文档对象

Autodesk.Revit.DB.Documentdoc=commandData.Application.ActiveUIDocument.Document;

//创建应用程序对象

Autodesk.Revit.UI.UIApplicationuiapp=commandData.Application;

//创建文档对象

Autodesk.Revit.UI.UIDocumentuiDoc=uiapp.ActiveUIDocument;

//开始事务

Autodesk.Revit.DB.Transactionts=newAutodesk.Revit.DB.Transaction(doc,"柱子翻模");

ts.Start();

Referencer=uiDoc.Selection.PickObject(ObjectType.PointOnElement);//获取对象

stringss=r.ConvertToStableRepresentation(doc);//转化为字符串

Elementelem=doc.GetElement(r);

GeometryElementgeoElem=elem.get_Geometry(newOptions());//几何图元

GeometryObjectgeoObj=elem.GetGeometryObjectFromReference(r);//几何对象

//获取选中的cad图层

CategorytargetCategory=null;

ElementIdgraphicsStyleId=null;

//判断所选取的几何对象样式不为元素无效值

if(geoObj.GraphicsStyleId!=ElementId.InvalidElementId)

{

graphicsStyleId=geoObj.GraphicsStyleId;

GraphicsStylegs=doc.GetElement(geoObj.GraphicsStyleId)asGraphicsStyle;//获得所选对象图形样式

if(gs!=null)

{

targetCategory=gs.GraphicsStyleCategory;//图层

varname=gs.GraphicsStyleCategory.Name;//图层名字}

}

//隐藏选中的cad图层

if(targetCategory!=null)

{

doc.ActiveView.SetVisibility(targetCategory,false);

}

CurveArraycurveArray=newCurveArray();

List<double>listdb=newList<double>();

foreach(vargObjingeoElem)

{

GeometryInstancegeomInstance=gObjasGeometryInstance;

//GeometryInstance代表Revit在默认配置中存储的一组几何,然后由于元素的属性而转换到正确的位置。

//遇到GeometryInstances的最常见情况是在Family实例中。Revit使用GeometryInstances允许它存储给定族的几何图形的单个副本,并在多个实例中重复使用。

//请注意,并非所有Family实例都将包含GeometryInstances。

//当Revit需要为给定实例制作族几何的唯一副本时(由于局部连接,相交以及与实例放置相关的其他因素的影响),将不会遇到GeometryInstance;

//相反,实体几何将在层次结构的顶层找到。GeometryInstance提供了通过GetSymbolGeometry()和GetInstanceGeometry()方法读取其几何的功能。

//这些方法返回另一个Autodesk.Revit.DB.GeometryElement,可以像第一级返回一样对其进行解析。

//坐标转换。如果选择的是“自动-中心到中心”,或者移动了importInstance,需要进行坐标转换

Transformtransform=geomInstance.Transform;

if(null!=geomInstance)

{

foreach(varinsObjingeomInstance.SymbolGeometry)//坐标空间

{

if(insObj.GraphicsStyleId.IntegerValue!=graphicsStyleId.IntegerValue)

continue;

//线类型

if(insObj.GetType().ToString()=="Autodesk.Revit.DB.PolyLine")

{

PolyLinepolyLine=insObjasPolyLine;

IList<XYZ>points=polyLine.GetCoordinates();//获取坐标点

XYZpMax=polyLine.GetOutline().MaximumPoint;

XYZpMin=polyLine.GetOutline().MinimumPoint;

//长和宽

doubleb=Math.Abs(pMin.X-pMax.X);

doubleh=Math.Abs(pMin.Y-pMax.Y);

XYZpp=pMax.Add(pMin)/2;//柱子的中点坐标

pp=transform.OfPoint(pp);//坐标转换

CreatColu(doc,pp,b,h);//生成柱子

}

}

}

}

ts.Commit();

returnResult.Succeeded;

}

//生成柱子

privatevoidCreatColu(Documentdoc,XYZpoint,doubleb,doubleh)

{

FilteredElementCollectorfil=newFilteredElementCollector(doc);

fil.OfClass(typeof(FamilySymbol));

stringbh=CutDecimalWithN(b*304.8,4).ToString()+""+"x"+""+CutDecimalWithN(h*304.8,4);

List<FamilySymbol>listFa=newList<FamilySymbol>();

foreach(FamilySymbolfainfil)

{

if(fa.GetParameters("族名称")[0].AsString()=="砼矩形柱")

{

listFa.Add(fa);

}

}

inti=0;

boolbo=false;

intj=0;

for(i=0;i<listFa.Count;i++)

{

if(bh==listFa[i].Name)

{

bo=true;

j=i;

}

}

if(bo==true)

{

doc.Create.NewFamilyInstance(point,listFa[j],StructuralType.Column);

}

else

{

FamilySymbolfam=listFa[0];

ElementTypecoluType=fam.Duplicate(bh);

coluType.GetParameters("截面宽度")[0].Set(b);

coluType.GetParameters("截面高度")[0].Set(h);

FamilySymbolfs=coluTypeasFamilySymbol;

doc.Create.NewFamilyInstance(point,fs,StructuralType.Column);

}

}

腿腿教学网-有可以一键翻模的BIM软件吗?revit二次开发就可以!

看起来是真的很长……拉起来也怪费劲的!不过只要你测试一下,就会发现这个代码的非常神奇的自动建模的效果!找了一个真实的例子,试了一下,减值完美的爽到到飞起!你要不要一起来试一下?

版权声明:
作者:BIM教程网
链接:https://www.bimjcw.com/26527.html
来源:BIM教程网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
bim翻模是什么意思
最近有看到粉丝让我写一篇关于柱子一键翻模的案例,我答应粉丝的就一定会行动,这不趁着周末赶紧码代码和测试,然后就顺理成章,这篇文章的内容就信手拈来啦!……
<<上一篇
下一篇>>