Đến nội dung


Hình ảnh

Cho em hỏi chút về lệnh battman


  • Please log in to reply
8 replies to this topic

#1 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 15 July 2008 - 03:33 PM

Em có 1 block. ( trong đó có text - màu 2 )
Sau khi mirrow ( biến mirrow = 0 ) text cùng chiều.
Nhưng sau khi em dùng lệnh battman để đổi text sang màu 3 thì text bị nhảy ngược chiều. ( Nếu làm với từng block 1 thì không vấn đề )
Các bác cho em hỏi có cách nào ma chỉ đổi màu text trong block mà text không bị nhảy không ?
ban đầu
http://www.cadviet.com/upfiles/1_9.jpg
sau khi battman
http://www.cadviet.com/upfiles/2_8.jpg
cái mà em muốn làm
http://www.cadviet.com/upfiles/3_6.jpg

* Em làm có lúc được có lúc không mà không biết tại sao ?
* Nếu không dùng cách này cho em hỏi có cách nào khác (mà nhanh) không ?
* Thx các đại cao thủ trước.
  • 0

#2 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 16 July 2008 - 12:51 PM

Nếu text trong block của bạn là attribute hãy bỏ các thuộc tính upside down và backward đi là mirror thoải mái
Nếu chỉ là text thông thường thì không có cách nào sửa được ngoại trừ ...explode block.
Bạn nên up block lên để mọi người xem mới cho ý kiến chính xác được.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#3 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 17 July 2008 - 09:43 AM

Thx bác snowman.
Em up file block lên các bác xem dùm em :
file block ban đầu : http://www.cadviet.c...les/ban_dau.dwg
file block em muốn làm : http://www.cadviet.c...cai_em_muon.dwg
( em dùng lệnh battman có lúc được lúc không - có lúc text cùng chiều, có lúc nó nhảy ngược )
Bản vẽ của em có khá nhiều cái này nên em muốn làm cách nào nhanh hơn chút. Các bác giúp em !!!!!!
  • 0

#4 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 17 July 2008 - 09:13 PM

Đây là trích dẫn trong help của CAD:
MIRRTEXT affects text that is created with the TEXT, ATTDEF, or MTEXT commands; attribute definitions; and variable attributes. Text and constant attributes that are part of an inserted block are reversed when the block is mirrored regardless of the MIRRTEXT setting.
Có nghĩa là block của bạn không nên dùng battman để sửa, mà nên dùng cách đổi màu layer của các block, text trong block sẽ đổi theo màu layer, còn các đối tượng khác có thể đổi màu bằng lệnh BEDIT.
Mình up lên một loại block khác, có thể copy rồi dùng chức năng flip thay thế cho mirror, dùng được battman mà không bị đảo lộn text
http://www.cadviet.c...es/blocknew.dwg
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#5 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 18 July 2008 - 01:56 PM

Thx Bác Snowman. Em làm cái block có flip như của bác thì battman được. Nhưng nó lại phát sinh vấn đề :
Cái block của em vốn dĩ dùng nó để nhảy cao độ nhưng sau khi em dùng thêm flip vào thì nó không nhảy nữa ( em đã đổi tên block mới rồi. ). Bác xem dùm em xem có cách nào vừa battman được lại vừa nhảy cao độ được không ?
Em up lisp cao độ lên bác coi dùm cho em : http://www.cadviet.c...files/caodo.lsp
( Lisp nay em xin được của 1 người bạn nên không biết tác giả )
  • 0

#6 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 18 July 2008 - 08:30 PM

Lỗi phát sinh là do loại block động khi copy không còn mang tên của block gốc (mã (2."*") không giống block gốc)
Tôi đã sửa lại lisp copy block cao độ cho phù hợp, bạn có thể copy rồi chèn bao nhiêu vị trí tuỳ thích.
Lisp cũ chỉ có tác dụng với những block có tên "ac", tôi đã sửa lại có thể dùng với tên block bất kỳ (có thể gây lỗi khi chọn nhầm loại block khác, không có attribute-nên lưu ý khi dùng)
Đây là đoạn lisp mới
;********************************************
;;Ham con - Chuyen gia tri cao do Y tu so thuc sang dang chuoi co quy cach cua cao do
(defun ZeroSuppression (Y / pos v)

(setq Y (rtos Y 2 2))

;; Tim vi tri dau thap phan
(setq pos 1)
(while (and
(<= pos (strlen Y))
(/= (substr Y pos 1) ".")
)
(setq pos (+ pos 1))
)
;; Neu chua co dau thap phan thi them dau thap phan
(if (> pos (strlen Y)) (setq Y (strcat Y ".")))
;; Viet them cac so "0" vao sau Y cho du 4 so sau dau thap phan
(setq pos (+ pos 4))
(while (< (strlen Y) pos)
(setq Y (strcat Y "0")))
;; Bo cac so 0 vo nghia sau Y
(setq v 1)
(while (and
(<= v 2)
(= (substr Y (strlen Y) 1) "0")
)
(setq Y (substr Y 1 (- (strlen Y) 1)) v (+ v 1))
)

(setq Y Y)
);of defun

