明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: wgij007

[提问] 有一想法,不知能不能做到

[复制链接]
 楼主| 发表于 2020-12-5 19:59 | 显示全部楼层
革天明 发表于 2020-12-3 08:56
这个功能还是比较简单的,可加我或发个dwg

抱歉没留意,上传了,谢谢
回复

使用道具 举报

发表于 2020-12-5 21:43 | 显示全部楼层
wgij007 发表于 2020-12-5 19:59
抱歉没留意,上传了,谢谢





用的ARX写的,各CAD版本并不通用,需要具体的CAD版本

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2020-12-5 22:09 | 显示全部楼层
革天明高手已经帮你做好了,请告知你的CAD版本号,可以上传对应的插件,还有是否需要导出到Excel文档?
回复

使用道具 举报

 楼主| 发表于 2020-12-6 10:43 | 显示全部楼层
革天明 发表于 2020-12-5 21:43
用的ARX写的,各CAD版本并不通用,需要具体的CAD版本

效果是这样,是要导出Excel.但我要的是LISP。在学lisp,想参考的。如不能就算了,还是非常感谢,
回复

使用道具 举报

发表于 2020-12-6 11:37 | 显示全部楼层
wgij007 发表于 2020-12-6 10:43
效果是这样,是要导出Excel.但我要的是LISP。在学lisp,想参考的。如不能就算了,还是非常感谢,

Lisp的版本也很简单,有时间了我做一下吧
回复

使用道具 举报

发表于 2020-12-6 11:50 | 显示全部楼层
(vl-load-com)
(defun ss->elst        (ss / elst)
  (setq i 0)
  (repeat (sslength ss)
    (setq elst (cons (ssname ss i) elst)
          i    (1+ i)
    )
  )
  (reverse elst)
)
;;85.1 [功能] 字符串分割
;;http://www.mjtd.com/function/info-129-216.html,有修改 黄明儒 2013年8月9日
;;(setq str   "100,,23456.876,345.456," delim ",")
(defun parse (str delim / LST POS)
  (while (setq pos (vl-string-search delim str))
    (setq lst (cons (substr str 1 pos) lst)
          str (substr str (+ pos 2))
    )
  )
  (if (> (strlen str) 0)
    (setq lst (cons str lst))
  )
  (reverse lst)
)
(defun YJ()
  (setq ss(ssget '((0 . "MTEXT"))))
  (setq sslst(ss->elst ss))
  (setq lst '())
  (setq i 0)
  (repeat (length sslst)
    (setq str(cdr (assoc 1 (entget (nth i sslst)))))
    (setq strlst(parse str "\\"))
    (setq lst(cons strlst lst))
    )
  ;;生成表格

)  

以上得到的结果就是:
(("ABD" "P5 PCS" "Pkopi" "Plk-453") ("ABD" "P5 PCS" "Pkopi" "Plk-453") ("ABD" "P5 PCS" "Pkopi" "Plk-453") ("ABD" "P5 PCS" "Pkopi" "Plk-453") ("ABD" "P5 PCS" "Pkopi" "Plk-453"))

至于在CAD中生成表格还是生成Excel,就自己继续搞吧下面帖子里有生成表格的
http://bbs.mjtd.com/forum.php?mo ... hlight=%B1%ED%B8%F1


回复

使用道具 举报

 楼主| 发表于 2020-12-7 09:25 | 显示全部楼层
革天明 发表于 2020-12-6 11:50
(vl-load-com)
(defun ss->elst        (ss / elst)
  (setq i 0)

感谢。
有没有大神能完善一下吗。
回复

使用道具 举报

 楼主| 发表于 2020-12-7 18:10 | 显示全部楼层
看来要慢慢摸索了。
回复

使用道具 举报

发表于 2020-12-7 20:50 | 显示全部楼层
本帖最后由 wzg356 于 2020-12-7 20:51 编辑

个人觉得,取得多行文字内容这样也行
别对command有偏见
取得多行文字的内容表,一行一元素
(defun Mtext2Lstr (en / e lstr)
        (setq en(entmakex(entget en)))
        (setvar "cmdecho" 0)               
        (command "_explode" en)
        (setvar "cmdecho" 0)
        (while
                (setq e(entnext en))
                (setq str(cdr(assoc 1(entget e))))
                (entdel e)
                (setq lstr(append Lstr(list str)))
        )               
)

回复

使用道具 举报

发表于 2020-12-7 21:01 | 显示全部楼层
本帖最后由 wzg356 于 2020-12-7 21:43 编辑

;根据表内容写表格
;datalst 元素均为字符串的数据表, 一行一子表
;子表长度可不等,以最大列数画表格
;zg字高,pt表格左上角基点
;wlst列宽表(list 5 10...),第0元素/第1列宽,依次类推,最大索引的值代表其之后的列宽
;即列宽表可以指定1个或多个值
;列宽推荐:(字符长度*字高+字高*2)
;行高不设参数,默认=字高*2.5
;使用示例(writetable '(("a" "aa" "aaa" "aaaa")("b" "bb" "bbb" "bbbb")) (list 15 25) (getpoint "表格左上角") 5)

(defun writetable (datals wlst pt zg /  hg lastw i vs n w str w0 pt1 pt2 pt3)
        (setq  hg (* zg 2.5) lastw (last wlst) i 0)
        (foreach vs datals
                (setq n 0  w 0);单行操作开始
                (foreach str  vs
                        (or (setq w0(nth n wlst))(setq w0 lastw));列宽
                        (setq w (+ w w0));列位置                        
                        (setq pt3(mapcar '+ pt(list w (* i hg -1))));单格右上角
                        (setq pt1(mapcar '- pt3 (list w0 hg)));左下角
                        (setq pt2(mapcar '+ pt1 (list (* 0.5 w0) (* 0.5 hg))))
                        (entmake (list '(0 . "TEXT") (cons 1 str) (cons 10 pt2) (cons 40 zg)
                                '(41 . 0.8)(cons 7(getvar 'textstyle))'(72 . 1)(cons 11 pt2)'(73 . 2)))
                        (entmake(append
                                '((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline")(90 . 4)(70 . 1))
                                (mapcar '(lambda (x)(cons 10 x))
                                (list pt1 (list (car pt1)(cadr pt3))pt3(list (car pt3)(cadr pt1)))))
                        );画单格框
                        (setq n (1+ n))
                )(setq i (1+ i))
        )
)
;示例中(list 15 25)表示第一列宽15,第二列及之后列宽25,也可以把每列指定宽度顺序完整设定

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 05:54 , Processed in 0.237747 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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