tcsl9621 发表于 2006-8-7 21:52:00

为何加入多义线总出错

&nbspublic Function addpl()
      Dim db As Database = HostApplicationServices.WorkingDatabase()
      Dim trans As Transaction = db.TransactionManager.StartTransaction()
      MsgBox("0")
      Try
            Dim pl As New Circle(New Point3d(0, 0, 0), Vector3d.ZAxis, 100)
            MsgBox("1")
            Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)
            MsgBox("2")
            Dim btrid As ObjectId = bt.Item(BlockTableRecord.ModelSpace)
            Dim btr As BlockTableRecord = trans.GetObject(btrid, OpenMode.ForWrite)
            MsgBox("3")
            Dim ObjId As ObjectId
            MsgBox("4")
            ObjId = btr.AppendEntity(pl)
            MsgBox("5")
            trans.AddNewlyCreatedDBObject(pl, True)
            MsgBox("6")
            trans.Commit()
      Catch ex As Exception
            MsgBox("pl error.")
      Finally
            trans.Dispose()
      End Try
    End Function
上面程序中红色代码总出错。请高手指点。

tcsl9621 发表于 2006-8-7 21:59:00

我可按照教程一个字都不差,不知为什么就是不行。

mkhsj929 发表于 2006-8-8 14:47:00

好像是这样吧?
Dim btr As BlockTableRecord = trans.GetObject(db.CurrentSpaceID, OpenMode.ForWrite)

tcsl9621 发表于 2006-8-8 23:16:00

谢谢楼上的弟兄回复。但我试了还是不行。我将OpenMode.ForWrite换成OpenMode.ForRead就好了,但下面出错。因为不是以写方式打开的。是什么毛病?

mkhsj929 发表于 2006-8-11 09:43:00

这是我在C#里面的代码:(成功的)复制代码

sieben 发表于 2006-8-15 16:35:00

                Dim btr As BlockTableRecord = trans.GetObject(btrid, OpenMode.ForWrite)

改写为下面试试         
            Dim btr As BlockTableRecord = (BlockTableRecord)trans.GetObject(btrid, OpenMode.ForWrite)
我的意思是加一步显式转换,我忘了VB是不是这样转换了,C#是

tcsl9621 发表于 2006-8-21 22:05:00


谢谢楼上的给出主意,我再试试看。
我今天看了看。bt(btr.ModelSpace)在我的程序中是READONLY属性。请教大侠怎么才能将其也为非只读的。我想只要是非只读就不会有问题了。

tcsl9621 发表于 2006-8-22 21:39:00


解决了,是我将这个函数放到模块下导致的,我将其放入CLASS1下就好了。但这样我在别的窗体下没法调用了。请教各位高手如何调用?
是我太水了。呵……
这个问题彻底解决了。呵……    是CAD焦点的问题。在我调用这段代码的时候CAD失去了焦点。唉!!!!

baby408 发表于 2007-3-28 12:49:00

如何设置焦点呢??
页: [1]
查看完整版本: 为何加入多义线总出错