乐筑天下

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

[编程交流] 多段线长度

[复制链接]

25

主题

106

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2022-7-5 17:22:05 | 显示全部楼层 |阅读模式
向lisp大师寻求帮助:
这是一个包含块的文件,块的属性用于定义钢筋(多段线)的位置、数量和长度;在这个文件中也是我所要求的结果!!(一个表,表示多段线的每个段长度{乘以10}[在excell MROUND函数中])
我是手动完成的第一步,我使用这个lisp:
  1. (vl-load-com)
  2. (defun  c:mult-info_po2CSV ( / js file_name cle f_open key_sep str_sep oldim  lst_lay-seg lst_id-seg lst_pt lst_length lst_alpha lst_rad nb id
  3.                              n obj ename pr dist_start dist_end pt_start pt_end seg_len seg_bulge rad alpha)
  4. (princ "\nSelectionner les polylignes optimisees.")
  5. (while (null (setq js (ssget '((0 . "LWPOLYLINE")))))
  6.    (princ "\nSelection vide, ou ce ne sont pas des LWPOLYLINE!")
  7. )
  8. (command "_.ddunits"
  9.    (while (not (zerop (getvar "cmdactive")))
  10.      (command pause)
  11.    )
  12. )
  13.   (setq file_name (getfiled "Nom du fichier a creer ?: " (strcat (substr  (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 3)) "csv") "csv"  37))
  14. (if (null file_name) (exit))
  15. (if (findfile file_name)
  16.    (progn
  17.      (prompt "\nFichier existe deja!")
  18.      (initget "Ajoute Remplace annUler _Add Replace Undo")
  19.      (setq cle
  20.        (getkword "\nDonnees dans fichier? [Ajouter/Remplacer/annUler] <R>: ")
  21.      )
  22.      (cond
  23.        ((eq cle "Add")
  24.          (setq cle "a")
  25.        )
  26.        ((or (eq cle "Replace") (eq cle ()))
  27.          (setq cle "w")
  28.        )
  29.        (T (exit))
  30.      )
  31.      (setq f_open (open file_name cle))
  32.    )
  33.    (setq f_open (open file_name "w"))
  34. )
  35. (initget "Espace Virgule Point-virgule Tabulation _SPace Comma SEmicolon Tabulation")
  36. (setq key_sep (getkword "\nSeparateur [Espace/Virgule/Point-virgule/Tabulation]? <Point-virgule>: "))
  37. (cond
  38.    ((eq key_sep "SPpace") (setq str_sep " "))
  39.    ((eq key_sep "Comma") (setq str_sep ","))
  40.    ((eq key_sep "Tabulation") (setq str_sep "\t"))
  41.    (T (setq str_sep ";"))
  42. )
  43. (setq oldim (getvar "dimzin"))
  44. (setvar "dimzin" 0)
  45. (setq
  46.    lst_lay-seg '()
  47.    lst_id-seg '()
  48.    lst_pt '()
  49.    lst_length '()
  50.    lst_alpha '()
  51.    lst_rad '()
  52.    nb 0
  53.    id 0
  54. )
  55. (repeat (setq n (sslength js))
  56.    (setq
  57.      obj (ssname js (setq n (1- n)))
  58.      ename (vlax-ename->vla-object obj)
  59.      pr -1
  60.      id (1+ id)
  61.      nb 1
  62.    )
  63.    (repeat (fix (vlax-curve-getEndParam ename))
  64.      (setq
  65.        dist_start (vlax-curve-GetDistAtParam ename (setq pr (1+ pr)))
  66.        dist_end (vlax-curve-GetDistAtParam ename (1+ pr))
  67.        pt_start (vlax-curve-GetPointAtParam ename pr)
  68.        pt_end (vlax-curve-GetPointAtParam ename (1+ pr))
  69.        seg_len (- dist_end dist_start)
  70.        seg_bulge (vla-GetBulge ename pr)
  71.        rad (if (zerop seg_bulge) 0.0 (/ seg_len (* 4.0 (atan seg_bulge))))
  72.        alpha (if (zerop seg_bulge) (angle pt_start pt_end) 0.0)
  73.        lst_lay-seg (cons (cdr (assoc 8 (entget obj))) lst_lay-seg)
  74.        lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa nb)) lst_id-seg)
  75.        lst_pt (cons pt_start lst_pt)
  76.        lst_length (cons seg_len lst_length)
  77.        lst_rad (cons (abs rad) lst_rad)
  78.        lst_alpha (cons alpha lst_alpha)
  79.        nb (1+ nb)
  80.      )
  81.    )
  82.    (if (eq (vla-get-closed ename) :vlax-false)
  83.      (setq lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa nb)) lst_id-seg))
  84.      (setq lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa (- nb (fix (vlax-curve-getEndParam ename))))) lst_id-seg))
  85.    )
  86.    (setq
  87.      lst_pt (cons pt_end lst_pt) lst_lay-seg (cons (cdr (assoc 8 (entget obj))) lst_lay-seg)
  88.      lst_length (cons 0.0 lst_length) lst_rad (cons 0.0 lst_rad) lst_alpha (cons 0.0 lst_alpha)
  89.      nb (1+ nb)
  90.    )
  91. )
  92. ;(write-line (strcat "Sommaire de " (itoa (sslength js)) " LWPOLYLINES") f_open)
  93. (foreach n
  94.    (reverse
  95.      (mapcar'list
  96.        (append (mapcar '(lambda (x) (strcat x str_sep)) lst_lay-seg) (list (strcat "Calque" str_sep)))
  97.        (append (mapcar '(lambda (x) (strcat x str_sep)) lst_id-seg) (list (strcat "N°" str_sep)))
  98.        (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) (mapcar 'car lst_pt)) (list (strcat "Coordonnees X" str_sep)))
  99.        (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) (mapcar 'cadr lst_pt)) (list (strcat "Coordonnees Y" str_sep)))
  100.        (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_length) (list (strcat "Longueurs" str_sep)))
  101.        (append (mapcar '(lambda (x) (strcat (angtos x) str_sep)) lst_alpha) (list (strcat "Angles" str_sep)))
  102.        (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_rad) (list (strcat "Rayons" str_sep)))
  103.      )
  104.    )
  105.    (write-line (apply 'strcat n) f_open)
  106. )
  107. (close f_open)
  108. (setvar "dimzin" oldim)
  109. (prin1)
  110. )

然后我有几个公式,但需要很多时间
如果不可能:我还有一个问题:
在lisp中,我是否也可以在excell中附加导出多段线
目标编号(示例8796078304048)
有没有可能在我的区块中创建一个属性,该属性也可能代表这个ObjId编号,那么对我来说,在excell中将它们关联起来会更容易
 
我知道这可以很快完成,但只有在你的帮助下!!!!!!!!
提前谢谢!!!!!!!!!
多段线长度。图纸
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:33:27 | 显示全部楼层
为什么不试试_DATAEXTRACTION命令?
回复

使用道具 举报

25

主题

106

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2022-7-5 17:39:59 | 显示全部楼层
我不可能在这种情况下,我已经做好了尝试!!!
我需要上师的帮助!!!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:49:26 | 显示全部楼层
第一步,查看将pline链接到块属性的“字段”,特别是“长度”,当您更改pline时,块将更新。只需搜索具有1个名称的块并创建一个表就可以了。此示例跨布局查看,但可以只查看模型空间。也可以将导出添加到excel。
 
Dwgindex。lsp
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:04:19 | 显示全部楼层
@BIGAL:字段已用于长度。
 
问题是必须分析多段线(折弯数及其半径)以获得所需的输出。使用_DATAEXTRACTION命令确实不可能做到这一点。因此,编写自定义程序似乎是实现这一点的唯一途径。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:10:49 | 显示全部楼层
李·麦克有一个很好的Lisp程序特性,你可以适应。
 
“正在使用的字段”我更改了1个条的长度块没有更新?因此发表评论。我选了一个奇怪的吗?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:14:35 | 显示全部楼层
也许您忘记了需要\u UPDATEFIELD(或\u REGEN)?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:22:19 | 显示全部楼层
在我看来,主要问题是动态块“vcBlockPos\u TIGP”。找出哪个块属于哪个多段线,虽然可行,但这本身就是一项任务。如果插入点与“记号”标记的位置重合,事情就会容易得多。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 04:20 , Processed in 0.421071 second(s), 68 queries .

© 2020-2025 乐筑天下

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