Đến nội dung


Hình ảnh

[Hỏi] Về lệnh boundary


  • Please log in to reply
7 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 07 November 2013 - 08:41 AM

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

)

 

 


  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 November 2013 - 11:19 AM

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.c...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.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 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 November 2013 - 02:19 PM

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. 
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 07 November 2013 - 02:48 PM

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?


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 08 November 2013 - 08:41 AM

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

đường dẫn:http://www.mediafire...i3k/Test_01.dwg


  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 08 November 2013 - 10:55 AM

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

đường dẫn:http://www.mediafire...i3k/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.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 November 2013 - 04:58 PM

@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


  • 0

#8 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 11 November 2013 - 08:58 AM

Cám ơn các bạn, mình thử với CAD 2007 thì OK nhưng với CAD 2010 thì bị như trên, chắc do CAD...


  • 0