明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2141|回复: 7

帮忙加个框选吧,网上的程序,在这谢谢原作者。

[复制链接]
发表于 2012-11-17 12:48:28 | 显示全部楼层 |阅读模式
帮忙加个框选吧,网上的程序,在这谢谢原作者。
如有冒犯,敬请原谅!!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun tiao()
  (setq ang1 (atan y x))
  (setq d (distance pt pt1))
  (setq pt1 (polar pt (+ ang ang1) d))
)
(defun nextt(n / )
  (setq post (+ post n))
  (if (= hsc 0.8)
    (setq pt (polar pt angle (* distxt 0.9)))
    (setq pt (polar pt angle distxt))
  )
)
(defun C:exs(/ stye lay ss en ent sel el layt sty txt pt high scale angle ang
                 post distxt stxt dx dy dxx dyy pt1 p txt1 stxt1 ang1 x y n)
(setq stye (getvar "textstyle"))
(setq lay (getvar "clayer"))
(setvar "CMDECHO" 0)
(prompt "\n选择文本")
(setq ss (ssget))
(setq i 0)
  (repeat (sslength ss)
  (setq en (ssname ss i))
  (setq ent (car en))
(if (/= ent nil)
  (progn
    (setq sel (entget ent))
    (if (= "TEXT" (cdr (assoc 0 sel)))
      (progn
        (setq el (cdr (assoc -1 sel)))
        (command "erase" el "")
        (setq layt (cdr (assoc 8 sel)))
        (setq sty (cdr (assoc 7 sel)))
        (setq txt (cdr (assoc 1 sel)))
        (setq pt (cdr (assoc 10 sel)))
        (setq high (cdr (assoc 40 sel)))
        (setq scale (cdr (assoc 41 sel)))
        (setq angle (cdr (assoc 50 sel)))
        (setq ang (/ (* angle 180) pi))
        (setq post 1)
        (setq distxt (* high scale))
        (princ (strcat "\nDistance between TEXT : <" (rtos distxt 2 3) ">"))
        (setq distxt (getreal))
        (if (= distxt nil) (setq distxt (* high scale)))
        (command "style" sty "" "0" scale "0" "" "" "")
        (command "layer" "s" layt "")
        (setq p 1)                                     ;   
        (setq hsc 1)                                   ;   
        (setq txt1 (substr txt p 1))                   ;   判断文字串中
        (repeat (strlen txt)                           ;   是否有汉字,
          (if (> (ascii txt1) 160) (setq hsc 0.8))     ;   汉字ASCII大
          (setq p (1+ p))                              ;   于160
          (setq txt1 (substr txt p 1))                 ;
        )                                              ;
        (setq stxt nil)
        (while (/= stxt "")
          (setq stxt (substr txt post 1))
         
          (if (<= (ascii stxt) 160)     ;  文字是西文
            (progn
              (setq dx (car pt))
              (setq dy (cadr pt))
;  处理以%开始的扩展字符
              (cond ((= (ascii stxt) 37)   ;  文字是: %
                (progn
                  (setq stxt1 (substr txt (+ post 1) 1))
                  (if (= (ascii stxt1) 37)   ;  判断下一个文字是否也是: %
                    (progn
                      (setq stxt (substr txt post 5))
                      (if (= hsc 0.8)
                        (progn
                          (setq x (* high 0.188))
                          (setq dxx (+ dx x))
                          (setq y (* high scale 0.1))
                          (setq dyy (+ dy y))
                        )
                        (progn
                          (setq dxx dx)
                          (setq dyy dy)
                        )
                      )
                      (setq pt1 (list dxx dyy))
;                      (if (= hsc 0.8) (tiao))    ;如果有汉字, 调整pt1
                      (command "text" pt1 (* high hsc) ang stxt)
                      (nextt 5)
                    )
                    (progn
                      (if (= hsc 0.8)
                        (progn
                          (setq x (* high 0.188))
                          (setq dxx (+ dx x))
                        )
                        (setq dxx dx)
                      )
                      (if (= hsc 0.8)
                        (progn
                          (setq y (* high scale 0.1))
                          (setq dyy (+ dy y))
                        )
                        (setq dyy dy)
                      )
                      (setq pt1 (list dxx dyy))
;                     (if (= hsc 0.8) (tiao))    ;如果有汉字, 调整pt1
                      (command "text" pt1 (* high hsc) ang stxt)
                      (nextt 1)
                    )
                  )
                ))
;  处理以%开始的扩展字符结束

;  处理其它的字母和数字
                (T
                (progn
                  (if (= hsc 0.8)
                    (progn
                      (setq x (* high 0.188))
                      (setq dxx (+ dx x))
                    )
                    (setq dxx dx)
                  )
                  (if (= hsc 0.8)
                    (progn
                      (setq y (* high scale 0.1))
                      (setq dyy (+ dy y))
                    )
                    (setq dyy dy)
                  )
                  (setq pt1 (list dxx dyy))
                  (if (= hsc 0.8) (tiao))    ;如果有汉字, 调整pt1
                  (command "text" pt1 (* high hsc) ang stxt)
                  (nextt 1)
                ))
;  处理其它的字母和数字结束
              )
            )
;  处理汉字
            (progn
              (setq stxt (substr txt post 2))
              (command "text" pt high ang stxt)   
              (setq post (+ post 2))               
              (setq pt (polar pt angle distxt))   
            )                                      
;  处理汉字结束
            
          )
        )
        (command "style" stye "" "" "" "" "" "" "")
        (command "layer" "s" lay "")
        (redraw)
        (setq i (1+ i))
      )
      (princ "\nObject is not a TEXT !")
      )
    )
  )
  (princ)
)
发表于 2012-11-17 14:22:07 | 显示全部楼层
请说明一下,该程序是用来干什么的,你想达到什么要求!
 楼主| 发表于 2012-11-17 14:29:54 | 显示全部楼层
USER2128 发表于 2012-11-17 14:22
请说明一下,该程序是用来干什么的,你想达到什么要求!

您好!终于有侠来了,呵呵。
这是一个炸开字串的程序,原程序只单选,我试着框选,可加不出来。
希望有大侠帮把手。谢谢。
发表于 2012-11-17 15:31:27 | 显示全部楼层
你贴出来的程序本身就有错,改进了错误后发现,不能“批选”是因捕捉打开了的原因。
现上传给你完整程序

本帖子中包含更多资源

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

x
发表于 2012-11-17 16:27:17 | 显示全部楼层
freeok 发表于 2012-11-17 14:29
您好!终于有侠来了,呵呵。
这是一个炸开字串的程序,原程序只单选,我试着框选,可加不出来。
...

您那个代码不全,没去测试,搞了个没处理特殊字符的,您自己改改,您的原意是炸成线吧,打散一个命令就可以复原,搞结构就搞结构,琢磨这些歪门邪道干什么
  1. ;;; &&&&&&&&&&开始创建单行文字函数&&&&&&&&&&
  2. ;;; 参数:l_n------图层名(字符串)
  3. ;;;      t_10------第一对齐点,如t_72或t_73非零,则该值忽略(点)
  4. ;;;      t_t------文字本身(字符串)
  5. ;;;      t_h------文字高度(整型)
  6. ;;;      t_w------宽度因子(实型)
  7. ;;;      t_st------文字样式(字符串)
  8. ;;;      t_50------倾斜角度(整型)
  9. ;;;      t_72------水平文字对正类型
  10. ;;;      t_73-------垂直文字对正类型
  11. ;;;      t_11------第二对齐点,如t_72和t_73为零,则该值忽略(点)
  12. (defun t_mak (l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st /)
  13.   (entmake (list '(0 . "text")
  14.                  '(100 . "AcDbEntity")
  15.                  (cons 8 l_n)
  16.                  '
  17.                   (100 . "AcDbText")
  18.                  (cons 10 t_10)
  19.                  (cons 1 t_t)
  20.                  (cons 40 t_h)
  21.                  (cons 41 t_w)
  22.                  (cons 7 t_st)
  23.                  (cons 72 t_72)
  24.                  (cons 11 t_11)
  25.                  (cons 50 t_50)
  26.                  (cons 73 t_73)
  27.            )                                ; _ 结束list
  28.   )                                        ; _ 结束entmake

  29. )
  30. ;;; _ 结束defun
  31. ;;;by bbs.mjtd.com TANER
  32. (defun str2celst (str / i lst n stri)
  33.   (setq i 1
  34. n (strlen str)
  35.   )
  36.   (while (<= i n)
  37.     (setq stri (substr str i 1))
  38.     (if (> (ascii stri) 159)
  39.       (setq stri (substr str i 2)
  40.      i  (+ i 2)
  41.      lst  (cons stri lst)
  42.       )
  43.       (setq stri (substr str i 1)
  44.      i  (1+ i)
  45.      lst  (cons stri lst)
  46.       )
  47.     )
  48.     (reverse lst)
  49.   )
  50. )
  51. (defun ent_t_lst(en / l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st t_lst i n)
  52. (setq l_n (cdr (assoc 8(entget en)))
  53.       t_10 (cdr (assoc 10(entget en)))
  54.       t_11 '(0 0 0)
  55.       t_t(cdr (assoc 1(entget en)))
  56.       t_50(cdr (assoc 50(entget en)))
  57.       t_72 0
  58.       t_73 0
  59.       t_h (cdr (assoc 40(entget en)))
  60.       t_w (cdr (assoc 41(entget en)))
  61.       t_st (cdr (assoc 7(entget en)))
  62.       t_lst(str2celst t_t)
  63.       i 0
  64.       n (length t_lst)
  65.       )
  66. (while (< i n)
  67.   (t_mak l_n t_10 t_11 (nth i t_lst) t_50 t_72 t_73 t_h t_w t_st)
  68.   (setq i (1+ i) t_10 (polar t_10 t_50 (* t_h t_w 1.27)))
  69.         )
  70. )
  71. (defun x_ssn (ss / n lst)
  72.   (repeat (setq N (sslength ss))
  73.     (setq LST (cons (ssname SS (setq N (1- N))) LST))
  74.   )
  75. )
  76. (defun c:test1 (/)
  77.   (mapcar '(lambda (x) (ent_t_lst x) (entdel x))
  78.           (x_ssn (ssget '((0 . "text"))))
  79.   )
  80. )
 楼主| 发表于 2012-11-17 22:09:38 | 显示全部楼层
USER2128 发表于 2012-11-17 15:31
你贴出来的程序本身就有错,改进了错误后发现,不能“批选”是因捕捉打开了的原因。
现上传给你完整程序

因捕捉打开的原因,这个会影响到框选不能进行吗?谢谢!
发表于 2012-11-18 07:45:20 | 显示全部楼层
freeok 发表于 2012-11-17 22:09
因捕捉打开的原因,这个会影响到框选不能进行吗?谢谢!

给你的程序可以一次选择一批,在程序执行过程中,注意看状态行,(多回几次车)让程序执行完
 楼主| 发表于 2012-11-19 21:58:00 | 显示全部楼层
x_s_s_1 发表于 2012-11-17 16:27
您那个代码不全,没去测试,搞了个没处理特殊字符的,您自己改改,您的原意是炸成线吧,打散一个命令就可 ...

谢谢您的程序!
不过我只是想达到自己的使用效果。
向前辈致敬!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-21 04:19 , Processed in 0.246530 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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