qjfwade 发表于 2006-5-10 16:20:00

求助帮忙分析修改标注文字的LISP程序漏洞

<P>由于工程加工精度的要求要改变,本人有几百张横料加工图要做以下修改,把标注为<BR>107的改为106<BR>38的改为39<BR>40的改为39.5<BR>50的改为49.5<BR>48的改为47.5<BR>58的改为57<BR>由于修改量太大,图纸太多,这么多尺寸改起来也容易漏。故做了个程序。<BR>DEFUN c:md()<BR>&nbsp; (vl-load-com)<BR>&nbsp; <BR>(setq MODDIM (ssget "x" '((0 . "dimension"))))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>(setq count 0)<BR>(setq qty (sslength MODDIM))<BR>&nbsp; (repeat qty<BR>&nbsp; (setq ename (ssname MODDIM count))<BR>&nbsp; (setq objname (vlax-ename-&gt;vla-object ename))<BR>&nbsp;&nbsp;&nbsp; (setq txttest (vla-get-TextOverride objname))<BR>&nbsp;&nbsp;&nbsp; (setq meatest (vla-get-Measurement objname))<BR>&nbsp;&nbsp; (if (= meatest 107.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 106)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "107")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 106)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= meatest 38.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 39)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "38")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 39)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= meatest 40.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 39.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "40")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 39.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= meatest 50.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 49.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "50")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 49.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= meatest 48.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 47.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "48")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 47.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= meatest 58.0)<BR>&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 57)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (if (= txttest "58")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textoverride objname 57)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (setq count (+ count 1))</P>
<P>&nbsp;&nbsp;&nbsp; )</P>
<P>)&nbsp; <BR>但此程序在我的加工图纸中不能正确运行。出现有的尺寸改了,有的尺寸就是改不了。不知为什么,小弟特来此找高手求救。望快快解答,不胜感激。附加工图和程序。大家帮我。</P>

龙龙仔 发表于 2006-5-10 17:05:00


;;批量处理就交给你做
(defun C:MD (/ COUNT LST MEATEST MODDIM OBJ TXTTEST WW)
(vl-load-com)
(if (setq MODDIM (ssget "x" '((0 . "dimension"))))
    (progn
      (setq COUNT 0)
      (setq LST '(("107" . 106)
    ("38" . 39)
    ("40" . 39.5)
    ("50" . 49.5)
    ("48" . 47.5)
    ("58" . 57)
   )
      )
      (repeat (sslength MODDIM)
(setq OBJ (vlax-ename->vla-object (ssname MODDIM COUNT)))
(setq TXTTEST (vla-get-textoverride OBJ))
(setq MEATEST (rtos (vla-get-measurement OBJ) 2 0))
(if (or (setq WW (assoc MEATEST LST))
(setq WW (assoc TXTTEST LST))
   )
   (vla-put-textoverride OBJ (cdr WW))
)
(setq COUNT (+ COUNT 1))
      )
    )
)
(princ)
)

qjfwade 发表于 2006-5-10 17:51:00

<P>老师,太感谢你了,我不知道怎么表达我的谢谢,我本来是没有想到有这么快的。我太感谢论坛了,我决定捐款支持论坛,因为我感到论坛的速度有点太慢了。我的程序写的太小儿科了,向老师学习。</P>

oohen 发表于 2022-3-22 19:18:23

龙龙仔 发表于 2006-5-10 17:05


大哥能把标注文字直接改成EQ吗?EQ是平分的意思我们专业经常用
页: [1]
查看完整版本: 求助帮忙分析修改标注文字的LISP程序漏洞