dalivore 发表于 2022-7-6 06:13:18

Autolisp帮助

有人知道如何创建一个lisp来导出包含对象数据和坐标的csv文件吗?
 
实例
 
od字段1、od字段2等。。。x1、y1、z1、x2、y2、z2等。。。。
 
理想情况下,它应该能够报告所有对象数据字段,无论其数量如何。它应该报告多段线的所有xyz坐标。
 
我还需要一个lisp从上述格式导入csv文件。
 
如果你好奇,这一切都是为了解决map3d在导出形状文件时设置的4个坐标限制。。。如果有人有另一种解决方法,我洗耳恭听!
 
Dalivore公司

irneb 发表于 2022-7-6 06:36:14

不确定某处是否已经有这样一个。我知道有很多CSV导出和导入的东西,但如果它们特定于C3D/地图实体数据,我肯定不知道。

BIGAL 发表于 2022-7-6 06:40:07

一个旧的解决方案称为DXF文件,包含所有对象数据和co ORD及其简单的文本文件!

Commandobill 发表于 2022-7-6 06:54:59

我有一些东西埋在档案里。。。让我找到它。这是相当困难的,因为我总是命名我的代码随机当我开始。。。

Commandobill 发表于 2022-7-6 07:12:26

此外,如果你有一个示例dwg,我可以用。。。那太棒了。

Commandobill 发表于 2022-7-6 07:17:55

不完美,但。。。
 
(defun c:objectDataExtract(/ coordslist count ent f fieldnames fieldstring path ss ssents strcatlst tablelist x z)
(vl-load-com)
(if (and (setq path (getfiled "Specify .CSV file name:"
   (getvar 'dwgprefix)
   "csv"
   1
   )
)
   
   (setq ss (ssget "x")); SELECT EVERYTHING
   (setq ssEnts (vl-remove-if-not 'ade_odgettables (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))));Filter out only that which has a table attached to it
       (progn
   (setq f (open path "w"))
   (foreach ent ssents
(setq tablelist (ade_odgettables ent))
(setq count 0)
(repeat (length tablelist)
(foreach def (cdr (assoc "Columns" (ade_odtabledefn (nth count tablelist))))
    (if (not (member (cdr (assoc "ColName" def)) fieldnames))
      (setq fieldnames (cons (cdr (assoc "ColName" def)) fieldnames))
      )
    )

)


(setq strcatlst
       (apply 'strcat (mapcar '(lambda (x)
   (strcat x ": " (If (/= (type (setq fieldstring (ade_odgetfield ent (ade_odgettables ent) x 0))) 'STR)
      (rtos fieldstring 2 2)
      fieldstring) ",")) fieldnames)))

(setq coordsList (apply 'strcat (mapcar '(lambda (z) (strcat (rtos z 2) ",")) (vlax-get (vlax-ename->vla-object ent) 'Coordinates))))
(write-line (strcat strcatlst coordsList) f)

)
   (setq f (close f))
)))
页: [1]
查看完整版本: Autolisp帮助