davehuhudave 发表于 2010-7-9 09:18:00

奇怪的添加块参照问题

<p>我对已有的一个块添加相应一个块参照,插入点由提示<font face="Verdana">PromptPointOptions</font>获取,但是插入后并不显示在那个点位置,而是有很大偏差,高手们帮我看看啊,谢谢</p>
<p><font face="Verdana">Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim db As Database = AcadApp.DocumentManager.MdiActiveDocument.Database<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 普通的点交互操作.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim optPoint As New PromptPointOptions(vbCrLf &amp; "请指定放置点:")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim resPoint As PromptPointResult = ed.GetPoint(optPoint)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If resPoint.Status &lt;&gt; PromptStatus.OK Then Return ObjectId.Null<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim obid As ObjectId<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Using trans As Transaction = db.TransactionManager.StartTransaction()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 将块参照加入到图形数据库中.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '以读的方式打开块表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '如果没有blockName表示的块,则程序返回<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (bt.Has(blockname) = False) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return ObjectId.Null<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '以读的方式打开blockName表示的块<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Dim block As BlockTableRecord = trans.GetObject(bt(blockname), OpenMode.ForRead)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '创建一个块参照并设置插入点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim mt As Matrix3d = ed.CurrentUserCoordinateSystem<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim p3 As Point3d = resPoint.Value.TransformBy(mt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim blockref As BlockReference = New BlockReference(p3, bt(blockname))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Dim blockref As BlockReference = New BlockReference(resPoint.Value, bt(blockname))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'blockref.ScaleFactors = New Scale3d(1) '设置块参照的缩放比例<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'blockref.Rotation = 0.5 * Math.PI<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '以写的方式打开当前空间(模型空间或图纸空间)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim btr As BlockTableRecord = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obid = btr.AppendEntity(blockref) '在当前空间加入创建的块参照<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '通知事务处理加入创建的块参照<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trans.AddNewlyCreatedDBObject(blockref, True)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trans.Commit() '提交事务处理以实现块参照的真实加入<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Using<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return obid</font></p>

sieben 发表于 2010-7-9 10:01:00

<p>1,检查你的块定义插入点位置是否合适</p>
<p>2,试试把自动捕捉关掉后有没有变化</p>

davehuhudave 发表于 2010-7-9 11:55:00

说的太专业了,能不能具体点啊谢谢

雪山飞狐_lzh 发表于 2010-7-9 13:41:00

<p>把你的包含块的dwg贴上吧</p>

davehuhudave 发表于 2010-7-15 17:16:00

哪位高手帮帮忙啊,急死了
页: [1]
查看完整版本: 奇怪的添加块参照问题