明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2550|回复: 17

[讨论] 目录生成器,求完善

[复制链接]
发表于 2019-7-26 16:26 | 显示全部楼层 |阅读模式
5明经币
gaics大师的现在是以图号大小排序,目录生成保存在C盘,两个文件。
请高手完善:
1、目录从左到右,从上到上排序。
2、取消  (setq apnt (getpoint "\n选择目录放置点:"))这一步
3、生成的目录.txt文件保存在CAD文件的文件夹位置,只生成目录一个.txt文件。


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

从左到右、从上到下跟图框的基点、对齐方式有很大关系。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-7-26 16:26 | 显示全部楼层
从左到右、从上到下跟图框的基点、对齐方式有很大关系。

  1. (defun c:mm (/              blkname  nametag        numtag         ss          sslist
  2.              file     index0   index        tmp_pt         XZ_sortlist
  3.              s1              s2       s3        s4         lst0          lst
  4.              i              tk       sslist_ptl         path          drawingname
  5.             )
  6.   (setvar "cmdecho" 0)
  7.   (setvar "filedia" 0)
  8.   (princ "\n第1步:请选择“图名”属性字...")
  9.   (setq nametag (choose_att))
  10.   (setq blkname (cdr nametag))
  11.   (setq nametag (car nametag))
  12.   (princ "\n第2步:请选择“图号”属性字...")
  13.   (setq numtag (choose_att))
  14.   (setq numtag (car numtag))
  15.   (princ "\n第3步:请选择需要生成目录的对象...")
  16.   (setq ss (ssget (list '(0 . "insert") (cons 2 blkname))))
  17.   (setq        index0 0
  18.         index  (sslength ss)
  19.         sslist '()
  20.   )
  21.   (repeat index
  22.     (setq sslist (cons (ssname ss index0) sslist))
  23.     (setq index0 (1+ index0))
  24.   )
  25.   ;;开始构建图元点位表
  26.   (setq        index0 0
  27.         sslist_ptl
  28.          '()
  29.         tmp_pt '()
  30.   )
  31.   (repeat index
  32.     (setq tmp_pt
  33.            (cons
  34.              (nth index0 sslist)
  35.              (cons (cdr (assoc 10 (entget (nth index0 sslist)))) tmp_pt)
  36.            )
  37.     )
  38.     (setq sslist_ptl (cons tmp_pt sslist_ptl))
  39.     (setq tmp_pt '())
  40.     (setq index0 (1+ index0))
  41.   )
  42.   ;;开始排序
  43.   ;;从左到右从上到下
  44.   (setq        XZ_sortlist
  45.          (vl-sort
  46.            (vl-sort sslist_ptl
  47.                     '(lambda (s1 s2) (> (cadadr s1) (cadadr s2)))
  48.            )
  49.            '(lambda (s3 s4)
  50.               (if (equal (cadadr s3) (cadadr s4) 300)
  51.                 (< (caadr s3) (caadr s4))
  52.               )
  53.             )
  54.          )
  55.   )
  56.   (setq i 0)
  57.   (setq lst '())
  58.   (setq lst0 '())
  59.   (while (< i (length XZ_sortlist))
  60.     (setq tk (car (nth i XZ_sortlist)))
  61.     (get_att)
  62.     (setq name (cdr (assoc nametag shuxing)))
  63.     (setq num (cdr (assoc numtag shuxing)))
  64.     (setq lst0 (list name num))
  65.     (setq lst (cons lst0 lst))
  66.     (setq i (+ i 1))
  67.   )
  68.   (setq lst (reverse lst))
  69.   (setq path (getvar 'DWGPREFIX))
  70.   (setq drawingname (vl-filename-base (getvar 'DWGNAME)))
  71.   (setq file (open (strcat path drawingname "图纸目录.txt") "w"))
  72.   (setq i 0)
  73.   (while (< i (length lst))
  74.     (write-line
  75.       (strcat (car (nth i lst)) " " (cadr (nth i lst)))
  76.       file
  77.     )
  78.     (setq i (+ i 1))
  79.   )
  80.   (close file)
  81.   (setvar "filedia" 1)
  82.   (princ)
  83. )


  84. (defun get_att ()
  85.   (setq obj (vlax-ename->vla-object tk))
  86.   (setq        shuxing
  87.          (mapcar '(lambda (att)
  88.                     (cons (vla-get-TagString att) (vla-get-TextString att))
  89.                   )
  90.                  (vlax-invoke obj "GetAttributes")
  91.          )
  92.   )
  93. )

  94. (defun choose_att (/ a b)
  95.   (if (setq a (entsel))
  96.     (progn (setq b (car (nentselp (cadr a)))) ;图元名
  97.            (if (/= (cdr (assoc 0 (entget b))) "ATTRIB") ;图元属性
  98.              (progn (alert "******必须选择属性字!******")
  99.                     (choose_att)
  100.              )
  101.              (cons (cdr (assoc 2 (entget b)))
  102.                    (cdr (assoc 2 (entget (car a))))
  103.              )
  104.            )
  105.     )
  106.     (progn (alert "******必须选择属性字!******")
  107.            (choose_att)
  108.     )
  109.   )
  110. )

点评

悬赏20个币求大师帮我完善  发表于 2020-4-19 07:05
回复

使用道具 举报

 楼主| 发表于 2019-7-31 15:25 | 显示全部楼层
gaics 发表于 2019-7-31 14:59
从左到右、从上到下跟图框的基点、对齐方式有很大关系。

太感谢 gaics 大师的热心帮忙 正是我想要的
回复

使用道具 举报

 楼主| 发表于 2019-12-31 20:16 | 显示全部楼层
本帖最后由 KO你 于 2019-12-31 20:18 编辑
gaics 发表于 2019-7-26 16:26
从左到右、从上到下跟图框的基点、对齐方式有很大关系。

gaics大师,如果目录需要   子项名称+图纸名称+图号   
再打个比较,如果图纸名比较长,可能某一张图分了两行或三行,怎么才能办到,
又或者只需要图名不需要图号。可以多选择生成目录
不懂编程的我只能求助大师,万分感谢。
在二楼回贴的基础上修改
求:
第一项点选子项名称,可以多选也可以空选,空格跳至第二项
第二项点选图纸名称,可以多选也可以空选,空格跳至第三项
第三项点选图号编号,单选也可以空选,空格完成


回复

使用道具 举报

发表于 2020-4-19 10:25 | 显示全部楼层
KO你 发表于 2019-12-31 20:16
gaics大师,如果目录需要   子项名称+图纸名称+图号   
再打个比较,如果图纸名比较长,可能某一张图分 ...

我试试吧,这个比较耗精力
回复

使用道具 举报

 楼主| 发表于 2020-4-19 12:06 | 显示全部楼层
gaics 发表于 2020-4-19 10:25
我试试吧,这个比较耗精力

太感谢了,期待中
回复

使用道具 举报

发表于 2020-4-19 14:25 | 显示全部楼层
KO你 发表于 2020-4-19 12:06
太感谢了,期待中

子项名称已加入,可实现空选。多选还在研究中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
KO你 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2020-4-19 15:56 | 显示全部楼层
本帖最后由 gaics 于 2020-4-19 17:05 编辑

可多选、可空选。
按回车键、空格键、鼠标右键、鼠标左键点击空白处,四种方式均可以用来确认选择或跳过选择。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
KO你 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-4-19 22:32 | 显示全部楼层
gaics 发表于 2020-4-19 15:56
可多选、可空选。
按回车键、空格键、鼠标右键、鼠标左键点击空白处,四种方式均可以用来确认选择或跳过选 ...

两个都试过了,运行不了,不知道是什么问题
回复

使用道具 举报

发表于 2020-4-19 22:37 | 显示全部楼层
KO你 发表于 2020-4-19 22:32
两个都试过了,运行不了,不知道是什么问题

是否整个文件都替换?子程序都有改动

评分

参与人数 1金钱 +20 收起 理由
KO你 + 20 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-11 04:19 , Processed in 0.155750 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表