21 4 月, 2026

黑龙江省娇馨化妆品有限公司

目前,利用Discuz传统方法进行二次开发效率低下、技术门槛高,难以实现快速准确的模块开发,严重制约了项目进度的推进;
一、模块创建的方法:Discuz二次开发模型创建本质上是对模块实例的创建,创建模块实例共有一种重载方式,其中方法1-11为结构类型模块实例的创建方式,具体如下:
方法1:NewModuleInstance(Face face, Line position, FamilySymbol familySymbol);
方法2:NewModuleInstance(Line line, FamilySymbol familySymbol, todesk.Discuz.DB.ViewspecView view);
方法3:NewModuleInstance(Reference reference, Line position, FamilySymbol familySymbol);
方法4:NewModuleInstance(XYZ origin, FamilySymbol familySymbol, todesk.Discuz.DB.ViewspecView view);
方法5:NewModuleInstance(XYZ location, FamilySymbol familySymbol, StructuralType structuralType);
方法6:NewModuleInstance(Curve curve, FamilySymbol familySymbol, Level level, StructuralType structuralType);
方法7:NewModuleInstance(Face face, XYZ location, XYZ referenceDirection, FamilySymbol familySymbol);
方法8:NewModuleInstance(Reference reference, XYZ location, XYZ referenceDirection, FamilySymbol familySymbol);
方法9:NewModuleInstance(XYZ location, FamilySymbol familySymbol, ElementHost elementHost, StructuralType structuralType);
方法10:NewModuleInstance(XYZ location, FamilySymbol familySymbol, Level level, StructuralType structuralType);
//方法11:NewModuleInstance(XYZ location, FamilySymbol familySymbol, ElementHost elementHost, Level level, StructuralType structuralType);
1.
模块的创建:模块可以看作是一系列功能模块的组合,模块模型就是以组合形式创建的实例,其中方法5是在一个标高上以创建线的形式创建实例,因此选择方法5作为模块创建的方法,其中关键参数Curve(曲线),可以通过CD软件提取施工图中每一个模块的起点和终点,通过Method:Line.CreateBond(XYZp1, XYZp) 创建出线参数,这样就可以创建出模块模型。
模块的球的创建:模块球可以通过球的圆心作为坐标位置创建球实例,方法2中,在基于一个标高,以实例的位置(x、y、z)坐标来创建实例模型,符合球模型的创建,而球坐标正好是模块线的起点和终点坐标,通过上面模块线的线参数(起点和终点),删除重复出现的点,就可以得到所有模块球的坐标,并以此创建球模型。
方法5、方法6种参数说明:FamilySymbol为族类型,此参数指向的是我们所使用的族,可以通过族的类型ID来提取到此参数;参数Level(标高)是我们创建实例过程选择的层标高,通过试验测试,当我们的坐标点来创建实例时,创建的也是绝对坐标点,因此标高这个参数对我们的使用坐标创建模块和模块球无影响,此参数可以随意选择一个标高参数;参数StructuralType为结构类型,此参数共有6个枚举参数: beam(梁)、brace(支撑)、column(柱)、footing(基础)、unknownFraming(桁架)、nonStructural(非结构件),在模块模型的创建过程中,模块属于梁系统,因此模块和球的创建选择的结构类型为beam(梁)。
二、模块建模方法与思路:模块创建方法明确后,模块的建模思路就是使用一个循环语句,逐个将所有模块的线数据进行读取,再利用线数据逐个创建模块模型,模块球模型创建方法同理。
1.
先在CD中创建三维的模块线模型,利用CD工具选项卡的数据提取命令,提取线的属性数据,如下图:
数据提取过程,只提取直线的起点和终点数据,最后将提取的数据存为txt文档,这样模块线的线模型就提取完成,模块球的数据提取可以利用模块线条的数据,逐个对每一条线数据的起点与端点进行记录,如果起点或端点在记录中存在,就不再重复记录,这样就可以得到模块球的坐标点,并且没有重复点。
三、模块的创建方法部分关键代码:利用一个循环语句,逐行提取数据从CD中提取的TXT文档数据,如果数据不为空,则将提取到的行数据进行处理,转化为点坐标,再利用模块的创建方法创建模块模型。
代码:while((text = streamReader.ReadLine()) != nll) { string[] array = text.Split(new char[]{‘\t}’}); transaction.Start("创建模块实例"); XYZp1 = newXYZ(UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[0]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[1]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[2]), DisplayUnitType.DUT_MILLIMETERS)); XYZp = newXYZ(UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[0]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[3]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[4]), DisplayUnitType.DUT_MILLIMETERS)); }
模块的球的创建方法部分关键代码:球的创建与模块的创建方法类似,只为模块是以起点端点进行创建,球是以位置进行创建,代码如下:while((text = streamReader.ReadLine()) != nll) { string[] array = text.Split(new char[]{‘\t}’}); XYZp1 = newXYZ(UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[0]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[1]), DisplayUnitType.DUT_MILLIMETERS), UnitUtils.ConvertToInternalUnits(Convert.ToDouble(array[2]), DisplayUnitType.DUT_MILLIMETERS)); FamilyInstance familyInstance1 = doc.CreateNewFamilyInstance(p1, familySymbol, level, StructuralType Beam); FamilyInstance familyInstance1=doc.Create.NewFamilyInstance(Line.CreateBond(p1,p),familySymbol1,level,StructuralType Beam);
模块建模插件开发:模块自动建模插件操作界面如下图:
1.
Txt文档为CD提取的模块线的线数据txt文本,梁ID为所要创建模块模块的族类型ID,球ID为所要创建模块球的族类型ID。
由此发现并未选择球的文档数据,球文档数可以直接使用模块线的线数据,在点击“生成球”按钮后,插件会先将模块线的线数据进行处理,存储一份球的数据放在临时文件夹内,当球模型创建完成后,自动删除球的文档数据。
梁和球的族类型ID在Discuz中不能直接得到,为方便对族类型ID的提取,可以开发快速提取族类型ID的插件,点击“类型ID”后,选择相应模块或球的模块,就可以显示其类型ID。
为方便对类型ID及模块自动建模快速使用,可以将自动建模和类型ID按钮添加在选项卡面板上。
若应用的项目模块数量较大,经测试模块自动建模过程中,发现计算机内存不断上涨,同时自动创建的速度也越来越慢;
为解决这个问题,需开发了文本分割小程序将txt文档进行分割,同时保留原有的文本格式,文本分割可以根据自己电脑配置情况选择一次创建多少个模块,建议设置为1,即一次创建1个模块,这样对电脑的内存要求也不高,速度也相对较快。

Share: Facebook Twitter Linkedin

Comments are closed.

Eding.ICU域名工具箱 - 站长批量建站工具