不要这样!
现在我有了3.5个AutoLISP游戏,我想是时候做一些比确定一个点是在一个圆内还是在一个正字法(这个词对吗?)长方形虽然花了一些时间,但我终于找到了答案。。嗯,差不多了。总是有一个“几乎”。现在,就像我做的很多事情一样,我怀疑这对任何人都有帮助,但我认为这是一个解决潜在问题的灵巧方法,所以我发布了它。
假设您想确定一个点是否在任何规则或半不规则多边形内。嗯,这很难做到,是吗?可能涉及到很多数学问题,虽然圆很容易(半径)就像矩形(轴向上下限)一样,但还有更多需要考虑的问题,还有更多的形状,我们想看看一个点是否在里面!“我们”是指“我”
所以我写了这个。这就可以做到:确定一个点是否在任何规则(id est,所有边和内角彼此相等..就像使用“多边形”命令)或半不规则(拉伸和倾斜一点,但多边形边界框的面积必须等于多边形本身的面积)多边形内。我甚至做了进一步的工作,编写了一个函数来获取多段线的三维顶点,并将其作为可用列表返回。
下面是代码,简短而甜蜜:
为了让你们了解我所说的“规则和半不规则”是什么意思,这里有一个方便的图片。很抱歉附上文件。。我现在无法使用我的Photobucket。我稍后会清理它。
此外,如何创建多边形也很重要。比方说,你不能让两个顶点重叠(你永远不应该重叠,但仍然如此)。我肯定还有其他一些事情会把事情搞砸。基本上,inPol函数的输入形式应类似于:
(列表(列表0 0)(列表1 0 0)(列表0 1 0))
你会注意到,它只是等腰三角形的三个顶点。
你会注意到这里没有什么有趣的地方,没有额外的相同顶点等等。我确信有一种方法可以在函数中写入检查,但它不是用来确定点是否在由AutoCAD多段线限定的区域内,而是用来确定点是否在由输入顶点定义的多边形内。 我不久前写过这篇文章,有点类似:
;;============内部。lsp==============;;;;主要功能描述:;;将确定点是否位于;;物体内部或外部。;;;;功能:insidep;;论据:;;待测试点。;;对象Ename或VLA对象;;;;功能:vlax列表->3D点;;论据:;;要转换的列表。;;确定x或y的标志。;;;;对象兼容性:;;除视口/多边形网格之外的所有内容。;;;;作者:;;版权所有(c)2009,Lee McDonnell;;(联系CADTutor.net的Lee Mac);;;;平台:;;无限制,;;仅在ACAD 2004中测试========================================(defun insidep(pt Obj/Obj Tol ang doc spc flag int lin xV yV)(vl load com)(或(eq’VLA-OBJECT(type Obj))(setq Obj(vlax ename->VLA OBJECT Obj))(setq Tol(/pi 6);不确定性ang 0.0标志T)(setq doc(vla get ActiveDocument(vlax get Acad Object))spc(if(zerop(vla get activespace doc))(if(=(vla get mspace doc):vlax true)(vla get modelspace doc)(vla get paperspace doc))(vla get modelspace doc))(while(and(<ang(*2 pi))标志)(setq标志(和(setq int(vlax invoke(setq lin(vla addLine spc(vlax-3D-point pt)(vlax-3D-point(polar pt ang)(if(vlax-property-available-p Obj’length)(vla get length Obj)1.0 1097;)))'与Obj acExtendThisEntity相交](3D点int T)'3D点int nil'
页:
[1]