自动标注程序求改进标注显示的位置
本帖最后由 cumtjh 于 2011-3-15 13:31 编辑程序当前实现的功能:标注直线、多段线、弧长、弦高
运行命令Z1
支持直线、圆弧、多段线
缺陷:标注显示的位置放置不知道如何确定,当前程序标注位置跟对象的绘图顺序有关,始终位于矢量对象的左侧。比如绘制从下至上的线,标注位于左侧;而从上往下绘制线,再标注则位于右侧。
问题提出:
能不能实现不根据对象的方向性来标注对象,而且通过指定的方式指定标注位于哪一侧。
求改进功能:支持指定标注与被标注对象的位置关系,指定位于对象的左侧还是右侧,现在标注
麻烦版主和高手们帮忙添加几条语句,实现指定标注位置的功能。
;源码如下
;求改进——支持指定标注与被标注对象的位置关系 麻烦版主和高手们帮忙添加几条语句,从而实现指定标注位置
;功能:标注直线、多段线、弧长、弦高
(defun c:z1 ()
(prompt "此程序根据当前标注样式进行标注,设置textsize变量可修改与标注线的距离!")
(setq ss (ssget))
(setq n 0)
(repeat (sslength ss)
(setq en (ssname ss n))
(setq endata (entget en))
(if (= (cdr (assoc 0 endata)) "LWPOLYLINE")
(mmh_3 en)
(if (= (cdr (assoc 0 endata)) "ARC")
(mmh_1 en)
(mmh_2 endata)
)
)
(setq n (1+ n))
)
(princ)
)
(prompt "<<z1>>快速标注")
(defun mmh_1 (en)
(setvar "osmode" 0)
(setq po_1 (vlax-curve-getstartPoint en))
(setq po_2 (vlax-curve-getendPoint en))
(setq po_1_x (car po_1))
(setq po_1_y (cadr po_1))
(setq po_2_x (car po_2))
(setq po_2_y (cadr po_2))
(command "dimaligned" po_1 po_2 po_1)
(setvar "osmode" 16383)
)
(defun mmh_2 (endata)
(setvar "osmode" 0)
(setq p_1 (cdr (assoc 10 endata)))
(setq p_2 (cdr (assoc 11 endata)))
(setq p3 (polar p_1 (+ (angle p_1 p_2) (/ pi 2)) 10))
(command "dimaligned" p_1 p_2 p3)
(setvar "osmode" 16383)
)
(defun mmh_3 (en)
(setq m 0)
(command "explode" en "")
(setq ssl (ssget "p"))
(repeat (sslength ssl)
(setq enl (ssname ssl m))
(setq enldata (entget enl))
(if (= (cdr (assoc 0 enldata)) "ARC")
(mmh_1 enl)
(mmh_2 enldata)
)
(setq m (1+ m))
)
(command "pedit" "m" ssl "" "y" "j" "" "")
)
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 cumtjh的微博
版主 大虾都哪里去啦 放假休息吗
感觉很不错的谢谢楼主啊 谢谢楼主 学习了..谢谢 如能标注弧长,就完美咯,期待高手解决。 为什么没有高手出手? 为什么是贴着对象呢。。,有些还断开标的呢。 都好的程序啊。能优化一下就完美了。 自动标注程序标注显示位置的优化
增加了这几句,还是不能实现
(setvar "cmdecho" 0)
(setq ts1 (getreal "\n-->请输入标注文字高<2.0>:"))
(if (= ts1 nil) (setq ts1 2))
(command "dimtxt"2 "dimasz"0 "dimexo"0 "dimexe"0)
(command "dimasz"0 )
(command "dimexo"0 )
(command "dimexe"0 )
页:
[1]
2