woodman78 发表于 2022-7-5 22:38:25

道路图案填充

我正在为道路图案填充创建lisp。这就是我目前所拥有的。
它通过选择一条基线并使用“测量”命令在其上插入一个块来工作。
创建块的选择集并分解它们。
然后选择一个轮廓,即偏移到内部(用户选择要偏移到的边。这可以默认为内部吗?)
然后,我需要创建一个分解线的选择集,并从偏移轮廓中修剪它们。
我正在努力解决最后几个问题,希望能得到一些帮助。

woodman78 发表于 2022-7-5 22:44:17

对不起,忘了包括我的代码。我早上要上班。

BIGAL 发表于 2022-7-5 22:45:37

首先,不要对粗线条使用块,使用plines额外的工作来修剪块。
 
请看命令“extrim”。它将修剪V形的内侧或外侧,通常不接触内侧线,因此使用“last”为修剪线偏移内侧,然后删除“last”应将其删除。
 
刚刚做了手工绘制岛绘制普林斯和复制等偏移岛内的外向L指出了所有完成E L完成。最主要的是选择pline方向的起点和终点,使其足够长以覆盖大多数岛屿。从头开始花了几秒钟。
 
有兴趣帮你的帖子我会用的。

woodman78 发表于 2022-7-5 22:49:51

这是我目前掌握的代码。
 

(defun C:hatch_lining (/ ang coords elist midp offsetted offsetted1 ofpt p1 p2 p3 pline side SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
(setq SUCE (getvar "cmdecho"))
(setq SUOM (getvar "orthomode"))
(setq SUSM (getvar "osmode"))
(setq SUAB (getvar "angbase"))
(setq SUAD (getvar "angdir"))
(setq SUCL (getvar "clayer"))
(setq SUCR (getvar "cecolor"))

(setq vl1 (list
(cons 0 "LAYER");Name of entity
(cons 100 "AcDbSymbolTableRecord")   ;Open Records
(cons 100 "AcDbLayerTableRecord")   ;Locate Layer Table
(cons 2 "CCC_LAYOUT_Proposed_Road_Lining_Hatching");Name of Layer
(cons 6 "Continuous")      ;Linetype
(cons 62 7)       ;colour = light grey
(cons 70 0)       ;state
(cons 290 1)       ;1=plot, 0=Don't plot
)       ;End of entity list
)
(entmake vl1)
(command "_.-layer" "_C" "3" "CCC_LAYOUT_Proposed_Road_Lining_Hatching" "")
(setvar "clayer" "CCC_LAYOUT_Proposed_Road_Lining_Hatching")
(setvar "cecolor" "1")
(setq pline(entsel "\nSelect an arc or a polyline: "))
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
p1 p2)
)
(command "measure" pline "b" "hatch Lining" "y" "2" "")
(command "_change" pline """p" "Layer" "CCC_LAYOUT_Proposed_Road_Lining_Hatching" "color" "Bylayer" "")
(setvar "qaflags" 1)
(setq SS1 (ssget "X" (list '(0 . "INSERT") (cons 2 "hatch Lining"))))
(command "explode" SS1 "")
(setvar "qaflags" 0)
(setq sel1 (ssget "x" '((8 . "CCC_LAYOUT_Proposed_Road_Lining_Hatching_Construction"))))
(setq outpline(entsel "\nSelect a closed polyline: "))
(setq inside(getpoint "\nPick an offset side: "))
(command "._offset" 0.3 outpline inside "")
(setq offsetted (entlast)
elist (entget offsetted)
)


(setvar "cmdecho"   SUCE)
(setvar "orthomode" SUOM)
(setvar "osmode"    SUSM)
(setvar "angbase"   SUAB)
(setvar "angdir"    SUAD)
(setvar "clayer"    SUCL)
(setvar "cecolor"    SUCR)
(princ)
)

woodman78 发表于 2022-7-5 22:52:56

我曾尝试在lisp中使用命令调用“extrim”,但它不起作用。我怎么称呼它?我可以使用一组选择项来修剪吗?

woodman78 发表于 2022-7-5 22:58:29

我用乔·伯克的“cookiecutter2”手动操作,效果很好。我怎么能从我的日常生活中说出来呢?
 
实例
(命令“cookiecutter2”)

woodman78 发表于 2022-7-5 22:58:59

我把它整理好了。我添加到我的文件中,然后调用它。我注释掉了cookiecutter2中我不需要的部分。它工作得很好。

woodman78 发表于 2022-7-5 23:03:13

这是完成的cde。我知道它不优雅,也很笨重,但它做了我需要它做的事情
 
我无法连接创建衬里的块,但它们非常简单。它们只是在两个方向上以45度角穿过原点的柱脚,并且在原点两侧约6m。
Hatch_衬里。lsp

BIGAL 发表于 2022-7-5 23:06:01

更好的方法是创建平行线=V形的宽度使用extrim在岛的内部进行偏移,然后使用hatch solid,这样可以为弧侧提供完美的形状。
 
是的,像你一样,我无法让Extrim在纯lisp中工作(命令“Extrim”“last”pt1)给出未知命令,有人知道吗?
 
嗯,我可以使孵化自动相当容易。只需获取下一行的行端点的起始点,为图案填充拾取的起始点是半个起始点。

woodman78 发表于 2022-7-5 23:11:14

比加尔,
如果图案填充是沿着直线的,平行线可以很好地工作,但我们大多数人不会这样。我在使用extrim时遇到了问题,我在web上的某个地方看到,首先在lisp中加载它作为不同的名称,然后根据需要调用该名称。但是我再也找不到了。即使我手动运行extrim,尽管我有问题。我发现cookiecutter2好多了。我把我不想要的部分注释掉了,效果很好。
页: [1] 2
查看完整版本: 道路图案填充