乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 160|回复: 2

挤出一个区域-需要一些h

[复制链接]
RMS

9

主题

38

帖子

29

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 22:58:56 | 显示全部楼层 |阅读模式
基本上,我取点,画线,闭合一个环,然后创建一个区域。但这是我遇到麻烦的部分,当试图挤出该区域时,我一无所获。有人有解决方案或修复方法吗?
 
谢谢
 
  1.                        
  2. Dim acDBObjColl As DBObjectCollection = New DBObjectCollection()
  3. Dim myRegionColl As DBObjectCollection = New DBObjectCollection()
  4. Dim acRegion As Region ' = CType(myRegionColl(0), Region)
  5.                        
  6. Dim solidObj As Solid3d = New Solid3d()
  7. ' Create a line
  8. acLine = New Line(New Point3d(xStart, yStart, zStart), _
  9.                           New Point3d(xClose, yClose, zClose))
  10. acLine.SetDatabaseDefaults()
  11. acBlkTblRec.AppendEntity(acLine)
  12. acTrans.AddNewlyCreatedDBObject(acLine, True)
  13. acDBObjColl.Add(acLine)
  14. ' make reagion for each layer
  15. myRegionColl = Region.CreateFromCurves(acDBObjColl)
  16. ' Add the new region object to the block table record and the transaction
  17. acRegion = CType(myRegionColl(0), Region)
  18. acRegion.ColorIndex = 240 ' = redish
  19. acBlkTblRec.AppendEntity(acRegion)
  20. acTrans.AddNewlyCreatedDBObject(acRegion, True)
  21. 'solidObj.SetDatabaseDefaults()
  22. 'solidObj.Extrude(CType(myRegionColl(0), Region), 1.0, 0.0)
  23. solidObj.Extrude(acRegion, 1.0, 0.0)
  24. ' Add the new object to the block table record and the transaction
  25. 'acBlkTblRec.AppendEntity(solidObj)
  26. ' end make region
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:35:40 | 显示全部楼层
看起来您已经尝试了所有正确的方法-问题可能是在发布的代码块之前还是之后。例如acDBObjColl实际上是否包含一组封闭的行?
 
一般来说,不一定与问题有关,可能不需要将区域附加到块表记录。参见示例:
 
 
  1.     <CommandMethod("ExLines")> _
  2. Public Sub ExtrudeLine()
  3.        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  4.        Dim db As Database = ed.Document.Database
  5.        Dim typeValue() As TypedValue = {New TypedValue(0, "LINE")}
  6.        Dim selFilter As SelectionFilter = New SelectionFilter(typeValue)
  7.        Dim selResult As PromptSelectionResult = ed.GetSelection(selFilter)
  8.        Dim ssLine As SelectionSet = selResult.Value
  9.        Dim oids() As ObjectId = ssLine.GetObjectIds
  10.        Using tran As Transaction = db.TransactionManager.StartTransaction
  11.            Dim oid As ObjectId
  12.            Dim objcoll As DBObjectCollection = New DBObjectCollection()
  13.            For Each oid In oids
  14.                objcoll.Add(CType(tran.GetObject(oid, OpenMode.ForRead), Line))
  15.            Next
  16.            Dim regcoll As New DBObjectCollection
  17.            Try
  18.                regcoll = Region.CreateFromCurves(objcoll)
  19.                Dim sol As Solid3d = New Solid3d()
  20.                sol.Extrude(CType(regcoll(0), Region), 1.0, 0.0)
  21.                Dim btr As BlockTableRecord = CType(tran.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
  22.                sol.SetDatabaseDefaults()
  23.                btr.AppendEntity(sol)
  24.                tran.AddNewlyCreatedDBObject(sol, True)
  25.            Catch
  26.                ed.WriteMessage(vbCr & "General modeling failure!")
  27.            Finally
  28.                regcoll.Dispose()
  29.                tran.Commit()
  30.            End Try
  31.        End Using
  32.    End Sub
回复

使用道具 举报

RMS

9

主题

38

帖子

29

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-7 00:06:05 | 显示全部楼层
很好的例子,这将帮助我度过难关!我确实注意到我的一些点运算符是不同的,而且我没有使用ObjectId。我可以在我的系统上很好地运行您的示例,因此我应该能够在代码中实现这一点,只需稍作更改。
 
非常感谢。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 18:03 , Processed in 0.625320 second(s), 69 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表