laoliu09
发表于 2005-4-22 11:52:00
希望各位老大帮帮我啊!先谢谢了!
laoliu09
发表于 2005-4-22 19:50:00
先顶一下,这个程序不是很长,可我不会lisp,所以想请各位老大帮我翻译一下,说一下这个程序的思路,最好就翻译成vba了,我想是应该修改标注原点的,不知道还应该注意什么?只要尺寸线不要动就好了,我就差这一步!
mccad
发表于 2005-4-23 07:37:00
注意在使用标注对象时不可使用IntersectWith方法来求它与其它对象的交点,因为它是求其外框与其它对象的交点,而不是真正的交点。所以必须按照两个ExtLine1Point及ExtLine2Point和Rotation这三个属性来画直线后,再求交点。通过这样的交点求出来的才是真正要使用的交点。
ljpnb
发表于 2005-4-23 08:14:00
明总,下面这段程序执行后,尺寸线会变动,修改尺寸界线的距离越长以及尺寸越小,尺寸线的变动会越明显。
Sub test()<BR>Dim dimobj As AcadDimAligned<BR>Dim point1 As Variant<BR>Dim point2 As Variant<BR>Dim point3 As Variant
ThisDrawing.Utility.GetEntity dimobj, point, "选择尺寸线:"<BR>point3 = ThisDrawing.Utility.GetPoint(, "选择一个对齐的点:")<BR>point1 = dimobj.ExtLine1Point<BR>point2 = dimobj.ExtLine2Point<BR>point1(1) = point3(1)<BR>point2(1) = point3(1)
dimobj.ExtLine1Point = point1<BR>dimobj.ExtLine2Point = point2<BR>dimobj.Update
End Sub
laoliu09
发表于 2005-4-23 19:55:00
对,明总,即使是水平放置的也会这样!我以前也是用你的方法做的,但还是会变,搞得我要用扩展数据来定位我的尺寸线,但为什么用lisp不会有这种情况呢?明总,你可以把我贴上来的程序的思路给我说一下吗?因为我不会lisp!谢谢了!
ljpnb
发表于 2005-4-23 23:33:00
<A name=26081><FONT color=#000066><B>laoliu09</B></FONT></A>,你说LISP不会出现这种情况,那是因为标注类型不是dimaligned(对齐标注),而是dimlinear(线性标注),所以不会出现这种情况,前面我也发过贴子问有关dimlinear如何取得各种属性,可惜没有理我,呵呵。。。。。
mccad
发表于 2005-4-24 08:05:00
还有另外一个问题,对于未修改过的对齐或转角标注,文本位置点是在文本的中心,而修改过后的标注,文本位置点则会被移动到尺寸线与文本相对应的点上(如尺寸线的中点位置)。所以在修改时可以看到文本会被移动,就算是修改前把文本位置用变量记录下来也无法解决这样问题。<BR>而对于程序来说,修改过和没被修改过的标注是无法识别的,也就是说文本位置点是在哪个点上无法识别。<BR>LISP方法是通过修改图元的相关DXF组码,所以不影响其它组码。故不存在这样的问题。但AX(VBA)则未提供直接读取和写入DXF组码。<BR>如果需要识别标注是否被修改过,除非读取标注块中的多行文字的位置与实际标注文本位置的点是否相同。如果相同,则未被修改过,如果不同,则被修改过。而文本被移动的距离可以根据文本的字高属性文本与标注线的距离来确定(其实还非常复杂,有些标注文本不是尺寸线的上方,而是在尺寸线的中间)。
ljpnb
发表于 2005-4-24 08:30:00
明总分析的有道理,可否帮我解答这个问题,对dimlinear如何操作,特别是如何获得extline1point和entline2point。
mccad
发表于 2005-4-24 08:57:00
dimlinear在对象模型中就是DimRotated。<BR>最简单的方法是读取其各属性,重新生成一个,按新的点。
ljpnb
发表于 2005-4-24 10:15:00
明总一语道破,明白了,多谢。我看帮助里好象没法获得DimRotated的extline1point和entline2point点,在VLISP里也没有显示出这两个点的坐标值,不知道为什么?