乐筑天下

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

[编程交流] 提取文本标签和尺寸

[复制链接]

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:07:37 | 显示全部楼层 |阅读模式
大家好,
 
我需要一些关于我正在尝试编写的lisp例程的帮助。我需要做的是通过选择文本来提取一个面板标签,然后选择我需要提取的维度,我已经成功地正确提取了维度,但是当提取信息时,我在面板标签应该在的第一个单元格中得到“nil”,在下一个单元格中得到维度。我的工作站上没有Excel,所以我必须使用CSV文件,我已经编写了一个提取代码,在Excel中运行,以检索CVS文件中的信息。还有没有办法将CVS文件保存在打开图形的同一位置?如果有人能帮助我,我将不胜感激。
 
  1. (defun c:test( / s tx fn i d dl m file)
  2. (setq ss (ssget '((0 . "*text,*DIMENSION")))
  3.       fn "f:\\BrianD\\Dims.csv")
  4. (repeat (setq i (sslength ss))
  5.   (setq d (ssname ss (setq i (1- i)))
  6.         dl (entget d)
  7.         m (cdr (assoc 42 dl)))
  8.         
  9.       (setq tx (cons m tx)))
  10. (if tx
  11.      (progn
  12. (setq file (open fn "a"))
  13.    (write-line "" file)
  14.    (foreach ss tx
  15.      (princ ss file)
  16.        (princ "," file)
  17.       )
  18.    (if file (close file))
  19. )
  20. )
  21. )
  22. (princ)

 
谢谢Brian
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 16:13:46 | 显示全部楼层
在没有例子的情况下,不太确定你在问题的第一部分想要完成什么,但第二部分很简单。要将CSV与图形放在同一文件夹中,只需获取“dwgprefix”变量。即:
 
  1. (setq fn (getvar 'dwgprefix))

 
这将把它放在同一个文件夹中。
 
您声明正在选择文本,然后选择维度,但您只有一个SSGET。可能是你问题的一部分。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:15:52 | 显示全部楼层
 
考虑到DXF组42只会出现在*维度实体中,而不会出现在*文本实体的DXF数据中,这意味着在重复循环的某些迭代中,变量“m”将为空。
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:18:57 | 显示全部楼层
李,
我该怎么做?我需要为文本单独设置ssget吗?我为文本添加了新的dxf组,但现在我只得到了文本。由于某种原因,我无法将此代码放入代码标记中。
 
 
  1. (defun c:test2( / s tx fn i d dl m file)
  2. (setq ss (ssget '((0 . "*text,*DIMENSION")))
  3.       fn "C:\\Lisp routines\\myDims.csv")
  4. (repeat (setq i (sslength ss))
  5.   (setq d (ssname ss (setq i (1- i)))
  6.         dl (entget d)
  7.         m (cdr (assoc 42 dl))
  8.         m (cdr (assoc 1 dl)))
  9.       (setq tx (cons m tx)))
  10. (if tx
  11.      (progn
  12. (setq file (open fn "a"))
  13.    (write-line "" file)
  14.    (foreach ss tx
  15.      (princ ss file)
  16.        (princ "," file)
  17.       )
  18.    (if file (close file))
  19. )
  20. )
  21. )
  22. (princ)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:21:11 | 显示全部楼层
[未测试]
 
  1. (defun c:Test (/ fn ss o i e v)
  2. (if (and (findfile (setq fn "f:\\BrianD\\Dims.csv"))
  3.           (setq ss (ssget '((0 . "TEXT,MTEXT,*DIMENSION"))))
  4.      )
  5.    (progn
  6.      (setq o (open fn "a"))
  7.      (write-line "" o)
  8.      (repeat (setq i (sslength ss))
  9.        (setq e (entget (ssname ss (setq i (1- i)))))
  10.        (if (wcmatch (cdr (assoc 0 e)) "TEXT,MTEXT")
  11.          (write-line (cdr (assoc 1 e)) o)
  12.          (write-line
  13.            (if (not (eq (type (setq v (cdr (assoc 42 e)))) 'STR))
  14.              (rtos v 2)
  15.              v
  16.            )
  17.            o
  18.          )
  19.        )
  20.      )
  21.      (close o)
  22.    )
  23. )
  24. (princ)
  25. )
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:25:38 | 显示全部楼层
塔尔瓦特,
 
 
谢谢
 
 
我测试了它,它给了我CSV文件A行中的所有三个,你能让它把“文本”放在A行,第一个“维度”放在B行,第二个“维度”放在C行吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:28:07 | 显示全部楼层
 
假设您指的是列而不是行,请尝试以下操作:
  1. (defun c:dimtxtexp ( / des dim enx idx sel txt )
  2.    (if (and (setq sel (ssget '((0 . "TEXT,MTEXT,*DIMENSION"))))
  3.             (setq des (open "f:\\BrianD\\Dims.csv" "a"))
  4.        )
  5.        (progn
  6.            (repeat (setq idx (sslength sel))
  7.                (setq enx (entget (ssname sel (setq idx (1- idx)))))
  8.                (if (wcmatch (cdr (assoc 0 enx)) "*DIMENSION")
  9.                    (setq dim (cons (rtos (cdr (assoc 42 enx))) dim))
  10.                    (setq txt (cons (cdr (assoc 1 enx)) txt))
  11.                )
  12.            )
  13.            (while (or dim txt)
  14.                (write-line
  15.                    (strcat
  16.                        (cond ((car  txt)) ("")) ","
  17.                        (cond ((car  dim)) ("")) ","
  18.                        (cond ((cadr dim)) (""))
  19.                    )
  20.                    des
  21.                )
  22.                (setq txt (cdr  txt)
  23.                      dim (cddr dim)
  24.                )
  25.            )
  26.        )
  27.    )
  28.    (if (= 'file (type des)) (close des))
  29.    (princ)
  30. )
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:31:05 | 显示全部楼层
李,
 
 
谢谢,是的,我指的是专栏。它工作得很好。有没有办法将CSV文件保存在与图形相同的位置?CSV的名称是否与图纸的名称相同?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:33:06 | 显示全部楼层
 
  1. (strcat (getvar 'DWGPREFIX) (vl-filename-base (getvar 'DWGNAME)) ".csv")
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:36:51 | 显示全部楼层
李和塔瓦,
 
 
首先我要感谢你们的帮助,我还在学习如何正确编写lisp例程。我不知道在Lee编写的lisp例程中Tharwat编写的代码行放在哪里。在运行excel Extraction宏后,我发现我必须将所有文件保存在一个位置,但只使用图形名称,因此如果您能在lisp中显示它的位置,这将对我有很大帮助。看着你们写的两个不同的lisp,我有一种感觉,仅仅把代码行放在lisp中并不是那么容易。。
 
 
谢谢你,布莱恩。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 19:44 , Processed in 0.431825 second(s), 83 queries .

© 2020-2025 乐筑天下

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