如何计算t块
所以我一直在开发一个LISP例程来帮助自动化停车布局,尤其是当有曲线时。我使用了measure命令和offset命令。我遇到的问题是,只有当pline是一个方向时,它才有效。如果将pline反转,则由于我定义块的方式,pline无法正常工作(我在LISP例程中根据用户想要的尺寸定义块)。我想不出一种方法来判断我是应该使用块1(方向正常)还是块2(旋转180度以确保它给出正确的结果)。谁能想出一个简单的方法来判断使用哪个区块。附件是一张显示我的问题的图片。你好
可能使用RPL。lsp反转多边形方向?
在网上搜索。
我希望它适合你。 如果总是将LWDOLYLINE作为路径曲线,则可以检查其顺时针p方向,并根据该方向决定使用哪个版本的块进行测量。。。
(defun ListClockwise-p (lst / z vlst)
(vl-catch-all-apply 'minusp
(list
(if
(not
(equal 0.0
(setq z
(apply '+
(mapcar
(function
(lambda (u v)
(- (* (caru) (cadrv)) (* (carv) (cadru)))
)
)
(setq vlst
(mapcar
(function
(lambda (a b) (mapcar '- b a))
)
(mapcar (function (lambda (x) (car lst))) lst)
(cdr (reverse (cons (car lst) (reverse lst))))
)
)
(cdr (reverse (cons (car vlst) (reverse vlst))))
)
)
) 1e-6
)
)
z
(progn
(prompt "\n\nChecked vectors are colinear - unable to determine clockwise-p of list")
nil
)
)
)
)
)
更多信息:
http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/polyline-direction-clockwise-or-counterclockwise/td-p/6050612
HTH,M.R。 马克,这是一个很酷的惯例。所以我试图找出它到底返回了什么值,以及它提供了什么类型的输入。我的选择是使用entsel进行的,我试图
但这不是正确的实体类型。 它使用点列表(顶点列表-或沿其长度的点),以正确的顺序从LWPOLYLINE。。。 哦,明白了,我想我现在明白了。谢谢Marko! 该函数可以稍微简化-请参阅此处的LM:list顺时针-p函数。 谢谢李,我应该先查一下你的网站。我还有一个快速的问题,关于如何在pline开始时将pline的开始部分缩短一定量。我知道如何使用vlax曲线函数获取起点,我尝试通过LISP使用length命令对其进行调整,为其提供起点和增量(在本例中为负增量),但我似乎无法使其正常工作。
我将检查起始段是直线段还是弧段,根据要减去的长度或弧长计算起始顶点的新坐标(同时删除位于要删除的多段线上的任何中间顶点),计算新的凸出数据(如果使用弧段),然后输入修改的DXF数据。
基本上与我在双扩展程序中使用的方法相反。 李,非常感谢你的帮助!所以我一直在处理这段代码,它继续变得更加复杂。现在,当用户选择弧的内侧时,它始终有效,但当用户选择弧的外侧时,它不能正常工作。附件是一个图像,以显示我的意思。我想我需要做的是做一个测试,测试用户是否选择了内部或外部,如果是这样,我有两个不同的代码(我想不出当一个柱脚线上有两个不同的弧向不同的方向弯曲时怎么做,我想这会变得复杂)。有可能做这样的测试吗?
页:
[1]
2