我正在尝试编写一个例程,可以找到AutoCAD曲面上的高点和低点。写这篇文章时,我注意到了一些问题。
1) 当我在地面上倾倒垃圾时,我会得到如下结果
只有每三分之一的值是高程,其他值是x和y值。我该如何对这些值进行排序,以便制作一个如下所示的点列表
- (10112.9 19945.1 6431.32) (10103.5 19945.2 6431.72)
?
2) 当我尝试使用vlax get属性实际获取点时,它会作为变体返回,与vla转储中的返回方式不同。如何将此变体转换为转储中返回的变体?
我的代码如下:
- (defun c:findhighlowpoints (/ *error* prd)
- (defun *error* (msg)
- (if oldecho
- (setvar 'cmdecho oldecho)
- )
- (if (not
- (member msg '("Function cancelled" "quit / exit abort"))
- )
- (princ (strcat "\nError: " msg))
- )
- (princ)
- )
- (setq prd
- '(lambda (x)
- (wcmatch
- (cdr (assoc 0 (entget x)))
- "AECC_TIN_SURFACE"
- )
- )
- )
- (if (setq ent (selectif "\nSelect surface to find high and low points: " prd))
- (progn
- (setq obj (vlax-ename->vla-object ent)
- pts (vlax-get-property obj 'Points)
- pt (getvar 'viewctr)
- )
- )
- )
- (princ)
- )
- ;;;Select if written by Lee Mac
- (defun selectif (msg prd / ent)
- (while
- (progn (setq ent (car (entsel msg)))
- (cond
- ((= 7 (getvar 'errno))
- (princ "\nMissed, try again.")
- )
- ((not ent) nil)
- ((not (apply prd (list ent)))
- (princ "\nInvalid object selected.")
- )
- )
- )
- )
- ent
- )
|