Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
lenhatanh

[Hỏi] Về lệnh boundary

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

Chào các bạn.

Các bạn cho mình hỏi có lệnh hoặc "set" biến hệ thống nào để các Polylines được tạo ra sau khi dùng lệnh "Boundary"

luôn nằm trên cùng (nhìn thấy được theo màu của layer hiện hành).

[Vì mình đang dùng lisp "Tính diện tích và lập bảng", khi mở bản vẽ cũ ra, pick vào miền kín thì không thấy đường bao đổi mầu như lênh trong lisp: (command "Cecolor" 4 "-boundary" pt1 "")... còn khi vẽ một miền kín mới rồi pick... thì OK.]

mình đang dùng CAD-2010.

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/12432-da-xong-nho-giup-lisp-tinh-dien-tich-va-lap-bang/page-2


(defun c:bdt()

(setvar "cmdecho" 0)

(command "undo" "begin")

(setq lacol (getvar "CEColor"))

(setq ladin (getvar "dimzin"))

(setq laos (getvar "osmode"))  

(if (not tl) (setq tl 1))

(if (not h) (setq h 1))

(setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))

    caot1 (getreal (strcat "\nCao text < " (rtos h 2 2) " >: ")))

(if tl1 (setq tl tl1))

(if caot1 (setq h caot1))

(setq k 0 tdt 0)



(setvar "dimzin" 0)

(setvar "OSMODE" 0)

(setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))

(setq     P1 (list (+ (car PT)(* 6 h)) (cadr PT))

    P2 (list (+ (car PT)(* 22 h)) (cadr PT))

    P3 (list (car PT) (- (cadr PT)(* 3 h)))

    P4 (list (car P1) (cadr P3))

    P5 (list (car P2) (cadr P3))

    P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))

    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))

    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))

);setq

(command "pline" PT P2 P5 P3 "C"

        "pline" P1 P4 ""

        "text" "m" P6 (* 1.2 h) 0 "%%UB¶ng thèng kª diÖn tÝch"

        "text" "m" P7 h 0 "STT"

        "text" "m" P8 h 0 "DiÖn tÝch (m2)"

);command



(setq pt1 (getpoint "\n Chon mien tinh dien tich : "))

(while (/= pt1 nil)

(command "erase" ss "")

(setq k (+ 1 k))

(command "TEXT" "m" pt1 (* 3 h) 0 (rtos k 2 0))

(setq PT (list (car P3) (cadr P3))

    P1 (list (+ (car PT)(* 6 h)) (cadr PT))

    P2 (list (+ (car PT)(* 22 h)) (cadr PT))

    P3 (list (car PT) (- (cadr PT)(* 3 h)))

    P4 (list (car P1) (cadr P3))

    P5 (list (car P2) (cadr P3))

    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))

    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))

    P9 (list (car PT) (- (cadr P3)(* 3 h)))

    P10 (list (car P1) (cadr P9))

    P11 (list (car P2) (cadr P9))

    P12 (list (car P7) (- (cadr P3)(* 1.5 h)))

    P13 (list (car P8) (cadr P12))

    );setq

(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary

(command "cecolor"4 "-boundary" pt1 "");; boundary

(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary

(setq cur frome	ss (ssadd) S 0)

(while 	(not (eq cur toe));; chon cac doi tuong tu frome den toe

	(setq cur (entnext cur) ss (ssadd cur ss))

	(command "area" "S" "O" ss "" "")

	(setq dt (getvar "area") S (+ S dt))

);while

(command "area" "A" "O" "L" "" "")

(setq dt (getvar "area"))

(setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))  

(setvar "CEColor" lacol)

(command "pline" PT P2 P5 P3 "C"

	 "pline" P1 P4 ""

	 "text" "m" P7 h 0 (rtos k 2 0)

	 "text" "m" P8 h 0 (rtos s 2 2))

(setq pt1 (getpoint (strcat "\nTong dien tich = " (rtos tdt 2 3) "m2. chon mien do tiep theo...")))

);while

