乐筑天下

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

[编程交流] 向多段线和ex添加数据

[复制链接]

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 07:06:38 | 显示全部楼层
  1. (defun c:dwrite(/ plObj stBl enBl datLst cAns hyObj okFlg cMat mLst mNum)
  2. ; ************ MODIFY LIST OF MATERIALS ************
  3. (setq mLst '(
  4.        (0 . "N/A")
  5.        (1 . "DIN 2391")
  6.        (2 . "DIN 2392")
  7.        (3 . "DIN 2394")
  8.        )
  9. ); end setq
  10. ; ************ MODIFY DEFAULT MATERIAL ************
  11. (if(not dwrite:material)
  12.     (setq dwrite:material "N/A")
  13.    ); end if
  14. (defun Entsel_or_Text(Spaces Message / lChr tStr grLst filPt
  15.                 selSet outVal pSps)
  16. (princ Message)
  17. (setq tStr ""); end setq
  18. (if Spaces
  19.    (setq pSps(list "\r"))
  20.    (setq pSps(list " " "\r"))
  21.    ); end if
  22.   (while
  23.      (and
  24.        (not(member lChr pSps))
  25. (/= 3(car grLst))
  26.        ); end and
  27.      (if
  28.        (setq grLst(grread nil 4 2))
  29.        (progn
  30.         (cond
  31.          ((= 3(car grLst))
  32.           (setq filPt(cadr grLst)
  33.                 selSet(ssget filPt)
  34.                 ); end setq
  35.           (if selSet
  36.                (setq outVal
  37.                (list(ssname selSet 0)filPt))
  38.             ); end if
  39.           ); end condition #1
  40.   ((or
  41.      (equal '(2 13) grLst)
  42.      (equal 25(car grLst))
  43.      ); end or
  44.     (setq lChr "\r"
  45.           outVal tStr); end setq
  46.    ); end condition #2
  47.   ((and
  48.      (equal '(2  grLst)
  49.      (< 0(strlen tStr))
  50.      ); end and
  51.    (setq tStr(substr tStr 1(1-(strlen tStr))))
  52.    (princ(strcat(chr (chr 32)(chr ))
  53.    ); end condition #3
  54.          ((and
  55.      (= 2(car grLst))
  56.      (<= 32(cadr grLst)126)
  57.      ); end and
  58.           (setq lChr(chr(cadr grLst)))
  59.           (if(not(member lChr pSps))
  60.                 (progn
  61.                 (setq tStr(strcat tStr lChr)
  62.                       outVal tStr); end setq
  63.             (princ lChr)
  64.           ); end progn
  65.          ); end if
  66.         ); end condition #4
  67.        ); end cond
  68.       ); end progn
  69.      ); end if
  70.     ); end while
  71.    outVal
  72. ); end of Entsel_or_Text
  73. (while(not okFlg)
  74.    (princ(strcat "\nCurrent material = " dwrite:material))
  75.    (setq plObj(Entsel_or_Text T "\nSelect polyline or [Material]: "))
  76.    (cond
  77.      ((and
  78.   (= 'LIST(type plObj))
  79.   (= "LWPOLYLINE"(cdr(assoc 0(entget(car plObj)))))
  80. ); end and
  81.       (setq plObj(car plObj)
  82.      okFlg T); end setq
  83.       ); end condition #1
  84.      ((= 'LIST(type plObj))
  85.       (princ "\nThis isn't LwPolyline! ")
  86.       ); end condition #2
  87.      ((and
  88. (= 'STR(type plObj))
  89. (member(strcase plObj) '("M" "_M" "MATERIAL" "_MATERIAL"))
  90. ); end and
  91.       (textscr)
  92.       (princ "\n====== MATERIAL LIST ======")
  93.       (foreach m mLst
  94. (princ(strcat "\n[" (itoa(car m)) "] - "(cdr m)))
  95. ); end foreach
  96.       (princ "\n===========================")
  97.       (setq mNum(getint "\nSelect material from list: "))
  98.       (if(and mNum(setq cMat(assoc mNum mLst)))
  99. (progn
  100.    (setq dwrite:material(cdr cMat))
  101.    (graphscr)
  102.    ); end progn
  103. (princ "\nCan't find material with this number! ")
  104. ); end if
  105.       ); end condition #3
  106.      ((null plObj)
  107.        (princ "\nEmpty selection! ")
  108.       ); end condition #4
  109.      (T
  110.       (princ "\nInvalid keyword option! ")
  111.       ); end condition #5
  112.      ); end cond
  113.    ); end while
  114. (while(not stBl)
  115.    (setq stBl(Entsel_or_Text T "\nSelect 'Begin' block or type name: "))
  116.    (cond
  117.      ((and
  118. (= 'LIST(type stBl))
  119. (= "INSERT"(cdr(assoc 0(entget(car stBl)))))
  120. ); end and
  121.        (setq stBl(cdr(assoc 2(entget(car stBl)))))
  122.       ); end condition #1
  123.      ((= 'LIST(type stBl))
  124.        (princ "\nThis isn't block! ")
  125.        (setq stBl nil)
  126.       ); end condition #2
  127.      ((null stBl)
  128.       (princ "\nEmpty input! ")
  129.       ); end condition #3
  130.      ); end cond
  131.    ); end while
  132. (while(not enBl)
  133.    (setq enBl(Entsel_or_Text T "\nSelect 'End' block or type name: "))
  134.    (cond
  135.      ((and
  136. (= 'LIST(type enBl))
  137. (= "INSERT"(cdr(assoc 0(entget(car enBl)))))
  138. ); end and
  139.        (setq enBl(cdr(assoc 2(entget(car enBl)))))
  140.       ); end condition #1
  141.      ((= 'LIST(type enBl))
  142.        (princ "\nThis isn't block! ")
  143.        (setq enBl nil)
  144.       ); end condition #2
  145.      ((null enBl)
  146.       (princ "\nEmpty input! ")
  147.       ); end condition #3
  148.      ); end cond
  149.    ); end while
  150. (setq datLst(list(cons 1 stBl)(cons 2 enBl)(cons 3 dwrite:material))
  151. plObj(vlax-ename->vla-object plObj)
  152. hyObj(vla-get-Hyperlinks plObj)
  153. ); end setq
  154. (if(vlax-ldata-get plObj "PipeData")
  155.      (progn
  156. (initget "Yes No")
  157. (setq cAns(getkword "\nPipe data already exists. Overwrite? [Yes/No]<Yes>: "))
  158. (if(null cAns)(setq cAns "Yes"))
  159. (if(= "Yes" cAns)
  160.   (progn
  161.    (vlax-ldata-delete plObj "PipeData")
  162.    (vlax-ldata-put plObj "PipeData" datLst)
  163.    (vla-Delete(vla-Item hyObj 0))
  164.    (vla-Add hyObj "Has Pipe Data" (strcat "ID: "  (itoa(vla-get-ObjectID plObj))
  165.                                           "\nMaterial: " dwrite:material
  166.                                           "\nLength: " (rtos(vlax-curve-GetDistAtParam plObj
  167.                                                                (vlax-curve-GetEndParam plObj)))))
  168.    (princ "\n<<< Data successfuly added >>> ")
  169.    ); end progn
  170.   ); end if
  171. ); end progn
  172.      (progn
  173.       (vlax-ldata-put plObj "PipeData" datLst)
  174.       (vla-Add hyObj "Has Pipe Data" (strcat "ID: "  (itoa(vla-get-ObjectID plObj))
  175.                                       "\nMaterial: " dwrite:material
  176.                                       "\nLength: " (rtos(vlax-curve-GetDistAtParam plObj
  177.                                                            (vlax-curve-GetEndParam plObj)))))
  178.       (princ "\n<<< Data successfuly added >>> ")
  179.       ); end progn
  180.      ); end if       
  181. (princ)
  182. ); c:dwrite
  183. (defun c:dcollect(/ plSet oLst cDat fDescr fName cAns exApp wbCol cDoc)
  184. (if(setq plSet(ssget "_X" '((0 . "LWPOLYLINE"))))
  185.    (progn
  186.      (foreach pl (mapcar 'vlax-ename->vla-object
  187.                     (vl-remove-if 'listp
  188.                       (mapcar 'cadr(ssnamex plSet))))
  189. (if(setq cDat(vlax-ldata-get pl "PipeData"))
  190.   (progn
  191.     (setq oLst(cons
  192.                 (list
  193.                      (vla-get-ObjectID pl)
  194.                      (vla-get-ConstantWidth pl)
  195.                      (vla-get-Layer pl)
  196.                      (cdr(assoc 1 cDat))
  197.                      (cdr(assoc 2 cDat))
  198.                      (cdr(assoc 3 cDat))
  199.                      (vlax-curve-GetDistAtParam pl
  200.                        (vlax-curve-GetEndParam pl))
  201.                     ); end list
  202.               oLst); end cons
  203.           ); end setq
  204.     ); end progn
  205.   ); end if
  206. ); end foreach
  207.      (if oLst
  208. (progn
  209.   (setq fDescr(open
  210.                 (setq fName(strcat(vl-filename-directory(getvar "SAVENAME"))
  211.                   "\"(vl-filename-base(getvar "DWGNAME")) ".csv")) "w"))
  212.   (write-line "Pipe ID;Diameter;Layer;From;To;Material;Length" fDescr)
  213.   (foreach itm (reverse oLst)
  214.           (write-line(strcat (itoa(nth 0 itm))
  215.                          ";" (strcat(rtos(* 1000.0(nth 1 itm)))
  216.                          ";" (nth 2 itm)
  217.                          ";" (nth 3 itm)
  218.                          ";" (nth 4 itm)
  219.                          ";" (nth 5 itm)
  220.                          ";" (rtos(nth 6 itm)))
  221.                   ); end strcat
  222.         fDescr)
  223.     ); end foreach
  224.   (close fDescr)
  225.   (princ(strcat "\nCSV file location: " fName ))
  226.   (initget "Yes No")
  227.   (setq cAns(getkword "\nOpen file [Yes/No]: "))
  228.   (if(= cAns "Yes")
  229.     (if(setq exApp(vlax-get-or-create-object "Excel.Application"))
  230.       (progn
  231.         (vlax-put-property exApp 'Visible :vlax-true)
  232.         (setq wbCol(vlax-get-property exApp 'Workbooks)
  233.               cDoc(vlax-invoke-method wbCol 'Open fName))
  234.         (vlax-release-object cDoc)
  235.         (vlax-release-object wbCol)
  236.         (vlax-release-object exApp)
  237.         ); end progn
  238.       ); end if
  239.     ); end if
  240.   ); end progn
  241. (princ "\nNo data found! ")
  242. ); end if
  243.      ); end progn
  244.    ); end if
  245. (princ)
  246. ); end of c:dcollect
  247. (defun c:ddata(/ cEnt cDat cPln)
  248. (if(setq cEnt(entsel "\nSelect polyline to view data: "))
  249.    (if(= "LWPOLYLINE"(cdr(assoc 0(entget(car cEnt)))))
  250.      (if(setq cDat(vlax-ldata-get(setq cPln(vlax-ename->vla-object(car cEnt))) "PipeData"))
  251. (alert(strcat
  252.         "                   PIPE DATA                 \n"
  253.         "\nPipe ID: " (itoa(vla-get-ObjectID cPln))
  254.         "\nDiameter: " (rtos(* 1000.0(vla-get-ConstantWidth cPln)2 0))
  255.         "\nLayer: " (vla-get-Layer cPln)
  256.         "\nFrom: " (cdr(assoc 1 cDat))
  257.         "\nTo: " (cdr(assoc 2 cDat))
  258.         "\nMaterial: " (cdr(assoc 3 cDat))
  259.         "\nLength: " (rtos(vlax-curve-GetDistAtParam cPln
  260.                            (vlax-curve-GetEndParam cPln)))
  261.         ); end strcat
  262.       ); end alert
  263. (princ "\nNo data found! ")
  264. ); end if
  265.      (princ "\nThis isn't LwPolyline! ")
  266.      ); end if
  267.    (princ "\nNothing selected! ")
  268.    ); end if
  269. (princ)
  270. ); end of c:ddata
  271. (defun c:ddelete(/ cCnt cAns plSet cDat hyCol cHyp)
  272. (initget 1 "All Selection")
  273. (setq cAns(getkword "\nWhich data to delete [All/Selection]: ")
  274. cCnt 0)
  275. (if(= cAns "All")
  276.    (setq plSet(ssget "_X" '((0 . "LWPOLYLINE"))))
  277.    (setq plSet(ssget '((0 . "LWPOLYLINE"))))
  278.    ); end if
  279. (getstring "\n*** WARNING! All data will deleted. Enter to Continue or Esc to Quite. ***")
  280. (if plSet
  281.    (progn
  282.      (foreach pl (mapcar 'vlax-ename->vla-object
  283.                     (vl-remove-if 'listp
  284.                       (mapcar 'cadr(ssnamex plSet))))
  285. (if(setq cDat(vlax-ldata-get pl "PipeData"))
  286.   (progn
  287.     (vlax-ldata-delete pl "PipeData")
  288.     (setq cCnt(1+ cCnt))
  289.     ); end progn
  290.   ); end if
  291.            (vlax-for hy(vla-get-Hyperlinks pl)
  292.       (if(= "Has Pipe Data"(vla-get-URL hy))
  293.         (vla-Delete hy)
  294.         ); end vlax-for
  295.       ); end vlax-for
  296. ); end foreach
  297.      (if(/= 0 cCnt)
  298. (princ(strcat "\n<<< " (itoa cCnt) " item(s) was deleted >>> "))
  299. (princ "\nNothing data found! ")
  300. ); end if
  301.      ); end progn
  302.    ); end if
  303. (princ)
  304. ); end of c:ddelete
  305. (vl-load-com)

 
数据写入-写入数据
数据收集-将数据放入*。csv文件
DDATA-查看数据
删除-删除所有或选定的数据
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 07:08:06 | 显示全部楼层
福格特说。在测试当前版本之前,请使用DDELETE命令删除所有旧数据。
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 07:12:03 | 显示全部楼层
再次感谢阿斯米,我明天会在办公室试用,并给你任何反馈。非常感谢您的帮助。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 07:15:03 | 显示全部楼层
很好的ASMI编码,
 
但我很好奇。是否有方法更改已附加的现有数据,并且可以将每个数据块打包到单独的单元格中。看起来,如果您想更改对象上的现有数据,您需要删除该对象并重新开始,因此我认为以这种方式附加数据没有多大优势。
 
不管怎样,做得很好,
谢谢你的帖子
它们信息量很大。
秃鹰
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-6 07:19:38 | 显示全部楼层
在asmi的代码中,可以覆盖现有数据,它将首先询问用户是否希望覆盖数据。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 07:22:07 | 显示全部楼层
太好了,
 
但是,如果将多个数据附加到同一个对象,如何调用特定的数据段进行覆盖?
它是否会提示您输入所附的所有数据?
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 07:26:38 | 显示全部楼层
好啊
 
我现在明白了,很抱歉。很棒的节目!。
但是仍然有办法将数据打包到电子表格中的各个单元格中吗?
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 07:29:15 | 显示全部楼层
 

 
 
这些,因此在单独的单元格中(在关联列表((标记数据)…)中)并在CSV文件的单独单元格中提取。
 
 
不需要删除对象,只删除数据。但你不能只删除和添加数据。理论上,你可以把英国百科全书添加到折线中,而且,每一章都在他的单元中。
 
 
你能建议其他方法吗?是的,它们存在。例如,链接到扩展数据中的数据库。但在这种情况下,最好使用字典,因为数据量较低,并且数据库不存在。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 07:31:25 | 显示全部楼层
谢谢你,这是一条信息量很大的帖子。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 07:35:10 | 显示全部楼层
 
一个单元格中的数据?
 
 
在本例中,我在其中使用了一个键和一个关联列表,但您可以使用其中的许多键和各种数据,并且可以单独访问。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:16 , Processed in 0.670743 second(s), 70 queries .

© 2020-2025 乐筑天下

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