明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 449|回复: 6

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

[复制链接]
发表于 2022-12-1 16:57 | 显示全部楼层 |阅读模式
25明经币
本帖最后由 世人皆醉 于 2022-12-1 17:18 编辑
  1. (defun c:yfl1(/ d1 d2 d3 d4 d5 d6 d7 d8  e1 e2 e3 e4 pt0 pt1 pt2 pt3 p1 p2 );圆法兰不规则下料
  2.    (command "._undo" "_begin")
  3.   (setvar "cmdecho" 0) ;关闭普通命令提示信息
  4.   (setvar "osmode" 0)  ;关闭对象捕捉状态
  5.   
  6.   (setq d1(getreal "\n 法兰内径<151>:"));风管外径和法兰内径
  7.   (if (not d1) (setq d1 151))
  8.   (setq d2(getreal "\n 中心距<191>:"))
  9.   (if (not d2) (setq d2 191))
  10.   (setq d6(getreal "\n 法兰宽度<40>:"))
  11.   (if (not d6) (setq d6 40))
  12.   (setq d3 (+ d1 (* 2 d6)))
  13.   (setq d4(getreal "\n 开孔直径<10>:"))
  14.   (if (not d4) (setq d4 10))
  15. (setq d5(getreal "\n 开孔数量<8>:"));修改变量参考于此
  16.   (if (not d5) (setq d5 8.0))
  17.   (SETQ D8(/ (/ 360 D5) 2));分线角度
  18.   (setq d7(/ d3 2))
  19.   (SETQ pt0(getpoint "\n 插入点:"))
  20. ;上面为所需变量
  21.   (command "circle" pt0 "d" d1);内圆
  22.   (setq e4(entlast))
  23.     (setq p2 (polar pt0 (/ pi 4) (/ d1 2)));直径标注
  24.     (command "_dimdiameter" p2 "@-150,30")
  25.   (command "circle" pt0 "d" d2);中心圆
  26.   (setq e1(entlast))
  27.     (command "_dimdiameter" p2 "@50,70")
  28.   (command "circle" pt0 "d" d3);外圆
  29.   (command "_dimdiameter" p2 "@200,100")
  30.   (setq p1(list (car pt0) (+ (cadr pt0) d7)));外圆半径点   
  31.   (setq pt1(list (car pt0) (+ (cadr pt0) (/ d2 2))))
  32.   (setq pt2(list (car pt0) (+ (cadr pt0) (/ d1 2))))
  33.   (command "circle" pt1 "d" d4)
  34.   (setq e2(entlast))
  35.   (command "_.ARRAY" e2 "" "P" pt0 d5  "" "")
  36. (command "_dimdiameter" p2 "@-50,-50");修改直径标注参考于此
  37.   (command "erase" e1 "")
  38.   (command "line" pt2 p1 "")
  39.   (setq e3(entlast))
  40.   (command "rotate" e3 "" pt0 d8)
  41.   (if
  42.     (> d1 251)
  43.   (progn
  44.   (if
  45.     (<= d1 501)
  46.   (progn
  47.   (command "rotate" e3 "" pt0 "c" 120)
  48.   (command "rotate" e3 "" pt0 "c" 240)
  49.   )
  50.   (progn
  51.   (command "rotate" e3 "" pt0 "c" 90)
  52.   (command "rotate" e3 "" pt0 "c" 180)
  53.   (command "rotate" e3 "" pt0 "c" 270)
  54.   (command "rotate" e3 "" pt0 "c" 360)))
  55.   )
  56.     (command "erase" e3 "" ))
  57.   
  58.     (setvar "osmode" 16383)  ;打开对象捕捉状态
  59.   (princ) ;静默退出
  60.   (command "._undo" "_end")
  61.   )
上面是代码,目前能实现下面图的效果


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

请问该如何改呢
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

n 为整数 需要(itoa n)转成字符串 5楼又给出一套代码,运行起来应该会更快一些,并且标注随着操作进行,直观方便, 部分参数你可以自行调整一下,比如默认的尺寸数量! 顺便提示一下,绘图尽量用 enrmake 制作,尺寸数量等 可以用字典来记忆! 你这个属于参数画图,也可以考虑用DCL面板来画图
发表于 2022-12-1 16:57 | 显示全部楼层
本帖最后由 cq4920 于 2022-12-2 09:42 编辑
世人皆醉 发表于 2022-12-1 19:55
按照这种方式改完显示参数出错啊,还是不行啊,是那个环节有问题吗

n 为整数 需要(itoa n)转成字符串  5楼又给出一套代码,运行起来应该会更快一些,并且标注随着操作进行,直观方便,
部分参数你可以自行调整一下,比如默认的尺寸数量!

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2022-12-1 18:42 | 显示全部楼层
本帖最后由 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 | 显示全部楼层
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 d8  e1 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 | 显示全部楼层
cq4920 发表于 2022-12-1 18:42
(command "circle" pt1 "d" d4)
(setq ne (strcat d5 "*" ""))
(command "_dimdiameter" p2 "@-50,-50"); ...

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

使用道具 举报

发表于 2022-12-2 09:34 | 显示全部楼层
  1. (defun c:ttt(/ pt0 pt1 pt2 pt3 p1 p2 );圆法兰不规则下料
  2. &#160;&#160;(setvar "cmdecho" 0) ;关闭普通命令提示信息
  3. &#160;&#160;(setvar "osmode" 0)&#160;&#160;;关闭对象捕捉状态
  4. (setq pt0 (getpoint))
  5. (setq pt1 (getpoint PT0 " >>>指定外径:"))
  6. (setq R1 (distance pt0 pt1))       
  7. (entmake (list '(0 . "CIRCLE") (cons 10 pt0) (cons 40 R1)));外圆
  8. (command "_.dimdiameter" (list (entlast) PT1) "")
  9. (setq WH (getdist pt1 " >>>指定外环宽度:"))
  10. (setq R2 (- R1 WH))       
  11. (setq pt1B (polar PT1 (angle pt0 pt1) R1 ))       
  12. (entmake (list '(0 . "CIRCLE") (cons 10 pt0) (cons 40 R2)));内圆
  13. (command "_.dimdiameter" (list (entlast) PT1) "")
  14. (setq e2 (entlast))
  15. (setq pt2 (polar PT0 (* pi 0.5) (- R1 (/ WH 2))))
  16. (setq R3 (getdist " >>>指定打孔半径:"))
  17. (setq n (getint "指定打孔数量"))
  18. (setq pt2 (polar PT0 (* pi 0.5)  (- R1 (/ WH 2))))       
  19. (repeat n
  20. (setq pt2 (polar PT0 (+ (angle pt0 pt2) (/ (* pi 2) n)) (- R1 (/ WH 2))))
  21. (entmake (list '(0 . "CIRCLE") (cons 10 pt2) (cons 40 R3)));打孔
  22. )
  23. (command "_.dimdiameter" (list (entlast) PT1) "")
  24. (setq ne (strcat (itoa n) "*" "<>"))
  25. (setq dlitxt (entget (entlast)))
  26. (setq dlitxt  (subst (cons 1 ne) (assoc 1 dlitxt) dlitxt))
  27. (entmod dlitxt)       

  28. )
回复

使用道具 举报

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

好的,谢谢大佬,我后面会改成DCL绘图这只是测试一下,ENTMAKE理解起来可能没command调用命令简单,我后面也去学习试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-6 23:27 , Processed in 1.422151 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表