明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7439|回复: 18

[基础] 求助,能一次性生成大量闭合多段线面积的插件,急用。

  [复制链接]
发表于 2010-7-8 10:15 | 显示全部楼层 |阅读模式
要收费的人就不要回帖了。生成的面积精度:小数点保留2位以上
发表于 2010-7-8 10:53 | 显示全部楼层
你要生成的面积是保存在文件,还是显示在图面,还是显示到命令行?
发表于 2010-7-9 23:07 | 显示全部楼层
我也想要一个   工作而要   最好是生成表格的   没有的话最好显示在图中的也好
发表于 2010-7-9 23:22 | 显示全部楼层

1,选择所有的pline

2,移出不闭合的pline

3,找出顶点及顶点的数量,并求出顶点的算术平均点

4,找出面积,写面积

发表于 2010-7-10 13:28 | 显示全部楼层

扬起

发表于 2010-7-10 20:28 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-7-11 05:48 | 显示全部楼层
gufeng发表于2010-7-8 10:53:00你要生成的面积是保存在文件,还是显示在图面,还是显示到命令行?

目前来说最好是显示在图上~~

发表于 2010-7-11 07:07 | 显示全部楼层
强烈关注
 楼主| 发表于 2010-7-12 17:38 | 显示全部楼层

am 求选定pl线的面积之和 感谢原作者开源代码

  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.     ;;(vlax-dump-object obj T)
  11.     (if (vlax-property-available-p obj "area")
  12. (setq totalarea (+ (vlax-get-property obj 'area) totalarea))
  13. )
  14.     (if (= (cdr (assoc 0 (entget ename))) "MLINE")
  15.      (setq totlength (+ totlength (ml-length ename)))
  16.      (setq totlength (+ totlength (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
  17.     )
  18. (setq i (1+ i))
  19. )
  20. (setq text1 (strcat "总面积为: " (rtos totalarea 2 4) "平方毫米")
  21.      text2 (strcat "长度为: " (rtos totlength 2 4) "米")
  22. )
  23. (if (setq insertpt (getpoint "\n请输入文字插入点: "))
  24.     (if (setq height (getdist "\n请输入文字高度:"))
  25.      (setq insertp1 (vlax-3d-point insertpt)
  26.         insertp2 (vlax-3d-point (polar insertpt (* 1.5 Pi) (* 1.5 height)))
  27.      textobj1 (vla-addtext modelspace text1 insertp1 height)
  28.         textobj2 (vla-addtext modelspace text2 insertp2 height)
  29.      )
  30.     )
  31. )
  32. )
  33. )
  34. )
  35. (defun ml-length (ename / j d ptlist)
  36. (foreach n (entget ename)
  37. (if (= (car n) 11)
  38. (setq ptlist (cons (cdr n) ptlist))
  39. )
  40. )
  41. (reverse ptlist)
  42. (setq j 0 d 0)
  43. (repeat (1- (length ptlist))
  44. (setq d (+ d (distance (nth j ptlist) (nth (1+ j) ptlist))))
  45. (setq j (1+ j))
  46. )
  47. d
  48. )
 楼主| 发表于 2010-7-12 17:44 | 显示全部楼层

mj.lsp 大家先研究下,感谢原作者开源

  1. ;;;程序功能: 面积计算及求和
  2. ;;;程序编制人: 查克
  3. ;;;程序名称: MJ.LSP
  4. ;;;编制时间: 1995 中山老干部活动中心
  5. ;;;修改时间: 1995.11.30 厦门武警水电大楼
  6. ;;;命令名称:
  7. ;;; MT: 参数设置, P 输入人均指标; U 面积计算结果以公顷为单位;F 打
  8. ;;;         印结果时在前面加层名, A 在上方标注层名; T  输入标注字高,
  9. ;;; D 小数点位数
  10. ;;; MD 取消上述参数设置
  11. ;;; TT : 按层求和, 求某层所有数字总和
  12. ;;; TY : 点选求和, 只计算用鼠标所选择的数字之和
  13. ;;; TR : 框选求和, 计算选择框内所有数字之和, 可多次选择
  14. ;;; ML: 计算面积, 按层计算,输入层名称后,计算该层所有 PLINE 线的
  15. ;;; 面积之和
  16. ;;; MM: 计算面积, 计算选择框内所有 PLINE 线面积之和, 可多次选择
  17. ;;; MC: 计算面积, 按颜色计算,输入颜色名(代号)后,计算以该颜色画
  18. ;;; 的所有 PLINE 线的面积之和,BYLAYER 或 BYBLOCK 的颜色
  19. ;;; 不能以这种方式计算。
  20. ;;; MJ: 计算面积,用鼠标单选 PLINE 线计算。
  21. ;;; NN: 以用地面积推算各地块的人口,计算前先用MT命令输入人均用地
  22. ;;; 面积指标。
  23. (defun c:mt () ;;; 参数设置 PLINE PLINE
  24. (setq cs1 nil cs2 nil cs3 nil)
  25. (setq cs (getstring"\nP 人口计算/U 单位/L 标注层名/H 字高/D 小数点位数 "))
  26. (if (or (= cs "d")(= cs "D"))
  27. (setq csd (getint "Input the Number of desimal ")))
  28. (if (= csd nil)(setq csd 2))
  29. (if (or (= cs "h") (= cs "H"))
  30. (setq cst (getreal"Input text high, Please ")))
  31. (if (= cst nil )
  32. (setq cst 50))
  33. (if (or (= cs "u") (= cs "U"))
  34. (setq ck1 1))
  35. (if (or (= cs "p") (= cs "P"))
  36. (setq csp (getreal"\n请输入人均用地指标:")))
  37. (if (or (= cs "l") (= cs "L"))
  38. (setq cslay (getstring"\nput layaer name Above or Front? ")))
  39. )
  40. (defun c:md ()
  41. ;;; 参数设置 PLINE PLINE
  42. (setq cs1 nil cs2 nil cs3 nil)
  43. (setq cs (getstring"\nUnit/Layer name/text-High "))
  44. (if (or (= cs "t") (= cs "T"))
  45. (setq cst 50))
  46. (if (or (= cs "u") (= cs "U"))
  47. (setq ck1 21))
  48. (if (or (= cs "l") (= cs "L"))
  49. (setq cs3 (getstring"\nput layaer name Above or Front? ")))
  50. (if (or (= cs3 "f") (= cs3 "F"))
  51. (setq ck1 13))
  52. (if (or (= cs3 "a") (= cs3 "A"))
  53. (setq ck1 14))
  54. )
  55. (DEFUN C:tt()
  56. ;统计,计算某一层的所有数字总和
  57. (setq aa nil)
  58. (setq tnumb 0)
  59. (setq ltnm (getstring"\nPlease Input the Layer Name : "))
  60. (SETQ Aa (SSGET "x" (list (cons 0 "text")
  61. (cons 8 ltnm)
  62. ) ) )
  63. (jsss)
  64. )
  65. (defun c:ty () ;;;框选求和
  66. (setq aa nil tnumb 0)
  67. (setq aa (ssget))
  68. (jsss)
  69. )
  70. (defun c:tr () ;;; 框选求和2
  71. (setq aa nil)
  72. (setq tnumb 0)
  73. (setq aa (ssget "x" (list (cons 0 "text"))))
  74. (jsss)
  75. )
  76. (defun jsss()
  77. (if (= csd nil)
  78. (setq csd 2))
  79. (if (or (= cst nil)(= cst 0))
  80. (setq cst 50))
  81. (SETQ www (SSNAME aA 0))
  82. (SETQ TNUMB (SSLENGTH Aa))
  83. (SETQ YDMJ 0.0 JZMJ 0.0 ZZMJ 0.0)
  84. (SETQ TTTT 0)
  85. (WHILE www
  86. (SETQ TNM (ENTGET www))
  87. (SETQ P0 (CDR (ASSOC 10 TNM)))
  88. (SETQ TPX (CAR P0))
  89. (SETQ TPY (CAR (CDR P0)))
  90. (SETQ TEEX (CDR (ASSOC 1 TNM)))
  91. (SETQ TDATE (ATOF TEEX))
  92. (SETQ YDMJ (+ YDMJ TDATE))
  93. (setq tttt (+ tttt 1))
  94. (setq www (ssname aa tttt)) )
  95. (setq rk (rtos ydmj 2 csd))
  96. (SETQ PO (getpoint "\nInput the Start Place for TEXT, PLease "))
  97. (COMMAND "TEXT" PO cst 0 rk))
  98. (defun c:ml ()
  99. (SETQ LNM (GETSTRING "\Input the Layer Name, Please : "))
  100. (setq m (ssget "x" (list (cons -4 "<or")
  101. (cons 0 "POLYLINE")
  102. (cons 0 "LWPOLYLINE")
  103. (cons -4 "or>")
  104. (cons 8 lnm)) ))
  105. (MJJS))
  106. (DEFUN C:mc ()
  107. (SETQ cnm (GETint "\nPlease Input Color number :"))
  108. (setq m (ssget "x" (list (cons -4 "<or")
  109. (cons 0 "polyline")
  110. (cons 0 "lwpolyline")
  111. (cons -4 "or>")
  112. (cons 62 cnm) ) ))
  113. (mjjs))
  114. (DEFUN C:mm () ;;;框选 PLINE 线计算面积
  115. (SETQ M (SSGET))
  116. (MJJS))
  117. (DEFUN MJJS ()
  118. (if (= csd nil)
  119. (setq csd 2))
  120. (if (or (= cst nil)(= cst 0))
  121. (setq cst 50))
  122. (setq uu (ssname m 0))
  123. (setq nn (sslength m))
  124. (setq tmj 0 smj 0)
  125. (setq t 0 nnn 0)
  126. (while nnn
  127. (command "area" "e" uu)
  128. (setq ssmj (list (getvar "area")))
  129. (setq smj (car ssmj))
  130. (setq tmj (+ tmj smj))
  131. (setq t (+ t 1))
  132. (setq uu (ssname m t))
  133. (if (= t nn) (setq nnn nil))
  134. )
  135. (if (= ck1 1)
  136. (setq tmmj (rtos (/ tmj 10000) 2 csd ) )
  137. (setq tmmj (rtos tmj 2 csd))
  138. )
  139. (SETVAR "OSMODE" 32)
  140. (setq po (getpoint "\n请输入标注点位置 : "))
  141. (if (/= cslay nil)
  142. (lmmjs)
  143. (mmmm) ))
  144. (defun mmmm ()
  145. (command "text" po cst 0 tmmj)
  146. )
  147. (defun lmmjs ()
  148. (if (or (= cslay "f")(= cslay "F"))
  149. (progn (setq klj (atoi tmmj))
  150. (setq kljj (itoa klj))
  151. (setq lllkkk (strlen kljj))
  152. (setq csl (* (- 15 lllkkk) cst 0.712092))
  153. (setq p1 (polar po 0 csl)))
  154. (progn (setq a1 (- 0 (/ pi 2)))
  155. (setq p1 (polar po a1 100)) ))
  156. (setq rrrhhh (strcase lnm))
  157. (SETVAR "OSMODE" 0)
  158. (command "text" po cst 0 rrrhhh)
  159. (command "text" p1 cst 0 tmmj))
  160. (defun c:mj ()
  161. ;;;计算 PLINE 线面积, 单选, 以公顷为单位, 标注层名
  162. (if (= csd nil)(setq csd 2))
  163. (setq plnm (car (setq plnm1 (entsel"Select a Polyline, Please: "))))
  164. (setq plnmm (entget plnm))
  165. (setq lnm (cdr (assoc 8 plnmm )))
  166. (command "area" "e" plnm)
  167. (setq ssmj (car list (getvar "area"))))
  168. (if (= ck1 1)
  169. (setq tmmj (rtos (/ ssmj 10000) 2 csd))
  170. (setq tmmj (rtos ssmj 2 csd)))
  171. (setq po (getpoint "\nInput the Text Start Point Place,
  172. Please : "))
  173. (if (/= cslay nil)
  174. (lmmjs)
  175. (mmmm)
  176. )
  177. )
  178. (defun c:nn ()
  179. ;;;用人均用地指标计算人口
  180. (setq plnm (car (setq plnm1 (entsel"Select a Polyline, Please: "))))
  181. (princ "面积")
  182. (setq plnmm (entget plnm))
  183. (setq lnmtext (cdr (assoc 8 plnmm )))
  184. (command "area" "e" plnm)
  185. (setq ssmj (car (list (getvar "area"))))
  186. (setq plmj (rtos (/ ssmj csp) 2 0))
  187. (setq p0 (getpoint"Please give a point for Text: "))
  188. (command "text" p0 cst 0 plmj)
  189. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 11:41 , Processed in 0.606622 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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