明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 958620832

[源码] 动态引线标注(改版)

    [复制链接]
发表于 2014-12-10 20:59 | 显示全部楼层
好神奇,这么多牛人
发表于 2014-12-30 18:57 | 显示全部楼层
不错的东西,收藏了
发表于 2015-1-1 17:27 | 显示全部楼层
新年快乐!不如再接再励继续改进一下:编辑文字后引线长度自动跟随文字长度变化!
发表于 2015-2-2 10:04 | 显示全部楼层
布朗运动 发表于 2015-1-1 17:27
新年快乐!不如再接再励继续改进一下:编辑文字后引线长度自动跟随文字长度变化!

这个需要做反应器,曾经尝试写过,可以看我发的帖子,有贴源码。集体移动的时候会有问题。
发表于 2015-2-2 11:27 | 显示全部楼层
Bellahx 发表于 2015-2-2 10:04
这个需要做反应器,曾经尝试写过,可以看我发的帖子,有贴源码。集体移动的时候会有问题。

继续请教:
1、反应器多了的话会不会影响CAD运行速度?
2、图名下往往带下划线,这个可不可以加个反应器,这样的话图名修改后下面的下划线自动进行长度调整。
3、我的部分图纸使用的快速引线出了很奇怪的问题,不知道和您说的“集体移动的时候会有问题”是不是有类似之处,如有兴趣,请移步至:http://bbs.mjtd.com/thread-112861-1-1.html(匪夷所思的快速引线复制问题(谁看了谁说怪))查看详情。
发表于 2015-2-3 10:38 | 显示全部楼层
布朗运动 发表于 2015-2-2 11:27
继续请教:
1、反应器多了的话会不会影响CAD运行速度?
2、图名下往往带下划线,这个可不可以加个反应器 ...

1: 以前好像看过一个帖子里说反应器多了会影响速度,想想也是这样,不过没有测试过。不知道有没有人来解释一下~
2:http://bbs.mjtd.com/thread-109731-1-1.html  这个里面贴了一个带反应器的写图名程序,有些问题也在里面贴出来了,请教了几个大牛,不过一直也没修改好。
3:表示一直搞不明白cad的引线(⊙o⊙)…从来都是自己动手\(^o^)/~
发表于 2015-2-3 10:50 | 显示全部楼层
本帖最后由 Bellahx 于 2015-2-3 13:21 编辑
布朗运动 发表于 2015-2-2 11:27
继续请教:
1、反应器多了的话会不会影响CAD运行速度?
2、图名下往往带下划线,这个可不可以加个反应器 ...

