乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 90|回复: 6

[编程交流] 带半径和长度的弧尺寸

[复制链接]

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 10:57:39 | 显示全部楼层 |阅读模式
嗨,我有个大问题。我在网上找到了一个lisproutine,它可以测量圆弧的半径和长度。太棒了我做了一些调整,比如在测量之前放置文本,但这就是我对autolisp的了解
现在我需要帮助。我真的希望文本自动与圆弧对齐,并放置在尺寸线的上方和中间。
如图所示,文字尺寸、箭头和尺寸界线过大。
有没有可能在日常生活中调整这个问题?例如,一次,在你开始测量弧之前?
谢谢
 
  1. (defun c:arcRL (/ cm fd ar1 ar2 ar3 ar4 ar5 tab oba )
  2. (vl-load-com)
  3. (setq cm (getvar "cmdecho"))
  4. (setvar"cmdecho" 0)
  5. (setq fd (getvar "fielddisplay"))
  6. (if (/= fd 0)(setvar"fielddisplay" 0))
  7.    (setq ar1 (entsel "\nSelect an Arc: "))
  8.    (setq ar2 (car ar1))
  9.    (setq tab (vlax-ename->vla-object ar2))
  10.    (setq oba (vla-get-objectid tab))
  11.    (setq ar3 (strcat "L=%<[url="file://\\AcObjProp"]\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  12.                      (rtos oba 2 0)
  13.                      ">%).ArcLength [url="file://\\f"]\\f[/url] "%ct8[1000]%pr0%lu2%ds44>%"))
  14.     (setq ar4 (strcat "R=%<[url="file://\\AcObjProp"]\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  15.                      (rtos oba 2 0)
  16.                      ">%).radius [url="file://\\f"]\\f[/url] "%pr2%lu2%ds44>%"))
  17.     (setq ar5 (strcat " "))
  18.    (command "dimangular" ar1 "t" ar5  pause)
  19.    (command "mtext" pause  pause ar4 ar3 )
  20. (setvar"fielddisplay" fd)
  21. (setvar "cmdecho" cm)  
  22. (princ)
  23. )

 
115740zrikrkhkkhyr1uvr.jpg
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 11:16:22 | 显示全部楼层
 
试试这个
 
  1. (defun c:arcRL (/ acsp ar1 ar2 ar3 ar4 arclen cm cpt dim ep fd
  2.    midp mtext mtxtpt oba rad rot sp tab txtpt)
  3. (vl-load-com)
  4. (setq acsp (vla-get-block
  5.        (vla-get-activelayout
  6.   (vla-get-activedocument
  7.     (vlax-get-acad-object)))))
  8. (setq cm (getvar "cmdecho"))
  9. (setvar"cmdecho" 0)
  10. (setq fd (getvar "fielddisplay"))
  11. (if (/= fd 0)(setvar"fielddisplay" 0))
  12.    (setq ar1 (entsel "\nSelect an Arc: "))
  13.    (setq ar2 (car ar1))
  14.    (setq tab (vlax-ename->vla-object ar2))
  15.    (setq sp (vlax-curve-getstartpoint tab)
  16.   ep (vlax-curve-getendpoint tab)
  17.   cpt (vlax-get tab 'Center)
  18.   rad (vlax-get tab 'Radius)
  19.   arclen (vlax-get tab 'ArcLength)
  20.   midp (mapcar (function (lambda (a b)(/ (+ a b) 2))) sp ep)
  21.   txtpt (trans (polar cpt (angle cpt midp)(+ rad (* 5 (getvar "DIMTXT"))))1 0)
  22.   mtxtpt (trans (polar txtpt (angle midp cpt) (* 2.5 (getvar "DIMTXT")))1 0)
  23.   rot (- (angle cpt midp)(/ pi 2))
  24.   )
  25.    (setq oba (vla-get-objectid tab))
  26.    (setq ar3 (strcat "L=%<[url="file://\\AcObjProp"]\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  27.                      (rtos oba 2 0)
  28.                      ">%).ArcLength [url="file://\\f"]\\f[/url] "%ct8[1000]%pr0%lu2%ds44>%"))
  29.     (setq ar4 (strcat "[url="file://\\PR=%<\\AcObjProp"]\\PR=%<\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  30.                      (rtos oba 2 0)
  31.                      ">%).Radius [url="file://\\f"]\\f[/url] "%pr2%lu2%ds44>%"))
  32.    (setq dim (vlax-invoke acsp 'AddDimAngular cpt sp ep txtpt))
  33.    (vla-put-textrotation dim rot)
  34.    (setq mtext (vlax-invoke acsp 'AddMText mtxtpt 0.0 (strcat ar3 ar4)))   
  35.    (vla-put-attachmentpoint mtext acAttachmentPointMiddleCenter)
  36.    (vlax-invoke mtext 'Rotate cpt rot)
  37.    (vlax-put mtext 'InsertionPoint  mtxtpt)
  38.    (vla-put-height mtext (getvar "DIMTXT"))
  39. (setvar"fielddisplay" fd)
  40. (setvar "cmdecho" cm)  
  41. (princ)
  42. )

 
~'J'~
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 11:27:24 | 显示全部楼层
嗨,菲索,
 
谢谢你的努力。单击功能和对齐效果完美。还有几点需要改变。
是否可以删除尺寸线之间的度数,文字是否可以放置在尺寸线上方?
在图片上,左边的图片是现在的样子,右边的图片是我想要的样子,如果可能的话。
 
grz W公司
 
115742tlzaazalb8h72hu6.jpg
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 11:29:49 | 显示全部楼层
试试这个
  1. (defun c:arcRL (/ acsp arcent arclen arcobj cm cpt oldht dimht dimobj ep fd id
  2.    lenstr midp mtext mtxtpt rad radstr rot sp sset txtpt)
  3. (vl-load-com)
  4. (setq acsp (vla-get-block
  5.        (vla-get-activelayout
  6.   (vla-get-activedocument
  7.     (vlax-get-acad-object))))
  8. )
  9. (setq cm (getvar "cmdecho"))
  10. (setvar"cmdecho" 0)
  11. (setq fd (getvar "fielddisplay"))
  12. (if (/= fd 0)(setvar "fielddisplay" 0))
  13. (if (= (setq oldht(getvar "dimtxt")) 0)
  14.    (progn
  15.      (initget 7)
  16.      (setq dimht (getreal "\nEnter font height for multiline text: "))
  17.      (setvar "dimtxt" dimht)
  18.      )
  19.    )
  20. (prompt "\n  >>  Select arcs  >>")
  21. (if (setq sset (ssget (list (cons 0 "ARC"))))
  22.    (while (setq arcent (ssname sset 0))
  23.    (setq arcobj (vlax-ename->vla-object arcent))
  24.    (setq sp (vlax-curve-getstartpoint arcobj)
  25.   ep (vlax-curve-getendpoint arcobj)
  26.   cpt (vlax-get arcobj 'Center)
  27.   rad (vlax-get arcobj 'Radius)
  28.   arclen (vlax-get arcobj 'ArcLength)
  29.   midp (vlax-curve-getclosestpointto arcobj
  30.   (vlax-curve-getpointatdist arcobj
  31.     (/ arclen 2.))
  32.   )
  33.   txtpt (trans (polar cpt (angle cpt midp)(+ rad (* 5 (getvar "DIMTXT")))) 1 0)
  34.   )
  35.    (setq id (vla-get-objectid arcobj))
  36.    (setq lenstr (strcat "L=%<[url="file://\\AcObjProp"]\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  37.                      (rtos id 2 0)
  38.                      ">%).ArcLength [url="file://\\f"]\\f[/url] "%ct8[1000]%pr0%lu2%ds44>%"))
  39.     (setq radstr (strcat "[url="file://\\PR=%<\\AcObjProp"]\\PR=%<\\AcObjProp[/url] Object(%<[url="file://\\_ObjId"]\\_ObjId[/url] "
  40.                      (rtos id 2 0)
  41.                      ">%).Radius [url="file://\\f"]\\f[/url] "%pr2%lu2%ds44>%"))
  42.    (setq dimobj (vlax-invoke acsp 'AddDimAngular cpt sp ep txtpt))
  43.    (setq mtxtpt (trans (polar midp (angle cpt midp) (* 7 (getvar "DIMTXT"))) 1 0)
  44.   rot (- (angle cpt midp)(/ pi 2)))
  45.    (setq mtext (vlax-invoke acsp 'AddMText mtxtpt 0.0 (strcat lenstr radstr)))   
  46.    (vla-put-attachmentpoint mtext acAttachmentPointMiddleCenter)
  47.    (vlax-invoke mtext 'Rotate cpt rot)
  48.    (vlax-put mtext 'InsertionPoint  mtxtpt)
  49.    (vla-put-height mtext (getvar "DIMTXT"))
  50.      (vla-put-textoverride dimobj " ")
  51.    (vla-update dimobj)
  52. (ssdel arcent sset)
  53.    )
  54.   )
  55. (setvar"fielddisplay" fd)
  56. (setvar "dimtxt" oldht)
  57. (setvar "cmdecho" cm)  
  58. (prin1)
  59. )

 
~'J'~
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 11:42:14 | 显示全部楼层
干得好,Fixo!这几乎是我需要的。但我在使用它时注意到的事情仍然很少。我在代码中看到,可以输入文本的高度,但当我运行脚本时,它不起作用。第二件事是尺寸线和文本的方向。它总是在同一个方向上,在某些情况下,它可能对图形的布局不利。你能像下图右侧的例子那样解决这个问题吗?
谢谢!!
 
115743pp44d3wix3a0rd3m.jpg
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 11:49:39 | 显示全部楼层
 
对不起,我不能,这超出了我的编程水平
 
~'J'~
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 12:07:11 | 显示全部楼层
 
好的,Fixo,没问题。谢谢你的好工作!
grz公司
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 12:05 , Processed in 0.855617 second(s), 69 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表