明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4676|回复: 23

[已解答] 求完善下代码.(画线并自动标注功能) (源码来自73.)

[复制链接]
发表于 2014-6-1 22:26 | 显示全部楼层 |阅读模式
本帖最后由 鱼与熊掌 于 2014-6-1 22:30 编辑

搞了一天,没什么进展.来求改善.
73哥的代码,画线并标注text文字.
但是有时候会丢失一个东西,比如说点画着画着就发现少了一条线.
丢失了点.文字标出来了.情况是出现在我用点画之后,忽然使用输入20 然后就没了.

少了个点.
除了优化代码之外.
希望可以改个版本,编程自动dli.并且向外偏移3*(标注比例)的值.  也就是 (getvar "dimscale")
  1. (defun c:ts(/ p q pt)
  2.   ;(setvar'osmode 16384)
  3.   (setq  p(getpoint"指定起点"))
  4.   (while p
  5.     (if p(progn
  6.    (command "pline" p)
  7.   (while(setq q(getpoint p"下一点")pt(mapcar'(lambda(x)(* x 0.5))(mapcar'+ p q)))
  8.     (command q)
  9.     (entmake(list '(0 . "TEXT")(cons 10 pt)(cons 40 1)(cons 1(rtos(distance p q)2 2))
  10.   (cons 50 (if(and (<(/ Pi 2)(angle p q))(>(* 1.5 pi)(angle p q)))(angle q p)(angle p q)))
  11.   (cons 7 "city")(cons 72 1)(cons 73 1)(cons 40 (* 2 (getvar "dimscale")))(cons 11 pt)))
  12.     (setq p q))
  13.   (command "")
  14.   (setq p(getpoint"指定起点")))
  15.       (setvar'osmode(-(getvar osmode)16384))))
  16.   (princ))

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-6-2 17:42 | 显示全部楼层
香田里浪人 发表于 2014-6-2 14:36
鱼与熊掌君,谢谢你答复,

不客气`~~~~~~~~~
回复 支持 1 反对 0

使用道具 举报

发表于 2014-6-3 17:45 | 显示全部楼层
;;根据鱼与熊掌君提供的程序,添加两点:1保留小数位数时如果位数不足可以补零2自定义字高
(defun c:tts (/ p q pt en obj)
;(setvar'osmode 16384)
(setvar"dimzin"0);;保留小数位数时如果位数不足可以补零
(setq TextHeight (getdist "\n请输入文字高度:"))
  (setq os_bak(getvar 'cmdecho))
  (setvar 'cmdecho 0)
  (setq p (getpoint "\n指定起点"))
  (while p
    (if        p
      (progn
        (command "pline" "_non" p)
        (while (setq q        (getpoint p "下一点")
                     pt        (mapcar '(lambda (x) (* x 0.5)) (mapcar '+ p q))
               )
          (command "_non" q)
          (entmake (list '(0 . "TEXT")
                         (cons 10 pt)
                         (cons 40 1)
                         (cons 1 (rtos (distance p q) 2 2))
                         (cons 50
                               (if (and        (< (/ Pi 2) (angle p q))
                                        (> (* 1.5 pi) (angle p q))
                                   )
                                 (angle q p)
                                 (angle p q)
                               )
                         )
                        (cons 8 "标注")
                         (cons 7 "BG_ST")
                         (cons 62 3)                        
                         (cons 72 1)
                         (cons 73 1)
                         (cons 40 TextHeight)
                         (cons 41 0.7)
                         (cons 11 pt)
                   )
          )
          (setq p q)
        )
        (if (>(getvar 'CMDACTIVE) 0) (command ""))
        (setq p (getpoint "\n指定起点"))
      )
      ;(setvar 'osmode (- (getvar osmode) 16384))
    )
  )
  (if (>(getvar 'CMDACTIVE) 0) (command ""))
  (if os_bak(setvar 'cmdecho os_bak))
  (princ)
)
回复 支持 0 反对 1

使用道具 举报

发表于 2022-5-19 09:09 | 显示全部楼层
CAD2006试了,没显示标注
 楼主| 发表于 2014-6-1 23:11 | 显示全部楼层
  1. (defun c:d` ( / p q pt )
  2.     ;(setvar'osmode 16384)
  3.     (setq  p (getpoint"指定起点"))
  4.    
  5.      (while p      
  6.            (if p(progn
  7.            (command "line" p)
  8.         ( while(setq q(getpoint p "下一点"))
  9.              (command q "")
  10.                      
  11.              (setq ang (angle p q))
  12.              (setq pt (polar p (+ ang (* 0.5 pi)) (* 5 (getvar "dimscale"))))
  13.              (command "DIMALIGNED" p q pt)
  14.         
  15.              (command "line" q)

  16.              (setq p q))    ;对换坐标
  17.         ))
  18.            (command "")
  19.            (setq p(getpoint"指定起点"))
  20.       )
  21.    (princ)
  22. )
 楼主| 发表于 2014-6-1 23:20 | 显示全部楼层
getpoint                       `````````
发表于 2014-6-1 23:32 | 显示全部楼层
仅供参考,
  1. (defun c:ts (/ p q pt)
  2. ;(setvar'osmode 16384)
  3.   (setq os_bak(getvar 'cmdecho))
  4.   (setvar 'cmdecho 0)
  5.   (setq p (getpoint "\n指定起点"))
  6.   (while p
  7.     (if        p
  8.       (progn
  9.         (command "pline" "_non" p)
  10.         (while (setq q        (getpoint p "下一点")
  11.                      pt        (mapcar '(lambda (x) (* x 0.5)) (mapcar '+ p q))
  12.                )
  13.           (command "_non" q)
  14.           (entmake
  15.             (list '(0 . "DIMENSION")
  16.                   '(100 . "AcDbEntity")
  17.                   '(100 . "AcDbDimension")
  18.                   (cons        10
  19.                         (polar p
  20.                                (+ (* 0.5 pi) (if (and        (< (/ Pi 2) (angle p q))
  21.                                         (> (* 1.5 pi) (angle p q))
  22.                                    )
  23.                                  (angle q p)
  24.                                  (angle p q)
  25.                                ))
  26.                                (* 6 (getvar "dimscale"))
  27.                         )
  28.                   )
  29.                   '(70 . 33)
  30.                   '(1 . "")
  31.                   '(100 . "AcDbAlignedDimension")
  32.                   (cons 13 (polar q
  33.                                 (+ (* 0.5 pi) (if (and        (< (/ Pi 2) (angle p q))
  34.                                         (> (* 1.5 pi) (angle p q))
  35.                                    )
  36.                                  (angle q p)
  37.                                  (angle p q)
  38.                                ))
  39.                                (* 3 (getvar "dimscale"))
  40.                         ))
  41.                   (cons 14 (polar p
  42.                                (+ (* 0.5 pi) (if (and        (< (/ Pi 2) (angle p q))
  43.                                         (> (* 1.5 pi) (angle p q))
  44.                                    )
  45.                                  (angle q p)
  46.                                  (angle p q)
  47.                                ))
  48.                                (* 3 (getvar "dimscale"))
  49.                         ))
  50.             )
  51.           )
  52.           (entmake (list '(0 . "TEXT")
  53.                          (cons 10 pt)
  54.                          (cons 40 1)
  55.                          (cons 1 (rtos (distance p q) 2 2))
  56.                          (cons 50
  57.                                (if (and        (< (/ Pi 2) (angle p q))
  58.                                         (> (* 1.5 pi) (angle p q))
  59.                                    )
  60.                                  (angle q p)
  61.                                  (angle p q)
  62.                                )
  63.                          )
  64.                          ;(cons 7 "city")
  65.                          (cons 72 1)
  66.                          (cons 73 1)
  67.                          (cons 40 (* 2 (getvar "dimscale")))
  68.                          (cons 11 pt)
  69.                    )
  70.           )
  71.           (setq p q)
  72.         )
  73.         (if (>(getvar 'CMDACTIVE) 0) (command ""))
  74.         (setq p (getpoint "\n指定起点"))
  75.       )
  76.       ;(setvar 'osmode (- (getvar osmode) 16384))
  77.     )
  78.   )
  79.   (if (>(getvar 'CMDACTIVE) 0) (command ""))
  80.   (if os_bak(setvar 'cmdecho os_bak))
  81.   (princ)
  82. )

评分

参与人数 1金钱 +10 收起 理由
鱼与熊掌 + 10 赞一个!感谢版主

查看全部评分

 楼主| 发表于 2014-6-1 23:32 | 显示全部楼层
好像捕捉变量关了就好了   擦.关贴
 楼主| 发表于 2014-6-1 23:38 | 显示全部楼层
(defun c:d` ( / p q pt )
    ;(setvar'osmode 16384)
     (setq o_os (getvar "osmode"))
     (setvar "osmode" 1)
    (setq  p (getpoint"指定起点"))
    (setvar "osmode" 0)
     (while p      
           (if p(progn
           (command "line" p)
        ( while(setq q(getpoint p))
             (command q "")
                     
             ;(setq ang (angle p q))
             (setq ang (if(and (<(/ Pi 2)(angle p q))(>(* 1.5 pi)(angle p q)))(angle q p)(angle p q)))
             (setq pt (polar p (+ ang (* 0.5 pi)) (* 5 (getvar "dimscale"))))
             (command "DIMALIGNED" p q pt)
             (setq ang nil)
             (command "line" q)

             (setq p q))    ;对换坐标
        ))
           (command "")
           (setq p(getpoint"指定起点"))
      )
    (setvar "osmode" o_os)
   (princ)
)
 楼主| 发表于 2014-6-1 23:55 | 显示全部楼层
edata 发表于 2014-6-1 23:32
仅供参考,


标注样式没跟上,要用当前标注样式~
要改哪里

本帖子中包含更多资源

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

x
发表于 2014-6-1 23:58 | 显示全部楼层
不关捕捉会对command函数执行时,造成错误图形或程序执行失败,因此大多数是关了点。
如果command函数调用的命令很少的话,可以采用"non"来临时关闭捕捉,而整个系统的osmode不需要修改。即使程序出错,也不影响使用。
其二,关闭捕捉的方式,建议采用 + - 16384 方式 。这样即使程序出错,按F3或点击osnap也可以直接开启捕捉模式,而不是将所有捕捉类型关闭。可以在论坛搜索到。
 楼主| 发表于 2014-6-2 00:03 | 显示全部楼层
edata 发表于 2014-6-1 23:58
不关捕捉会对command函数执行时,造成错误图形或程序执行失败,因此大多数是关了点。
如果command函数调用 ...

那你上面贴的代码能不能把标注改成当前样式呢, 就是我的全局比例那边已经改了    字应该更大才是  标注样式没有更上 距离拉长了`.`
发表于 2014-6-2 00:03 | 显示全部楼层
鱼与熊掌 发表于 2014-6-1 23:55
标注样式没跟上,要用当前标注样式~
要改哪里

当前样式不要用替代。
替代需要更改扩展数据的组码。
或者通过vla方式更改标注数据。
该程序中间禁止任何command函数,切记。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 14:51 , Processed in 0.274301 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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