明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2007|回复: 10

求助

[复制链接]
发表于 2011-5-25 22:50:13 | 显示全部楼层 |阅读模式
各位高手,本人有个问题,在网上找了好久也没有答案,在这提出来,希望高人指点;
  vbnet在cad中建立了一个选择集
代码      Dim mode As Integer
            Dim conerP1(0 To 2) As Double, conerP2(0 To 2) As Double
            mode = Autodesk.AutoCAD.Interop.Common.AcSelect.acSelectionSetCrossing
            conerP1(0) = insertPnt(0) + Ra + 2 : conerP1(1) = insertPnt(1) + Ra + 2 : conerP1(2) = insertPnt(2)
            conerP2(0) = insertPnt(0) - Ra - 2 : conerP2(1) = insertPnt(1) - Ra - 2 : conerP2(2) = insertPnt(2)
            ss1.select(mode, conerP1, conerP2, , )
            ss1.highlight(True)
问题是 如何将选择集中的图元一起转化为一个块,然后再其他图形中插入该块。在此先谢谢了。
希望明天来查看的时候有答案。
 楼主| 发表于 2011-5-26 12:33:50 | 显示全部楼层
为什么没有人回答,没有人会吗?不可能啊
 楼主| 发表于 2011-5-26 12:36:38 | 显示全部楼层
未处理 System.IO.FileNotFoundException
  Message="找不到指定的模块。 (异常来自 HRESULT:0x8007007E)"
  Source="catenary"
  StackTrace:
       在 WindowsApplication1.Form1.btnGearHT_Click(Object sender, EventArgs e)
       在 System.Windows.Forms.Control.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       在 System.Windows.Forms.Control.WndProc(Message& m)
       在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
       在 System.Windows.Forms.Button.WndProc(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.Run(ApplicationContext context)
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       在 WindowsApplication1.My.MyApplication.Main(String[] Args) 位置 17d14f5c-a337-4978-8281-53493378c1071.vb:行号 81
       在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       在 System.Threading.ThreadHelper.ThreadStart()
  InnerException:

什么原因啊???[/color]
发表于 2011-5-26 13:14:16 | 显示全部楼层
  1. Public Function CreateBlock() As ObjectId
  2.     Dim db As Database = HostApplicationServices.WorkingDatabase
  3.     '用于返回所创建的块的对象Id
  4.     Dim blockId As ObjectId = ObjectId.Null
  5.     '创建一个BlockTableRecord类的对象,表示所要创建的块
  6.     Dim record As New BlockTableRecord()
  7.     '设置块名
  8.     record.Name = "Room"
  9.     Using trans As Transaction = db.TransactionManager.StartTransaction()
  10.         Dim points As New Point3dCollection() '用于表示组成块的多段线的顶点
  11.         points.Add(New Point3d(-18.0, -6.0, 0.0))
  12.         points.Add(New Point3d(18.0, -6.0, 0.0))
  13.         points.Add(New Point3d(18.0, 6.0, 0.0))
  14.         points.Add(New Point3d(-18.0, 6.0, 0.0))
  15.         '创建组成块的多段线
  16.         Dim pline As New Polyline2d(Poly2dType.SimplePoly, points, 0.0, True, 0.0, 0.0, Nothing)
  17.         record.Origin = points(3) '设置块的基点
  18.         record.AppendEntity(pline) '将多段线加入到新建的BlockTableRecord对象
  19.         '以写的方式打开块表
  20.         Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
  21.         If bt.Has("Room") = False Then '判断是否存在名为"Room"的块
  22.             blockId = bt.Add(record) '在块表中加入"Room"块
  23.             trans.AddNewlyCreatedDBObject(record, True) '通知事务处理
  24.             trans.Commit() '提交事务
  25.         End If
  26.     End Using
  27.     Return blockId '返回创建的块的对象Id
  28. End Function
发表于 2011-5-26 13:15:24 | 显示全部楼层
  1. Public Sub InsertBlockRef(ByVal blockName As String, ByVal point As Point3d, ByVal scale As Scale3d, ByVal rotateAngle As Double)
  2.     Dim db As Database = HostApplicationServices.WorkingDatabase
  3.     Using trans As Transaction = db.TransactionManager.StartTransaction
  4.         '以读的方式打开块表
  5.         Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)
  6.         '如果没有blockName表示的块,则程序返回
  7.         If (bt.Has(blockName) = False) Then
  8.             Return
  9.         End If
  10.         '以读的方式打开blockName表示的块
  11.         Dim block As BlockTableRecord = trans.GetObject(bt(blockName), OpenMode.ForRead)
  12.         '创建一个块参照并设置插入点
  13.         Dim blockref As BlockReference = New BlockReference(point, bt(blockName))

  14.         blockref.ScaleFactors = scale '设置块参照的缩放比例

  15.         blockref.Rotation = rotateAngle '设置块参照的旋转角度
  16.         '以写的方式打开当前空间(模型空间或图纸空间)
  17.         Dim btr As BlockTableRecord = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)
  18.         btr.AppendEntity(blockref) '在当前空间加入创建的块参照
  19.         '通知事务处理加入创建的块参照
  20.         trans.AddNewlyCreatedDBObject(blockref, True)
  21.         trans.Commit() '提交事务处理以实现块参照的真实加入
  22.     End Using
  23. End Sub
 楼主| 发表于 2011-5-27 00:12:40 | 显示全部楼层