(command "erase" ss "")

(setq ss nil)

(setvar "DIMZIN" ladin)

(command     "pline" P3 P9 P11 P5 "C"

        "pline" P10 P4 ""

        "text" "m" P12 h 0 "Tæng"

        "text" "m" P13 h 0 (rtos tdt 2 2)

);command

(setvar "OSMODE" laos)

(command "undo" "end")

(setvar "cmdecho" 1)

)

 

 

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

 

Chào các bạn.

Các bạn cho mình hỏi có lệnh hoặc "set" biến hệ thống nào để các Polylines được tạo ra sau khi dùng lệnh "Boundary"

luôn nằm trên cùng (nhìn thấy được theo màu của layer hiện hành).

[Vì mình đang dùng lisp "Tính diện tích và lập bảng", khi mở bản vẽ cũ ra, pick vào miền kín thì không thấy đường bao đổi mầu như lênh trong lisp: (command "Cecolor" 4 "-boundary" pt1 "")... còn khi vẽ một miền kín mới rồi pick... thì OK.]

mình đang dùng CAD-2010.

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/12432-da-xong-nho-giup-lisp-tinh-dien-tich-va-lap-bang/page-2


(defun c:bdt()

(setvar "cmdecho" 0)

(command "undo" "begin")

(setq lacol (getvar "CEColor"))

(setq ladin (getvar "dimzin"))

(setq laos (getvar "osmode"))  

(if (not tl) (setq tl 1))

(if (not h) (setq h 1))

(setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))

    caot1 (getreal (strcat "\nCao text < " (rtos h 2 2) " >: ")))

(if tl1 (setq tl tl1))

(if caot1 (setq h caot1))

(setq k 0 tdt 0)



(setvar "dimzin" 0)

(setvar "OSMODE" 0)

(setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))

(setq     P1 (list (+ (car PT)(* 6 h)) (cadr PT))

    P2 (list (+ (car PT)(* 22 h)) (cadr PT))

    P3 (list (car PT) (- (cadr PT)(* 3 h)))

    P4 (list (car P1) (cadr P3))

    P5 (list (car P2) (cadr P3))

    P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))

    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))

    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))

);setq

(command "pline" PT P2 P5 P3 "C"

        "pline" P1 P4 ""

        "text" "m" P6 (* 1.2 h) 0 "%¶ng thèng kª diÖn tÝch"

        "text" "m" P7 h 0 "STT"

        "text" "m" P8 h 0 "DiÖn tÝch (m2)"

);command



(setq pt1 (getpoint "\n Chon mien tinh dien tich : "))

(while (/= pt1 nil)

(command "erase" ss "")

(setq k (+ 1 k))

(command "TEXT" "m" pt1 (* 3 h) 0 (rtos k 2 0))

(setq PT (list (car P3) (cadr P3))

    P1 (list (+ (car PT)(* 6 h)) (cadr PT))

    P2 (list (+ (car PT)(* 22 h)) (cadr PT))

    P3 (list (car PT) (- (cadr PT)(* 3 h)))

    P4 (list (car P1) (cadr P3))

    P5 (list (car P2) (cadr P3))

    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))

    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))

    P9 (list (car PT) (- (cadr P3)(* 3 h)))

    P10 (list (car P1) (cadr P9))

    P11 (list (car P2) (cadr P9))

    P12 (list (car P7) (- (cadr P3)(* 1.5 h)))

    P13 (list (car P8) (cadr P12))

    );setq

