明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 804|回复: 1

[源码] 求大师帮忙优化代码

[复制链接]
发表于 2016-1-31 10:05:25 | 显示全部楼层 |阅读模式
网上找的代码,自己改的现功能已满足要求,求大师帮忙优化精减代码
  1. ;;; 框选封闭区域面积到excel    by:langjs
  2. ;;; ==================
  3. (defun c:mj (/ d ent f i lst m2 obj pt ss txt x y TextHeight hjmj)
  4.   (vl-load-com)
  5. (setq TextHeight (getdist "\n输入标注文字高度:[当前高度:150]"))
  6. (if (= TextHeight nil) (setq TextHeight 150))
  7.   (defun maketext (txt pt)             ; 生成文字子函数
  8. (command "layer" "M" "面积" "C" "6" "" "LT" "CONTINUOUS" "" "");设置一个标注图层
  9.     (entmake (list '(0 . "TEXT") (cons 62 1) (cons 10 pt) (cons 40 TextHeight) (cons 1 txt) '(41 . 0.8)))
  10.   )
  11.   (setvar "cmdecho" 0)
  12.   (vl-load-com)
  13.   (setq ss (ssget) ent (entlast))
  14. (setq num(sslength ss))
  15.   (command ".region" ss "")
  16.   (setq ss (ssadd)  lst nil)
  17.   (while (setq ent (entnext ent))
  18.     (if (= (cdr (assoc 0 (entget ent))) "REGION")
  19.       (setq obj (vlax-ename->vla-object ent) pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)))
  20.             m2 (rtos (/(vla-get-area obj) 1000000) 2 2) d (rtos(/ (vla-get-perimeter obj) 1000) 2 2) lst (cons (list pt m2 d) lst)
  21.       )
  22.     )
  23.   )
  24.   (command ".undo" "")
  25.   (setq lst (vl-sort lst (function (lambda (x y)(< (car (car x)) (car (car y)))))))
  26.   (setq lst (vl-sort lst (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))))

  27. (initget "Y N y n")
  28. (setq s (getkword "是否导出到excel? [是(Y)/否(N)]"))
  29. (if (= s  "Y") (progn
  30. (setq f (getfiled "指定输出文件路径" "" "xls" 1) f (open f "w"))
  31.   (write-line "编号\面积(m2)\t周长(m)" f)

  32.   (setq i 1)
  33.   (foreach x lst
  34.     (setq pt (car x) m2 (cadr x) d (caddr x))
  35.     (maketext (strcat "A" (itoa i)) (list (car pt) (+ (cadr pt) (* 1.2 TextHeight))))
  36.     (maketext (strcat "S=" m2 "m2") pt)
  37.     (maketext (strcat "L=" d "m") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))
  38.     (write-line (strcat (strcat "A" (itoa i)) "\t" m2 "\t" d) f)
  39.     (setq i (1+ i))
  40.   )

  41. (close f)
  42. )  (progn


  43. (setq  table
  44.    (vla-AddTable
  45.      (vla-get-ModelSpace
  46.        (vla-get-ActiveDocument (vlax-get-acad-object))
  47.      )
  48.      (vlax-3d-point (setq basept (getpoint "\n插入基点:"))) ;_ 插入点
  49.      (setq NumRows (+ 3 num))
  50.      (setq NumColumns 3)
  51.      (setq RowHeight TextHeight)
  52.      (setq ColWidth (* 3 TextHeight))
  53.    )
  54.   )
  55. ;;关闭表格的实时更新,以提高修改表格的运行速度
  56.   (vla-put-HeaderSuppressed table :vlax-true)
  57.   (vla-put-TitleSuppressed  table :vlax-true)
  58.   (vla-put-regeneratetablesuppressed  table :vlax-true)
  59.   ;;写表头内容
  60.   (vla-settextheight table acTitleRow (* RowHeight 0.7)) ;;设置标题区字高
  61.   (vla-settextheight table acHeaderRow (* RowHeight 0.7)) ;;设置表头区字高
  62.   (vla-settextheight table acDataRow (* RowHeight 0.5)) ;;设置数据区字高
  63.   (vla-setalignment table acDataRow acMiddleCenter) ;;设置单元格居中
  64.   (vla-settext table 0 0 "汇总表")
  65. (vla-settext table 1 0 "编号")
  66. (vla-settext table 1 1 "面积(m2)")
  67. (vla-settext table 1 2 "周长(m)")



  68. (setq i 1 hjmj 0 hjzc 0)

  69.   (foreach x lst
  70.     (setq pt (car x) m2 (cadr x) d (caddr x))
  71.     (maketext (strcat "A" (itoa i)) (list (car pt) (+ (cadr pt) (* 1.2 TextHeight))))
  72.     (maketext (strcat "S=" m2 "m2") pt)
  73.     (maketext (strcat "L=" d "m") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))

  74.     (vla-settext table (+ 1 i) 0 (strcat "A" (itoa i)))
  75.     (vla-settext table (+ 1 i) 1 m2)
  76.     (vla-settext table (+ 1 i) 2 d)

  77.   (setq hjmj (+ hjmj (atof m2)))
  78. (setq hjzc (+ hjzc (atof d)))

  79.            


  80.   (setq i (1+ i))

  81.   )
  82.   
  83.     (vla-settext table (+ 1 i) 0 "合计")
  84. (vla-settext table (+ 1 i) 1 (rtos hjmj 2 2))
  85. (vla-settext table (+ 1 i) 2 (rtos hjzc 2 2))


  86. ;;打开表格更新
  87.   (vla-put-HeaderSuppressed table :vlax-false)
  88.   (vla-put-TitleSuppressed  table :vlax-false)
  89.   (vla-put-regeneratetablesuppressed  table :vlax-false)
  90. ))
  91.   
  92.   (princ)
  93. )
发表于 2016-2-1 00:11:32 | 显示全部楼层
能用就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-15 10:18 , Processed in 0.157768 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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