谢谢 ,可是会提示
未处理 System.IO.FileNotFoundException
  Message="找不到指定的模块。 (异常来自 HRESULT:0x8007007E)"
  Source="catenary"
  StackTrace:
       在 WindowsApplication1.Form1.btnGearHT_Click(Object sender, EventArgs e)
       在 System.Windows.Forms.Control.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       在 System.Windows.Forms.Control.WndProc(Message& m)
       在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
       在 System.Windows.Forms.Button.WndProc(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       在 System.Windows.Forms.Application.Run(ApplicationContext context)
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       在 WindowsApplication1.My.MyApplication.Main(String[] Args) 位置 17d14f5c-a337-4978-8281-53493378c1071.vb:行号 81
       在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       在 System.Threading.ThreadHelper.ThreadStart()
  InnerException:
 楼主| 发表于 2011-5-27 00:14:48 | 显示全部楼层
Dim db As Database = HostApplicationServices.WorkingDatabase
            Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
            Dim docLock As DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument()
            Dim blockId As ObjectId = ObjectId.Null
            Dim record As BlockTableRecord = New BlockTableRecord()
            record.Name = "Blockobj"
            record.Origin = New Point3d(insertPnt(0), insertPnt(1), insertPnt(2))
            Using trans As Transaction = db.TransactionManager.StartTransaction()
                Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
                For Each id As ObjectId In ss1.Value.GetObjectIds()
                    Dim ent As Entity = trans.GetObject(id, OpenMode.ForWrite)
                    Dim NewEnt As Entity = ent.Clone()
                    record.AppendEntity(NewEnt)
                    blockId = bt.Add(record)
                    trans.AddNewlyCreatedDBObject(record, True)
                Next
                trans.Commit()
            End Using
发表于 2011-5-27 09:47:33 | 显示全部楼层
  1.   record.AppendEntity(NewEnt)
  2.                     blockId = bt.Add(record)
  3.                     trans.AddNewlyCreatedDBObject(record, True)
  4.                 Next
  5.                 trans.Commit()


这段代码,
在实体clone()完毕后,还没有通过事务提交到数据库。
就已经试图要把这个实体添加到块里面了。

试着改变一下代码。
先吧clone()后的实体添加到数据库,
返回这个实体的ObjectId,
然后再把这个实体添加到块表里试试?

呃~~vb我是业余的,
但希望会对你有帮助。

发表于 2011-5-27 15:01:28 | 显示全部楼层
System.IO.FileNotFoundException应该是你的.NET方面出了点问题,你看看对文件的操作是不是有不合理的地方?
 楼主| 发表于 2011-6-17 22:30:30 | 显示全部楼层
已解决,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:16 , Processed in 0.182572 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表