Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
daotac541

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

Các bài được khuyến nghị

daotac541    2

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Snowman    90

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
daotac541    2

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.com/upfiles/ban_dau.dwg

file block em muốn làm : http://www.cadviet.com/upfiles/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 !!!!!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Snowman    90

Đâ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.com/upfiles/blocknew.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
daotac541    2

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.com/upfiles/caodo.lsp

( Lisp nay em xin được của 1 người bạn nên không biết tác giả )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Snowman    90

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)
 )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
daotac541    2

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Snowman    90

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)
 )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×