nod684 发表于 2022-7-6 07:38:59

图案填充以遵循曲线路径

您好,我目前正在做景观美化工作,我遇到了这个问题,其中摊铺机(填充图案)应遵循曲线路径。
 
有没有办法用lisp实现这一点?我尝试过使用自定义线型(带形状),但没有成功。我还尝试了expresstools superhatch,但仍然没有效果。
 
当我在这里浏览时,我仍然找不到一个。
但我注意到李的Lisp程序很好。
 
还有其他解决方案吗?任何帮助都将不胜感激

孵出图纸

MSasu 发表于 2022-7-6 07:43:36

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

marko_ribar 发表于 2022-7-6 07:47:55

我所能想到的就是这样的例行公事:
 

(vl-load-com)
(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 )
(setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq clay (getvar 'clayer))
(prompt (strcat "\nType HPNAME variable <" (getvar 'hpname) "> : "))
(setq hpn (getstring))
(if (not (eq hpn "")) (setvar 'hpname hpn))
(prompt (strcat "\nType HPSCALE variable <" (rtos (getvar 'hpscale)) "> : "))
(initget 6)
(setq hps (getreal))
(if (not (null hps)) (setvar 'hpscale hps))
(prompt "\nPick first curve")
(while (not ss1)
   (setq ss1 (ssget "_+.:E:S:L" '((0 . "*LINE,RAY,XLINE,CIRCLE,ELLIPSE,ARC"))))
)
(prompt "\nPick second curve")
(while (not ss2)
   (setq ss2 (ssget "_+.:E:S:L" '((0 . "*LINE,RAY,XLINE,CIRCLE,ELLIPSE,ARC"))))
)
(setq c1 (ssname ss1 0))
(setq c2 (ssname ss2 0))
(initget 6)
(setq n (cond ((getint "\nType number of spaces-segments between 2 curves <25> : "))
               ( 25 )
         )
)
(setq stpar (vlax-curve-getstartparam c1))
(setq enpar (vlax-curve-getendparam c1))
(setq ln -1)
(while (tblsearch "LAYER" (setq lnstr (itoa (setq ln (1+ ln))))))
(setq lnstr (itoa ln))
(vl-cmdf "_.-layer" "m" lnstr "")
(setvar 'clayer clay)
(setq k -1)
(repeat (+ n 1)
   (setq par (+ stpar (* (/ (- enpar stpar) (float n)) (float (setq k (1+ k))))))
   (setq p1 (vlax-curve-getpointatparam c1 par))
   (setq p2 (vlax-curve-getclosestpointto c2 p1))
   (if (/= k n)
   (progn
       (setq parr (+ stpar (* (/ (- enpar stpar) (float n)) (float (+ k 0.5)))))
       (setq p11 (vlax-curve-getpointatparam c1 parr))
       (setq p22 (vlax-curve-getclosestpointto c2 p11))
       (setq phor (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) p11 p22))
       (setq anh (cvunit (angle p11 p22) "radians" "degrees"))
       (setq hdata (cons (cons anh phor) hdata))
   )
   )
   (setq lin (vla-addline msp (vlax-3d-point p1) (vlax-3d-point p2)))
   (vla-put-layer lin lnstr)
)
(foreach h hdata
   (vl-cmdf "_.-hatch" "p" "" "" (car h) "o" "s" (cdr h) "" (cdr h) "")
)
(prompt (strcat "\nDo you want to <E>rase or <L>eave lines on new layer \"" lnstr "\" : "))
(initget 1 "Erase Leave")
(setq ch (getkword))
(if (eq ch "Erase")
   (repeat (setq z (sslength (setq ssz (ssget "_X" (list '(0 . "LINE") (cons 8 lnstr))))))
   (entdel (ssname ssz (setq z (1- z))))
   )
)
(vl-cmdf "_.-purge" "LA" "" "n")
(princ)
)
(defun c:hb2c nil (c:hatchbetween2curves))
(prompt "\nShortcut for c:hatchbetween2curves is c:hb2c")
(princ)

 
M、 R。

nod684 发表于 2022-7-6 07:49:39

 
是的,我知道这是一项非常复杂的任务。。。。我希望Autodesk在其未来版本中考虑到这一点。。
 
 
谢谢你!
试过Lisp程序,这是我得到的!(见附图)
模式重叠有一些小问题,但嘿!它关闭了!

SEANT 发表于 2022-7-6 07:54:05

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

eldon 发表于 2022-7-6 07:55:13

只要等到客户真正想要构建它。应该会让人头痛

marko_ribar 发表于 2022-7-6 08:00:07

也许我错了,但我尝试了dll,在我选择球体后,我得到了错误:无法获取3dsolid面。。。
我正在使用A2012 64 Win 7。。。
 
你能帮忙吗,肖恩?
M、 R。
 

Select face of solid:

Error while acquiring Face!

SEANT 发表于 2022-7-6 08:02:15

对该特定版本是使用AutoCAD 2009(32位)编写和测试的。即使在那时,也有不兼容的迹象——见该帖子的第12篇。
 
 
 
不幸的是,我仍然无法对AutoCAD 2010-2011进行测试。我正在重构AutoCAD2012-2013的项目以及其他一些项目,以最终提交给Autodesk Exchange Apps。

nod684 发表于 2022-7-6 08:05:32

 
其实这也让我很头疼呵呵!
 
 
谢谢我要试试这个!

nod684 发表于 2022-7-6 08:08:16

我想目前没有办法做到这一点
页: [1] 2
查看完整版本: 图案填充以遵循曲线路径