Đến nội dung


Hình ảnh

[yêu cầu] Thay đổi chiều cao các text trong Block Attbute


  • Please log in to reply
3 replies to this topic

#1 lenhatanh

lenhatanh

    biết vẽ polygon

  • Members
  • PipPip
  • 75 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 10 September 2012 - 04:13 PM

Em có tham khảo và sử dụng các "Lisp chỉnh style TEXT trong block thuộc tính" trên diễn đàn như: wo.lsp, rba_wo_ho.lsp, ho_Styb.lsp... tuy nhiên các Lisp trên chỉ thay đổi chiều rộng, chiều cao, Style của các Attribute
chứ không thay đổi được cho các "Text" của Block Attribute.
Em có nhiều Block Attribute ghi diện tích như trong hìnhHình đã gửi...
Nhờ các Bác viết giúp em lisp chỉnh chiều cao cho cả Text và Attribute cho Block với.
Xin chân thành cảm ơn !

;; free lisp from cadviet.com-- Doi chieu cao, do rong, style cho Attribute cua Blocks
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=47445&st=0
(defun c:wo( / ssdt sodt index tt entdt w getsty h)
(setq ssdt (ssget '((0 . "INSERT") (66 . 1)))
sodt (sslength ssdt)
index 0
)
(setq w (getreal "\n Nhap be rong chu :"))
(setq h (getreal "\n Nhap chieu cao chu :"))
(if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
(progn
(or newsty (setq newsty (getvar "textstyle")))
(setq res "" resinit "" tbsty nil)
(while (setq tbsty (tblnext "style" (null tbsty)))
(setq sty (cdr (assoc 2 tbsty))
res (strcat res "/" sty )
resinit (strcat resinit " " sty )))
(setq res (substr res 2)
resinit (substr resinit 2))

(setq cur_var (mapcar 'getvar '("DYNMODE" "DYNPROMPT")))
(mapcar 'setvar '("DYNMODE" "DYNPROMPT") '(1 1))
(initget (strcat " " resinit))
(setq getsty (getkword (strcat "\nChon Style [" res " ] ") ))
(and getsty (setq newsty getsty))
(mapcar 'setvar '("DYNMODE" "DYNPROMPT") cur_var)

)
(setq getsty (getstring (strcat "\nChon Style [" res " ] ") ))
)
(repeat sodt
(setq entdt (ssname ssdt index)
index (1+ index))
(while (/= (cdr(assoc 0 (entget entdt))) "SEQEND")
(setq
entdt (entnext entdt)
tt (entget entdt)
)
(if getsty (if (tblsearch "style" getsty) (setq tt (subst (cons 7 getsty) (assoc 7 tt) tt))) )
(if w (setq tt (subst (cons 41 w) (assoc 41 tt) tt)))
(if h (setq tt (subst (cons 40 h) (assoc 40 tt) tt)))

(entmod tt)
(entupd entdt)
)
)
(princ)
)

  • 0

#2 kncam

kncam

    biết lệnh rotate

  • Members
  • PipPipPip
  • 133 Bài viết
Điểm đánh giá: 98 (tàm tạm)

Đã gửi 04 October 2012 - 06:15 AM

Có vài thiển ý về ý định của bạn:
1. Nếu như bạn muốn scale cả text và attribute thì có 1 thao tác đơn giản (không cần lisp) là scale block.
2. Thông thường khi tạo 1 block, người thiết kế phải tính toán cân chỉnh các text, attribute,.... cho phù hợp với các đối tượng khác nằm cùng trong block. Do đó, khi phải hiệu chỉnh tính chất thể hiện của text hoặc attribute thì đó là điều bất đắc dĩ. Đa phần trong 1 block có các attribute, người thiết kế chỉ edit nội dung, kiểu chữ hoặc bề rộng chữ cho phù hợp với khung của block. Nếu muốn Edit các block riêng lẽ thì sử dụng lệnh EATTEDIT, còn muốn EDIT toàn cục thì có lệnh BATTMAN, như hình sau:
Hình đã gửi

Bạn chỉ cần thêm tính năng SCALE vào Block thì sẽ được như ý. Một file có Block có kèm tính năng SCALE để bạn tham khảo
File ACADv2010 http://www.cadviet.c...33_blockatt.dwg
Hình đã gửi
  • 1
nongdan@sg

#3 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 04 October 2012 - 09:01 AM

@lenhatanh: về yêu cầu của Bạn thì có thể làm được. Tuy nhiên khi thay đổi chiều cao text thì khoảng cách giữa text và textatt sẽ thay đổi có thể 2 đối tượng này sẽ trùng lên nhau, khi đó Bạn phải vào từng block một để hiệu chỉnh lại. Chi bằng dùng cách scale block sẽ tiện hơn
  • 0

#4 lenhatanh

lenhatanh

    biết vẽ polygon

  • Members
  • PipPip
  • 75 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 07 October 2012 - 10:52 AM

Cám ơn gợi ý của hai bạn kncamtien2005,
tuy nhiên mục đích chính của mình là dùng Lisp để truy cập vào các thành phần của Blocks như
các "Attribute:, các "Text" để thay đổi các thuộc tính như chiều rộng, chiều cao, Style...
của các đối tượng đó và thay đổi cho hàng loạt Block.
(Nếu được bạn kncam có thể gửi cho mình File CAD ver thấp hơn nhé, mình đang dùng CAD 2007)
xin cám ơn.
  • 0