明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2284|回复: 5

[源码] 请帮忙修改下,谢谢!

[复制链接]
发表于 2014-6-3 11:24 | 显示全部楼层 |阅读模式
高飞鸟大师的源码
  1. (defun C:am (/ ss l i totalarea ename obj entarea)
  2.   (if (setq ss (ssget))
  3.     (progn
  4.       (vl-load-com)
  5.       (setq modelspace (vla-get-Modelspace (vla-get-activeDocument (vlax-get-acad-object))))
  6.       (setq l (sslength ss) i 0 totalarea 0 totlength 0)
  7.       (repeat l
  8.         (setq ename (ssname ss i))
  9.         (setq obj (vlax-ename->vla-object ename))
  10. (if (vlax-property-available-p obj "area")
  11.           (setq totalarea (+ (vlax-get-property obj 'area) totalarea))
  12.         )
  13. (if (= (cdr (assoc 0 (entget ename))) "MLINE")
  14.    (setq totlength (+ totlength (ml-length ename)))
  15.    (setq totlength (+ totlength (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
  16. )
  17.         (setq i (1+ i))
  18.       )
  19.       (setq text1 (strcat "总面积为: " (rtos totalarea 2 4) "平方单位")
  20.      text2 (strcat "总长度为: " (rtos totlength 2 4) "单位")
  21.       )
  22.       (if (setq insertpt (getpoint "\n请输入文字插入点: "))
  23. (if (setq height (getdist "\n请输入文字高度:"))
  24.    (setq insertp1 (vlax-3d-point insertpt)
  25.   insertp2 (vlax-3d-point (polar insertpt (* 1.5 Pi) (* 1.5 height)))
  26.          textobj1 (vla-addtext modelspace text1 insertp1 height)
  27.   textobj2 (vla-addtext modelspace text2 insertp2 height)
  28.    )
  29. )
  30.       )
  31.     )
  32.   )
  33. )
  34. (defun ml-length (ename / j d ptlist)
  35.   (foreach n (entget ename)
  36.     (if (= (car n) 11)
  37.       (setq ptlist (cons (cdr n) ptlist))
  38.     )
  39.   )
  40.   (reverse ptlist)
  41.   (setq j 0 d 0)
  42.   (repeat (1- (length ptlist))
  43.     (setq d (+ d (distance (nth j ptlist) (nth (1+ j) ptlist))))
  44.     (setq j (1+ j))
  45.   )
  46.   d
  47. )  


高飞版主的代码是将结果插入到文档中的,我想能不能用下面的的方式,即弹出结果?
  1. ;;;调用vb输入框 by Xran
  2. ;;;promptstr 提示信息
  3. ;;;title 窗体标题栏信息
  4. ;;;default 缺省值
  5. (defun inputbox (promptstr title default)
  6.   (vla-eval (vlax-get-acad-object)
  7.       (strcat "ThisDrawing.setVariable "USERS5",inputBox (""
  8.         promptstr
  9.         "", ""
  10.         title
  11.         "", ""
  12.         default
  13.         "")"
  14.        )
  15.   )
  16.   (getvar "users5")
  17. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-6-3 15:00 | 显示全部楼层
注意单位是米
  1. (defun C:am (/ ss l i totalarea ename obj entarea)
  2.   (if (setq ss (ssget'((0 . "*line,arc,circle,ellipse"))))
  3.     (progn
  4.       (vl-load-com)
  5.       (setq modelspace (vla-get-Modelspace (vla-get-activeDocument (vlax-get-acad-object))))
  6.       (setq l (sslength ss) i 0 totalarea 0 totlength 0)
  7.       (repeat l
  8.         (setq ename (ssname ss i))
  9.         (setq obj (vlax-ename->vla-object ename))
  10.         (if (vlax-property-available-p obj "area")
  11.           (setq totalarea (+ (vlax-get-property obj 'area) totalarea))
  12.           )
  13.         (if (= (cdr (assoc 0 (entget ename))) "MLINE")
  14.           (setq totlength (+ totlength (ml-length ename)))
  15.           (setq totlength (+ totlength (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
  16.           )
  17.         (setq i (1+ i))
  18.         )
  19. ;;;      (setq text1 (strcat "总面积为: " (rtos totalarea 2 4) "平方单位")
  20. ;;;     text2 (strcat "总长度为: " (rtos totlength 2 4) "单位")
  21. ;;;      )
  22.       ;(inputbox  "总面积为<平方单位>: "  "统计" (rtos totalarea 2 4))
  23.       (inputbox  "总面积为<平方米>: "  "统计"  (rtos (* totalarea 0.000001) 2 4))
  24.       ;(inputbox  "总长度为<单位>: "  "统计" (rtos totlength 2 4))
  25.       (inputbox  "总长度为<米>: "  "统计" (rtos (* totlength 0.001) 2 4))
  26. ;;;      (if (setq insertpt (getpoint "\n请输入文字插入点: "))
  27. ;;;(if (setq height (getdist "\n请输入文字高度:"))
  28. ;;;   (setq insertp1 (vlax-3d-point insertpt)
  29. ;;;  insertp2 (vlax-3d-point (polar insertpt (* 1.5 Pi) (* 1.5 height)))
  30. ;;;         textobj1 (vla-addtext modelspace text1 insertp1 height)
  31. ;;;  textobj2 (vla-addtext modelspace text2 insertp2 height)
  32. ;;;   )
  33. ;;;)
  34. ;;;      )
  35.     )
  36.   )
  37. )
  38. (defun ml-length (ename / j d ptlist)
  39.   (foreach n (entget ename)
  40.     (if (= (car n) 11)
  41.       (setq ptlist (cons (cdr n) ptlist))
  42.     )
  43.   )
  44.   (reverse ptlist)
  45.   (setq j 0 d 0)
  46.   (repeat (1- (length ptlist))
  47.     (setq d (+ d (distance (nth j ptlist) (nth (1+ j) ptlist))))
  48.     (setq j (1+ j))
  49.   )
  50.   d
  51. )
  52. ;;;调用vb输入框 by Xran
  53. ;;;promptstr 提示信息
  54. ;;;title 窗体标题栏信息
  55. ;;;default 缺省值
  56. (defun inputbox (promptstr title default)
  57.   (vla-eval (vlax-get-acad-object)
  58.       (strcat "ThisDrawing.setVariable \"USERS5\",inputBox (\""
  59.         promptstr
  60.         "\", \""
  61.         title
  62.         "\", \""
  63.         default
  64.         "\")"
  65.        )
  66.   )
  67.   (getvar "users5")
  68. )
 楼主| 发表于 2014-6-3 15:23 | 显示全部楼层
edata 发表于 2014-6-3 15:00
注意单位是米

谢谢E大,可是出错了
Select objects: Specify opposite corner: 9 found
Select objects:  ; error: Automation Error.

另外我想长度以毫米为单位
发表于 2014-6-3 16:15 | 显示全部楼层
  1. (defun C:am (/ ss l i totalarea ename obj entarea)
  2.   (if (setq ss (ssget'((0 . "*line,arc,circle,ellipse"))))
  3.     (progn
  4.       (vl-load-com)
  5.       (setq modelspace (vla-get-Modelspace (vla-get-activeDocument (vlax-get-acad-object))))
  6.       (setq l (sslength ss) i 0 totalarea 0 totlength 0)
  7.       (repeat l
  8.         (setq ename (ssname ss i))
  9.         (setq obj (vlax-ename->vla-object ename))
  10.         (if (vlax-property-available-p obj "area")
  11.           (setq totalarea (+ (vlax-get-property obj 'area) totalarea))
  12.           )
  13.         (if (= (cdr (assoc 0 (entget ename))) "MLINE")
  14.           (setq totlength (+ totlength (ml-length ename)))
  15.           (setq totlength (+ totlength (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
  16.           )
  17.         (setq i (1+ i))
  18.         )
  19.       (inputbox  "总面积为<平方米>: "  "统计"  (rtos (* totalarea 0.000001) 2 4))      
  20.       (inputbox  "总长度为<毫米>: "  "统计" (rtos totlength 2 4))
  21.     )
  22.   )
  23. )
  24. (defun ml-length (ename / j d ptlist)
  25.   (foreach n (entget ename)
  26.     (if (= (car n) 11)
  27.       (setq ptlist (cons (cdr n) ptlist))
  28.     )
  29.   )
  30.   (reverse ptlist)
  31.   (setq j 0 d 0)
  32.   (repeat (1- (length ptlist))
  33.     (setq d (+ d (distance (nth j ptlist) (nth (1+ j) ptlist))))
  34.     (setq j (1+ j))
  35.   )
  36.   d
  37. )
  38. ;;;调用vb输入框 by Xran
  39. ;;;promptstr 提示信息
  40. ;;;title 窗体标题栏信息
  41. ;;;default 缺省值
  42. (defun inputbox (promptstr title default)
  43.   (vla-eval (vlax-get-acad-object)
  44.       (strcat "ThisDrawing.setVariable \"USERS5\",inputBox (\""
  45.         promptstr
  46.         "\", \""
  47.         title
  48.         "\", \""
  49.         default
  50.         "\")"
  51.        )
  52.   )
  53.   (getvar "users5")
  54. )

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 谢谢E大

查看全部评分

 楼主| 发表于 2014-6-3 16:49 | 显示全部楼层
本帖最后由 lucas_3333 于 2014-6-3 17:40 编辑
edata 发表于 2014-6-3 16:15

刚才没有装VBA,现在装了VBA工作正常,谢谢E大
发表于 2014-6-3 21:11 | 显示全部楼层
  1. (defun C:am (/ ss l i totalarea ename obj entarea)
  2.   (if (setq ss (ssget'((0 . "*line,arc,circle,ellipse"))))
  3.     (progn
  4.       (vl-load-com)
  5.       (setq modelspace (vla-get-Modelspace (vla-get-activeDocument (vlax-get-acad-object))))
  6.       (setq l (sslength ss) i 0 totalarea 0 totlength 0)
  7.       (repeat l
  8.         (setq ename (ssname ss i))
  9.         (setq obj (vlax-ename->vla-object ename))
  10.         (if (vlax-property-available-p obj "area")
  11.           (setq totalarea (+ (vlax-get-property obj 'area) totalarea))
  12.           )
  13.         (if (= (cdr (assoc 0 (entget ename))) "MLINE")
  14.           (setq totlength (+ totlength (ml-length ename)))
  15.           (setq totlength (+ totlength (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
  16.           )
  17.         (setq i (1+ i))
  18.         )
  19.       (setq text1 (strcat "总面积为(平方单位): " (rtos totalarea 2 4) )
  20.             text2 (strcat "总长度为(单位): " (rtos totlength 2 4) )
  21.       )
  22.       (alert (strcat text1 "\n" text2))
  23.       (princ "\n")(princ text1)(princ "\n")(princ text2)
  24.       
  25.     )
  26.   )
  27.   (princ)
  28. )
  29. (defun ml-length (ename / j d ptlist)
  30.   (foreach n (entget ename)
  31.     (if (= (car n) 11)
  32.       (setq ptlist (cons (cdr n) ptlist))
  33.     )
  34.   )
  35.   (reverse ptlist)
  36.   (setq j 0 d 0)
  37.   (repeat (1- (length ptlist))
  38.     (setq d (+ d (distance (nth j ptlist) (nth (1+ j) ptlist))))
  39.     (setq j (1+ j))
  40.   )
  41.   d
  42. )

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 谢谢E大!明经的雷锋!谢谢!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-26 21:21 , Processed in 0.329857 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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