使用LISP填充
首先,很抱歉再次提起这件事。但我正在做最后的努力,尝试使用LISP实现hatch。正如你们许多人所记得的,这是一个完全自动化项目的一部分。不允许用户输入,所有操作都必须使用LISP代码完成。在所附的图片上,你会看到我的quandry。左侧的图像是拍摄前的图像,右侧的图像是我想用hatch命令实现的拍摄后的图像。
绿色拉伸是使用LISP引入的块。绿色矩形是用LISP创建的。红色PLINE也使用LISP创建。完成后,我可以手动使用hatch命令,只需在左图中看到十字光标的地方单击一下,它就会完美地填充我想要的区域。所以我认为,很好,让我创建草图,然后在我的LISP程序中编写hatch命令,以选择相同的点,得到右侧所示的结果。
但hatch命令似乎不会执行此操作。。。使用LISP。其中一项工作通过手动方法非常简单,对于LISP来说似乎是一项简单的任务。
注意:我编写了代码,精心绘制了一条与绿色挤出轮廓密切相关的柱脚线,并将其与另一条柱脚线连接以形成闭合多边形。然后可以使用LISP对其进行填充。但这是一个痛苦的过程,随着客户在其产品线中添加更多的形状,很难编写代码来跟踪挤出型材。
这是不是使用LISP无法完成的事情?我发现有时候你可以用鼠标和键盘手动做一些你不能用LISP重新创建的事情,但这是非常少的情况。
大概
绘制(红色)多段线
插入块
vla getboundingbox(多段线+块)
缩放->边界框
缩放->0.9x
(命令“_-hatch”pt“\u P”“AR-CONC”“1.0”“0.0”“”)
或
(setq EL(entlast))
(命令“_-boundary”pt”)
(如果(/=EL(entlast))
(命令“_-hatch”“\u S”“\u L”“”“\u P”“AR-CONC”“1.0”“0.0”“”)
) GP,谢谢。我尝试了第二种方法,效果很好。唯一的问题是它使边界线保持不变。当这一切都完成后,我想要的是在混凝土板的顶部和底部各有一条线。用户对此非常挑剔。
(setq EL (entlast))
(command "_-boundary" (polar pt1 pi (+ afrmwd 2)) "")
(if (/= EL (entlast))
(command "_-hatch" "_S" "_L" "" "_P" "AR-CONC" "0.25" "0.0" "")
)
我将对此进行更多的修补,看看是否可以得到用户要求的最终结果。最棒的是,我不必对挤出型材和边界进行所有繁琐的跟踪,甚至可以细化嵌入板并围绕其工作。
谢谢,如果你有任何其他建议,请告诉我。 好的,我想我终于找到了。我以前从未真正使用过边界命令。无论如何,这是一个选择多段线和边界线的问题,然后对它们都进行(entdel)。我现在可以在板的顶部和底部画一些简单的线,这样这些挑剔的用户就能得到他们想要的。。。至少在这个问题上。
谢谢GP。这是一个很好的建议。 很乐意帮忙。 我是疯了还是怎么了。。。。?在学习LISP的开始,我被告知,有一些编码方法可以证明是不稳定的。。。这有时是有效的,有时是无效的。这是处理LISP编程的困难之一,尤其是当我的客户看到该死的东西在工作,然后第二天他们给我一个错误列表,其中包括我前一天刚刚工作的东西。
(defun slab1 (_Point1_Point2 _CPoint1 _CPoint2 _Left _Right
_Up _Down / _h1 _l1 l2
_pl1 _pl2 _r1
)
(command "._CLAYER" "Concrete")
(command "._PLINE"
(polar _Point1 _Down (- _afrmdp1 0.4375))
(polar _Point1 _Down (- slabdp 0.4375))
(polar (polar _Point1 _Down (- slabdp 0.4375)) _Left 4)
(polar (polar _Point1 _Down 1.0625) _Left (+ afrmwd 3))
(polar (polar _Point1 _Left (+ afrmwd 3)) _Up 0.4375)
(polar (polar _Point1 _Left afrmwd) _Up 0.4375)
"")
(setq _pl1 (entlast))
(command "_-boundary" (polar _Point1 _Left (+ afrmwd 2)) "")
(setq EL (entlast))
(if (/= EL (entlast))
(command "_-hatch" "_S" "_L" "" "_P" "AR-CONC" "0.25" "0.0" "")
); end if
(setq _h1 (entlast))
(entdel EL)
(entdel _pl1)
; DRAW THE TOP OF THE SLAB BACK IN
(command "._LINE" (polar (polar _Point1 _Left afrmwd) _Up 0.4375)
(polar (polar _Point1 _Left (+ afrmwd 3)) _Up 0.4375) "")
(setq _pl1 (entlast))
; DRAW THE SIDE AND THE BOTTOM OF THE SLAB BACK IN
(command "._PLINE" (polar _Point1 _Down (- _afrmdp1 0.4375))
(polar _Point1 _Down (- slabdp 0.4375))
(polar (polar _Point1 _Down (- slabdp 0.4375)) _Left 4) "")
(setq _pl2 (entlast))
(command "._MIRROR" _pl1 _pl2 _h1 "" _CPoint1 _CPoint2 "")
(princ)
); end slab1
舱口似乎出了问题。我只能假设它的其余部分是有效的,因为当它完成时,有一个漂亮的混凝土舱口,周围留有足够的线来形成板的部分剖视图,或者有一个剖视图,但舱口只是一堆斜线,几乎看起来像是AR-CONC舱口。
我写这篇文章是为了处理图纸的前视图和侧视图。这就是_Up,_Down,等等。。。都是关于。这有多个条件,所以我把它做成了模块。我这样称呼例行程序:
有些时候,它运行得很好。然后我转到代码的另一部分,它调用了几乎相同的例程,但它不起作用。然后我回到5分钟前的第一个程序,它工作得很好,现在它也像第二次尝试一样把舱口搞砸了。
Q: 这是一种长期不稳定的代码吗?还是我只需要去检查一下脑袋? 正如我之前提到的,我宣誓支持NDA的左右两面,所以我可以发布的代码和图片数量有限。但我刚刚在这个问题上观察到了一些有趣的事情。左边的图像是我在出错时得到的结果。右边的图片是我在正确的时候得到的。图案填充用软管冲洗,边界命令中的一些线不会被entdel命令擦除。这与产生这两个的代码完全相同。唯一的区别是左边的一个是全速运行的,右边的一个是在代码开始之前用一个断点运行的,我用F8键逐步完成了它。
今天早些时候,这辆车全速行驶,一切都很好。我现在正在对此进行更多测试,因为最终结果,当它正确时,正是这里的用户所要求的。
要使用边界命令,所使用的几何体必须完全显示在屏幕上。
然后怎么可能?
GP,再次感谢。我确实发现,像你一样,要使其持续工作,唯一的方法就是使用“缩放”命令。让我不舒服的是,它似乎在没有缩放命令的情况下也能工作,但迟早会像它那样滑出轨迹。所以我现在在块中插入了更多的缩放命令。
页:
[1]