世人皆醉 发表于 2022-12-1 16:57:46

如何实现直径标注前面增加变量数字

本帖最后由 世人皆醉 于 2022-12-1 17:18 编辑

(defun c:yfl1(/ d1 d2 d3 d4 d5 d6 d7 d8e1 e2 e3 e4 pt0 pt1 pt2 pt3 p1 p2 );圆法兰不规则下料
   (command "._undo" "_begin")
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setvar "osmode" 0);关闭对象捕捉状态

(setq d1(getreal "\n 法兰内径<151>:"));风管外径和法兰内径
(if (not d1) (setq d1 151))
(setq d2(getreal "\n 中心距<191>:"))
(if (not d2) (setq d2 191))
(setq d6(getreal "\n 法兰宽度<40>:"))
(if (not d6) (setq d6 40))
(setq d3 (+ d1 (* 2 d6)))
(setq d4(getreal "\n 开孔直径<10>:"))
(if (not d4) (setq d4 10))
(setq d5(getreal "\n 开孔数量<8>:"));修改变量参考于此
(if (not d5) (setq d5 8.0))
(SETQ D8(/ (/ 360 D5) 2));分线角度
(setq d7(/ d3 2))
(SETQ pt0(getpoint "\n 插入点:"))
;上面为所需变量
(command "circle" pt0 "d" d1);内圆
(setq e4(entlast))
    (setq p2 (polar pt0 (/ pi 4) (/ d1 2)));直径标注
    (command "_dimdiameter" p2 "@-150,30")
(command "circle" pt0 "d" d2);中心圆
(setq e1(entlast))
    (command "_dimdiameter" p2 "@50,70")
(command "circle" pt0 "d" d3);外圆
(command "_dimdiameter" p2 "@200,100")
(setq p1(list (car pt0) (+ (cadr pt0) d7)));外圆半径点   
(setq pt1(list (car pt0) (+ (cadr pt0) (/ d2 2))))
(setq pt2(list (car pt0) (+ (cadr pt0) (/ d1 2))))
(command "circle" pt1 "d" d4)
(setq e2(entlast))
(command "_.ARRAY" e2 "" "P" pt0 d5"" "")
(command "_dimdiameter" p2 "@-50,-50");修改直径标注参考于此
(command "erase" e1 "")
(command "line" pt2 p1 "")
(setq e3(entlast))
(command "rotate" e3 "" pt0 d8)
(if
    (> d1 251)
(progn
(if
    (<= d1 501)
(progn
(command "rotate" e3 "" pt0 "c" 120)
(command "rotate" e3 "" pt0 "c" 240)
)
(progn
(command "rotate" e3 "" pt0 "c" 90)
(command "rotate" e3 "" pt0 "c" 180)
(command "rotate" e3 "" pt0 "c" 270)
(command "rotate" e3 "" pt0 "c" 360)))
)
    (command "erase" e3 "" ))

    (setvar "osmode" 16383);打开对象捕捉状态
(princ) ;静默退出
(command "._undo" "_end")
)上面是代码,目前能实现下面图的效果


我想让这个直径10mm的孔显示跟随d5这个变量,想要成下面图的效果

请问该如何改呢

cq4920 发表于 2022-12-1 16:57:47

本帖最后由 cq4920 于 2022-12-2 09:42 编辑

世人皆醉 发表于 2022-12-1 19:55
按照这种方式改完显示参数出错啊,还是不行啊,是那个环节有问题吗
n 为整数 需要(itoa n)转成字符串5楼又给出一套代码,运行起来应该会更快一些,并且标注随着操作进行,直观方便,
部分参数你可以自行调整一下,比如默认的尺寸数量!

顺便提示一下,绘图尽量用 enrmake 制作,尺寸数量等 可以用字典来记忆!
你这个属于参数画图,也可以考虑用DCL面板来画图

cq4920 发表于 2022-12-1 18:42:14

本帖最后由 cq4920 于 2022-12-1 18:44 编辑

(command "circle" pt1 "d" d4)
(setq ne (strcat d5 "*" "<>"))
(command "_dimdiameter" p2 "@-50,-50");在d5标注之后,对标注进行修改
(setq dlitxt (entget (entlast)))
(setq dlitxt(subst (cons 1 ne) (assoc 1 dlitxt) dlitxt))
(entmod dlitxt);

世人皆醉 发表于 2022-12-1 19:54:38

cq4920 发表于 2022-12-1 18:42
(command "circle" pt1 "d" d4)
(setq ne (strcat d5 "*" ""))
(command "_dimdiameter" p2 "@-50,-50"); ...

(defun c:yfl1(/ d1 d2 d3 d4 d5 d6 d7 d8e1 e2 e3 e4 pt0 pt1 pt2 pt3 p1 p2 );圆法兰不规则下料
   (command "._undo" "_begin")
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setvar "osmode" 0);关闭对象捕捉状态

