VIP免费下载全站资源
VIP优惠来袭,免费下载全站资料和课程,技术问题可以随时提问;
查看VIP会员
在做项目的时候有时候会碰到建筑专业与结构专业同步进行建模的情况,这时因为结构模型尚不完整,建筑的墙建模的高度是标高到标高bim标高怎么创建,Revit二次开发_墙的偏移调整,而不是实际的板面到板底或梁底。所以需要等到结构模型完整后再重新调整一遍。这个调整的工作虽然比较简单,但重复性比较强,工作量也不少,于是利用二次开发做了一下优化。
具体逻辑是在墙的高度一半的位置选了几个点,根据这些点上下检测楼面及梁面,如果能检测到对应的面考证含金量排行榜,获得距离换算出墙的顶部及底部偏移,然后调整墙的对应参数。
比较麻烦的地方是取点,API中好像没有直接的方法可以获得线上的参数点,需要自己写一下。而且选点的时候也不能选墙路径的两个端点bim标高怎么创建,因为这样会导致判定过于敏感,识别到隔壁图元的面。
示例:
代码:
class ModifyWallOffset : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;//在三维视图运行View3D view = doc.ActiveView as View3D;//选择墙var elems = uidoc.Selection.PickElementsByRectangle(new AWallSelection(), "框选要修改的墙");//启用事务using (Transaction tran = new Transaction(doc, "修正墙")){tran.Start();//遍历元素foreach (Wall wall in elems){//如果墙体被锁定,则不对墙体进行修改if (!wall.Pinned){//参数:顶部偏移、无连接高度、底部偏移Parameter wallTopOffset = wall.get_Parameter(BuiltInParameter.WALL_TOP_OFFSET);Parameter wallHeight = wall.get_Parameter(BuiltInParameter.WALL_USER_HEIGHT_PARAM);Parameter wallBaseOffset = wall.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET);try{//创建射线计算距离RayTool rt = new RayTool(doc, wall, view);//初始墙高及初始底偏移double height = wallHeight.AsDouble();double baseOffset = wallBaseOffset.AsDouble();//计算正确的墙高及正确的底偏移switch (rt.ReturnState){//顶部底部均有数据返回case 2:baseOffset = height / 2 + baseOffset - rt.BaseDistance;height = rt.TopDistance + rt.BaseDistance;break;//仅顶部有数据返回case 1:height = height / 2 + rt.TopDistance;break;//仅底部有数据返回case -1:baseOffset = height / 2 + baseOffset - rt.BaseDistance;height = height + wallBaseOffset.AsDouble() - baseOffset;break;}//调整墙参数if (wallTopOffset.IsReadOnly){wallHeight.Set(height);}else{wallTopOffset.Set(height + baseOffset - wallHeight.AsDouble() - wallBaseOffset.AsDouble() + wallTopOffset.AsDouble());}wallBaseOffset.Set(baseOffset);}catch{//error}}}tran.Commit();}return Result.Succeeded;}}//墙过滤器class AWallSelection : Autodesk.Revit.UI.Selection.ISelectionFilter{public bool AllowElement(Element elem){if(elem is Wall){return true;//Wall wall = elem as Wall;//if (wall.StructuralUsage == Autodesk.Revit.DB.Structure.StructuralWallUsage.NonBearing)//{// return true;//}}return false;}public bool AllowReference(Reference reference, XYZ position){return false;}}//使用射线法检测距离class RayTool{public RayTool(Document document,Wall wall,View3D view3D){//射线过滤器IList filterList = new List();ElementCategoryFilter filter1 = new ElementCategoryFilter(BuiltInCategory.OST_Floors);filterList.Add(filter1);ElementCategoryFilter filter2 = new ElementCategoryFilter(BuiltInCategory.OST_StructuralFraming);filterList.Add(filter2);ElementCategoryFilter filter3 = new ElementCategoryFilter(BuiltInCategory.OST_Ceilings );filterList.Add(filter3);LogicalOrFilter filter = new LogicalOrFilter(filterList);//创建射线ReferenceIntersector referenceIntersector = new ReferenceIntersector(filter, FindReferenceTarget.Face, view3D);referenceIntersector.FindReferencesInRevitLinks = true;//到顶部距离TopDistance = 0;//到底部距离BaseDistance = 0;foreach (XYZ p in GetRayOriginPoints(wall, 5)){ReferenceWithContext rwc0 = referenceIntersector.FindNearest(p, new XYZ(0, 0, 1));if (rwc0 != null){double distance = rwc0.Proximity;if (distance > TopDistance) TopDistance = distance;}ReferenceWithContext rwc1 = referenceIntersector.FindNearest(p, new XYZ(0, 0, -1));if (rwc1 != null){double distance = rwc1.Proximity;if (distance > BaseDistance) BaseDistance = distance;}}}////// 获取用于作射线的点列表/// /// 测量的墙/// 测量的点数量/// IList GetRayOriginPoints(Wall wall, int pointNumber){//获取用于计算的线段(墙的水平中线)Curve wallLocationCurve = (wall.Location as LocationCurve).Curve;//获取墙的一半高度double h = wall.get_Parameter(BuiltInParameter.WALL_USER_HEIGHT_PARAM).AsDouble() / 2 + wall.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).AsDouble();//获得对应的点IList originPoints = new List();double pointParameter = 0.05;XYZ p = PointAtParameter(pointParameter);originPoints.Add(new XYZ(p.X, p.Y, p.Z + h));double pace = (0.95 - pointParameter) / (pointNumber - 1);for (int i = 0; i 0 && BaseDistance > 0){return 2;}else if (TopDistance > 0 && BaseDistance <= 0){return 1;}else if (TopDistance 0){return -1;}else{return 0;}}}public double TopDistance { get; }public double BaseDistance { get; }}
在项目中实际使用后效果也还可以,面对比较常规的地方都没有太大问题,但在建筑出现沉降或者在一些不同梁高的梁交接的地方会出现与结构梁板相交的问题,这些地方实际是要通过编辑墙轮廓进行修正的,所以还需要考虑检测这些相交的地方,然后对墙轮廓进行自动修正。然后还忽然想到一个斜板斜梁的问题。嗯~坑先挖下,看什么时候能抽出时间回来填吧。
bim有那些软件,BIM造价软件有哪些?国内几款BIM造价软件的使用情况
工程量清单模式,在一定程度上有其先进性考证书的正规网站,也是我国现阶段实行的较强制性规范的要求。在招投标阶段的应用,使得各大造价软件必须符合相关要求和规定。下面介绍目前国内比较突出的几款BIM造价软件的使用情况。
除了BIM设计模型直接出量外,在BIM模型上运用BIM造价软件,目前主要有两种方式。第一种是利用软件之间建立的应用程序接口(API),提取数据与造价软件对接bim有那些软件,BIM造价软件有哪些?国内几款BIM造价软件的使用情况,广联达、鲁班等软件就是运用这种方式,将设计模模块和造价模块分开,在BIM模型中提取相关的项目信息,再导入到造价软件中,进行处理。第二种通过开放式数据库连接(ODBC)访问BIM数据库,在bim软件平台增加算量模块,这种更加契合BIM理念,是在BIM模型上扩展一个维度,在BIM建模软件上直接统计工程量,BIM与造价相关联。目前斯维尔和新点合作开发的“比目云”等更接近这种方式。下面分别介绍目前较为代表性的这三款软件。
广联达是广联达股份有限公司推出的一款BIM应用软件,可以将建筑、结构模型导出为GFC广联达中间文件,打开广联达算量软件即可导入GFC文件实现数据的传递(如图所示)。鲁班BIM算量是鲁班软件公司研发、推广的BIM技术和服务,与广联达类似,使用过程中需要将模型转成其自有平台的中间文件。
可是,这两种算量软件开发的BIM应用主要存在如下问题:
(1)中间文件相互转换时,可能会有数据丢失,模型在算量平台导入后,需要进行大量修改,否则算量模型存在缺陷和误差。
(2)对于一些异形构件、复杂造型等无法识别,必须进行修改甚至二次建模,且建模能力不强;
(3)设计变化时,模型需要重新导入算量平台,对造价的影响需要手动处理,重新生成清单,并且反向导入软件中能力有限或者不能导入。
新点比目云是在平台上的5D算量软件,相对于在算量软件平台的优点是达到“一模多用”,提高工作效率,避免二次建模,无须担心模型转换时的数据丢失或无法转换的问题。但是,模型中有些实际需要计算的实物量在模型中没有体现,比如内外脚手架、机电支架、模板等。而且由于建模规则原因,部分构件工程量存在较大误差。此外,在现在推广、普及BIM应用的环境下,BIM推广的阻碍首当其冲的便是运用BIM的经济性。仅仅一个造价软件就动辄上万元的投资,BIM软件成本过高也是让中小型企业望而却步,更别说推广BIM项目级别的的应用了,所以我们希望得到一种经济性的方式,可以生成符合工程量清单规定的工程清单。虽然新点比目云较之广联达与鲁班,有其一定的优势,更贴合BIM使用理念,比如不用二次建模,实时控制设计变更时的造价变更等优点。但是其对工程量的精确程度不高且对设计人员的造价水平有较高要求,并且它本身就是在软件平台操作,与其如此倒不如想办法运用直接统计工程量。
行业中还要很多类似的软件,不过基本都是基于这两种应用方式,此处不再赘述。随着软件在项目中的使用,软件的不足之处越来越多的显现,市面上常见的几款算量软件对比本身统计工程量可以发现(如表所示),本身强大的建模功能远远强于基于算量平台的建模功能,基于软件得出工程量不仅减少重复建模的工作内容,也使得算量造价信息可以在模型上更加可控,所以如果可以使用软件直接统计出符合清单要求的工程量bim有那些软件,将会提高BIM技术在实际项目上的应用频率,使得BIM技术得到更加快速的发展。
文:奚程翀 仅供学习交流 版权归原作者所有
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请添加站长微信举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.zhiyeeedu.com/50934.html