newer 发表于 2014-11-14 21:57:00

API 新鲜出炉的速度极快三角网构建函数

本帖最后由 newer 于 2014-11-14 22:00 编辑

刚拿到了新的API,测试了新加入的三角网构建函数

15万个点,计算部分仅需1秒就完毕,画出来的时间加一起也就几秒钟而已。看看图



多漂亮的图形。


st788796 发表于 2014-11-14 22:08:21

最好能保存到内部数据库,可以用来查询 拾取点 位于哪个三角形内

newer 发表于 2014-11-14 22:23:17

st788796 发表于 2014-11-14 22:08
最好能保存到内部数据库,可以用来查询 拾取点 位于哪个三角形内

没必要保存啊,很占内存的。生成的是3DFACE,另外写函数算三角形内插值标高就行了。

iLisp 发表于 2014-11-14 22:53:50

newer 发表于 2014-11-14 22:23
没必要保存啊,很占内存的。生成的是3DFACE,另外写函数算三角形内插值标高就行了。

点数据占内存?

newer 发表于 2014-11-14 23:04:16

iLisp 发表于 2014-11-14 22:53
点数据占内存?

15万个点,生成的三角网,三角形加一起有80多万个点,额外在单独保存到表里面还不占内存吗?

刚测试的三角网函数,可以画,也可以返回 三点为子表的 大表。你想保存就保存到变量里面吧,但你要显示到屏幕那就等着刷屏吧。你想找哪个点在哪个三角形,可以遍历这个表去算,有很复杂的算法,最好的复杂度在LOG(N),好像什么穿刺算法,大家可以研究下啊。

st788796 发表于 2014-11-15 13:11:47

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
)

newer 发表于 2014-11-15 13:19:36

st788796 发表于 2014-11-15 13:11
太高深的算法看着费劲,你看看这个算法复杂度是多少

每个都遍历,这个应该是N吧。其实我想在ACAD下面,就应该简单些了,只要那些三角形画出来了,3DFACE或者POLYLINE,从点做个射线,从和射线相交的选择集里面找出来离点最近的三角形。

iLisp 发表于 2014-11-15 13:33:23

newer 发表于 2014-11-15 13:19
每个都遍历,这个应该是N吧。其实我想在ACAD下面,就应该简单些了,只要那些三角形画出来了,3DFACE或者P ...

这个倒是简单,不过有时候是没有三角形的
vl-member-if 可能就是桌子提供处理单向链表遍历的

newer 发表于 2014-11-15 13:46:20

iLisp 发表于 2014-11-15 13:33
这个倒是简单,不过有时候是没有三角形的
vl-member-if 可能就是桌子提供处理单向链表遍历的

最基本的算法是N,最好的算法是log(n), 差别挺大的。三角形越多,体现越明显,两者的函数曲线决定的。

csharp 发表于 2014-11-15 15:03:08

既然是给 Autolisp用的,那就针对 AutoCAD把速度发挥到极致,函数除了接受点参数,还可以增加选择集参数,把提取部分也放到 ARX 内部,比如

1 Point选择集,内部提取Position

2 BlockRef选择集,内部提取Position

3 Text 选择集,内部提取 Position

3 曲线选择集,内部提取 getSamplePoints

或者以上混合选集

alibabu 发表于 2016-11-27 19:24:20

啥也不说了,感谢楼主分享哇!

在路上584 发表于 2018-5-29 21:13:21

请问版主能分享一下新的API和三角网构建函数吗?{:1_23:}

newer 发表于 2018-5-29 21:19:53

在路上584 发表于 2018-5-29 21:13
请问版主能分享一下新的API和三角网构建函数吗?

论坛下载啊,最新的是2018.05.29日更新的,刚刚更新的。

http://bbs.xdcad.net/source/plugin/disad/click.php?19

在路上584 发表于 2018-5-29 21:37:51

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++下调用呢

newer 发表于 2018-5-29 21:40:30

在路上584 发表于 2018-5-29 21:37
什么是XDRX API?
   XDRX API是用ARX(C++)写的几千个可以让LISP调用的函数库,使用这些函数写成的LISP ...

C++调用XDRX API也可以,acedInvoke,或者没写进文档的LISP求值函数。
页: [1] 2
查看完整版本: API 新鲜出炉的速度极快三角网构建函数