API 新鲜出炉的速度极快三角网构建函数
本帖最后由 newer 于 2014-11-14 22:00 编辑刚拿到了新的API,测试了新加入的三角网构建函数
15万个点,计算部分仅需1秒就完毕,画出来的时间加一起也就几秒钟而已。看看图
多漂亮的图形。
最好能保存到内部数据库,可以用来查询 拾取点 位于哪个三角形内 st788796 发表于 2014-11-14 22:08
最好能保存到内部数据库,可以用来查询 拾取点 位于哪个三角形内
没必要保存啊,很占内存的。生成的是3DFACE,另外写函数算三角形内插值标高就行了。
newer 发表于 2014-11-14 22:23
没必要保存啊,很占内存的。生成的是3DFACE,另外写函数算三角形内插值标高就行了。
点数据占内存? iLisp 发表于 2014-11-14 22:53
点数据占内存?
15万个点,生成的三角网,三角形加一起有80多万个点,额外在单独保存到表里面还不占内存吗?
刚测试的三角网函数,可以画,也可以返回 三点为子表的 大表。你想保存就保存到变量里面吧,但你要显示到屏幕那就等着刷屏吧。你想找哪个点在哪个三角形,可以遍历这个表去算,有很复杂的算法,最好的复杂度在LOG(N),好像什么穿刺算法,大家可以研究下啊。
newer 发表于 2014-11-14 23:04
15万个点,生成的三角网,三角形加一起有80多万个点,额外在单独保存到表里面还不占内存吗?
刚测试的 ...
太高深的算法看着费劲,你看看这个算法复杂度是多少
(defun Pnt:IsInTriangle (p pts / lst)
(vl-catch-all-error-p
(vl-catch-all-apply
'(lambda (/ xl yl minx miny maxx maxy)
(foreach x pts
(setq xl (mapcar 'car x)
yl (mapcar 'cadr x)
minx (apply 'min xl)
maxx (apply 'max xl)
miny (apply 'min yl)
maxy (apply 'max yl)
)
(if (and (<= minx (car p) maxx)
(<= miny (cadr p) maxy)
(xd::pnt:isinside p x)
)
(progn (setq lst x) (exit))
)
)
)
nil
)
)
lst
)
st788796 发表于 2014-11-15 13:11
太高深的算法看着费劲,你看看这个算法复杂度是多少
每个都遍历,这个应该是N吧。其实我想在ACAD下面,就应该简单些了,只要那些三角形画出来了,3DFACE或者POLYLINE,从点做个射线,从和射线相交的选择集里面找出来离点最近的三角形。
newer 发表于 2014-11-15 13:19
每个都遍历,这个应该是N吧。其实我想在ACAD下面,就应该简单些了,只要那些三角形画出来了,3DFACE或者P ...
这个倒是简单,不过有时候是没有三角形的
vl-member-if 可能就是桌子提供处理单向链表遍历的 iLisp 发表于 2014-11-15 13:33
这个倒是简单,不过有时候是没有三角形的
vl-member-if 可能就是桌子提供处理单向链表遍历的
最基本的算法是N,最好的算法是log(n), 差别挺大的。三角形越多,体现越明显,两者的函数曲线决定的。
既然是给 Autolisp用的,那就针对 AutoCAD把速度发挥到极致,函数除了接受点参数,还可以增加选择集参数,把提取部分也放到 ARX 内部,比如
1 Point选择集,内部提取Position
2 BlockRef选择集,内部提取Position
3 Text 选择集,内部提取 Position
3 曲线选择集,内部提取 getSamplePoints
或者以上混合选集
啥也不说了,感谢楼主分享哇! 请问版主能分享一下新的API和三角网构建函数吗?{:1_23:} 在路上584 发表于 2018-5-29 21:13
请问版主能分享一下新的API和三角网构建函数吗?
论坛下载啊,最新的是2018.05.29日更新的,刚刚更新的。
http://bbs.xdcad.net/source/plugin/disad/click.php?19
newer 发表于 2018-5-29 21:19
论坛下载啊,最新的是2018.05.29日更新的,刚刚更新的。
http://bbs.xdcad.net/source/plugin/disad/c ...
什么是XDRX API?
XDRX API是用ARX(C++)写的几千个可以让LISP调用的函数库,使用这些函数写成的LISP应用程序,执行前需要加载API。
原来是供LISP调用的!以为可以在C++下调用呢
在路上584 发表于 2018-5-29 21:37
什么是XDRX API?
XDRX API是用ARX(C++)写的几千个可以让LISP调用的函数库,使用这些函数写成的LISP ...
C++调用XDRX API也可以,acedInvoke,或者没写进文档的LISP求值函数。
页:
[1]
2