几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-29, 05:11 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】『已解决』请问如何创建这样的3维实体 - 精华帖集合

『已解决』请问如何创建这样的3维实体 - 精华帖集合
www.dimcax.com
『已解决』请问如何创建这样的3维实体
在autocad中,我原有一个lwpolyline,其中还有一些圆角,通过拉伸,可以创建一个三维实体,而且拉伸是按照从点(0,0,0)到点(30, 40, 50)的方向拉伸。现在,我想在二次开发中根据一个lwpolyline创建一个同样的三维实体,请问如何才能实现?我的开发环境是:vs2005+autocad2008,看了autodesk的相关文档,没有找到相关的资料,通过.net打印autocad中通过命令创建的实体的各个顶点的坐标,也没找到什么有用的规律,所以到此请教。。
你可以参考objectarx2008 sdk中\samples\dotnet\managed_surfacehelix这个例子。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
先由二维多段线,生成面域;再建一个solid3d类,通过extrudealongpath函数进行拉伸。 [ ]
才鸟和ahlzl两位老大,我先试试,有问题再找你们请教.
再次才鸟,我看了那个示例,修改代码后可以通过拉伸创建一个斜的surface了,但还是不会创建solid3d. 同时再次请教ahlzl,我没不知道如何实现你说的内容,由于时间太紧,而且只做这一个工程,所以用什么只学什么,如果有空,请给个示例什么的,
' 定义一个三维实体.
dim ent as new solid3d()
' 创建长方体(长、宽、高).
ent.createbox(10, 8, 5)
复制代码
这是一段vb.net代码,对你应该有启发。
不行,还需要ahlzl再次指导。第一,我不会从一个polyline创建一个region,第二,在使用extrudealongpath时,这些参数也搞不定。如果有一个polyline,在z=0的平面内,知道其objectid,请问如何生成这个polyline组成的region,然后再如何沿(0,0,0)到(30,40,50)方向拉伸这个生成的region,以创建一个solid3d。
ahlzl的方法指点。完成了,代码如下: database db = hostapplicationservices.workingdatabase; blocktable bt = null; blocktablerecord btr = null; using (transaction trans = db.transactionmanager.starttransaction()) { bt = (blocktable)trans.getobject(db.blocktableid, openmode.forread); btr = (blocktablerecord)trans.getobject(bt[blocktablerecord.modelspace], openmode.forwrite); entity ent = null; polyline polyline = null; dbobjectcollection entities = null; dbobjectcollection regions = null; solid3d solid3d = null; line line = new line(new point3d(0, 0, 0), new point3d(30, 40, 50)); foreach (objectid id in btr) { ent = (entity)trans.getobject(id, openmode.forread); if (0 == ent.gettype().tostring().compareto("autodesk.autocad.databaseservices.polyline")) { ed.writemessage("\n" + ent.gettype().tostring()); if (ent.layer.tostring().compareto("jmd") == 0) { polyline = (polyline)ent; entities = new dbobjectcollection(); entities.add(polyline); regions = region.createfromcurves(entities); foreach (region region in regions) { solid3d = new solid3d(); solid3d.extrudealongpath(region, line, 0); btr.appendentity(solid3d); trans.addnewlycreateddbobject(solid3d, true); } } } } trans.commit(); } 但是,却有一个问题:如果多段线中没有弧线,则“消隐”后正常,但如果多段线中有弧线,那么图形不能通过鼠标进行缩放,而且“消陷”后也没有把应该隐藏的线隐藏起来,就连没有多段线的也不能正常消隐了。
问题找到了,不是这生成的图形的问题,而是原图中,有一个实体的厚度为22000,把所有图形的厚度设置为0后,可以正常消隐了。 原来画图的人太不规范了,图形对象的的z坐标值是随意的,图形的厚度也是随意的,有的多段线却只是一段线段。哎。
事情解决了就好了。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 04:11 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多