移动命令结束位置错误
你好我试图创建一个lisp函数用于批处理,该函数可以移动、缩放为多段线创建一个边界矩形,这些多段线是从另一个批处理过程生成的,该批处理过程是从具有随机比例的孤立png对象创建的。最终目标是在Sketchup中创建面向相机的面,将这些多段线用作正确阴影的边界。
这是我当前的代码(可能不是最优化的方法)和一个示例文件,演示了这个问题。
6082260823
问题是,函数中的“移动”命令应该将所有多段线从边界框的底部中心移动到原点,但是,如果创建的边界框已经接近原点,它不会最终移动到原点,而是保持原始的闭合值。如果先将多段线从原点移开,效果会很好。当缩放后使用原点作为基点,放大距原点的距离并错误缩放时,这会成为一个问题。
我可能可以通过更改操作顺序或添加额外的move命令来解决这个问题,如果它最初靠近原点,则可以将其移开,但我想知道是否有适当的解决方法来解决这个问题。
旁注:如果有人知道可以复制的lisp函数
或者可以大致解释一下他们用来确定线段(圆弧或直线)何时开始或结束的方法,这样我就可以自己尝试了。如果能这样做,我将不胜感激。他们提到了模糊逻辑,但没有充分研究它。我已经可以通过比较圆弧的凸出中心和直线的共线测试(ab+ac=ac)来修剪冗余顶点。谢谢 您的附件无效。但是你描述的问题听起来很像经典的“运行Osnaps问题”。
3种解决方案:
1.在使用\u Move命令之前,将OSMODE变量设置为0。
2.使用“_non”覆盖OSMODE设置。
3.使用vla move而不是\u move命令。
解决方案2示例:
(command "_.move" ss "" "_non" pt1 "_non" pt2) 谢谢,看起来这就是问题所在,因为这些解决方案有效。这里是为感兴趣的人上传原始附件的第二次尝试:Scale2HumanSize。lsp
看起来我仍然需要将所有多段线顶点添加到点列表中,因为vla getboundingbox似乎遗漏了一些点,并且与当前视图相关。
导致错误的示例图纸。图纸 你最后的陈述不正确。vla getboundingbox函数不会漏点(它计算两个点:“min”和“max”),并且不依赖于当前视图。 那可能是因为我仍然是lisp编码的初学者。很可能是在运行osnaps的draw rectangle命令中,使其看起来不正确。将第一个解决方案而不是第二个解决方案添加到move命令中,可以解决目前为止的所有情况。
对于lisp程序,还有其他系统变量需要注意吗?(或列出它们的论坛/网站)
再次感谢您的帮助。
这是工作版本:Scale2HumanSize。lsp。 以下是2013年的变量概述:
http://www.hyperpics.com/system_variables/
正如你所看到的,有很多。除了OSMODE之外,CMDECHO是另一个在使用命令调用的Lisp程序中经常更改的变量。
页:
[1]