;;Ham con - Cap nhat doi tuong co ma doi tuong la EN1 =====

(defun CDupdate (EN1 / EN2 ENT1 ENT2)
(setq ENT1 (entget EN1)) ;(setq en1 (car (entsel)))
(If (/= nil (cdr (assoc 2 ENT1)))
(progn
(setq EN2 (entnext EN1))
(setq ENT2 (entget EN2))

(setq X0 (cadr (assoc 10 ENT1)))
(setq Y0 (caddr (assoc 10 ENT1)))

(setq sc (cdr (assoc 41 ENT1)))
(setq ang (cdr (assoc 50 ENT1)))
(setq dX (abs (* 10 sc)))
(setq dY (abs (* 5 sc)))

(cond
((and (> sc 0) (= ang 0))
(setq X (+ X0 dX) Y (+ Y0 dY) hor_jus 2 ver_jus 0)) ; jus="right"

((and (> sc 0) (= ang pi))
(setq X (- X0 dX) Y (- Y0 dY) hor_jus 0 ver_jus 3)) ; jus="left"

((and (< sc 0) (= ang 0))
(setq X (- X0 dX) Y (+ Y0 dY) hor_jus 0 ver_jus 0)); jus="left"

((and (< sc 0) (= ang pi))
(setq X (+ X0 dX) Y (- Y0 dY) hor_jus 2 ver_jus 3)); jus="right"
)

(if (and (= 0 hor_jus) (= 0 ver_jus))
(setq new_point (list 10 X Y 0))
(setq new_point (list 11 X Y 0)))
(setq new_hor_jus (cons 72 hor_jus))
(setq new_ver_jus (cons 74 ver_jus))
(setq new_cote (cons 1 (ZeroSuppression Y0)))

(if (and (= 0 hor_jus) (= 0 ver_jus))
(setq old_point (assoc 10 ENT2))
(setq old_point (assoc 11 ENT2)))
(setq old_hor_jus (assoc 72 ENT2))
(setq old_ver_jus (assoc 74 ENT2))
(setq old_cote (assoc 1 ENT2))

; (setq ENT2 (subst new_point old_point ENT2))
; (setq ENT2 (subst new_hor_jus old_hor_jus ENT2))
;(setq ENT2 (subst new_ver_jus old_ver_jus ENT2))
(setq ENT2 (subst new_cote old_cote ENT2))

(entmod ENT2)
(entupd EN2)
); progn

); of if
); of defun

;;Ham con - Cap nhat cac doi tuong trong tap doi tuong SS ==
(defun CDupdates(SS / quant i)
(setq quant (sslength SS))
(setq i 0)
(while (< i quant)
(progn
(CDupdate (ssname SS i))
(setq i (1+ i))
)
)
)

;;Copy cac block cao do ====================================
(defun C:c(/ SS EN Pbase Pdes)
(setq OSMODE (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq EN (car (entsel "\nChon block ghi chu cot cao do"))
Pbase (cdr (assoc 10 (entget En)))
En1 En
)
(while (/= nil (setq Pdes (getpoint "\nChon diem chen cot cao do... ")))
(command ".copy" En "" Pbase Pdes)
(while (/= nil (entnext EN1))
(progn
(setq EN1 (entnext EN1))
(CDupdate EN1)
)
)
)
(setvar "OSMODE" OSmode)
(princ)
)

;;Dich chuyen cac block cao do =============================
(defun C:m(/ SS)
(setq SS (ssget))
(command ".move" "p" "" pause pause)
(CDupdates SS)
)

;;Cap nhat cac block cao do ================================
(defun C:ucd(/ SS)
(setq SS (ssget))
(CDupdates SS)
)

;; END
(defun c:xc (/ s pt)
(while
(princ "\nInsert inside_point :")
(setq pt (getpoint))
;(setq S 0 )
(command "-Boundary" pt "")
(command "area" "O" "last" "")
(setq S (getvar "length")) ;(+ S (getvar "length")))
;(setq S (getvar "perimeter")) ;(+ S (getvar "length")))
(command "text" pt 1 "" (rtos S 2 2) "")
);while
(princ)
)

  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#7 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 19 July 2008 - 08:30 AM

Oa!!!!!!
Thx bác snowman nhiều nhiều.
Block của em bây h đúng như là em muốn rồi.
Nhưng còn 1 vấn đề nhỏ nữa bác giúp em : Cái lisp bác sửa xong nhưng khi em dùng lệnh c ( copy cac block cao do ) thì các bắt điểm của nó mất hết. Vì vậy mỗi lần copy em lại F3 1 lần. Bác giúp em khắc phục lỗi này.
Thx bác.
  • 0

#8 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 19 July 2008 - 12:55 PM

Mình sơ suất một chút nên đã tắt chế độ bắt điểm khi dùng copy (tránh paste nhầm sang vị trí khác). Nhưng có lẽ không cần thiết
Đây là lisp đã sửa


