cumtjh 发表于 2011-3-15 13:27:27

自动标注程序求改进标注显示的位置

本帖最后由 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的微博

cumtjh 发表于 2011-3-15 20:18:20

版主 大虾都哪里去啦 放假休息吗

czb203 发表于 2011-11-18 20:49:28


感觉很不错的谢谢楼主啊

jslxt 发表于 2011-11-19 09:48:25

谢谢楼主

xujinhua 发表于 2012-4-17 17:24:57

学习了..谢谢

xiaodao520 发表于 2012-4-23 10:17:05

如能标注弧长,就完美咯,期待高手解决。

haoryh 发表于 2012-12-6 16:08:14

为什么没有高手出手?

freeok 发表于 2012-12-7 22:03:36

为什么是贴着对象呢。。,有些还断开标的呢。

feelg 发表于 2013-12-30 23:58:42

都好的程序啊。能优化一下就完美了。

yamjqq 发表于 2015-4-27 13:36:43

自动标注程序标注显示位置的优化
增加了这几句,还是不能实现
(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
查看完整版本: 自动标注程序求改进标注显示的位置