补充一下,针对你说的标题问题,我觉得反应器并不是一个好的选择。反应器的连接在复制删除时候经常处理不够恰当,容易出错。
我写了一个小程序,直接选择标题以及下面的两条线(选一条或者不选也可以,会自动添加),就可以自动调整线条长度以及距离,有兴趣可以试一下。
  1. ;;;  =================================================;;;   标题修改
  2. ;;;   修改标题与下划线的相关距离
  3. ;;;   默认距离为1mm,按当前字高与3.5比例确定比例
  4. ;;;   字为白色,上面线为蓝色,下面为绿色。
  5. ;;;   注:必须选择文字,直线可选0-2条,少线自动补。
  6. ;;;   多行文字问题未处理。
  7. ;;;   作者:Isabellalhx      命令:ConnectLineToText (CCT)        日期:2014年3月
  8. ;;;  =================================================
  9. (defun C:CCT ()
  10.     (defun *error* (msg)
  11.         (setvar "cmdecho" cmdecho) ;_ 恢复cmdecho系统变量
  12.         (setvar "osmode" TemOsMode) ;_ 恢复osmode系统变量
  13.         (princ "error: ")
  14.         (princ msg) ;_ 打印错误信息
  15.         (princ)
  16.     )
  17.     (setq cmdecho (getvar "cmdecho")) ;_ 保存系统变量cmdecho值
  18.     (setvar "cmdecho" 0) ;_ 关闭命令行的回显提示
  19.     (setq TemOsMode (getvar "osmode"))        ;记录对象捕捉当前值
  20.     ;;(setvar "osmode" 0)                        ;设为不捕捉
  21.     (vl-load-com)                        ;加载ActiveX
  22.                                         ;(command "(vl-load-com)")

  23.     (setvar "cmdecho" 0)                ;设置cad自带命令不显示提示
  24.                                         ;  (setq $orr *error*)
  25.                                         ;  (setq *error* #erryx001)
  26.     (command ".UNDO" "BE")
  27.     (setq Scale              (getvar "DIMSCALE") ;缩放比例(取当前标注比例)
  28.           TitleHeight 3.5                ;标题高3.5
  29.           TextHeight  2.5                ;普通标注高2.5
  30.           TextOff     0.625                ;偏移标准值
  31.     )
  32.     (setq OS# (getvar "osmode"))        ;标记当前对象捕捉状态
  33.     (setvar "osmode" 0)                        ;设置对象捕捉为0
  34.     ;;***********读入标题与直线*********************************
  35.     (prompt "请选择标题(最多可包括两条直线):")
  36.     (terpri)
  37.     (setq Elements (ssget '((0 . "LINE,TEXT,MTEXT"))))
  38.     (setq TotEle (sslength Elements))
  39.     (if        (and (< TotEle 4) (> TotEle 0))
  40.         ;;需要少于3个
  41.         (progn
  42.             (setq TitleFlag 0)
  43.             (setq LineFlag 0)
  44.             (setq i 0)
  45.             (setq LineList ())
  46.             (repeat TotEle
  47.                 (setq Ele (ssname Elements i))
  48.                 (setq Ele (entget Ele))
  49.                 (setq Typ (cdr (assoc 0 Ele)))
  50.                 (if (= Typ "LINE")
  51.                     (progn
  52.                         (setq LineFlag (+ LineFlag 1))
  53.                         (setq LineList (cons Ele LineList))
  54.                     )                        ;progn
  55.                 )                        ;if
  56.                 (if (or (= Typ "TEXT") (= Typ "MTEXT"))
  57.                     (progn
  58.                         (setq TitleFlag (+ TitleFlag 1))
  59.                         (setq Title Ele)
  60.                     )                        ;progn
  61.                 )                        ;if

  62.                 (setq i (+ i 1))
  63.             )                                ;repeat
  64.             (if        (= TitleFlag 1)
  65.                 (progn
  66.                     ;;***********计算标题比例及所需点坐标*******************
  67.                     ;;(setq Title (entget Title))
  68.                     (setq TextPoint (cdr (assoc 10 Title)))
  69.                     (setq Height  (cdr (assoc 40 Title))
  70.                           Scale          (/ Height 3.5)
  71.                           ;;3.5为标题高
  72.                           TextOff 0.625
  73.                     )
  74.                     (setq Width        (+ (caadr (textbox Title))
  75.                                    (* Scale TextOff)
  76.                                 )
  77.                     )
  78.                     (setq StartPoint1
  79.                              (polar TextPoint (* 1.25 pi) (* Scale TextOff))
  80.                     )
  81.                     (setq StartPoint1
  82.                              (polar StartPoint1
  83.                                     (* -0.5 pi)
  84.                                     (* Scale TextOff)
  85.                              )
  86.                     )
  87.                     (setq EndPoint1
  88.                              (polar StartPoint1
  89.                                     0
  90.                                     (+ Width (* Scale TextOff))
  91.                              )
  92.                     )
  93.                     (setq StartPoint2
  94.                              (polar StartPoint1 (* -0.5 pi) (* Scale 1))
  95.                     )
  96.                     (setq EndPoint2
  97.                              (polar EndPoint1
  98.                                     (* -0.5 pi)
  99.                                     (* Scale 1)
  100.                              )
  101.                     )
  102.                     ;;***********计算标题比例及所需点坐标*******************
  103.                     ;;(setq LineNum (sslength LineList))
  104.                     (if        (= LineFlag 0)
  105.                         (progn
  106.                             (command "LINE" StartPoint1 EndPoint1 "")
  107.                             (setq Line1 (entlast))
  108.                             (command "LINE" StartPoint2 EndPoint2 "")
  109.                             (setq Line2 (entlast))
  110.                             (setq Line1 (entget Line1))
  111.                             (setq Line2 (entget Line2))
  112.                             (setq LineList (list Line1 Line2))
  113.                         )                ;progn
  114.                         (if (= LineFlag 1)
  115.                             (progn
  116.                                 (command "LINE"
  117.                                          StartPoint1
  118.                                          EndPoint1
  119.                                          ""
  120.                                 )
  121.                                 (setq Line1 (entlast))
  122.                                 (setq Line1 (entget Line1))
  123.                                 (setq LineList (cons Line1 LineList))
  124.                             )                ;progn
  125.                         )                ;if

  126.                     )
  127.                     (setq old (assoc 62 Title))
  128.                     (setq new '(62 . 7))
  129.                     (if        (= old nil)
  130.                         (setq Title (cons new Title))
  131. ;;;将字换成白色
  132.                         (setq Title (subst new old Title))
  133.                     )                        ;if
  134.                     ;(setq old (assoc 72 Title))
  135.                     ;(setq new '(72 . 1))
  136.                     ;(setq Title (subst new old Title))
  137.                     (entmod Title)

  138.                     (setq Line1 (car LineList))
  139.                     (setq Line2 (cadr LineList))
  140.                     ;;***************将两条直线分别修改属性***************
  141.                     (setq Line1        (subst (vl-list* 10 StartPoint1)
  142.                                        (assoc 10 Line1)
  143.                                        Line1
  144.                                 )
  145.                     )
  146.                     (setq Line1        (subst (vl-list* 11 EndPoint1)
  147.                                        (assoc 11 Line1)
  148.                                        Line1
  149.                                 )
  150.                     )                        ;改坐标
  151.                     (setq old (assoc 62 Line1))
  152.                     (setq new '(62 . 5))
  153.                     (if        (= old nil)
  154.                         (setq Line1 (cons new Line1))
  155.                         (setq Line1 (subst new old Line1))
  156.                     )                        ;换颜色

  157.                     (entmod Line1)
  158.                     ;;表示接受修改
  159.                     (setq Line2        (subst (vl-list* 10 StartPoint2)
  160.                                        (assoc 10 Line2)
  161.                                        Line2
  162.                                 )
  163.                     )
  164.                     (setq Line2        (subst (vl-list* 11 EndPoint2)
  165.                                        (assoc 11 Line2)
  166.                                        Line2
  167.                                 )
  168.                     )                        ;改坐标
  169.                     (setq old (assoc 62 Line2))
  170.                     (setq new '(62 . 3))
  171.                     (if        (= old nil)
  172.                         (setq Line2 (cons new Line2))
  173.                         (setq Line2 (subst new old Line2))
  174.                     )
  175.                     (entmod Line2)


  176.                     ;;**********************************************************未完成
  177.                 )                        ;progn
  178.                 (prompt "未选择文字!")
  179.             )                                ;if
  180.         )                                ;progn
  181.         (progn
  182.             (prompt "选择多余3个!")
  183.             (terpri)
  184.         )
  185.     )                                        ;if
  186.     (setvar "cmdecho" cmdecho) ;_ 恢复cmdecho系统变量
  187.     (setvar "osmode" TemOsMode) ;_ 恢复osmode系统变量
  188. )
发表于 2015-2-3 13:06 | 显示全部楼层
Bellahx 发表于 2015-2-3 10:50
补充一下,针对你说的标题问题,我觉得反应器并不是一个好的选择。反应器的连接在复制删除时候经常处理不 ...

没想到您早就考虑过这个问题了。程序(CCT)很方便,不过有个小问题建议修正一下:图中有一个文字,文字下方有一条直线,启动cct,同时选中文字和直线,确定,文字下方会出现两条重合的直线。
发表于 2015-2-3 13:22 | 显示全部楼层
布朗运动 发表于 2015-2-3 13:06
没想到您早就考虑过这个问题了。程序(CCT)很方便,不过有个小问题建议修正一下:图中有一个文字,文字下 ...

多谢指正 代码已经跟新过~应该没有那个问题啦~
发表于 2015-3-6 15:10 | 显示全部楼层
不知道能不能改为指定到某个图层?还有,如果想修改为指定一种字体而不是当前字体。该怎么办呢?!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 20:25 , Processed in 0.403518 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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