多段线长度
向lisp大师寻求帮助:这是一个包含块的文件,块的属性用于定义钢筋(多段线)的位置、数量和长度;在这个文件中也是我所要求的结果!!(一个表,表示多段线的每个段长度{乘以10}[在excell MROUND函数中])
我是手动完成的第一步,我使用这个lisp:
(vl-load-com)
(defunc:mult-info_po2CSV ( / js file_name cle f_open key_sep str_sep oldimlst_lay-seg lst_id-seg lst_pt lst_length lst_alpha lst_rad nb id
n obj ename pr dist_start dist_end pt_start pt_end seg_len seg_bulge rad alpha)
(princ "\nSelectionner les polylignes optimisees.")
(while (null (setq js (ssget '((0 . "LWPOLYLINE")))))
(princ "\nSelection vide, ou ce ne sont pas des LWPOLYLINE!")
)
(command "_.ddunits"
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
(setq file_name (getfiled "Nom du fichier a creer ?: " (strcat (substr(getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 3)) "csv") "csv"37))
(if (null file_name) (exit))
(if (findfile file_name)
(progn
(prompt "\nFichier existe deja!")
(initget "Ajoute Remplace annUler _Add Replace Undo")
(setq cle
(getkword "\nDonnees dans fichier? <R>: ")
)
(cond
((eq cle "Add")
(setq cle "a")
)
((or (eq cle "Replace") (eq cle ()))
(setq cle "w")
)
(T (exit))
)
(setq f_open (open file_name cle))
)
(setq f_open (open file_name "w"))
)
(initget "Espace Virgule Point-virgule Tabulation _SPace Comma SEmicolon Tabulation")
(setq key_sep (getkword "\nSeparateur ? <Point-virgule>: "))
(cond
((eq key_sep "SPpace") (setq str_sep " "))
((eq key_sep "Comma") (setq str_sep ","))
((eq key_sep "Tabulation") (setq str_sep "\t"))
(T (setq str_sep ";"))
)
(setq oldim (getvar "dimzin"))
(setvar "dimzin" 0)
(setq
lst_lay-seg '()
lst_id-seg '()
lst_pt '()
lst_length '()
lst_alpha '()
lst_rad '()
nb 0
id 0
)
(repeat (setq n (sslength js))
(setq
obj (ssname js (setq n (1- n)))
ename (vlax-ename->vla-object obj)
pr -1
id (1+ id)
nb 1
)
(repeat (fix (vlax-curve-getEndParam ename))
(setq
dist_start (vlax-curve-GetDistAtParam ename (setq pr (1+ pr)))
dist_end (vlax-curve-GetDistAtParam ename (1+ pr))
pt_start (vlax-curve-GetPointAtParam ename pr)
pt_end (vlax-curve-GetPointAtParam ename (1+ pr))
seg_len (- dist_end dist_start)
seg_bulge (vla-GetBulge ename pr)
rad (if (zerop seg_bulge) 0.0 (/ seg_len (* 4.0 (atan seg_bulge))))
alpha (if (zerop seg_bulge) (angle pt_start pt_end) 0.0)
lst_lay-seg (cons (cdr (assoc 8 (entget obj))) lst_lay-seg)
lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa nb)) lst_id-seg)
lst_pt (cons pt_start lst_pt)
lst_length (cons seg_len lst_length)
lst_rad (cons (abs rad) lst_rad)
lst_alpha (cons alpha lst_alpha)
nb (1+ nb)
)
)
(if (eq (vla-get-closed ename) :vlax-false)
(setq lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa nb)) lst_id-seg))
(setq lst_id-seg (cons (strcat "P" (itoa id) "-" (itoa (- nb (fix (vlax-curve-getEndParam ename))))) lst_id-seg))
)
(setq
lst_pt (cons pt_end lst_pt) lst_lay-seg (cons (cdr (assoc 8 (entget obj))) lst_lay-seg)
lst_length (cons 0.0 lst_length) lst_rad (cons 0.0 lst_rad) lst_alpha (cons 0.0 lst_alpha)
nb (1+ nb)
)
)
;(write-line (strcat "Sommaire de " (itoa (sslength js)) " LWPOLYLINES") f_open)
(foreach n
(reverse
(mapcar'list
(append (mapcar '(lambda (x) (strcat x str_sep)) lst_lay-seg) (list (strcat "Calque" str_sep)))
(append (mapcar '(lambda (x) (strcat x str_sep)) lst_id-seg) (list (strcat "N°" str_sep)))
(append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) (mapcar 'car lst_pt)) (list (strcat "Coordonnees X" str_sep)))
(append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) (mapcar 'cadr lst_pt)) (list (strcat "Coordonnees Y" str_sep)))
(append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_length) (list (strcat "Longueurs" str_sep)))
(append (mapcar '(lambda (x) (strcat (angtos x) str_sep)) lst_alpha) (list (strcat "Angles" str_sep)))
(append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_rad) (list (strcat "Rayons" str_sep)))
)
)
(write-line (apply 'strcat n) f_open)
)
(close f_open)
(setvar "dimzin" oldim)
(prin1)
)
然后我有几个公式,但需要很多时间
如果不可能:我还有一个问题:
在lisp中,我是否也可以在excell中附加导出多段线
目标编号(示例8796078304048)
有没有可能在我的区块中创建一个属性,该属性也可能代表这个ObjId编号,那么对我来说,在excell中将它们关联起来会更容易
我知道这可以很快完成,但只有在你的帮助下!!!!!!!!
提前谢谢!!!!!!!!!
多段线长度。图纸 为什么不试试_DATAEXTRACTION命令? 我不可能在这种情况下,我已经做好了尝试!!!
我需要上师的帮助!!! 第一步,查看将pline链接到块属性的“字段”,特别是“长度”,当您更改pline时,块将更新。只需搜索具有1个名称的块并创建一个表就可以了。此示例跨布局查看,但可以只查看模型空间。也可以将导出添加到excel。
Dwgindex。lsp @BIGAL:字段已用于长度。
问题是必须分析多段线(折弯数及其半径)以获得所需的输出。使用_DATAEXTRACTION命令确实不可能做到这一点。因此,编写自定义程序似乎是实现这一点的唯一途径。 李·麦克有一个很好的Lisp程序特性,你可以适应。
“正在使用的字段”我更改了1个条的长度块没有更新?因此发表评论。我选了一个奇怪的吗? 也许您忘记了需要\u UPDATEFIELD(或\u REGEN)? 在我看来,主要问题是动态块“vcBlockPos\u TIGP”。找出哪个块属于哪个多段线,虽然可行,但这本身就是一项任务。如果插入点与“记号”标记的位置重合,事情就会容易得多。
页:
[1]