乐筑天下

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

[编程交流] 图案填充以遵循曲线路径

[复制链接]

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 07:38:59 | 显示全部楼层 |阅读模式
您好,我目前正在做景观美化工作,我遇到了这个问题,其中摊铺机(填充图案)应遵循曲线路径。
 
有没有办法用lisp实现这一点?我尝试过使用自定义线型(带形状),但没有成功。我还尝试了expresstools superhatch,但仍然没有效果。
 
当我在这里浏览时,我仍然找不到一个。
但我注意到李的Lisp程序很好。
 
还有其他解决方案吗?任何帮助都将不胜感激
083903f2mv64igzt233vi6.jpg
孵出图纸
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:43:36 | 显示全部楼层
我的观点是,编写这样的例程是可能的,但这将是一项极其复杂的任务。该例程必须遵循中间路径,并在其上垂直绘制每行瓷砖-每行瓷砖的大小需要从行的一端到另一端稍微调整(增加或减少),以允许连续行配合在一起。还要注意不要超过横向极限。所有这些都是为了美学目的。
所述瓷砖的尺寸调整类似于钳工在实际生活中利用行间距所做的调整。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:47:55 | 显示全部楼层
我所能想到的就是这样的例行公事:
 
  1. (vl-load-com)
  2. (defun c:hatchbetween2curves ( / msp clay hpn hps ss1 ss2 c1 c2 n stpar enpar ln lnstr k par parr p1 p2 p11 p22 phor anh hdata lin ch z ssz )
  3. (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  4. (setq clay (getvar 'clayer))
  5. (prompt (strcat "\nType HPNAME variable <" (getvar 'hpname) "> : "))
  6. (setq hpn (getstring))
  7. (if (not (eq hpn "")) (setvar 'hpname hpn))
  8. (prompt (strcat "\nType HPSCALE variable <" (rtos (getvar 'hpscale)) "> : "))
  9. (initget 6)
  10. (setq hps (getreal))
  11. (if (not (null hps)) (setvar 'hpscale hps))
  12. (prompt "\nPick first curve")
  13. (while (not ss1)
  14.    (setq ss1 (ssget "_+.:E:S:L" '((0 . "*LINE,RAY,XLINE,CIRCLE,ELLIPSE,ARC"))))
  15. )
  16. (prompt "\nPick second curve")
  17. (while (not ss2)
  18.    (setq ss2 (ssget "_+.:E:S:L" '((0 . "*LINE,RAY,XLINE,CIRCLE,ELLIPSE,ARC"))))
  19. )
  20. (setq c1 (ssname ss1 0))
  21. (setq c2 (ssname ss2 0))
  22. (initget 6)
  23. (setq n (cond ((getint "\nType number of spaces-segments between 2 curves <25> : "))
  24.                ( 25 )
  25.          )
  26. )
  27. (setq stpar (vlax-curve-getstartparam c1))
  28. (setq enpar (vlax-curve-getendparam c1))
  29. (setq ln -1)
  30. (while (tblsearch "LAYER" (setq lnstr (itoa (setq ln (1+ ln))))))
  31. (setq lnstr (itoa ln))
  32. (vl-cmdf "_.-layer" "m" lnstr "")
  33. (setvar 'clayer clay)
  34. (setq k -1)
  35. (repeat (+ n 1)
  36.    (setq par (+ stpar (* (/ (- enpar stpar) (float n)) (float (setq k (1+ k))))))
  37.    (setq p1 (vlax-curve-getpointatparam c1 par))
  38.    (setq p2 (vlax-curve-getclosestpointto c2 p1))
  39.    (if (/= k n)
  40.      (progn
  41.        (setq parr (+ stpar (* (/ (- enpar stpar) (float n)) (float (+ k 0.5)))))
  42.        (setq p11 (vlax-curve-getpointatparam c1 parr))
  43.        (setq p22 (vlax-curve-getclosestpointto c2 p11))
  44.        (setq phor (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) p11 p22))
  45.        (setq anh (cvunit (angle p11 p22) "radians" "degrees"))
  46.        (setq hdata (cons (cons anh phor) hdata))
  47.      )
  48.    )
  49.    (setq lin (vla-addline msp (vlax-3d-point p1) (vlax-3d-point p2)))
  50.    (vla-put-layer lin lnstr)
  51. )
  52. (foreach h hdata
  53.    (vl-cmdf "_.-hatch" "p" "" "" (car h) "o" "s" (cdr h) "" (cdr h) "")
  54. )
  55. (prompt (strcat "\nDo you want to <E>rase or <L>eave lines on new layer "" lnstr "" : "))
  56. (initget 1 "Erase Leave")
  57. (setq ch (getkword))
  58. (if (eq ch "Erase")
  59.    (repeat (setq z (sslength (setq ssz (ssget "_X" (list '(0 . "LINE") (cons 8 lnstr))))))
  60.      (entdel (ssname ssz (setq z (1- z))))
  61.    )
  62. )
  63. (vl-cmdf "_.-purge" "LA" "" "n")
  64. (princ)
  65. )
  66. (defun c:hb2c nil (c:hatchbetween2curves))
  67. (prompt "\nShortcut for c:hatchbetween2curves is c:hb2c")
  68. (princ)

 
M、 R。
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 07:49:39 | 显示全部楼层
 
是的,我知道这是一项非常复杂的任务。。。。我希望Autodesk在其未来版本中考虑到这一点。。
 
 
谢谢你!
试过Lisp程序,这是我得到的!(见附图)
模式重叠有一些小问题,但嘿!它关闭了!
083905xo8o31dsaabshzu3.jpg
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:54:05 | 显示全部楼层
我发布了一个映射例程(.NET),可以在此线程中模拟此功能:
 
http://www.cadtutor.net/forum/showthread.php?41260-在球体上绘制
 
 
 
事实上,该线程的post#11显示了一个使用AR-HBONE的示例。
 
工作流程有点复杂,但下面是一个结果示例。每个砖都显示一些曲线/变形,因此可能不合适。如果只是为了一个视觉效果,也许还不错。
孵出图纸
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:55:13 | 显示全部楼层
只要等到客户真正想要构建它。应该会让人头痛
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:00:07 | 显示全部楼层
也许我错了,但我尝试了dll,在我选择球体后,我得到了错误:无法获取3dsolid面。。。
我正在使用A2012 64 Win 7。。。
 
你能帮忙吗,肖恩?
M、 R。
 
  1. Select face of solid:
  2. Error while acquiring Face!
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:02:15 | 显示全部楼层
对该特定版本是使用AutoCAD 2009(32位)编写和测试的。即使在那时,也有不兼容的迹象——见该帖子的第12篇。
 
 
 
不幸的是,我仍然无法对AutoCAD 2010-2011进行测试。我正在重构AutoCAD2012-2013的项目以及其他一些项目,以最终提交给Autodesk Exchange Apps。
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:05:32 | 显示全部楼层
 
其实这也让我很头疼呵呵!
 
 
谢谢我要试试这个!
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:08:16 | 显示全部楼层
我想目前没有办法做到这一点
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:01 , Processed in 0.757693 second(s), 75 queries .

© 2020-2025 乐筑天下

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