明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2239|回复: 10

Gu_xl 老大编滴哪位老大能改改进来瞧下啊~谢谢

[复制链接]
发表于 2011-12-14 14:13:51 | 显示全部楼层 |阅读模式
本帖最后由 flytoday 于 2011-12-14 14:49 编辑

Gu_xl 老大这段代码能不能修改成。。
那个A B  C线是由CAD画好了,
然后您这个程序由命令可以直接附属ABC线属性呢。
然后当然也能显示板厚板编号属性啊。
功能就是这个变了。。。。
http://bbs.mjtd.com/thread-91136-1-1.html原贴
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-12-14 15:16:21 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-12-14 18:04 编辑

  1. ;;;构造匿名块
  2. (defun MakeUnNameBlock (ss pt h a b c bh thickness / count entlist ent blk)
  3.   (setq pt (trans pt 1 0))
  4.   (entmake (list '(0 . "BLOCK")
  5.    '(2 . "*U")
  6.    '(70 . 3)
  7.    (cons 10 pt)
  8.     )
  9.   )
  10.   (setq count 0)
  11.   (repeat (sslength ss)
  12.     (setq entlist (entget (setq ent (ssname ss count))))
  13.     (setq count (1+ count))
  14.     (entmake entlist)
  15.   )
  16.   (setq count 0)
  17.   (repeat (sslength ss)
  18.     (setq ent (ssname ss count))
  19.     (setq count (1+ count))
  20.     (entdel ent)
  21.   )
  22.   (setq blk (entmake '((0 . "ENDBLK"))))
  23.   (regapp "flytoday")
  24.   (if blk
  25.     (progn
  26.       (entmake (list (cons 0 "INSERT")
  27.        '(100 . "AcDbEntity")
  28.        '(100 . "AcDbBlockReference")
  29.        '(66 . 1) ;_ 属性跟随标志,1跟随,0不跟随
  30.        (cons 2 blk)
  31.        (cons 10 pt)
  32.        (cons 41 1.0)
  33.        (cons 42 1.0)
  34.        (cons 43 1.0)
  35.        '(-3 ("flytoday" (1000 . "flytoday")))
  36.         )
  37.       )
  38. ;;;插入板编号属性
  39.       (entmake (list
  40.    '(0 . "ATTRIB")
  41.    '(100 . "AcDbEntity")
  42.    '(100 . "AcDbText")
  43.    (cons 10 pt)
  44.    (cons 40 h)
  45.    (cons 50 0)
  46.    (cons 41 0.8)
  47.    (cons 51 0)
  48.    (cons 1 bh)
  49.    (cons 7 "Standard")
  50.    (cons 72 0)
  51.    (cons 11 pt)
  52.    '(100 . "AcDbAttribute")
  53.    (cons 2 "板编号")
  54.    (cons 70 0)
  55.    (cons 74 2)
  56.         )
  57.       )
  58. ;;;插入厚度属性
  59.       (entmake (list
  60.    '(0 . "ATTRIB")
  61.    '(100 . "AcDbEntity")
  62.    '(100 . "AcDbText")
  63.    (cons 10 (polar pt (* -0.5 pi) (* 1.5 h)))
  64.    (cons 40 h)
  65.    (cons 50 0)
  66.    (cons 41 0.8)
  67.    (cons 51 0)
  68.    (cons 1 thickness)
  69.    (cons 7 "standard")
  70.    (cons 72 0)
  71.    (cons 11 (polar pt (* -0.5 pi) (* 1.5 h)))
  72.    '(100 . "AcDbAttribute")
  73.    (cons 2 "厚度")
  74.    (cons 70 0)
  75.    (cons 74 2)
  76.         )
  77.       )
  78. ;;;插入a线长度属性
  79.       (entmake (list
  80.    '(0 . "ATTRIB")
  81.    '(100 . "AcDbEntity")
  82.    '(100 . "AcDbText")
  83.    (cons 10 (polar pt (* -0.5 pi) (* 3 h)))
  84.    (cons 40 h)
  85.    (cons 50 0)
  86.    (cons 41 0.8)
  87.    (cons 51 0)
  88.    (cons 1 a)
  89.    (cons 7 "standard")
  90.    (cons 72 0)
  91.    (cons 11 (polar pt (* -0.5 pi) (* 3 h)))
  92.    '(100 . "AcDbAttribute")
  93.    (cons 2 "a线长度")
  94.    (cons 70 1)
  95.    (cons 74 2)
  96.         )
  97.       )
  98. ;;;插入b线长度属性
  99.       (entmake (list
  100.    '(0 . "ATTRIB")
  101.    '(100 . "AcDbEntity")
  102.    '(100 . "AcDbText")
  103.    (cons 10 (polar pt (* -0.5 pi) (* 4.5 h)))
  104.    (cons 40 h)
  105.    (cons 50 0)
  106.    (cons 41 0.8)
  107.    (cons 51 0)
  108.    (cons 1 b)
  109.    (cons 7 "standard")
  110.    (cons 72 0)
  111.    (cons 11 (polar pt (* -0.5 pi) (* 4.5 h)))
  112.    '(100 . "AcDbAttribute")
  113.    (cons 2 "b线长度")
  114.    (cons 70 1)
  115.    (cons 74 2)
  116.         )
  117.       )
  118.       (if c
  119. ;;;插入c线长度属性
  120. (entmake (list
  121.      '(0 . "ATTRIB")
  122.      '(100 . "AcDbEntity")
  123.      '(100 . "AcDbText")
  124.      (cons 10 (polar pt (* -0.5 pi) (* 6 h)))
  125.      (cons 40 h)
  126.      (cons 50 0)
  127.      (cons 41 0.8)
  128.      (cons 51 0)
  129.      (cons 1 c)
  130.      (cons 7 "standard")
  131.      (cons 72 0)
  132.      (cons 11 (polar pt (* -0.5 pi) (* 6 h)))
  133.      '(100 . "AcDbAttribute")
  134.      (cons 2 "c线长度")
  135.      (cons 70 1)
  136.      (cons 74 2)
  137.    )
  138. )
  139.       )
  140. ;;;结束标志
  141.       (entmake '((0 . "SEQEND")))
  142.     )
  143.   )
  144.   blk
  145. )
  146. ;;;构造线
  147. (defun makeline (p1 p2)
  148.   (entmake (list (cons 0 "line")
  149.    (cons 10 (trans p1 1 0))
  150.    (cons 11 (trans p2 1 0))
  151.     )
  152.   )
  153. )
  154. ;;;MakeText 生成文字函数,参数: 标注点 文字 字高 宽比 旋转角 倾角
  155. (defun MakeText (xy Txt ZG KB XZ Qj / xyL TxtL ZGL KBL XZL QJL)
  156.    (setq xy (trans xy 1 0));;;坐标换算为世界坐标
  157.       (setq xyL  (cons 10 xy)
  158.      TxtL (cons 1 Txt)
  159.      ZGL  (cons 40 ZG)
  160.      KBL  (cons 41 KB)
  161.      XZL  (cons 50 XZ)
  162.      QJL  (cons 51 QJ)
  163.       )
  164.       (setq TextL (list '(0 . "TEXT")
  165.    '(67 . 0)
  166.    '(100
  167.      .
  168.      "AcDbText"
  169.     )
  170.    xyL
  171.    ZGL
  172.    TxtL
  173.    XZL
  174.    KBL
  175.    QJL
  176.    '(7 . "standard")
  177.     )
  178.       )
  179.       (entmake TextL)
  180.     )
  181. ;;;计算两点的中点
  182. (defun MidPoint (p1 p2)
  183.   (if (and (> (length p1) 2)(> (length p2) 2))
  184.       (list (* 0.5 (+ (car p1) (car p2))) (* 0.5 (+ (cadr p1) (cadr p2))) (* 0.5 (+ (caddr p1) (caddr p2))))
  185.       (list (* 0.5 (+ (car p1) (car p2))) (* 0.5 (+ (cadr p1) (cadr p2))))
  186.   )  
  187.   )
  188. ;;;(Selectif 条件函数 选择动作 提示字串) 条件选择
  189. ;;;(Selectif (lambda (x) (= "TEXT" (gxl-dxf x 0))) entsel "\n选择 TEXT: ")
  190. (defun Selectif ( foo fun str / e )
  191.   (while
  192.     (progn (setvar 'ERRNO 0) (setq e (car (fun str)))      
  193.       (cond
  194.         ( (= 7 (getvar 'ERRNO))
  195.           (princ "\n** 未选中实体, 重新选取 **")
  196.         )
  197.         ( (eq 'ENAME (type e))
  198.           (if (and foo (not (foo e)))
  199.             (princ "\n** 选择实体无效 **")
  200.           )
  201.         )
  202.       )
  203.     )
  204.   )
  205.   e
  206. )
  207. ;;;划线程序
  208. (defun c:tt (/      OLDERR  OSMODE  CMDECHO ORTHOMODE      
  209.       SS      A      B      C      P1      P2      P3
  210.       P4      P0      KD      FLAG *error* en enl
  211.      )
  212.   (defun *error* (msg)
  213.     (setq *error* olderr)
  214.     (Setvar "osmode" osmode)
  215.     (Setvar "cmdecho" cmdecho)
  216.     (Setvar "orthomode" orthomode)
  217.     (princ msg)
  218.   )
  219.   (setq olderr *error*)
  220.   (setq osmode (getvar "osmode"))
  221.   (Setvar "osmode" 687)
  222.   (setq cmdecho (getvar "cmdecho"))
  223.   (Setvar "cmdecho" 0)
  224.   (setq orthomode (getvar "orthomode"))
  225.   (Setvar "orthomode" 1)
  226.   (or txtHeight
  227.       (setq txtHeight (getreal "\n输入字高<400>:"))
  228.   )
  229.   (if (null txtHeight)
  230.     (setq txtHeight 400)
  231.   )
  232.   (while (not flag)
  233.     (setq ss (ssadd)
  234.    a  nil
  235.    b  nil
  236.    c  nil
  237.     )
  238.     (setq en (Selectif (lambda (x) (= "LINE" (cdr (assoc 0 (setq enl (entget x)))))) entsel "\n 选择a线: "))
  239.     (redraw en 3)
  240.     (ssadd en ss)
  241.     (setq p1 (trans (cdr (assoc 10 enl)) 0 1)
  242.    p2 (trans (cdr (assoc 11 enl)) 0 1)
  243.    a (rtos (distance p1 p2) 2 3)
  244.    )
  245.     (MakeText (midpoint p1 (MidPoint p1 p2)) "a" txtHeight 0.8 0 0)
  246.     (ssadd (entlast) ss)
  247.     ;|
  248.     (princ "\n绘a线:")
  249.     (initget 7)
  250.     (setq p1 (getpoint "\n直线第一点:"))
  251.     (initget 7)
  252.     (setq p2 (getpoint p1 "\n直线第二点:"))
  253.     (makeline p1 p2)
  254.     (setq a (rtos (distance p1 p2) 2 3))
  255.     (ssadd (entlast) ss)
  256.     (MakeText (midpoint p1 (MidPoint p1 p2)) "a" txtHeight 0.8 0 0)
  257.     (ssadd (entlast) ss)
  258.     |;
  259.         (setq en (Selectif (lambda (x) (= "LINE" (cdr (assoc 0 (setq enl (entget x)))))) entsel "\n 选择b线: "))
  260.     (redraw en 3)
  261.     (ssadd en ss)
  262.     (setq p3 (trans (cdr (assoc 10 enl)) 0 1)
  263.    p4 (trans (cdr (assoc 11 enl)) 0 1)
  264.    b (rtos (distance p3 p4) 2 3)
  265.    )
  266.     (MakeText (polar (midpoint p3 (MidPoint p3 p4)) 0 (* 0.2 txtHeight)) "b" txtHeight 0.8 0 0)
  267.     (ssadd (entlast) ss)
  268.   ;|
  269.     (princ "\n绘b线:")
  270.     (initget 7)
  271.     (setq p3 (getpoint "\n直线第一点:"))
  272.     (initget 7)
  273.     (setq p4 (getpoint p3 "\n直线第二点:"))
  274.     (makeline p3 p4)
  275.     (setq b (rtos (distance p3 p4) 2 3))
  276.     (ssadd (entlast) ss)
  277.     (MakeText (midpoint p3 (MidPoint p3 p4)) "b" txtHeight 0.8 0 0)
  278.     (ssadd (entlast) ss)
  279.     |;
  280.     ;(setq p0 (inters p1 p2 p3 p4 nil))
  281.     (setq p0 (midpoint
  282.         (apply 'mapcar (cons 'min (list p1 p2 p3 p4)))
  283.        (apply 'mapcar (cons 'max (list p1 p2 p3 p4)))
  284.         )
  285.    )
  286.     (progn
  287.       (setq flag nil)
  288.       (while (and (not Flag) (setq en (car(entsel "\n 选c线: "))))
  289. (setq Flag (= "LINE" (cdr (assoc 0 (setq enl (entget en))))))
  290. )
  291.       (if en
  292. (progn
  293.    (redraw en 3)
  294.     (ssadd en ss)
  295.     (setq p1 (trans (cdr (assoc 10 enl)) 0 1)
  296.    p2 (trans (cdr (assoc 11 enl)) 0 1)
  297.    c (rtos (distance p1 p2) 2 3)
  298.    )
  299.     (MakeText (midpoint p1 (MidPoint p1 p2)) "c" txtHeight 0.8 0 0)
  300.     (ssadd (entlast) ss)
  301.    
  302.    )
  303. )
  304.       ;|
  305. (princ "\n绘c线:")
  306. (if (and
  307.        (setq p1 (getpoint "\n直线第一点:"))
  308.        (setq p2 (getpoint p1 "\n直线第二点:"))
  309.      )
  310.    (progn
  311.      (makeline p1 p2)
  312.      (ssadd (entlast) ss)
  313.      (setq c (rtos (distance p1 p2) 2 3))
  314.     (MakeText (midpoint p1 (MidPoint p1 p2)) "c" txtHeight 0.8 0 0)
  315.     (ssadd (entlast) ss)
  316.    )
  317. )
  318. |;
  319.       (setq bh (getstring "\n板编号:"))
  320.       (setq thickness (getreal"\n厚度:"))
  321.       (if (null thickness) (setq thickness "") (setq thickness (rtos thickness 2 0)))
  322. (MakeUnNameBlock ss p0 txtHeight a b c bh thickness)
  323. (initget 7 "Yes No  ")
  324. (setq Kd (getkword "\n[继续Yes/No]<Yes>"))
  325. (setq Flag (= kd "No"))
  326.       )
  327.   )
  328.   (setq *error* olderr)
  329.   (Setvar "osmode" osmode)
  330.   (Setvar "cmdecho" cmdecho)
  331.   (Setvar "orthomode" orthomode)
  332.   (princ)
  333. )
  334. ;;;双击图块,通过属性输入板编号和厚度值
  335. ;;;导出数据(c:tt1)
  336. (defun c:tt1  (/ SS F N EN LL ENL BBH THICKNESS A B C filename data)
  337.   (setq ss (ssget (list '(0 . "insert") '(-3 ("flytoday")))))
  338.   (if ss
  339.     (progn
  340.       (setq filename (getfiled "保存文件名" "data" "csv" 1))
  341.       (if filename
  342. (progn
  343.    (if (findfile filename)
  344.      (setq f (open filename "a")) ;_ 文件已存在,自动追加
  345.      (progn
  346.        (setq f (open filename "w")) ;_ 文件不存在,新建文件
  347.        (write-line ",a,b,c,板厚" f)
  348.        )
  349.      )
  350.    (repeat (setq n (sslength ss))
  351.      (setq en (ssname ss (setq n (1- n))))
  352.      (setq ll nil)
  353.      (while
  354.        (and (setq en (entnext en))
  355.      (= "ATTRIB"
  356.         (cdr (assoc 0 (setq enl (entget en)))))
  357.      )
  358.         (setq ll (cons (cdr (assoc 1 enl)) ll))
  359.         )
  360.      (if ll
  361.        (progn
  362.   (setq data (cons (reverse ll) data))
  363.   )
  364.        )
  365.      )
  366.    (setq data
  367.    (vl-sort data
  368.      '(lambda (a b)
  369.         (< (atof (cadr a)) (atof (cadr b))))))
  370.    (foreach ll  data
  371.      (setq bbh     (car ll)
  372.     thickness (cadr ll)
  373.     a     (caddr ll)
  374.     b     (cadddr ll)
  375.     c     (car (cddddr ll))
  376.     )
  377.      (WRITE-LINE
  378.        (strcat bbh
  379.         ","
  380.         a
  381.         ","
  382.         b
  383.         ","
  384.         (if c
  385.    c
  386.    ""
  387.    )
  388.         ","
  389.         thickness
  390.         )
  391.        f
  392.        )
  393.      )
  394.    (close f)
  395. ;(startapp "notepad.exe" filename)
  396.    )
  397. )
  398.       )
  399.     )
  400.   (princ)
  401.   )



 楼主| 发表于 2011-12-14 15:31:23 | 显示全部楼层
Gu_xl 老大谢谢但是a b  c 图中没显示啊。。其它都完美了

点评

有显示的,你把字高设好!你的图是不是mm为单位?将字高设为大一点,比如400,默认为2,否则字太小你看不见字!  发表于 2011-12-14 15:37
 楼主| 发表于 2011-12-14 15:42:39 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-12-14 15:43:54 | 显示全部楼层
上个您修改的是板编号与板最不显示。。这次这两个显示了。abc不显示了
 楼主| 发表于 2011-12-14 16:03:26 | 显示全部楼层
本帖最后由 flytoday 于 2011-12-14 16:10 编辑


还有板厚那个只要精确到mm就好哈
;;;插入a线长度属性   (cons 70 1)改成0会显示a 线的长度值,这功能保留(以后我有用哈)。。

要求显示上图那个样子的

本帖子中包含更多资源

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

x

点评

去二楼重下一下就可以了,默认字高400!  发表于 2011-12-14 16:32
 楼主| 发表于 2011-12-14 16:41:10 | 显示全部楼层
偶太笨了没表达清楚吧跟字高没关系,,。其它都那么大字了,就是线上要写上AB字样而已
发表于 2011-12-14 16:44:23 | 显示全部楼层
问题似乎已经找到。。。
gu_xl版主的程序
  1. (defun MakeText (xy Txt ZG KB XZ Qj / xyL TxtL ZGL KBL XZL QJL)
  2.    (setq xy (trans xy 1 0));;;坐标换算为世界坐标
  3. ....
屏蔽坐标转换似乎没有问题了

评分

参与人数 1明经币 +1 收起 理由
Gu_xl + 1 正解!

查看全部评分

 楼主| 发表于 2011-12-14 17:03:10 | 显示全部楼层
xiaxiang   Gu_xl 两位老大尽心了搞定了谢谢
 楼主| 发表于 2011-12-14 17:12:26 | 显示全部楼层
谢谢不愧明经大佬   人好  技术强
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-16 19:02 , Processed in 0.208865 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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