乐筑天下

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

[编程交流] 用“或”填充一个区域

[复制链接]

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 16:18:44 | 显示全部楼层
拜托李,
 
你能帮我查一下这个密码吗?。。。
 
提前谢谢!。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:20:42 | 显示全部楼层
CafeJr,试试这个,如果有什么问题就回答。。。现在,它应该适用于2个相反的开放二维曲线边界。。。
 
  1. (defun c:snakefill-2curveboundaries (/ *adoc* odd even osm pea ch r lpl upl ip dir lplo uplo spc xl1 c1 xl2 c2 cl ss)
  2. (defun odd (lst)
  3.    (if lst (cons (car lst) (odd (cddr lst))))
  4. )
  5. (defun even (lst)
  6.    (if lst (cons (cadr lst) (even (cddr lst))))
  7. )
  8. (vl-load-com)
  9. (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  10. (setq osm (getvar 'osmode))
  11. (setq pea (getvar 'peditaccept))
  12. (setvar 'osmode 0)
  13. (command "_.ucs" "w")
  14. (initget 1 "Left-Right Up-Down")
  15. (setq ch (getkword "\nChoose option (Left-Right / Up-Down) curve boundaries: "))
  16. (initget 7)
  17. (setq r (getdist "\nSpecify radius of snake turn: "))
  18. (if (eq ch "Up-Down")
  19.    (progn
  20.      (setq lpl (car (entsel "\nPick lower curve boundary...")))
  21.      (setq upl (car (entsel "\nPick upper curve boundary...")))
  22.      (setq ip (getpoint "\nPick start point ("left" - Up-Down or "bottom" - Left-Right): "))
  23.      (initget 1 "Up Down")
  24.      (setq dir (getkword "\nChoose start direction (Up / Down): "))
  25.      (if (eq dir "Up")
  26.        (progn
  27.          (command "_.offset" r lpl ip "")
  28.          (setq lplo (entlast))
  29.          (command "_.offset" r upl ip "")
  30.          (setq uplo (entlast))
  31.          (setq spc (vla-ObjectIdToObject *adoc* (vla-get-OwnerId (vlax-ename->vla-object lpl))))
  32.          (setq c1 T c2 T k -3.0)
  33.          (while (and c1 c2)
  34.            (setq xl1 (vlax-invoke spc 'addxline (polar ip 0.0 (* r (setq k (+ k 4.0)))) (polar (polar ip 0.0 (* r k)) (* pi 0.5) 1.0)))
  35.            (setq c1 (vlax-invoke xl1 'intersectwith (vlax-ename->vla-object uplo) acextendnone))
  36.            (vla-delete xl1)
  37.            (setq xl2 (vlax-invoke spc 'addxline (polar ip 0.0 (* r (+ k 2.0))) (polar (polar ip 0.0 (* r (+ k 2.0))) (* pi 0.5) 1.0)))
  38.            (setq c2 (vlax-invoke xl2 'intersectwith (vlax-ename->vla-object lplo) acextendnone))
  39.            (vla-delete xl2)
  40.            (if c1 (setq cl (cons c1 cl)))
  41.            (if (and c1 c2) (setq cl (cons c2 cl)))
  42.          )
  43.          (setq cl (reverse cl))
  44.          (setq ss (ssadd))
  45.          (foreach c (vl-remove nil (odd cl))
  46.            (command "_.arc" (polar c pi r) (polar c (* pi 0.5) r) (polar c 0.0 r))
  47.            (ssadd (entlast) ss)
  48.          )
  49.          (foreach c (vl-remove nil (even cl))
  50.            (command "_.arc" (polar c pi r) (polar c (* pi -0.5) r) (polar c 0.0 r))
  51.            (ssadd (entlast) ss)
  52.          )
  53.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p 0.0 r)) (vl-remove nil (odd cl))) (mapcar '(lambda (p) (polar p pi r)) (vl-remove nil (even cl))))
  54.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p 0.0 r)) (vl-remove nil (even cl))) (mapcar '(lambda (p) (polar p pi r)) (vl-remove nil (cdr (odd cl)))))
  55.          (command "_.line" ip (polar (car cl) pi r) "")
  56.          (ssadd (entlast) ss)
  57.        )
  58.        (progn
  59.          (command "_.offset" r lpl ip "")
  60.          (setq lplo (entlast))
  61.          (command "_.offset" r upl ip "")
  62.          (setq uplo (entlast))
  63.          (setq spc (vla-ObjectIdToObject *adoc* (vla-get-OwnerId (vlax-ename->vla-object lpl))))
  64.          (setq c1 T c2 T k -3.0)
  65.          (while (and c1 c2)
  66.            (setq xl1 (vlax-invoke spc 'addxline (polar ip 0.0 (* r (setq k (+ k 4.0)))) (polar (polar ip 0.0 (* r k)) (* pi 0.5) 1.0)))
  67.            (setq c1 (vlax-invoke xl1 'intersectwith (vlax-ename->vla-object lplo) acextendnone))
  68.            (vla-delete xl1)
  69.            (setq xl2 (vlax-invoke spc 'addxline (polar ip 0.0 (* r (+ k 2.0))) (polar (polar ip 0.0 (* r (+ k 2.0))) (* pi 0.5) 1.0)))
  70.            (setq c2 (vlax-invoke xl2 'intersectwith (vlax-ename->vla-object uplo) acextendnone))
  71.            (vla-delete xl2)
  72.            (if c1 (setq cl (cons c1 cl)))
  73.            (if (and c1 c2) (setq cl (cons c2 cl)))
  74.          )
  75.          (setq cl (reverse cl))
  76.          (setq ss (ssadd))
  77.          (foreach c (vl-remove nil (odd cl))
  78.            (command "_.arc" (polar c pi r) (polar c (* pi -0.5) r) (polar c 0.0 r))
  79.            (ssadd (entlast) ss)
  80.          )
  81.          (foreach c (vl-remove nil (even cl))
  82.            (command "_.arc" (polar c pi r) (polar c (* pi 0.5) r) (polar c 0.0 r))
  83.            (ssadd (entlast) ss)
  84.          )
  85.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p 0.0 r)) (vl-remove nil (odd cl))) (mapcar '(lambda (p) (polar p pi r)) (vl-remove nil (even cl))))
  86.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p 0.0 r)) (vl-remove nil (even cl))) (mapcar '(lambda (p) (polar p pi r)) (vl-remove nil (cdr (odd cl)))))
  87.          (command "_.line" ip (polar (car cl) pi r) "")
  88.          (ssadd (entlast) ss)
  89.        )
  90.      )
  91.    )
  92.    (progn
  93.      (setq lpl (car (entsel "\nPick right curve boundary...")))
  94.      (setq upl (car (entsel "\nPick left curve boundary...")))
  95.      (setq ip (getpoint "\nPick start point ("left" - Up-Down or "bottom" - Left-Right): "))
  96.      (initget 1 "Left Right")
  97.      (setq dir (getkword "\nChoose start direction (Left / Right): "))
  98.      (if (eq dir "Left")
  99.        (progn
  100.          (command "_.offset" r lpl ip "")
  101.          (setq lplo (entlast))
  102.          (command "_.offset" r upl ip "")
  103.          (setq uplo (entlast))
  104.          (setq spc (vla-ObjectIdToObject *adoc* (vla-get-OwnerId (vlax-ename->vla-object lpl))))
  105.          (setq c1 T c2 T k -3.0)
  106.          (while (and c1 c2)
  107.            (setq xl1 (vlax-invoke spc 'addxline (polar ip (* pi 0.5) (* r (setq k (+ k 4.0)))) (polar (polar ip (* pi 0.5) (* r k)) 0.0 1.0)))
  108.            (setq c1 (vlax-invoke xl1 'intersectwith (vlax-ename->vla-object uplo) acextendnone))
  109.            (vla-delete xl1)
  110.            (setq xl2 (vlax-invoke spc 'addxline (polar ip (* pi 0.5) (* r (+ k 2.0))) (polar (polar ip (* pi 0.5) (* r (+ k 2.0))) 0.0 1.0)))
  111.            (setq c2 (vlax-invoke xl2 'intersectwith (vlax-ename->vla-object lplo) acextendnone))
  112.            (vla-delete xl2)
  113.            (if c1 (setq cl (cons c1 cl)))
  114.            (if (and c1 c2) (setq cl (cons c2 cl)))
  115.          )
  116.          (setq cl (reverse cl))
  117.          (setq ss (ssadd))
  118.          (foreach c (vl-remove nil (odd cl))
  119.            (command "_.arc" (polar c (* pi -0.5) r) (polar c pi r) (polar c (* pi 0.5) r))
  120.            (ssadd (entlast) ss)
  121.          )
  122.          (foreach c (vl-remove nil (even cl))
  123.            (command "_.arc" (polar c (* pi -0.5) r) (polar c 0.0 r) (polar c (* pi 0.5) r))
  124.            (ssadd (entlast) ss)
  125.          )
  126.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p (* pi 0.5) r)) (vl-remove nil (odd cl))) (mapcar '(lambda (p) (polar p (* pi -0.5) r)) (vl-remove nil (even cl))))
  127.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p (* pi 0.5) r)) (vl-remove nil (even cl))) (mapcar '(lambda (p) (polar p (* pi -0.5) r)) (vl-remove nil (cdr (odd cl)))))
  128.          (command "_.line" ip (polar (car cl) (* pi -0.5) r) "")
  129.          (ssadd (entlast) ss)
  130.        )
  131.        (progn
  132.          (command "_.offset" r lpl ip "")
  133.          (setq lplo (entlast))
  134.          (command "_.offset" r upl ip "")
  135.          (setq uplo (entlast))
  136.          (setq spc (vla-ObjectIdToObject *adoc* (vla-get-OwnerId (vlax-ename->vla-object lpl))))
  137.          (setq c1 T c2 T k -3.0)
  138.          (while (and c1 c2)
  139.            (setq xl1 (vlax-invoke spc 'addxline (polar ip (* pi 0.5) (* r (setq k (+ k 4.0)))) (polar (polar ip (* pi 0.5) (* r k)) 0.0 1.0)))
  140.            (setq c1 (vlax-invoke xl1 'intersectwith (vlax-ename->vla-object lplo) acextendnone))
  141.            (vla-delete xl1)
  142.            (setq xl2 (vlax-invoke spc 'addxline (polar ip (* pi 0.5) (* r (+ k 2.0))) (polar (polar ip (* pi 0.5) (* r (+ k 2.0))) 0.0 1.0)))
  143.            (setq c2 (vlax-invoke xl2 'intersectwith (vlax-ename->vla-object uplo) acextendnone))
  144.            (vla-delete xl2)
  145.            (if c1 (setq cl (cons c1 cl)))
  146.            (if (and c1 c2) (setq cl (cons c2 cl)))
  147.          )
  148.          (setq cl (reverse cl))
  149.          (setq ss (ssadd))
  150.          (foreach c (vl-remove nil (odd cl))
  151.            (command "_.arc" (polar c (* pi -0.5) r) (polar c 0.0 r) (polar c (* pi 0.5) r))
  152.            (ssadd (entlast) ss)
  153.          )
  154.          (foreach c (vl-remove nil (even cl))
  155.            (command "_.arc" (polar c (* pi -0.5) r) (polar c pi r) (polar c (* pi 0.5) r))
  156.            (ssadd (entlast) ss)
  157.          )
  158.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p (* pi 0.5) r)) (vl-remove nil (odd cl))) (mapcar '(lambda (p) (polar p (* pi -0.5) r)) (vl-remove nil (even cl))))
  159.          (mapcar '(lambda (p1 p2) (progn (command "_.line" p1 p2 "") (ssadd (entlast) ss))) (mapcar '(lambda (p) (polar p (* pi 0.5) r)) (vl-remove nil (even cl))) (mapcar '(lambda (p) (polar p (* pi -0.5) r)) (vl-remove nil (cdr (odd cl)))))
  160.          (command "_.line" ip (polar (car cl) (* pi -0.5) r) "")
  161.          (ssadd (entlast) ss)
  162.        )
  163.      )
  164.    )
  165. )
  166. (setvar 'peditaccept 1)
  167. (command "_.pedit" "m" ss "" "j" "" "")
  168. (entdel lplo)
  169. (entdel uplo)
  170. (setvar 'osmode osm)
  171. (setvar 'peditaccept pea)
  172. (command "_.ucs" "p")
  173. (princ)
  174. )
  175. (defun c:sf-2c nil (c:snakefill-2curveboundaries))
  176. (prompt "\n...Run with 'SF-2C'...")
  177. (princ)
M.R。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:26:12 | 显示全部楼层
Marko_ribar非常非常好新的,可以解决
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:28:49 | 显示全部楼层
谢谢你,比格尔。。。我将附上更完整的版本-它确定拾取点的位置,并根据该位置继续将蛇绘制到曲线之间区域的另一侧。。。
 
M、 R。
蛇形填充-2曲线边界。lsp
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 16:30:34 | 显示全部楼层
 
哇。。。非常感谢Marko_ribar!!!。。。这正是我需要的!!!。。。我很感激!!!。。。它的工作,因为我需要好!。。。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 16:33:27 | 显示全部楼层
 
Marko_ribar大师,
 
我不知道这是否是另一个线程,但是,我想这段代码将是一个“esay”代码,我真的很震惊!这是一个很大的代码,不是那么容易!!!。。。那么,对于这个代码,遵循边界平面图的一条参考线,如图所示,有可能吗?
 
非常感谢!!!。。。我真的很感激!!!。。。
 
164550b4eoiciutc3bw2tt.jpg
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:37:11 | 显示全部楼层
如果第三个边界是一个弧,我认为这是可能的。。。但弯曲必须在第一和第二侧边界之间-像圆这样的东西是不可能的。。。我认为这是一个在垂直向上/向下方向上,而不是偏移第三个边界的多个副本的示例。。。正如我所说的,如果它比它可能的弧。。。原理与上面发布的代码相同。。。只需在水平/垂直方向上与圆弧相交,而不需要连接线。。。我认为你有很多信息可以自己构建这个。。。如果你愿意,你可以向我们展示你的结果。。。我们很高兴看到它能起作用。。。请记住,在搜索边弧的中心时,我会使用“intersectwith method with option acextendthisentity(弧是第一个VLA-OBJECT)。。。
 
M、 R。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 16:40:38 | 显示全部楼层
 
事实上,边界线是一个区域的普林斯极限,我必须填充它,就像下一张图片。。。我试着按照一些规则用“蛇线”填充它。我可以说这只是绘画的第一步!但最糟糕的是。。。
 
164551rko8goqoo7oq8fff.jpg
 
 
编辑:Opsss。。。对不起,但是,你是要我给你看结果吗?
我不知道该怎么做,我正在研究另一种方法,但试图编译另一种代码!。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:45:44 | 显示全部楼层
这是Lisp程序。。。它将圆弧用作第三个边界。。。第一和第二侧边界必须是水平或垂直曲线。。。
 
我没有使用acextendthisentity,但必须重新创建半圆弧。。。
 
M、 R。
 
[编辑:我不知道为什么,但它在2012年不起作用,在2014年起作用]。。。
 
[EDIT2:现在可以在版本上使用
snakefill-2lineboundaries-arc-entmake arcs。lsp
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 16:47:32 | 显示全部楼层
 
马可·里巴,非常感谢你帮助我!!!。。。几乎是这样,在最后两张图片上,你可以看到要遵循的线是边界线(在这种情况下是一条水平线),而不是绘制一条弧,可以选择该线作为参考线?在那之后做从上侧到下侧的偏移,用圆弧闭合。。。我试着编译代码,比如在这种情况下,在做了一个“pedit”连接这些对象之后,偏移了直线和圆弧。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 00:19 , Processed in 1.455020 second(s), 73 queries .

© 2020-2025 乐筑天下

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