乐筑天下

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

[编程交流] 圆弧半径

[复制链接]

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 08:37:52 | 显示全部楼层 |阅读模式
大家好,
 
有人知道是否已经有了一个代码,可以通过单击来获得圆弧起点和终点的半径。文字也应放在弧内(见(更新)图片)。
 
093758q66uj4z4sqfsn4hl.jpg
 
如果没有,有人能帮我吗?我在编程lisp方面很差,我非常需要它。
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:41:37 | 显示全部楼层
半径的角度是否始终为90.0度?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:47:20 | 显示全部楼层
试试这个。。。。
 
  1. (defun c:TesT (/ rad p spc acdoc dim1 dim2)
  2. (vl-load-com)
  3. ;; Tharwat 22. Nov. 2011 ;;
  4. (if (and (setq rad (getdist "\n Specify Arc radius :"))
  5.           (setq p (getpoint "\n Specify Center point for arc :"))
  6.      )
  7.    (progn
  8.      (setq spc (if (> (vla-get-activespace
  9.                         (setq acdoc (vla-get-activedocument
  10.                                       (vlax-get-acad-object)
  11.                                     )
  12.                         )
  13.                       )
  14.                       0
  15.                    )
  16.                  (vla-get-modelspace acdoc)
  17.                  (vla-get-paperspace acdoc)
  18.                )
  19.      )
  20.      (vla-StartUndoMark acdoc)
  21.      (vla-addarc spc (vlax-3d-point p) rad 1.11022e-016 1.5708)
  22.      (setq dim1 (vla-adddimradial
  23.                   spc
  24.                   (vlax-3d-point p)
  25.                   (vlax-3d-point (polar p 0. rad))
  26.                   0.
  27.                 )
  28.      )
  29.      (vla-put-textposition
  30.        dim1
  31.        (vlax-3d-point (polar p 0. (- rad (/ rad 10.))))
  32.      )
  33.      (setq dim2 (vla-adddimradial
  34.                   spc
  35.                   (vlax-3d-point p)
  36.                   (vlax-3d-point (polar p (/ pi 2.) rad))
  37.                   10.
  38.                 )
  39.      )
  40.      (vla-put-textposition
  41.        dim2
  42.        (vlax-3d-point (polar p (/ pi 2.) (- rad (/ rad 10.))))
  43.      )
  44.      (vla-put-rotation dim2 (* pi 1.5))
  45.      (vla-EndUndoMark acdoc)
  46.    )
  47.    (princ)
  48. )
  49. (princ)
  50. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 08:50:29 | 显示全部楼层
??
 
  1. (defun c:Test (/ *error* i ss e d o)
  2. (vl-load-com)
  3. (defun *error* (msg)
  4.    (and *AcadDoc* (vla-endundomark *AcadDoc*))
  5.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  6.      (princ (strcat "\nError: " msg))
  7.    )
  8. )
  9. (vla-startundomark
  10.    (cond (*AcadDoc*)
  11.          ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  12.    )
  13. )
  14. (if (setq i  -1
  15.            ss (ssget '((0 . "ARC")))
  16.      )
  17.    (while (setq e (ssname ss (setq i (1+ i))))
  18.      (setq d (entget e)
  19.            o (vla-objectidtoobject *AcadDoc* (vla-get-ownerid (vlax-ename->vla-object e)))
  20.      )
  21.      (foreach point (list (polar (cdr (assoc 10 d)) (cdr (assoc 50 d)) (cdr (assoc 40 d)))
  22.                           (polar (cdr (assoc 10 d)) (cdr (assoc 51 d)) (cdr (assoc 40 d)))
  23.                     )
  24.        (vlax-invoke o 'adddimradial (cdr (assoc 10 d)) point -1.)
  25.      )
  26.    )
  27. )
  28. (*error* nil)
  29. (princ)
  30. )
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 08:52:50 | 显示全部楼层
嗨,伙计们
 
Tharwat,谢谢你的输入,但我测试了你的代码,它运行良好,但有点复杂。
Alanjt编程的代码几乎正是我需要的,只有一个小问题。文字是否总是可以放置在弧内?如果您看到图片,autocad有时(我认为这取决于圆弧的放置方式)会将文本(在红色圆圈内)放在箭头的错误一侧。
 
093759tv5dla1dtzl544af.jpg
 
无论如何,thx al lot用于输入!
 
Grz公司
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:55:29 | 显示全部楼层
这是修改后的。。。。。
 
  1. (defun c:TesT (/ ss i sn vl spc acdoc p c l rad p1)
  2. (vl-load-com)
  3. ;; Tharwat 23. Nov. 2011 ;;
  4. (if (setq ss (ssget '((0 . "ARC"))))
  5.    (repeat (setq i (sslength ss))
  6.      (setq sn (ssname ss (setq i (1- i))))
  7.      (setq vl (vlax-ename->vla-object sn))
  8.      (setq spc (if (> (vla-get-activespace
  9.                         (setq acdoc (vla-get-activedocument
  10.                                       (vlax-get-acad-object)
  11.                                     )
  12.                         )
  13.                       )
  14.                       0
  15.                    )
  16.                  (vla-get-modelspace acdoc)
  17.                  (vla-get-paperspace acdoc)
  18.                )
  19.      )
  20.      (vla-StartUndoMark acdoC)
  21.      (vla-adddimradial
  22.        spc
  23.        (vlax-3d-point (setq p (vlax-get vl 'Startpoint)))
  24.        (vlax-3d-point
  25.          (polar p
  26.                 (angle p (setq c (vlax-get vl 'Center)))
  27.                 (setq l (/ (setq rad (vla-get-radius vl)) 5.))
  28.          )
  29.        )
  30.        0.
  31.      )
  32.      (vla-adddimradial
  33.        spc
  34.        (vlax-3d-point (setq p1 (vlax-get vl 'Endpoint)))
  35.        (vlax-3d-point (polar p1 (angle p1 c) l))
  36.        0.
  37.      )
  38.      (vla-EndUndoMark acdoc)
  39.    )
  40.    (princ)
  41. )
  42. (princ)
  43. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 08:59:23 | 显示全部楼层
在上图中,每个维度都在其对应的弧内。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:02:42 | 显示全部楼层
您可能需要查看vla startundomark和vla endundomark的位置。您正在为selectionset中的每个ename执行这两个命令。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:04:55 | 显示全部楼层
我会重新发布,以减轻我的一些疏忽。。。
 
  1. (defun c:Test (/ *error* i ss e d o p r)
  2. (vl-load-com)
  3. (defun *error* (msg)
  4.    (and *AcadDoc* (vla-endundomark *AcadDoc*))
  5.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  6.      (princ (strcat "\nError: " msg))
  7.    )
  8. )
  9. (vla-startundomark
  10.    (cond (*AcadDoc*)
  11.          ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  12.    )
  13. )
  14. (if (setq i  -1
  15.            ss (ssget '((0 . "ARC")))
  16.      )
  17.    (while (setq e (ssname ss (setq i (1+ i))))
  18.      (setq d (entget e)
  19.            o (vla-objectidtoobject *AcadDoc* (vla-get-ownerid (vlax-ename->vla-object e)))
  20.            p (cdr (assoc 10 d))
  21.            r (cdr (assoc 40 d))
  22.      )
  23.      (foreach point (list (polar p (cdr (assoc 50 d)) r) (polar p (cdr (assoc 51 d)) r))
  24.        (vlax-invoke o 'adddimradial p point -1.)
  25.      )
  26.    )
  27. )
  28. (*error* nil)
  29. (princ)
  30. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 09:07:11 | 显示全部楼层
 
是 啊如果用户想在操作之前返回,它会一个接一个地后退。
 
谢谢你的提示。
 
因此,这里是另一个修改的完全撤消标记到所有。
 
  1. (defun c:TesT (/ ss i sn vl spc acdoc p c l rad p1)
  2. (vl-load-com)
  3. ;; Tharwat 23. Nov. 2011 ;;
  4. (if (setq  acdoc (vla-get-activedocument
  5.                          (vlax-get-acad-object)
  6.                        )
  7.             ss
  8.            (ssget '((0 . "ARC")))
  9.      )
  10.    (progn
  11.      (vla-StartUndoMark acdoc)
  12.      (repeat (setq i (sslength ss))
  13.        (setq sn (ssname ss (setq i (1- i))))
  14.        (setq vl (vlax-ename->vla-object sn))
  15.        (setq spc (if (> (vla-get-activespace
  16.                           acdoc
  17.                         )
  18.                         0
  19.                      )
  20.                    (vla-get-modelspace acdoc)
  21.                    (vla-get-paperspace acdoc)
  22.                  )
  23.        )
  24.        (vla-adddimradial
  25.          spc
  26.          (vlax-3d-point (setq p (vlax-get vl 'Startpoint)))
  27.          (vlax-3d-point
  28.            (polar p
  29.                   (angle p (setq c (vlax-get vl 'Center)))
  30.                   (setq l (/ (setq rad (vla-get-radius vl)) 5.))
  31.            )
  32.          )
  33.          0.
  34.        )
  35.        (vla-adddimradial
  36.          spc
  37.          (vlax-3d-point (setq p1 (vlax-get vl 'Endpoint)))
  38.          (vlax-3d-point (polar p1 (angle p1 c) l))
  39.          0.
  40.        )
  41.      )
  42.      (vla-EndUndoMark acdoc)
  43.    )
  44.    (princ)
  45. )
  46. (princ)
  47. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 08:51 , Processed in 1.037436 second(s), 75 queries .

© 2020-2025 乐筑天下

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