;********************************************
;;Ham con - Chuyen gia tri cao do Y tu so thuc sang dang chuoi co quy cach cua cao do
(defun ZeroSuppression (Y / pos v)

(setq Y (rtos Y 2 2))

;; Tim vi tri dau thap phan
(setq pos 1)
(while (and
(<= pos (strlen Y))
(/= (substr Y pos 1) ".")
)
(setq pos (+ pos 1))
)
;; Neu chua co dau thap phan thi them dau thap phan
(if (> pos (strlen Y)) (setq Y (strcat Y ".")))
;; Viet them cac so "0" vao sau Y cho du 4 so sau dau thap phan
(setq pos (+ pos 4))
(while (< (strlen Y) pos)
(setq Y (strcat Y "0")))
;; Bo cac so 0 vo nghia sau Y
(setq v 1)
(while (and
(<= v 2)
(= (substr Y (strlen Y) 1) "0")
)
(setq Y (substr Y 1 (- (strlen Y) 1)) v (+ v 1))
)

(setq Y Y)
);of defun

;;Ham con - Cap nhat doi tuong co ma doi tuong la EN1 =====

(defun CDupdate (EN1 / EN2 ENT1 ENT2)
(setq ENT1 (entget EN1)) ;(setq en1 (car (entsel)))
(If (/= nil (cdr (assoc 2 ENT1)))
(progn
(setq EN2 (entnext EN1))
(setq ENT2 (entget EN2))

(setq X0 (cadr (assoc 10 ENT1)))
(setq Y0 (caddr (assoc 10 ENT1)))

(setq sc (cdr (assoc 41 ENT1)))
(setq ang (cdr (assoc 50 ENT1)))
(setq dX (abs (* 10 sc)))
(setq dY (abs (* 5 sc)))

(cond
((and (> sc 0) (= ang 0))
(setq X (+ X0 dX) Y (+ Y0 dY) hor_jus 2 ver_jus 0)) ; jus="right"

((and (> sc 0) (= ang pi))
(setq X (- X0 dX) Y (- Y0 dY) hor_jus 0 ver_jus 3)) ; jus="left"

((and (< sc 0) (= ang 0))
(setq X (- X0 dX) Y (+ Y0 dY) hor_jus 0 ver_jus 0)); jus="left"

((and (< sc 0) (= ang pi))
(setq X (+ X0 dX) Y (- Y0 dY) hor_jus 2 ver_jus 3)); jus="right"
)

(if (and (= 0 hor_jus) (= 0 ver_jus))
(setq new_point (list 10 X Y 0))
(setq new_point (list 11 X Y 0)))
(setq new_hor_jus (cons 72 hor_jus))
(setq new_ver_jus (cons 74 ver_jus))
(setq new_cote (cons 1 (ZeroSuppression Y0)))

(if (and (= 0 hor_jus) (= 0 ver_jus))
(setq old_point (assoc 10 ENT2))
(setq old_point (assoc 11 ENT2)))
(setq old_hor_jus (assoc 72 ENT2))
(setq old_ver_jus (assoc 74 ENT2))
(setq old_cote (assoc 1 ENT2))

; (setq ENT2 (subst new_point old_point ENT2))
; (setq ENT2 (subst new_hor_jus old_hor_jus ENT2))
;(setq ENT2 (subst new_ver_jus old_ver_jus ENT2))
(setq ENT2 (subst new_cote old_cote ENT2))

(entmod ENT2)
(entupd EN2)
); progn

); of if
); of defun

;;Ham con - Cap nhat cac doi tuong trong tap doi tuong SS ==
(defun CDupdates(SS / quant i)
(setq quant (sslength SS))
(setq i 0)
(while (< i quant)
(progn
(CDupdate (ssname SS i))
(setq i (1+ i))
)
)
)

;;Copy cac block cao do ====================================
(defun C:c(/ SS EN Pbase Pdes)
;(setq OSMODE (getvar "OSMODE"))
;(setvar "OSMODE" 0)
(setq EN (car (entsel "\nChon block ghi chu cot cao do"))
Pbase (cdr (assoc 10 (entget En)))
En1 En
)
(while (/= nil (setq Pdes (getpoint "\nChon diem chen cot cao do... ")))
(command ".copy" En "" Pbase Pdes)
(while (/= nil (entnext EN1))
(progn
(setq EN1 (entnext EN1))
(CDupdate EN1)
)
)
)
;(setvar "OSMODE" OSmode)
(princ)
)

;;Dich chuyen cac block cao do =============================
(defun C:m(/ SS)
(setq SS (ssget))
(command ".move" "p" "" pause pause)
(CDupdates SS)
)

;;Cap nhat cac block cao do ================================
(defun C:ucd(/ SS)
(setq SS (ssget))
(CDupdates SS)
)

;; END
(defun c:xc (/ s pt)
(while
(princ "\nInsert inside_point :")
(setq pt (getpoint))
;(setq S 0 )
(command "-Boundary" pt "")
(command "area" "O" "last" "")
(setq S (getvar "length")) ;(+ S (getvar "length")))
;(setq S (getvar "perimeter")) ;(+ S (getvar "length")))
(command "text" pt 1 "" (rtos S 2 2) "")
);while
(princ)
)


  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#9 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 19 July 2008 - 02:32 PM

Em làm được rồi.
Thx bác snowman nhiều!!!!!!!!!!!!!
  • 0