明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 718|回复: 0

[讨论] 曲面算面积,怎么能提高执行效率。。

[复制链接]
发表于 2016-6-8 09:13:55 | 显示全部楼层 |阅读模式
自己写了一个关于算曲面面积的lisp。但是执行时间很长。应该是调用command "explode"比较耗时。
请大神们看看怎么能让它执行得更快。
  1. (defun 3pt_mj (pt1 pt2 pt3  / a b c p s);三点求面积
  2.   (if (/= pt1 pt2 pt3)
  3.     (progn
  4.       (setq a (distance pt1 pt2))
  5.       (setq b (distance pt1 pt3))
  6.       (setq c (distance pt2 pt3))
  7.       ;海伦公式求面积
  8.       (setq p (/(+ a b c)2))
  9.       (setq s (abs(sqrt(* p (- p a)(- p b)(- p c)))))
  10.     )
  11.     (alert "\n有重合的点。请核对。")
  12.   )
  13.   s  
  14. )
  15. (defun C:tt (/ ent entity i mj mj1 ptlst ss tymj)
  16.   (setvar "cmdecho" 0)
  17.   (setq ss (ssget '((0 . "ACAD_PROXY_ENTITY"))))  
  18.   (setq i 0 MJ 0 tymj 0)  
  19.   (repeat (sslength ss)
  20.     (command "UNDO" "be")
  21.     (setq ent (cdr(assoc -1 (entget(ssname ss i)))))
  22.     (setq Entity (entlast))
  23.     (command "explode" ss)
  24.     (setq ptlst nil)
  25.     (while
  26.       (setq Entity (entnext Entity))
  27.       (setq ent (entget Entity))
  28.       (setq ptlst (append ptlst (list(cdr(assoc 10 ent)))))
  29.     )
  30.     ;====算面积=======
  31.     (setq mj1 (3pt_mj (car ptlst)(cadr ptlst)(caddr ptlst)))  
  32.     (setq MJ (+ MJ mj1))        
  33.     (setq i (1+ i))
  34.     (command "undo" "e" "undo" "1")      
  35.   )
  36.   (alert (strcat "\n所选取图像面积为:" (rtos (/ MJ 1000000)2 3)"平方米。"  ))   
  37.   (setvar "cmdecho" 1)
  38.   (princ)
  39. )



该贴已经同步到 取个长点勒名字的微博

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-20 08:39 , Processed in 0.166501 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表