谢谢李,我认为这是正确的选择。
我是lisp新手,很少有应用程序会问这个问题,但目前我正在努力使用lisp,使我能够在AutoCad 2016中快速使用点云。
建模时,我通常使用3个视口,例如从侧视图切片云和从顶部调查。我希望能像cloudworx一样上下移动点云的裁剪,所以我提出了这个粗略的解决方案:
- (defun c:crop (/ cor1 cor2); point cloud rectangular crop
- (setq cor1 (getpoint "\nselect first corner:"))
- (setq cor2 (getcorner cor1 "\nselect second corner:"))
- (setq 2dcor1 (list (car cor1) (cadr cor1)))
- (setq 2dcor2 (list (car cor2) (cadr cor2)))
- (setq cloud (ssget "x" '((8 . "Cloud")))) ; point cloud have to be on the "Cloud" layer
- (command "POINTCLOUDCROP" cloud 2dcor1 2dcor2 "inside")
- (setq csd (- (cadr 2dcor2) (cadr 2dcor1)))
- (princ)
- )
- (defun c:fs () ;forward step
- (setq cloud (ssget "x" '((8 . "Cloud"))))
- (command "POINTCLOUDCROP" cloud "r")
- (setq 2dcor1 (list (car 2dcor1) (+ (cadr 2dcor1) csd)))
- (setq 2dcor2 (list (car 2dcor2) (+ (cadr 2dcor2) csd)))
- (command "POINTCLOUDCROP" cloud 2dcor1 2dcor2 "inside")
- (princ)
- )
- (defun c:bs () ;backward step
- (setq cloud (ssget "x" '((8 . "Cloud"))))
- (command "POINTCLOUDCROP" cloud "r")
- (setq 2dcor1 (list (car 2dcor1) (- (cadr 2dcor1) csd)))
- (setq 2dcor2 (list (car 2dcor2) (- (cadr 2dcor2) csd)))
- (command "POINTCLOUDCROP" cloud 2dcor1 2dcor2 "inside")
- (princ)
- )
-
- (defun c:csd (/ a) ;change the slice step distance
- (setq a (getreal "\nnew cloud slice value:"))
- (setq csd a)
- (princ)
- )
- (princ)
在这个lisp(正在进行的工作)的许多问题中,有一个是最后一次裁剪的可见删除,这可能会使检查扫描数据变得困难。关于如何解决这个问题或在哪里寻找可能的解决方案,有什么指导吗?ObjectARX似乎是一种选择,但从我的新手角度来看,这可能有点过头了。 |