明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3807|回复: 11

[源码] 标注CR角程序

[复制链接]
发表于 2013-5-9 09:35:22 | 显示全部楼层 |阅读模式

(defun c:wa(/)
  (command "undo" "be")
  (setq orig_cmd(getvar "cmdecho"))  
  (setq orig_osm(getvar "osmode"))
  (setq orig_orth(getvar "orthomode"))
  (setq orig_lay(getvar "clayer"))
  (setq diml_f(getvar "dimlfac"))
  (setvar "errno" 0)
  (setq olderr *error*)
  (defun *error* (msg)
    (setq en_er (getvar "errno"))
    (setq errmsg (strcat "ERRNO = " (itoa en_er) "\n错误:" msg))
    (prompt errmsg)
    (setq *error* olderr)
    (command "undo" "e")
    (command "undo" "")
    (prompt "\n*取消*")
    (princ)
    )  
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (setvar "orthomode" 0)
  (setq cla(strcase orig_lay))
  (prompt"\n-->选取要标注R角和C角的图元:")
  (if (setq ss(ssget))
    (progn
      (setq ss_n(sslength ss)
     n 0
     ssa(ssadd)
     ssl(ssadd)
     ssp(ssadd))
      (repeat ss_n
(setq en(ssname ss n)
       en_type(cdr(assoc 0 (entget en))))
(cond ((= "ARC" en_type)  (ssadd en ssa))
       ((= "LINE" en_type) (ssadd en ssl))
       ((= "LWPOLYLINE" en_type) (ssadd en ssp))  )
(setq n(1+ n)))  ) )
  (if(> (setq ssp_n(sslength ssp)) 0) (ex_pl) )
  (setq ssa_n(sslength ssa)
ssl_n(sslength ssl))
  (if (> ssa_n 0)
    (progn
      (setq list_r '() n 0)
      (repeat ssa_n
(setq en(ssname ssa n)
       en_r(cdr(assoc 40 (entget en))))
(if(= n 0)
   (setq list_r(cons (rtos (* diml_f en_r) 2 3) list_r))
   (progn
     (if(null (setq chk_r(member (rtos (* diml_f en_r) 2 3) list_r)))
       (setq list_r(cons (rtos (* diml_f en_r) 2 3) list_r))
       )  ) )
(setq n(1+ n)))
      (setq list_r_n(length list_r) n 0)
      (repeat list_r_n
(setq te_r(nth n list_r) r_n 0 n1 0)
(repeat ssa_n
   (setq en(ssname ssa n1)
  en_r(cdr(assoc 40 (entget en))))
   (if(= te_r (rtos (* diml_f en_r) 2 3))
     (setq r_n(1+ r_n)
    r_pt(cdr(assoc 10 (entget en)))) )
   (setq n1(1+ n1)) )
(setq pt1(getpoint r_pt "\n-->选取文字起点:")
       pt0(polar r_pt (angle r_pt pt1) (/ (atof te_r) diml_f)))
(if(= "." (substr te_r 1 1))
   (setq te1 "R0")
   (setq te1 "R") )
(if(= r_n 1)
   (setq te(strcat te1 te_r))
   (setq te(strcat (rtos r_n 2 0) "-" te1 te_r)) )
(if(> (car pt1) (car pt0))
   (setq pt2(polar pt1 0 0.5))
   (setq pt2(polar pt1 pi 0.5)))  
(command "leader" pt0 pt1 "" te "")
(setq n(1+ n))) ))
  (if(> ssl_n 0)
    (progn
      (setq ssc(ssadd)
     list_c '()
     n 0)
      (repeat ssl_n
(setq en(ssname ssl n)
       en_ps(cdr(assoc 10 (entget en)))
       en_pe(cdr(assoc 11 (entget en)))
       dx(abs(- (car en_ps) (car en_pe)))
       dy(abs(- (cadr en_ps) (cadr en_pe))))
(if(equal dx dy 0.001)
   (progn
     (ssadd en ssc)
     (if(null (setq chk_c(member (rtos (* diml_f dx) 2 1) list_c)))
       (setq list_c(cons (rtos (* diml_f dx) 2 1) list_c))
       )))
(setq n(1+ n)))
      (if(> (setq list_c_n(length list_c)) 0)
(progn
   (setq n 0)
   (repeat list_c_n
     (setq te_c(nth n list_c)
    ssc_n(sslength ssc)
    n1 0
    c_n 0)
     (repeat ssc_n
       (setq en(ssname ssc n1)
      en_ps(cdr(assoc 10 (entget en)))
      en_pe(cdr(assoc 11 (entget en)))
      dx(abs(- (car en_ps) (car en_pe))))
       (if(= te_c (rtos (* diml_f dx) 2 1))
  (setq c_n(1+ c_n)
        c_pt(list (/ (+ (car en_ps) (car en_pe)) 2)
                       (/ (+ (cadr en_ps) (cadr en_pe)) 2))))
       (setq n1(1+ n1)))
     (setq pt1(getpoint c_pt "\n-->点选文字起点 :"))
     (if(= "." (substr te_c 1 1))
       (setq te1 "C0")
       (setq te1 "C"))
     (if(= c_n 1)
       (setq te(strcat te1 te_c))
       (setq te(strcat (rtos c_n 2 0) "-" te1 te_c)))
     (if(> (car pt1) (car c_pt))
       (setq pt2(polar pt1 0 0.5))
       (setq pt2(polar pt1 pi 0.5)))     
     (command "leader" c_pt pt1 "" te "")
     (setq n(1+ n)))))))
  (if sst
    (command "erase" sst ""))
  (setq *error* olderr)
  (command "undo" "e")
  (setvar "cmdecho" orig_cmd)  
  (setvar "osmode" orig_osm)
  (setvar "orthomode" orig_orth)
  (setvar "clayer" orig_lay)
  (prin1)
)
;;;(ex_pl)
(defun ex_pl(/ sst_n en en_type n)
  (command "-layer" "m" "temp-user" "c" "47" "temp-user" "lt" "hidden" "temp-user" "")
  (command "copy" ssp "" (list 0 0) (list 0 0))
  (command "change" ssp "" "p" "la" "temp-user" "")
  (command "explode" ssp)
  (setq sst(ssget "x" '((8 . "TEMP-USER"))))
  (setq sst_n(sslength sst)
n 0)
  (repeat sst_n
    (setq en(ssname sst n)
   en_type(cdr(assoc 0 (entget en))))
    (cond((= "ARC" en_type) (ssadd en ssa))
  ((= "LINE" en_type) (ssadd en ssl))
  )
    (setq n(1+ n))
    )
  (setvar "clayer" orig_lay)
   (princ)
)


          图一


                   图二

以上程序如何修改才能达到图二的效果,请高手指点,谢谢

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 收集|主题: 58, 订阅: 4
发表于 2021-12-10 15:52:01 | 显示全部楼层
确实好用,谢谢高手
发表于 2017-10-26 16:33:07 | 显示全部楼层
确实好用,谢谢高手,
 楼主| 发表于 2013-5-9 20:23:40 | 显示全部楼层
自己顶起来
发表于 2013-5-9 23:19:57 | 显示全部楼层
谢谢楼主分享。我这里就是图2的效果啊,不知道为什么

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-5-10 11:14:00 | 显示全部楼层
669423907 发表于 2013-5-9 23:19
谢谢楼主分享。我这里就是图2的效果啊,不知道为什么

有没有大师出来指点小弟一下,谢谢
 楼主| 发表于 2013-5-10 11:15:35 | 显示全部楼层
是哪里出了问题
 楼主| 发表于 2013-5-10 20:17:53 | 显示全部楼层
为什么会这样呢
发表于 2013-5-10 21:33:13 | 显示全部楼层
我的 CAD 设置,你试试吧:

;环境变量
(defun c:q()
(command"blipmode""off"     ;; 控制点标记关
"ucsicon""n"                ;; 非原点
"ucsicon""off"              ;; 不显示UCS图标
"ucs""w"                    ;; UCS的原点为视图(w)
"TSPACEFAC"0.8              ;; 多行文字行距
"tilemode"1                 ;; 当前窗口为模型
"celtype" "bylayer"         ;; 线型随层
"lweight" "bylayer"         ;; 线宽随层
"color" "bylayer"           ;; 颜色随层
"style" "Standard" "宋体" "0" "0.7" "0" "n" "n" );;字体为 宋体

(setvar"plinewid"0)         ;; pl线宽
(setvar"pickstyle" 1)       ;; 全选组
(setvar"DIMPOST" ".")       ;; 标注无前缀
(setvar"acadlspasdoc"1)     ;; 将acad.lsp加载到每一个打开的图形中
(setvar"reporterror"0)      ;; 不发送错误报告到Autodesk
(setvar"textfill"1)         ;; 打印时字体为实心,0为空心
(setvar"FILEDIA"1)          ;; 显示保存对话框
(setvar"hpname""ANSI31")    ;; 默认填充图案
(setvar"hpassoc"1)          ;; 填充关联
(setvar"UCSFOLLOW"0)        ;; UCS 不影响视图
(setvar"DYNMODE"0)          ;; 动态输入关
(setvar"mirrtext"0)         ;; 镜像时不反转文字
(setvar"pickfirst"1)        ;; 先选择后执行
(setvar"qaflags"0)          ;; 先选择后执行
(setvar"snapmode"0)         ;; 捕捉模式关
(setvar"gridmode"0)         ;; 栅格关
(setvar"autosnap"63)        ;; 极轴开(正交55)
(setvar"osmode"6079)        ;; 极轴开对象追踪开对象捕捉开(全部16383)
(setvar"lwdisplay"1)        ;; 线宽开
(setvar"cursorsize"99)      ;; 光标大小
(setenv "AutoSnapSize" "6") ;; 自动捕捉标记大小
(setvar"pickbox"8)          ;; 靶框大小
(setvar"aperture"5)         ;; 对象捕捉靶框高度
(setvar"gripcolor"5)        ;; 未选定夹点的颜色(蓝) 悬停夹点绿
(setvar"griphover"3)        ;; 光标停在夹点上时其夹点的填充颜色靶框开
(setvar"apbox"1)            ;; 绘图时显示靶框
(setvar"snapang"0)          ;; 光标角度0°
(setvar"clayer""0")         ;; 当前层为0层
(setvar"lockui"13)          ;; 锁定 浮动、固定的工具栏和浮动窗口
(princ))
 楼主| 发表于 2013-5-11 11:36:42 | 显示全部楼层
669423907 发表于 2013-5-10 21:33
我的 CAD 设置,你试试吧:

;环境变量

谢谢您的指教
发表于 2013-5-11 17:26:20 | 显示全部楼层
;环境变量
(defun c:q()
(command"blipmode""off"     ;; 控制点标记关
"ucsicon""n"                ;; 非原点

环境变量的资料收下了:)
发表于 2015-6-28 13:07:02 | 显示全部楼层
很好用  谢谢了  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 22:23 , Processed in 0.231341 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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