心愿已了.CAD2024_lisp_图块处理,属性的更改,计算,图块的对齐,entsel entget entmod entdel ssget ssname等等,dxf组号的内容值和type

 打通任督二脉

通过语言识别生成汉字,汉字存入txt

通过txt导入到CAD

通过lisp指令将txt转换为图形处理

图块和文字对齐直线-均布直线-对齐多段线顶点-旋转平行1

图块和文字对齐直线

图块和文字对齐直线-均布直线-对齐多段线顶点-旋转平行

图块:[文字]

-

-------------------------------------------------------------------------------------------------------------------------

(defun c:duiqi () 

  ;将图块与直线对齐,并均分。
  ;先创建的图块排最右
  ;先等分的坐标排最右
  ;刚好对应了
  (defun MoveToPosition (Blockname p_list / ent refPoint dx dy entlist targetx targety) 
    ;移动对象到指定坐标
    (prompt "\n Select an object to move: ")
    ;获得图元名
    ;(setq ent (ssname (ssget) 0))
    ;获得图元信息
    (setq entlist (entget blockname))
    ;(princ entlist)
    (setq targetx (car p_list))
    (setq targety (cadr p_list))
    ;获得图元坐标
    (setq zb (cdr (assoc 10 entlist)))
    ;(princ zb)

    (if blockname 
      (progn 
        (prompt "\n Specify reference point for the object: ")
        (setq refPoint zb)
        ;都移动到零点
        ;(setq targetX 0
        ;      targetY 0
        ;)

        (setq dx (- targetX (car refPoint)))
        (setq dy (- targetY (cadr refPoint)))

        (command "move" blockname "" "" (list dx dy 0) "")
        (princ)
      )
      (princ "No entity selected.")
    )
  )

  (defun GetPointList (startPoint endPoint n / pointList dx dy dz stepX stepY stepZ i) 
    (IF (< N 2) 
      (SETQ N 2)
    )
    (setq pointList nil)
    (setq dx (- (car endPoint) (car startPoint)))
    (setq dy (- (cadr endPoint) (cadr startPoint)))
    (setq dz (- (caddr endPoint) (caddr startPoint)))
    (setq stepX (/ dx (- n 1)))
    (setq stepY (/ dy (- n 1)))
    (setq stepZ (/ dz (- n 1)))
    (setq i 0)

    (while (< i n) 
      (setq point (list (+ (car startPoint) (* i stepX)) 
                        (+ (cadr startPoint) (* i stepY))
                        (+ (caddr startPoint) (* i stepZ))
                  )
      )
      (setq pointList (cons point pointList))
      (setq i (+ i 1))
    )

    pointList
  )

  ;; 示例用法:
  ;; (c:GetPointList '(0.0 0.0 0.0) '(100.0 100.0 0.0) 5)
  ;; 这将返回从(0, 0, 0)到(100, 100, 0)的4个等分点的列表
  ;只选择图块,67 0只得模型空间
  (terpri)
  (princ "\n 请选择图块:")

  (Setq SS1 (SsGet (list (cons 0 "INSERT,MTEXT,TEXT") (cons 67 0))))
  ;获得直线句柄
  (terpri)
  (princ "\n 请选择要对齐的直线:")
  (SETQ LNAME (SSNAME (SSGET) 0))
  
<think>好的,我现在需要解决用户的问题,他们想寻找AutoCAD LISP程序或工具来提取图形表格。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息。 引用[1]提到了AutoLISP的自动尺寸标注示例,虽然主要是关于标注,但里面展示了如何使用dimlinearcommand函数,这可能对提取图形数据有帮助。引用[2]中的展点插件LISP程序可以读取DAT文件生成小球体,说明有处理外部数据的能力。引用[4]讨论的是从方格网提取高程数据并输出到Excel,这直接涉及到数据提取导出,特别是处理外部文件的部分,比如保存为XLS文件。引用[3]提到了将数据写入Excel的函数,这可能与表格处理相关。 接下来,我需要根据这些信息,整理出可能的解决方案。用户需要提取图形表格,所以可能需要从图纸中获取坐标、属性或表格数据,并将其导出到文件。引用[4]中的示例展示了如何输出数据到Excel,这可能适用于表格提取。图形数据的提取可能需要遍历实体,获取它们的几何信息,如点坐标,然后写入文件。例如,引用[2]中的代码处理DAT文件,可能涉及到读取或写入坐标数据。 然后,我应该考虑编写示例代码。例如,提取多段线顶点坐标的LISP程序,使用entget函数获取实体数据,遍历顶点,并将坐标写入文本文件。对于表格,可能需要处理属性块或提取文本实体,如引用[4]中的导出到Excel的方法。另外,引用[3]中的DSX-Excel-Put-RowList函数可能用于将数据写入Excel,但用户需要确保该函数已定义或存在相关库。 还需要注意用户提到的工具下载,但引用中没有提供下载链接,所以可能需要建议用户搜索特定名称的工具,或提供代码示例供他们自己实现。同时,提醒用户数据处理后的调整步骤,如引用[4]中提到的将XLS转换为DAT需要调整格式。 最后,生成相关问题,帮助用户深入解决可能遇到的其他问题,比如错误处理、批量处理或特定格式转换。需要确保回答结构清晰,分点说明方法、示例注意事项,并引用相关段落支持。</think>根据您对AutoCAD LISP提取图形表格数据的需求,结合站内技术资料,提供以下解决方案: ### 一、图形数据提取方法 1. **几何图形坐标提取** 使用`entget`函数获取实体属性,结合`ssget`选择集遍历图形元素。例如提取多段线顶点坐标: ```lisp (defun c:ExtractPolyline (/ ent data pts) (setq ent (car (entsel "选择多段线:"))) (setq data (entget ent)) (foreach item data (if (= (car item) 10) (setq pts (cons (cdr item) pts)) ) ) (write-line (vl-princ-to-string (reverse pts)) (open "coords.txt" "w")) (princ "\n坐标已保存至coords.txt") ) ``` 2. **属性块数据提取** 针对带属性图块(如设备编),可通过`attrib`标签提取: ```lisp (defun c:GetBlockAtt (/ blk atts) (setq blk (car (entsel "选择图块:"))) (setq atts (vlax-invoke (vlax-ename->vla-object blk) 'GetAttributes)) (mapcar 'vlax-get-property atts 'TextString) ) ``` ### 二、表格数据提取方案 1. **CAD表格转Excel** 引用[4]的飞时达土方数据处理方法: ```lisp (defun c:Table2Excel (/ ss rowData) (setq ss (ssget "_X" '((0 . "TEXT")))) (setq outFile (open "table.csv" "w")) (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (setq txt (cdr (assoc 1 (entget ent)))) (write-line txt outFile) ) (close outFile) ) ``` 2. **直接操作Excel(需DSX库支持)** 引用[3]的`DSX-Excel-Put-RowList`函数可实现数据写入: ```lisp (defun c:ExportTable () (setq dataList '(("X" "Y" "Z") ("100" "200" "50.5"))) (DSX-Excel-Put-RowList dataList 1 1) ) ``` ### 三、现成工具推荐 1. **飞时达土方插件** 支持自动提取方格网高程数据并生成Excel报表[^4] 2. **EagleTool工具集** 包含批量提取坐标、属性导出等功能(需自行搜索下载) ### 四、注意事项 - 坐标系转换:提取前需确认图纸是否使用世界坐标系(WCS) - 数据清洗:引用[4]指出直接提取的Excel数据需二次调整格式 - 错误处理:建议添加`(vl-catch-all-apply)`包裹关键代码段防止程序中断[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值