明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1357|回复: 2

[求助]关于属性块中的属性对齐

[复制链接]
发表于 2006-3-28 18:19 | 显示全部楼层 |阅读模式
请教大侠们,为什么我在选左边的“大块”的时候,运行后得出如下的提示,而选右边的“小块”的时候就没任何问题,下面的是DWG文件,请帮忙看看
  1. 请输入最下部文字栏线的左边点:
  2. 请输入最下部文字栏线的右边点:选择文字,或带属性的块...
  3. 选择对象: 找到 1 个
  4. 选择对象:
  5. 1
  6. 命令: 选择 2144 个,
  7. 是否确实要执行此操作? <N>
复制代码
  1. (defun c:sw_text_edit_3
  2.    (/     ent   ents  pt  ty    ss    i
  3.     pt2   sc    pt_lst  len   pt3   kdbl
  4.     p1    p2    align attpart     elist loop
  5.     p0    txb   width
  6.    )
  7.   ;(mkani)
  8.   ;(command "ucs" "w")
  9.   (setq p1 (getpoint "\n请输入最下部文字栏线的左边点:"))
  10.   (setq p2 (getpoint "\n请输入最下部文字栏线的右边点:"))
  11.   (prompt "选择文字,或带属性的块...")
  12.   (setq ss (ssget
  13.       '((-4 . "<OR") (0 . "TEXT") (0 . "INSERT") (-4 . "OR>"))
  14.     )
  15.   )
  16.   (setq sc 1)
  17.   (setq i 0)
  18.   (repeat (sslength ss)
  19.     (setq ent (ssname ss i))
  20.     (setq ents (entget ent))
  21.     (if (= (cdr (assoc 0 ents)) "TEXT")
  22.       (progn
  23. ;;以下处理TEXT
  24. (setq kdbl (cdr (assoc 41 ents)))
  25. (setq pt2 (cdr (assoc 10 ents)))
  26. (setq
  27.    pt2 (list (/ (+ (car p2) (car p1)) 2) (cadr pt2) (last pt2))
  28. )
  29. (setq pt_lst (textbox ents))
  30. (setq len (- (caadr pt_lst) (caar pt_lst)))
  31. (setq pt3 (polar pt2 (cdr (assoc 50 ents)) (* len sc)))
  32. (setq ents (subst (cons 11 pt2) (assoc 11 ents) ents))
  33. (setq ents (subst (cons 72 1) (assoc 72 ents) ents))
  34. (if (> len (abs (- (car p2) (car p1))))
  35.    (progn (setq kdbl
  36.    (* kdbl
  37.       (/ (- (abs (- (car p2) (car p1))) 1.2) (+ 2 len))
  38.    )
  39.    )
  40.    (setq ents (subst (cons 41 kdbl) (assoc 41 ents) ents))
  41.    )
  42. )
  43. (entmod ents)
  44. (setq i (1+ i))
  45.       )
  46.       (progn
  47. ;;以下处理INSERT中的属性文字
  48. (setq ent (entnext ent))
  49. ;;获取第一个属性图元
  50. (setq loop t
  51.        attpart nil
  52. )
  53. (while (and ent loop)
  54.    (setq elist (entget ent))
  55.    (if (= (cdr (assoc 0 elist)) "ATTRIB")
  56.      (progn
  57.        (setq align (cdr (assoc 72 elist)))
  58.        (cond
  59.   ((= align 0)
  60.    (setq p0 (cdr (assoc 10 elist)))
  61.    (setq txb (textbox elist))
  62.    (setq width (- (car (cadr txb)) (car (car txb))))
  63.    (setq p0 (list (+ (/ width 2.0) (car p0)) (cadr p0) 0))
  64.   )
  65.   ((= align 1)
  66.    (setq p0 (cdr (assoc 11 elist)))
  67.    (setq txb (textbox elist))
  68.    (setq width (- (car (cadr txb)) (car (car txb))))
  69.   )
  70.   ((= align 2)
  71.    (setq p0 (cdr (assoc 11 elist)))
  72.    (setq txb (textbox elist))
  73.    (setq width (- (car (cadr txb)) (car (car txb))))
  74.    (setq p0 (list (- (car p0) (/ width 2.0)) (cadr p0) 0))
  75.   )
  76.        )
  77.        (if (and (> (car p0) (car p1)) (< (car p0) (car p2)) (> WIDTH (ABS (- (CAR P1) (CAR P2)))))
  78.   (progn
  79.     (setq pt2 (cadr p0))
  80.     (setq
  81.       pt2 (list (/ (+ (car p2) (car p1)) 2.0)
  82.          pt2
  83.          0
  84.    )
  85.     )
  86.     (setq kdbl (cdr (assoc 41 elist)))
  87.     (setq pt_lst (textbox elist))
  88.     (setq len (- (caadr pt_lst) (caar pt_lst)))
  89.     (setq kdbl (* kdbl
  90.     (/ (- (abs (- (car p2) (car p1))) 1.2)
  91.        (+ 2 len)
  92.     )
  93.         )
  94.     )
  95.     (setq elist
  96.     (subst (cons 72 1) (assoc 72 elist) elist)
  97.     )
  98.     (setq elist
  99.     (subst (cons 11 pt2) (assoc 11 elist) elist)
  100.     )
  101.     (setq elist
  102.     (subst (cons 41 kdbl) (assoc 41 elist) elist)
  103.     )
  104.     (entmod elist)
  105.   )
  106.        )
  107.      )
  108.    )
  109.    (setq ent (entnext ent))
  110. )
  111. (entmod ents)
  112.       )
  113.     )
  114.     (SETQ I (+ I 1))
  115.   )
  116. )

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2006-3-29 09:43 | 显示全部楼层
顶一个,呵呵
发表于 2006-3-29 12:20 | 显示全部楼层
  1. 直接抓取移动属性看看
  2. ** 拉伸 **
  3. 指定拉伸点或 [基准点(B)/复制(C)/复原(U)/结束(X)]: 2144 已选取,
  4. 您确定要执行此操作吗? <N> *取消*
  5. 图块中物件多时,当修改属性时会出现这个提示
  6. 当然其实是程序没有写好
  7. (defun C:SW_TEXT_EDIT_3 (/ ALIGN1 ATTPART      ELIST  ENT
  8.     ENTS I      KDBL   LEN    P0     P1
  9.     P2 PT2    PT3    PT_LST SC     SS
  10.     TXB WIDTH
  11.    )
  12.   ;;(mkani)
  13.   ;;(command "ucs" "w")
  14.   (setq P1 (getpoint "\n请输入最下部文字栏线的左边点:"))
  15.   (setq P2 (getpoint "\n请输入最下部文字栏线的右边点:"))
  16.   (prompt "选择文字,或带属性的块...")
  17.   (setq SS (ssget
  18.       '((-4 . "<OR") (0 . "TEXT") (0 . "INSERT") (-4 . "OR>"))
  19.     )
  20.   )
  21.   (setq SC 1)
  22.   (setq I 0)
  23.   (repeat (sslength SS)
  24.     (setq ENT (ssname SS I))
  25.     (setq ENTS (entget ENT))
  26.     (if (= (cdr (assoc 0 ENTS)) "TEXT")
  27.       (progn
  28. ;;以下处理TEXT
  29. (setq KDBL (cdr (assoc 41 ENTS)))
  30. (setq PT2 (cdr (assoc 10 ENTS)))
  31. (setq
  32.    PT2 (list (/ (+ (car P2) (car P1)) 2) (cadr PT2) (last PT2))
  33. )
  34. (setq PT_LST (textbox ENTS))
  35. (setq LEN (- (caadr PT_LST) (caar PT_LST)))
  36. (setq PT3 (polar PT2 (cdr (assoc 50 ENTS)) (* LEN SC)))
  37. (setq ENTS (subst (cons 11 PT2) (assoc 11 ENTS) ENTS))
  38. (setq ENTS (subst (cons 72 1) (assoc 72 ENTS) ENTS))
  39. (if (> LEN (abs (- (car P2) (car P1))))
  40.    (progn (setq KDBL
  41.    (* KDBL
  42.       (/ (- (abs (- (car P2) (car P1))) 1.2) (+ 2 LEN))
  43.    )
  44.    )
  45.    (setq ENTS (subst (cons 41 KDBL) (assoc 41 ENTS) ENTS))
  46.    )
  47. )
  48. (entmod ENTS)
  49.       )
  50.       (progn
  51. ;;以下处理INSERT中的属性文字
  52. (setq ENT (entnext ENT))
  53. ;;获取第一个属性图元
  54. (setq ATTPART NIL)
  55. (while ENT
  56.    (setq ELIST (entget ENT))
  57.    (if (= (cdr (assoc 0 ELIST)) "ATTRIB")
  58.      (progn
  59.        (setq ALIGN1 (cdr (assoc 72 ELIST)))
  60.        (cond
  61.   ((= ALIGN1 0)
  62.    (setq P0 (cdr (assoc 10 ELIST)))
  63.    (setq TXB (textbox ELIST))
  64.    (setq WIDTH (- (car (cadr TXB)) (car (car TXB))))
  65.    (setq P0 (list (+ (/ WIDTH 2.0) (car P0)) (cadr P0) 0))
  66.   )
  67.   ((= ALIGN1 1)
  68.    (setq P0 (cdr (assoc 11 ELIST)))
  69.    (setq TXB (textbox ELIST))
  70.    (setq WIDTH (- (car (cadr TXB)) (car (car TXB))))
  71.   )
  72.   ((= ALIGN1 2)
  73.    (setq P0 (cdr (assoc 11 ELIST)))
  74.    (setq TXB (textbox ELIST))
  75.    (setq WIDTH (- (car (cadr TXB)) (car (car TXB))))
  76.    (setq P0 (list (- (car P0) (/ WIDTH 2.0)) (cadr P0) 0))
  77.   )
  78.        )
  79.        (if (and (> (car P0) (car P1))
  80.          (< (car P0) (car P2))
  81.          (> WIDTH (abs (- (car P1) (car P2))))
  82.     )
  83.   (progn
  84.     (setq PT2 (cadr P0))
  85.     (setq
  86.       PT2 (list (/ (+ (car P2) (car P1)) 2.0)
  87.          PT2
  88.          0
  89.    )
  90.     )
  91.     (setq KDBL (cdr (assoc 41 ELIST)))
  92.     (setq PT_LST (textbox ELIST))
  93.     (setq LEN (- (caadr PT_LST) (caar PT_LST)))
  94.     (setq KDBL (* KDBL
  95.     (/ (- (abs (- (car P2) (car P1))) 1.2)
  96.        (+ 2 LEN)
  97.     )
  98.         )
  99.     )
  100.     (setq ELIST
  101.     (subst (cons 72 1) (assoc 72 ELIST) ELIST)
  102.     )
  103.     (setq ELIST
  104.     (subst (cons 11 PT2) (assoc 11 ELIST) ELIST)
  105.     )
  106.     (setq ELIST
  107.     (subst (cons 41 KDBL) (assoc 41 ELIST) ELIST)
  108.     )
  109.     (entmod ELIST)
  110.   )
  111.        )
  112.      )
  113.    )
  114.    (setq ENT (entnext ENT))
  115. )
  116. (entupd (ssname SS I))
  117.       )
  118.     )
  119.     (setq I (+ I 1))
  120.   )
  121.   (princ)
  122. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-25 15:10 , Processed in 0.146653 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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