[求助] 哪们大大帮忙写个尺寸检查程序
<p>有时由于各种原因将标注好的尺寸手动修改或打散了 </p><p>等以后修改图面时不知哪些修改过了 如果使用拉伸等命令尺寸不会跟着变,很容易出错</p><p>能不能写个检查程序 框一个范围就检查这里面有哪些尺寸是修改过的,然后高亮显示</p><p>谢谢</p> <p></p><p>我这有一参考程序,但我只想知道哪些是改过的 谢谢</p><p></p><p>;切断尺寸关联,可在尺寸放缩后不改变尺寸数值,望需要着共同享用,cdim1为将关联尺寸取消,cdim2为将关联还原。<br/>;将尺寸值改为固定数值<br/>(DEFUN C:CHDIM1 ()<br/> (princ "\nselect object:")<br/> (setq s (ssget))<br/> (setq n (sslength s))<br/> (setq k 0 )<br/> (while (< k n) <br/> (setq name (ssname s k))<br/> (setq a (entget name))<br/> (setq b (assoc '0 a))<br/> (setq b (cdr b))<br/> (if (= b "DIMENSION")(progn<br/> (setq h1 (assoc '42 a))<br/> (setq h1 (cdr h1))<br/> (setq h1 (rtos h1 2 0))<br/> (setq h2 (assoc '1 a))<br/> (setq h1 (cons 1 H1))<br/> (setq a (subst h1 h2 a))<br/> (entmod a)<br/> ))<br/> (setq k (+ k 1))<br/> )<br/>)</p><p><br/>;将尺寸值改为可变数值<br/>(DEFUN C:CHDIM2 ()<br/> (princ "\nselect object:")<br/> (setq s (ssget))<br/> (setq n (sslength s))<br/> (setq k 0 )<br/> (while (< k n) <br/> (setq name (ssname s k))<br/> (setq a (entget name))<br/> (setq b (assoc '0 a))<br/> (setq b (cdr b))<br/> (if (= b "DIMENSION")(progn<br/> (setq h2 (assoc '1 a))<br/> (setq h1 (cons 1 ""))<br/> (setq a (subst h1 h2 a))<br/> (entmod a)<br/> ))<br/> (setq k (+ k 1))<br/> )<br/>)<br/></p> 参考程序(defun scale_db (/ lfac ans ceco) ;判斷尺寸標注所用數值是否為實測距離,並做出相應處理.sssssssssssssssssssssssssss
(setvar "cmdecho" 0)
(setq lfac (getvar "dimlfac")
ceco (getvar "cecolor")
ans""
) ;end setq
(if (/= lfac 1)
(progn
(while (AND (/= ans "N") (/= ans "Y"))
(setq
ans (strcase (getstring (strcat "\n此時標注之尺寸為實距的"
(rtos lfac)
"倍,是否繼續標注?(Y/N)"
) ;_ end of strcat
) ;_ end of getstring
) ;_ end of strcase
) ;end setq
(if (= ans "N")
(progn
(setvar "dimlfac" 1)
;;; (command "color" "bylayer")
) ;end progn then
) ;end if(= ans "N")
;;; (if (= ans "Y")
;;; (command "color" "cyan")
;;; ) ;end if (= ans "Y")
) ;END while
) ;end progn then
;else
;;; (progn
;;; (command "color" "bylayer")
;;; ) ;end progn else
) ;end if (/= lfac 1.0)
) ;end defun scale ;;如尺寸值與文本一致,則文本不變色,否則文本被修改但顏色<br/>;;變如紅色,這樣用戶對這個功能會更好理解也容易維護。 <br/>;;BY LUCAS 2004.9<br/>(defun C:TT (/ SS N VOBJ)<br/> (setq SS (ssget "X" '((0 . "DIMENSION")))<br/> N 0<br/> )<br/> (repeat (sslength SS)<br/> (setq VOBJ (vlax-ename->vla-object (ssname SS N)))<br/> (if (and VOBJ<br/> (vlax-read-enabled-p VOBJ)<br/> (not (wcmatch (vla-get-textoverride VOBJ) "*<>*,"))<br/> (vlax-write-enabled-p VOBJ)<br/> )<br/> (vla-put-textcolor VOBJ 1)<br/> )<br/> (setq N (1+ N))<br/> )<br/> (princ)<br/>) 版主最后那程序最好是可以选择范围检查 版主 我把ssget "X" \'((0 . "DIMENSION"里的\去掉 结果运行到(ssname SS N)这地方又出问题了
tt ; 错误: no function definition: VLAX-ENAME->VLA-OBJECT
是不我这CAD和你们有什么不同啊都要把\去掉
请版主再看看 1、不知道为什么会有\?我这里都没有。<br/>2、函数找不到,程序前头加上一行(vl-load-com)试试。 OK 问题解决 我自己试了好久就是搞不定
真厉害谢谢 版主这个程序非常好用 能不能再编个检查尺寸标注放大倍数的 就是有些尺寸标注时已经改了比例因子的用另一种颜色表示
谢谢
页:
[1]