取个长点勒名字 发表于 2016-6-8 09:13:55

曲面算面积,怎么能提高执行效率。。

自己写了一个关于算曲面面积的lisp。但是执行时间很长。应该是调用command "explode"比较耗时。
请大神们看看怎么能让它执行得更快。
(defun 3pt_mj (pt1 pt2 pt3/ a b c p s);三点求面积
(if (/= pt1 pt2 pt3)
    (progn
      (setq a (distance pt1 pt2))
      (setq b (distance pt1 pt3))
      (setq c (distance pt2 pt3))
      ;海伦公式求面积
      (setq p (/(+ a b c)2))
      (setq s (abs(sqrt(* p (- p a)(- p b)(- p c)))))
    )
    (alert "\n有重合的点。请核对。")
)
s
)
(defun C:tt (/ ent entity i mj mj1 ptlst ss tymj)
(setvar "cmdecho" 0)
(setq ss (ssget '((0 . "ACAD_PROXY_ENTITY"))))
(setq i 0 MJ 0 tymj 0)
(repeat (sslength ss)
    (command "UNDO" "be")
    (setq ent (cdr(assoc -1 (entget(ssname ss i)))))
    (setq Entity (entlast))
    (command "explode" ss)
    (setq ptlst nil)
    (while
      (setq Entity (entnext Entity))
      (setq ent (entget Entity))
      (setq ptlst (append ptlst (list(cdr(assoc 10 ent)))))
    )
    ;====算面积=======
    (setq mj1 (3pt_mj (car ptlst)(cadr ptlst)(caddr ptlst)))
    (setq MJ (+ MJ mj1))      
    (setq i (1+ i))
    (command "undo" "e" "undo" "1")      
)
(alert (strcat "\n所选取图像面积为:" (rtos (/ MJ 1000000)2 3)"平方米。"))   
(setvar "cmdecho" 1)
(princ)
)


http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 取个长点勒名字的微博
页: [1]
查看完整版本: 曲面算面积,怎么能提高执行效率。。