(setq d1(getreal "\n 法兰内径<151>:"));风管外径和法兰内径
(if (not d1) (setq d1 151))
(setq d2(getreal "\n 中心距<191>:"))
(if (not d2) (setq d2 191))
(setq d6(getreal "\n 法兰宽度<40>:"))
(if (not d6) (setq d6 40))
(setq d3 (+ d1 (* 2 d6)))
(setq d4(getreal "\n 开孔直径<10>:"))
(if (not d4) (setq d4 10))
(setq d5(getreal "\n 开孔数量<8>:"));修改变量参考于此
(if (not d5) (setq d5 8.0))
(SETQ D8(/ (/ 360 D5) 2));分线角度
(setq d7(/ d3 2))
(SETQ pt0(getpoint "\n 插入点:"))
;上面为所需变量
(command "circle" pt0 "d" d1);内圆
(setq e4(entlast))
    (setq p2 (polar pt0 (/ pi 4) (/ d1 2)));直径标注
    (command "_dimdiameter" p2 "@-150,30")
(command "circle" pt0 "d" d2);中心圆
(setq e1(entlast))
    (command "_dimdiameter" p2 "@50,70")
(command "circle" pt0 "d" d3);外圆
(command "_dimdiameter" p2 "@200,100")
(setq p1(list (car pt0) (+ (cadr pt0) d7)));外圆半径点   
(setq pt1(list (car pt0) (+ (cadr pt0) (/ d2 2))))
(setq pt2(list (car pt0) (+ (cadr pt0) (/ d1 2))))
(command "circle" pt1 "d" d4)
(setq e2(entlast))
(setq ne (strcat d5 "*" "<>"))
(command "_dimdiameter" p2 "@-50,-50");在d5标注之后,对标注进行修改
(setq dlitxt (entget (entlast)))
(setq dlitxt(subst (cons 1 ne) (assoc 1 dlitxt) dlitxt))
(entmod dlitxt);



(command "_.ARRAY" e2 "" "P" pt0 d5"" "")
(command "_dimdiameter" p2 "@-50,-50");修改直径标注参考于此
(command "erase" e1 "")
(command "line" pt2 p1 "")
(setq e3(entlast))
(command "rotate" e3 "" pt0 d8)
(if
    (> d1 251)
(progn
(if
    (<= d1 501)
(progn
(command "rotate" e3 "" pt0 "c" 120)
(command "rotate" e3 "" pt0 "c" 240)
)
(progn
(command "rotate" e3 "" pt0 "c" 90)
(command "rotate" e3 "" pt0 "c" 180)
(command "rotate" e3 "" pt0 "c" 270)
(command "rotate" e3 "" pt0 "c" 360)))
)
    (command "erase" e3 "" ))

    (setvar "osmode" 16383);打开对象捕捉状态
(princ) ;静默退出
(command "._undo" "_end")
)

世人皆醉 发表于 2022-12-1 19:55:51

cq4920 发表于 2022-12-1 18:42
(command "circle" pt1 "d" d4)
(setq ne (strcat d5 "*" ""))
(command "_dimdiameter" p2 "@-50,-50"); ...

按照这种方式改完显示参数出错啊,还是不行啊,是那个环节有问题吗

cq4920 发表于 2022-12-2 09:34:54

(defun c:ttt(/ pt0 pt1 pt2 pt3 p1 p2 );圆法兰不规则下料
  (setvar "cmdecho" 0) ;关闭普通命令提示信息
  (setvar "osmode" 0)  ;关闭对象捕捉状态
(setq pt0 (getpoint))
(setq pt1 (getpoint PT0 " >>>指定外径:"))
(setq R1 (distance pt0 pt1))       
(entmake (list '(0 . "CIRCLE") (cons 10 pt0) (cons 40 R1)));外圆
(command "_.dimdiameter" (list (entlast) PT1) "")
(setq WH (getdist pt1 " >>>指定外环宽度:"))
(setq R2 (- R1 WH))       
(setq pt1B (polar PT1 (angle pt0 pt1) R1 ))       
(entmake (list '(0 . "CIRCLE") (cons 10 pt0) (cons 40 R2)));内圆
(command "_.dimdiameter" (list (entlast) PT1) "")
(setq e2 (entlast))
(setq pt2 (polar PT0 (* pi 0.5) (- R1 (/ WH 2))))
(setq R3 (getdist " >>>指定打孔半径:"))
(setq n (getint "指定打孔数量"))
(setq pt2 (polar PT0 (* pi 0.5)(- R1 (/ WH 2))))       
(repeat n
(setq pt2 (polar PT0 (+ (angle pt0 pt2) (/ (* pi 2) n)) (- R1 (/ WH 2))))
(entmake (list '(0 . "CIRCLE") (cons 10 pt2) (cons 40 R3)));打孔
)
(command "_.dimdiameter" (list (entlast) PT1) "")
(setq ne (strcat (itoa n) "*" "<>"))
(setq dlitxt (entget (entlast)))
(setq dlitxt(subst (cons 1 ne) (assoc 1 dlitxt) dlitxt))
(entmod dlitxt)       

)

世人皆醉 发表于 2022-12-2 13:13:28

cq4920 发表于 2022-12-2 09:36
n 为整数 需要(itoa n)转成字符串5楼又给出一套代码,运行起来应该会更快一些,并且标注随着操作进行 ...

好的,谢谢大佬,我后面会改成DCL绘图这只是测试一下,ENTMAKE理解起来可能没command调用命令简单,我后面也去学习试试
页: [1]
查看完整版本: 如何实现直径标注前面增加变量数字