(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary

(command "cecolor"4 "-boundary" pt1 "");; boundary

(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary

(setq cur frome	ss (ssadd) S 0)

(while 	(not (eq cur toe));; chon cac doi tuong tu frome den toe

	(setq cur (entnext cur) ss (ssadd cur ss))

	(command "area" "S" "O" ss "" "")

	(setq dt (getvar "area") S (+ S dt))

);while

(command "area" "A" "O" "L" "" "")

(setq dt (getvar "area"))

(setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))  

(setvar "CEColor" lacol)

(command "pline" PT P2 P5 P3 "C"

	 "pline" P1 P4 ""

	 "text" "m" P7 h 0 (rtos k 2 0)

	 "text" "m" P8 h 0 (rtos s 2 2))

(setq pt1 (getpoint (strcat "\nTong dien tich = " (rtos tdt 2 3) "m2. chon mien do tiep theo...")))

);while

(command "erase" ss "")

(setq ss nil)

(setvar "DIMZIN" ladin)

(command     "pline" P3 P9 P11 P5 "C"

        "pline" P10 P4 ""

        "text" "m" P12 h 0 "Tæng"

        "text" "m" P13 h 0 (rtos tdt 2 2)

);command

(setvar "OSMODE" laos)

(command "undo" "end")

(setvar "cmdecho" 1)

)

Hề hề hề,

Đó là do các dòng lệnh sau đây gấy ra.

(while     (not (eq cur toe));; chon cac doi tuong tu frome den toe

 

    (setq cur (entnext cur) ss (ssadd cur ss))

 

    (command "area" "S" "O" ss "" "")

 

    (setq dt (getvar "area") S (+ S dt))

 

);while

 

(command "erase" ss "")

 

Bạn hãy chịu khó đọc kỹ một chút sẽ vỡ ra là do khi bạn sử dụng bản vẽ củ thì thằng cur khác với thẳng toe và thế là nó bị nhét vào tập chọn ss và sau đó bị xóa mất tiêu. Còn khi bạn mới tạo một polyline kín thì thằng cur sẽ eq với thằng toe và nó không được nhét vào tập ss và vì thế nó tồn tại cho bạn nhòm thấy.

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

Chào phamthanhbinh.

với ... (command "cecolor"4 "-boundary" pt1 "")...

theo mình hiểu thì sau khi đổi mmầu vẽ thành màu 4, CAD sẽ thực hiện lênh "-boundary" với điểm pick là pt1.

mình đã thử với nhiều bản vẽ thì thấy như sau:

  1- Mở bản vẽ cũ ra (các hình đã vẽ từ trước) thì sau khi pick điểm (pt1) các đường Polyline do lệnh "-boundary" tạo ra bị ẩn (nằm ở lớp dưới nên không nhìn thấy được), nết rê chuột qua thì thấy hilight. Do đó không rõ mình đã pick đủ hình chưa ? 

  2- Cũng trên bản vẽ đó, bạn vẽ một miền kín mới và sử dụng lisp thì các đường Polyline do lệnh "-boundary" tạo ra hiện mầu 4 và nằm ở lớp trên, cho bạn biết đã pick những vùng nào, pick đủ hình chưa.

  3- còn (command "erase" ss "") là xóa hết những đường Polyline do lệnh "-boundary" tạo ra sau khi đã xuất hiện cho bạn xem (= màu 4), trả lại bản vẽ như cũ...

Nhờ bạn và các bạn trên diễn đàn góp ý kiến để khắc phục cho trường hợp 1. 

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

Bạn gởi bản vẽ ấy lên để "soi xét" xem sao, chứ chưa gặp trường hợp thằng Bo nó bị con khác đè. Có lẽ là do 1 biến hệ thống chăng?

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

Nhờ mọi người xem bản vẽ và góp ý nhé.

đường dẫn:http://www.mediafire.com/download/vpgcrab0x99bi3k/Test_01.dwg

Chà! Mở bản vẽ bạn ra, boundary kiểu gì, với bất cứ hình nào, thì đường mới cũng nằm đè lên đường cũ >> tôi không tìm ra bệnh. Hy vọng có ai đó giúp bạn.

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

@Lenhatanh: Bạn cũng có thể chọn "Boundary" (bằng Lisp) và sử dụng command "Draworder" và cho Boundary đó ở vị trí Front thử xem

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  

×