Broncos15,
下面是一些示例代码,用于获取连接管道的结构,并列出管道内底。我们是否应该在visual lisp部分中启动一个新线程来列出管道和结构的lisp代码?
- (defun C:PrintStructure ()
- (setq ss (selectstructure))
- (setq struct (vlax-ename->vla-object (ssname ss 0)))
- (princ (strcat "\n" (vlax-get-property struct 'DisplayName) " - Sump Elevation: "
- (rtos (vlax-get-property struct 'SumpElevation) 2 2)))
- (setq cnt (vlax-get-property obj 'ConnectedPipesCount))
- (setq i 0)
- (repeat cnt
- (setq pipe (vlax-get-property struct 'ConnectedPipe i))
- (setq end (getend struct pipe))
- (setq dia (vlax-get-property pipe 'InnerDiameterOrWidth))
- (setq p (vlax-safearray->list (vlax-variant-value (vlax-get-property pipe 'PointAtParam end))))
- (setq inv (- (caddr p) (/ dia 2.0)))
- (princ (strcat "\n" (vlax-get-property pipe 'DisplayName) " - Invert: " (rtos inv 2 2)))
- (setq i (+ i 1))
- )
- (princ)
- )
- (defun getend (struct pipe)
- (setq p (vlax-get-property struct 'Position))
- (setq p (list (vlax-get-property p 'X)(vlax-get-property p 'Y)))
- (setq p0 (vlax-safearray->list (vlax-variant-value (vlax-get-property pipe 'PointAtParam 0))))
- (setq p1 (vlax-safearray->list (vlax-variant-value (vlax-get-property pipe 'PointAtParam 1))))
- (if (< (distance (list (car p0)(cadr p0)) p)
- (distance (list (car p1)(cadr p1)) p))
- 0
- 1))
- (defun selectstructure ()
- (princ "\nSelect Structure: ")
- (setq sel (ssget "_+.:S" '((0 . "AECC_STRUCTURE"))))
- (if (not sel)
- (progn
- (princ "\nOops, Invalid Selection")
- (selectstructure)))
- sel
- )
|