乐筑天下

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

[编程交流] 复制和修剪

[复制链接]

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 09:57:06 | 显示全部楼层 |阅读模式
大家好
以下代码用于复制受用户定义的圆约束的对象。
我的问题来了。请看图片。
蓝色的是复制自,而绿色的圆圈是用户定义的区域。现在我只想修剪蓝色的。不是绿线。我该怎么做
这感谢您抽出时间阅读本文。

                               
登录/注册后可看大图

 
  1. (defun c:tt(/)
  2. (setq pt (getpoint "\nget the center point."))
  3. (command "_.circle" pt)
  4. (princ (strcat "\ninput the radius of circle"))
  5. (command pause "")       
  6. (setq cir (entlast))
  7. (setq r (cdr (assoc 40 (entget cir))))
  8. (command "copy" "cp")
  9. (setq n 0)
  10. (repeat 180
  11.         (command (polar pt (/(* 2 n pi)180) r))
  12.         (setq n (+ n 1))       
  13. )
  14. (command "" "" pt (getpoint));ok ,finish the choose and copy
  15. ;now how to get copied objects. and trim the things outside the circle.
  16. ;here I just want to trim the copied objects.
  17. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:03:41 | 显示全部楼层
如果您不使用TRIM命令,有点旧,但这可能是一个起点:
 
  1. ;;;Intersection Point Of LINE & CIRCLE
  2. ;;;ARG -> LINE ename CIRCLE ename
  3. ;;;RETURNS 2D point list or nil
  4. (defun inters_line_circle (le ce / p10 p11 cen rad ppt pds osd ipt p2d)
  5. (setq p2d (lambda (p) (list (car p) (cadr p))))
  6. (and (= (type le) 'ENAME)
  7.       (= (type ce) 'ENAME)
  8.       (= "LINE" (cdr (assoc 0 (entget le))))
  9.       (= "CIRCLE" (cdr (assoc 0 (entget ce))))
  10.       (setq p10 (p2d (cdr (assoc 10 (entget le))))
  11.             p11 (p2d (cdr (assoc 11 (entget le))))
  12.             cen (p2d (cdr (assoc 10 (entget ce))))
  13.             rad (cdr (assoc 40 (entget ce))))
  14.       (cond ((equal p10 p11 1e-14))
  15.             ((equal rad (distance cen p10) 1e-11)
  16.              (setq ipt p10))
  17.             ((equal rad (distance cen p11) 1e-11)
  18.              (setq ipt p11))
  19.             ((setq ppt (inters p10 p11 cen
  20.                                (polar cen (+ (angle p10 p11) (* pi 0.5)) rad) nil))
  21.              (and (setq pds (distance cen ppt))
  22.                   (<= pds rad)
  23.                   (setq osd (sqrt (- (* rad rad) (* pds pds)))
  24.                         ipt (polar ppt (angle ppt p10) osd))))))
  25. ipt)
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:05:49 | 显示全部楼层
我不确定你的要求,但这可能会帮助你或接近你的形象。
 
  1. (defun c:tt(/)
  2. (defun *error* (msg)
  3.         (setvar "osmode" oldOsmode)
  4. )
  5. (setq oldOsmode (getvar "osmode"))
  6. (setvar "OSMODE" 0)
  7. (setq pt (getpoint "\nget the center point."))
  8. (command "_.circle" pt)
  9. (princ (strcat "\ninput the radius of circle"))
  10. (command pause "")                (setq cir (entlast))
  11. (setq r (cdr (assoc 40 (entget cir))))
  12. (command "copy" "cp")
  13. (setq n 0)
  14. (repeat 180
  15.         (command (polar pt (/ (* 2 n pi) 180) r))
  16.         (setq n (+ n 1))       
  17. )
  18. (command "" "" pt pt)
  19. (setvar "pickbox" 5)
  20. (command "_.trim" cir "" "f")
  21. (setq n 0)
  22. (repeat 180
  23.         (command (polar pt (* (/  (* 2 n) 180.0) pi) (* r 1.05)))
  24.           (setq n (1+ n))
  25. )
  26.         (command "" "")
  27. ;(command "" "" pt (setq ptt (getpoint pt)));ok ,finish the choose and copy
  28. ;now how to get copied objects. and trim the things outside the circle.
  29. ;here I just want to trim the copied objects.
  30. )

 
塔瓦特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:11:42 | 显示全部楼层
粗略的例子,但应该有助于您的修剪部分。
  1. (defun c:tt (/ pt rad cir all)
  2. (command "_.circle" (setq pt (getpoint "\n Specify the center point."))
  3.                             (setq rad (getdist pt "\n Get Circle Diameter ."))
  4.                  )
  5. (setq cir (entlast)
  6. )
  7. (princ "\n Select objects to be trimed")
  8.        (setq all (ssget "_x" '((0 . "SPLINE,LWPOLYLINE,POLYLINE,LINE,CIRCLE"))))
  9. (repeat (sslength all)
  10.   (command "_.trim" cir "" all "")
  11.   )
  12.       (princ)
  13. )
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:15:54 | 显示全部楼层
大家好
我终于完成了这个计划。
这是代码。
  1. (defun c:Test (/ lastEntity pt ent)
  2. (setq lastEntity (entlast))
  3. (if (or etrim (load "extrim.lsp" nil))
  4.    (if (setq pt (getpoint "\nSpecify center point for circle: "))
  5.      (progn
  6.        (command "_.circle" "_non" pt)
  7.        (while (eq 1 (logand 1 (getvar 'cmdactive))) (command PAUSE))
  8.        (or (eq lastEntity (setq ent (entlast)))
  9.            (etrim ent (polar (cdr (assoc 10 (entget ent))) 0. (1+ (cdr (assoc 40 (entget ent))))))
  10.        )
  11.      )
  12.    )
  13.    (alert "Express Tool "Extrim" does not exist!")
  14. )
  15. (princ)
  16. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:19:59 | 显示全部楼层
这里有一些解释。
1.画一个圆,并给出要放置放大物体的位置。
2.复制圆圈周围的对象,并将其放置在步骤1中设置的位置
3.把圆圈外的东西修剪一下,放大
但我还是搞不懂。当我移动圆时,它无法实时显示圆。这很奇怪。
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:26:50 | 显示全部楼层
我还注意到
我评论的这些代码无法工作
  1. (defun c:tt(/)
  2. (defun *error* (msg)
  3.         (setvar "osmode" oldOsmode)
  4. )
  5. (setq oldOsmode (getvar "osmode"))
  6. (setvar "OSMODE" 0)
  7. (setq pt (getpoint "\nget the center point."))
  8. (command "_.circle" pt)
  9. (princ (strcat "\ninput the radius of circle"))
  10. (command pause "")               
  11. (setq cir (entlast))
  12. (setq r (cdr (assoc 40 (entget cir))))
  13. ;(command "_.circle" pt 2*r "")
  14. (setq enlargeCircle (entlast))
  15. (command "_.move" enlargeCircle "" pt (setq ptt (getpoint pt)))
  16. (command "copy" "cp")
  17. (setq n 0)
  18. (repeat 180
  19.         (command (polar pt (/ (* 2 n pi) 180) r))
  20.         (setq n (+ n 1))       
  21. )
  22. (command "" "" pt ptt)
  23. (setvar "pickbox" 5)
  24. (command "_.trim" cir "" "f")
  25. (setq n 0)
  26. (repeat 180
  27.         (command (polar ptt (* (/  (* 2 n) 180.0) pi) (* r 1.01)))
  28.           (setq n (1+ n))
  29. )
  30.         (command "" "")
  31. (command "_.scale" "cp")
  32. (setq n 0)
  33. (repeat 180
  34.         (command (polar ptt (/ (* 2 n pi) 180) r))
  35.         (setq n (1+ n))
  36. )
  37. (command "" "" ptt 2 "")
  38.         (command "redarw")
  39. (princ)
  40. ;(command "" "" pt (setq ptt (getpoint pt)));ok ,finish the choose and copy
  41. ;now how to get copied objects. and trim the things outside the circle.
  42. ;here I just want to trim the copied objects.
  43. )

 
它不能像我预期的那样实时绘制圆。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:27:18 | 显示全部楼层
我已经完成了详细视图代码。它是用来做工作的图片显示。希望s.b.能改善这一点。tt。lsp
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:33:14 | 显示全部楼层
为什么不以不同的比例创建另一个视口?无需创建多个对象。
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:38:19 | 显示全部楼层
我只想放大蓝色圆圈内的物体@alanjt。以你上述的方式。这能做到吗?你能给我看些东西吗。
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 06:17 , Processed in 1.221444 second(s), 73 queries .

© 2020-2025 乐筑天下

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