使用VB.NET在AutoCAD中创建圆并拉伸生成实体的代码问题
实现AutoCAD中圆拉伸为三维实体的方案
你原来代码的核心问题是找错了拉伸方法的挂载对象:Region类本身没有Extrude方法,拉伸生成三维实体的API在Solid3d类下。
核心修改点
- 生成面域后,实例化空的
Solid3d对象,调用它的Extrude方法传入面域、拉伸高度、锥角参数生成实体 - 不要把原始二维圆加入模型空间,而是把拉伸完成的三维实体追加到模型空间并注册到事务
- 临时生成的圆、面域对象如果不需要保留,直接Dispose销毁,避免图档残留冗余对象
- 原代码直接用Single类型接收字符串输入存在隐式转换风险,建议加显式数值解析,或者直接用编辑器的
GetDouble方法读取数值输入,自带输入校验。
修正后可直接运行的代码
<CommandMethod("DRAW_EXTRUDE_CIRCLE")> Public Shared Sub DRAW_EXTRUDE_CIRCLE() Dim doc As Document = AutoCADApp.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Using tr As Transaction = db.TransactionManager.StartTransaction() ' 读取用户输入,生产环境建议替换为GetDouble方法做数值校验 Dim PositionX As Single = Single.Parse(ed.GetString("X").StringResult) Dim PositionY As Single = Single.Parse(ed.GetString("Y").StringResult) Dim PositionZ As Single = Single.Parse(ed.GetString("Z").StringResult) Dim Radius As Single = Single.Parse(ed.GetString("Radius").StringResult) Dim Length As Single = Single.Parse(ed.GetString("Length").StringResult) Dim bt As BlockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead) Dim btr As BlockTableRecord = tr.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite) ' 创建二维圆形 Dim circleObj As Circle = New Circle() With circleObj .SetDatabaseDefaults() .Center = New Point3d(PositionX, PositionY, PositionZ) .Radius = Radius End With ' 组合曲线生成面域 Dim curveColl As DBObjectCollection = New DBObjectCollection() curveColl.Add(circleObj) Dim regionColl As DBObjectCollection = Region.CreateFromCurves(curveColl) Dim targetRegion As Region = regionColl(0) ' 执行拉伸:参数依次为拉伸面域、拉伸高度、拉伸锥角(0为垂直拉伸) Dim extrudeSolid As New Solid3d() extrudeSolid.Extrude(targetRegion, Length, 0) ' 将拉伸后的三维实体写入模型空间 btr.AppendEntity(extrudeSolid) tr.AddNewlyCreatedDBObject(extrudeSolid, True) ' 清理临时对象 circleObj.Dispose() targetRegion.Dispose() tr.Commit() End Using End Sub
补充说明
- 拉伸方法的锥角参数单位为弧度,传入正值实体会沿拉伸方向收窄,负值会扩宽,传0就是等截面拉伸,和直接调用圆柱体API生成的效果完全一致。
- 如果需要保留二维圆轮廓,去掉
circleObj.Dispose(),同时把圆追加到模型空间即可。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

