乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 如何创建“name”文本

[复制链接]

6

主题

15

帖子

9

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 22:45:51 | 显示全部楼层 |阅读模式
大家好,我是这个论坛的新成员,非常感谢大家的帮助。我需要做以下例行工作:
--添加文本以表示闭合多段线标签。
--然后例程应该获取多段线区域,并将标签和区域数据导出到Excel文件,如图所示。

                               
登录/注册后可看大图


                               
登录/注册后可看大图

 
我真的需要一些帮助,因为这份重复的工作快把我累死了。我有900条多段线来给一个标签并提取区域。
 
谢谢
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:51:28 | 显示全部楼层
如何创建文本以“命名”闭合多段线,并将“名称”和区域导出到活动单元格excel
iam mohmed fawzy
邮寄
mo70no70@yahoo.com
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 22:52:25 | 显示全部楼层
程序搜索选定图层上的所有多段线。
 
对于初学者,请尝试以下方法:
 
  1. (defun c:aa () ; V : 13.01.2013 ; 12.01.2013 .
  2. (setvar "cmdecho" 0)
  3. (setq osm (getvar "osmode") )
  4. (setvar "osmode" 0)
  5. (if (setq ht 0.2  lsel 0  ob (car (entsel "\n   Select  an  Object  for  LAYER   :  < Pick >  :  ")) )
  6. (progn
  7.   (command "zoom" "e")
  8.   (setq str (cdr (assoc 8 (entget ob)) )  sel (ssget "X" (list '(0 . "LWPOLYLINE,POLYLINE") (cons 8 str)) )  ) ;
  9.   (if sel
  10.     (progn
  11.      (command "zoom" "o" sel "") (sssetfirst nil sel) ; Selectare Vizualizare Selectie !
  12.      (if (/= (getstring (strcat "\n   SELECTED objects on LAYER  :  " str " ;\n   Any  =  NO ;   Enter  =  OK  :  ")) "") (setq sel nil))
  13.      (sssetfirst sel) ; DeSelectare Vizualizare Selectie !
  14.   ) ) ; if sel
  15.   (if sel
  16.    (progn  (or (vl-load-com))
  17.     (setq lsel (sslength sel)  cale (strcat (getvar "dwgprefix") (getvar "dwgname") " - " (rtos (getvar "cdate") 2 6) ".csv")
  18.    f (open cale "w")  i 0)
  19.     (write-line "\nLabel, Area\n-------------------------------" f)
  20.     (while (< i lsel)
  21.      (setq nobi (ssname sel i)  nobv (vlax-ename->vla-object nobi)  ar (vla-get-Area nobv)  ars (rtos ar 2 5)  i (1+ i)
  22.     lc (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates nobv)))  llc (length lc)  n (/ llc 2.)  j 0  sx 0  sy 0)
  23.      (while (< j llc) (setq sx (+ (nth j lc) sx)  j (1+ j)  sy (+ (nth j lc) sy)  j (1+ j) )  ) ; wh
  24.      (command "text" "m" (list (/ sx n) (/ sy n) 0) ht 0 (strcat "\n   Area  " (itoa i) " = " ars))
  25.      (princ (strcat "\n   Area  " (itoa i) "  :  " ars))
  26.      (write-line (strcat "Area  " (itoa i) ", " ars) f)
  27.     ) ; wh <
  28.     (if (and cale (findfile cale)) (close f))
  29.   ) ) ; if sel
  30. )) ; if ob
  31. (setvar "osmode" osm)
  32. (setvar "cmdecho" 1)
  33. (princ (strcat "\n   Height  of  Texts  :  " (rtos ht 2 5)
  34.                    "\n   Number  of  Areas  :  " (itoa lsel) "  ."))
  35. (princ "\n   END  !")(princ)
  36. ) ; end defun c:aa

 
该程序不直接在Excel中编写,但您可以打开结果文件。带Excel的CSV。CSV文件保存到DWG路径。
要在Excel中编写内容,需要一个函数来打开并写入Excel,这更为复杂。
 
简单明了。仅处理选定层。不检查不同:
-如果多段线有2个顶点,面积为0;
-不要检查多段线是否闭合;
-高度文本;
-开始写标签;
-等等。
Lisp程序大约用了30分钟。
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 22:57:08 | 显示全部楼层
您可以在此处找到满足您需求的解决方案
 
李·麦克的精彩节目
 
http://www.lee-mac.com/arealabel.html
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 22:59:06 | 显示全部楼层
gS7,和往常一样很难。
 
我在短时间内想到了一个简单的变体,帮助scremin快速处理900条多段线。他们补充说,因为你需要其他设施。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-5 23:04:52 | 显示全部楼层
这是我的2美分
  1. (defun C:DXLW (/ acsp adoc ang ar area centpoint col fname inspt n plent plineobj regionobj row
  2. sset thgt tot tst tsz txtobj xldata xlapp xlbook xlbooks xlcells xlsheet xlsheets)
  3. (vl-load-com)
  4. ;;;local defun
  5. (defun setcelltext(cells row column value)
  6. (vl-catch-all-apply
  7. 'vlax-put-property
  8. (list cells 'Item row column
  9. (vlax-make-variant
  10. (vl-princ-to-string value) ))
  11. )
  12. ;;----------------------------- main part ---------------------;;
  13. (or adoc
  14. (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  15. (or acsp
  16. (setq acsp (vla-get-block
  17. (vla-get-activelayout adoc))))
  18. (vla-startundomark adoc)
  19. (setq tsz (getvar "textsize"))
  20. (setq tst (getvar "textstyle"))
  21. ;; set text style you need:
  22. (setvar "textstyle" "Standard")
  23. ;; set text size
  24. (setq thgt (getdist "\nText Height: "))
  25. (if (not thgt)(setq thgt (getvar "dimtxt")))
  26. (setvar "textsize" thgt)
  27. (princ "\n\t---\tSelect contours\t---")
  28. (setq sset
  29. (ssget
  30. '(
  31. (0 . "LWPOLYLINE")
  32. (8 . "ANNO-AREA"); <-- set layer of polygons
  33. (-4 . "<OR")
  34. (70 . 1);flag for closed curve, linetype generation disabled
  35. (70 . 129);flag for closed curve, linetype generation enabled
  36. (-4 . "OR>")
  37. )
  38. )
  39. )
  40. (setq n 1 tot 0.0)
  41. (while (setq plent (ssname sset 0))
  42. (setq plineObj (vlax-ename->vla-object plent)
  43. ar (vla-get-area plineObj)
  44. tot (+ tot ar)
  45. area (rtos ar 2 2)
  46. )
  47. (setq regionObj (car (vlax-invoke acsp 'addregion (list plineObj))))
  48. (setq centPoint (trans (vlax-get regionObj 'centroid) 1 0))
  49. (setq inspt (vlax-3d-point centPoint))
  50. (setq txtobj (vla-addtext acsp (strcat "Label-"(itoa n)) inspt thgt))
  51. (vla-put-alignment txtobj acAlignmentMiddleCenter)
  52. (vla-put-textalignmentpoint txtobj inspt)
  53. (vla-put-insertionpoint txtobj inspt)
  54. (setq xldata (append xldata (list (list (strcat "Label-"(itoa n)) area))))
  55. (vl-catch-all-apply '(lambda()
  56. (progn (vla-delete regionObj)
  57. (vlax-release-object regionObj)
  58. )))
  59. (setq n (1+ n))
  60. (ssdel plent sset)
  61. )
  62. (print xldata)
  63. (princ "\nTotal: ")
  64. (print tot)
  65. ;;------------------------ Excel part ----------------------------;;
  66. (setq xlapp (vlax-get-or-create-object "Excel.Application")
  67. xlbooks (vlax-get-property xlapp 'Workbooks)
  68. xlbook (vlax-invoke-method xlbooks 'Add)
  69. xlsheets (vlax-get-property xlbook 'Sheets)
  70. xlsheet (vlax-get-property xlsheets 'Item 1)
  71. xlcells (vlax-get-property xlsheet 'Cells)
  72. )
  73. (vla-put-visible xlapp :vlax-true)
  74. (vla-put-name xlsheet "Plan1")
  75. (setq row 1)
  76. (foreach label xldata
  77. (setq col 1)
  78. (foreach item label
  79. (setcelltext xlcells row col item)
  80. (setq col (1+ col)
  81. )
  82. )
  83. (setq row (1+ row)
  84. )
  85. )
  86. (setcelltext xlcells row 1 "Total:")
  87. (setcelltext xlcells row 2 (rtos tot 2 2));<-- precision 2 decimal
  88. (vlax-invoke-method
  89. (vlax-get-property xlsheet 'Columns)
  90. 'AutoFit)
  91. (setq fname (strcat (getvar "dwgprefix")(vl-string-right-trim ".dwg" (getvar "dwgname")) ".xls"))
  92. (vlax-invoke-method
  93. xlbook
  94. 'SaveAs
  95. fname
  96. nil
  97. nil
  98. nil
  99. :vlax-false
  100. :vlax-false
  101. 1
  102. 2
  103. )
  104. (vlax-invoke-method
  105. xlbook 'Close)
  106. (gc)
  107. (vlax-invoke-method
  108. xlapp 'Quit)
  109. (mapcar '(lambda (x)
  110. (vl-catch-all-apply
  111. '(lambda ()
  112. (vlax-release-object x)
  113. )
  114. )
  115. )
  116. (list xlcells xlsheet xlsheets xlbook xlbooks xlapp)
  117. )
  118. (setq xlapp nil)
  119. (gc)(gc)
  120. (alert (strcat "File saved as:\n" fname))
  121. (setvar "textsize" tsz)
  122. (setvar "textstyle" tst)
  123. (vla-endundomark adoc)
  124. (princ)
  125. )
  126. (princ "\n\t---\tStart command with DXLW ...\t---")
  127. (prin1)
  128. (or (vl-load-com)(princ))
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:05:41 | 显示全部楼层
对不起,你的照片不好
如何在这个单元格中写入X,Y坐标?
请告诉我,你想在每个单元格中添加什么
 
如果没有好的屏幕截图,试试这个,非常有限的测试
[code](defun C:ARXL(/acsp adoc ar area centpoint col epar fname inspt leg leg\u list n perim plent pline\u data plineobj regionobjrow spar sset thgt tot tst tsz txtobj xlapp xlbook xlbooks xlcells xldata xlsheet xlsheets)(vl load com);;;局部defun(defun setcelltext(cells row-column value)(vl-catch-all-apply'vlax-put-property(list cells'Item row-column(vlax make variant(vl princ to string value)));;-------------------------------主要部分-------------------------------;;(或adoc(setq adoc(vla get activedocument(vlax get acad object)))(或acsp(setq acsp(vla get block(vla get activelayout adoc)))(vla startundomark adoc)(setq tsz(getvar“textsize”))(setq tst(getvar“textsyle”);;设置所需的文字样式:(setvar“textstyle”“Standard”);;设置文本大小(setq thgt(getdist“\nText Height:”)(if(not thgt)(setq thgt(getvar“dimtxt”)))(setvar“textsize”thgt)(princ“\n\t----\t选择等高线\t---”)(setq sset(ssget’((0。“LWPOLYLINE”)(8。“ANNO-AREA”);vla object plent))(setq spar(vlax curve getstartparam plineObj)epar(vlax curve getendparam plineObj))(while(<spar epar)(setq leg(-vlax curve getdistatparam plineObj(+spar 1))(vlax curve getdistatparam plineObj spar))leg\u list(cons(rtos leg 2)leg\u list))(setq spar(1+spar))(setq leg\u list(reverse leg\u list))(setq ar(vla get area plineObj)perim(rtos(vla get length plineObj)2 2)tot(+tot ar)区域(rtos ar 2 2))(setq regionObj(car(vlax invoke acsp’addregion(list plineObj)))(setq centPoint(trans(vlax get regionObj’centroid)1 0))(setq inspt(vlax-3d-point centPoint))(setq txtobj(vla addtext acsp(strcat”标签-(itoa n))inspt thgt))(vla put alignment txtobj ACALIGNMENTMIDLECENT)(vla put textalignmentpoint txtobj inspt)(vla put insertionpoint txtobj inspt)(setq pline\U data nil)(setq pline\U data(append pline\U data(append(list(strcat)Label-(itoa n))area)(list perim)leg\U list))(setq xldata(append xldata(list pline\U data))(vl catch all apply’(lambda()(progn(vla delete REGIONOBJECT)(vlax release object regionObj)))(setq n(1+n))(ssdel plent sset))(打印xldata)(princ“\n总计:”)(打印tot);---------------------------Excel部分-------------------------------;;(setq xlapp(vlax get or create object“Excel.Application”)xlbook(vlax get property xlapp”工作簿)xlbook(vlax invoke method xlbook’Add)xlsheets(vlax get property xlbook’Sheets)xlsheet(vlax get property xlsheets’Item 1)xlcells(vlax get property xlsheet’Cells))(vla put visible xlapp:vlax true)(vla put name xlsheet“Plan1”)(setq row 1)(foreach label xldata(setq col 1)(每个项目标签(setcelltext xlcells row col item)(setq col(1+col))(setq row(1+row)))(setcelltext xlcells row 1“总计:)(setcelltext xlcells row 2(rtos tot 2 2));
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:10:32 | 显示全部楼层
但是这段代码没有选择任何对象!!!!
当我拖动并尝试选择对象时,命令行中将显示什么:选择对象:找到0!!!
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-5 23:13:45 | 显示全部楼层
自行更改选择过滤器中的层“ANNO-AREA”
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-5 23:15:56 | 显示全部楼层
你真厉害
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 03:09 , Processed in 1.378582 second(s), 76 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表