明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2916|回复: 8

为何加入多义线总出错

[复制链接]
发表于 2006-8-7 21:52:00 | 显示全部楼层 |阅读模式

 ublic 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

上面程序中红色代码总出错。请高手指点。

 楼主| 发表于 2006-8-7 21:59:00 | 显示全部楼层
我可按照教程一个字都不差,不知为什么就是不行。
发表于 2006-8-8 14:47:00 | 显示全部楼层

好像是这样吧?

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

 楼主| 发表于 2006-8-8 23:16:00 | 显示全部楼层
谢谢楼上的弟兄回复。但我试了还是不行。我将OpenMode.ForWrite换成OpenMode.ForRead就好了,但下面出错。因为不是以写方式打开的。是什么毛病?
发表于 2006-8-11 09:43:00 | 显示全部楼层
这是我在C#里面的代码:(成功的)
  1. //绘制轻量多段线函数
  2.         public Polyline m_LightWeightPolyline(Point2dCollection m_ptarr)
  3.         {
  4.             Polyline m_lwpline = new Polyline();
  5.             for (int i = 0; i < m_ptarr.Count; i++)
  6.             {
  7.                 m_lwpline.AddVertexAt(i, m_ptarr[i], 0.0, 0, 0);
  8.             }
  9.             Database m_db= HostApplicationServices.WorkingDatabase;
  10.             Transaction m_tr = m_db.TransactionManager.StartTransaction();
  11.             m_tr = m_db.TransactionManager.StartTransaction();
  12.             BlockTableRecord m_btr = (BlockTableRecord)m_tr.GetObject(m_db.CurrentSpaceId, OpenMode.ForWrite , false);
  13.             try
  14.             {
  15.                 m_btr.AppendEntity(m_lwpline);
  16.                 m_tr.AddNewlyCreatedDBObject(m_lwpline,true);
  17.                 m_tr.Commit();
  18.             }
  19.             catch(System.Exception ex)
  20.             {
  21.                 Editor m_ed= Application.DocumentManager.MdiActiveDocument.Editor;
  22.                 m_ed.WriteMessage("多义线创建不成功!"+" --->错误信息: "+ex.Message);
  23.             }
  24.             finally
  25.             {
  26.                 m_tr.Dispose();
  27.             }
  28.             return m_lwpline;
  29.         }
复制代码
发表于 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#是

 楼主| 发表于 2006-8-21 22:05:00 | 显示全部楼层
本帖最后由 作者 于 2006-8-22 21:00:23 编辑

谢谢楼上的给出主意,我再试试看。

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

 楼主| 发表于 2006-8-22 21:39:00 | 显示全部楼层
本帖最后由 作者 于 2006-8-24 21:34:19 编辑

解决了,是我将这个函数放到模块下导致的,我将其放入CLASS1下就好了。但这样我在别的窗体下没法调用了。请教各位高手如何调用?

是我太水了。呵……

这个问题彻底解决了。呵……    是CAD焦点的问题。在我调用这段代码的时候CAD失去了焦点。唉!!!!

发表于 2007-3-28 12:49:00 | 显示全部楼层
如何设置焦点呢??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-9 11:38 , Processed in 0.176755 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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