Đến nội dung


Hình ảnh
- - - - -

Hỏi về entmake?


  • Please log in to reply
1 reply to this topic

#1 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 10 July 2010 - 12:01 PM

Đã tham khảo một số bài nhưng vẫn không hiểu cách dùng Entmake, các cao thu nào hay dùng hàm này hãy chia sẽ cáhc sử dụng với các đối tượng bản vẽ cụ thể: Line, text, PW, PL ... (các thuộc tính cần thiết để tạo đối tượng)...
Thanks
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 July 2010 - 04:06 PM

Đã tham khảo một số bài nhưng vẫn không hiểu cách dùng Entmake, các cao thu nào hay dùng hàm này hãy chia sẽ cáhc sử dụng với các đối tượng bản vẽ cụ thể: Line, text, PW, PL ... (các thuộc tính cần thiết để tạo đối tượng)...
Thanks

1- Cơ bản nhất, đầy đủ nhất thì bạn tham khảo ở: Developer Help - DXF Reference - Entity Section. Chú ý cả phần "Common Group Code for Entity".

2- Bạn dùng (setq d (entget (car (entsel)))) sẽ thấy toàn bộ data của đối tượng. Bạn thử del đối tượng đi, dùng (entmake d) -> đương nhiên đối tượng sẽ được tái hiện.

3- Nhìn data trong d có lẽ hơi hoa mắt nhưng bạn đừng lo, dần dần sẽ quen mắt thôi! Trong d có 2 dạng data:
- Bắt buộc: tối thiểu phải có, nếu không entmake sẽ không tạo được đối tượng
- Không băt buộc: nếu thiếu, Acad sẽ lấy mặc định. Ví dụ, nếu thiếu DXF 8, nó sẽ lấy layer hiện hành.

4- Làm thế nào để biết những data nào là bắt buộc? Có những cách sau:
a. Tham khảo ý 1
b. Nhìn nhận bằng tư duy logic của bạn. Ví dụ, với LINE:
- DXF 0: đương nhiên phải có. Nếu không, làm sao ACAD biết bạn muốn tạo LINE! Nói chung, DXF 0 băt buộc phải có cho mọi loại đối tượng, không riêng gì LINE.
- DXF 10 và 11: cũng đương nhiên. Nếu không, không thể xác định được LINE
Thật may, LINE chỉ cần từng ấy là đủ để entmake!
c. Thực hành nhiều, tự nhiên bạn sẽ nhớ!
d. Dùng phương pháp "bắn tỉa": với data nhận được từ entget, bạn thử bỏ bớt dần dần từng "chú" một rồi thử dùng entmake. Nếu bạn entmake được nghĩa là cái bị bắn tỉa không bắt buộc!

5- Ssg có "khẩu súng bắn tỉa này". Bạn thử dùng xem:
;;;----------------------------------------------------
(defun C:EG() (setq d (entget (car (entsel "\nChon doi tuong:")))) (textscr) d)
;;;----------------------------------------------------
(defun C:EM() (entmake d) (graphscr))
;;;----------------------------------------------------
(defun rd (n) (vl-remove-if (function (lambda (x) (= (car x) n))) d))
;;;----------------------------------------------------
Là dân lisper, có lẽ không cần hướng dẫn?

6- Tham khảo ví dụ sau và chiêm nghiệm các ý từ 1 đến 5 trên. Hy vọng bạn sẽ entmake như ý!

(defun C:VD()
(setq
p1 (getpoint "\nDiem 1:")
p2 (getpoint p1 "\nDiem 2:")
p3 (getpoint p2 "\nDiem 3:")
)
(entmake (list (cons 0 "LINE") (cons 10 p1) (cons 11 p3)))
(entmake (list (cons 0 "CIRCLE") (cons 10 p1) (cons 40 12)))
(entmake (list (cons 0 "TEXT") (cons 1 "VIDU") (cons 10 p1) (cons 40 5.0)))
(entmake (list
(cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")
(cons 90 3) (cons 10 p1) (cons 10 p2) (cons 10 p3)
))
)


P/S
Muốn tái hiện một biến trên textscreen để xem xét, bạn gõ ! và tên biến ngay trong dòng nhắc lệnh. Ví dụ, muốn biết d đang chứa cái gì ở "trỏng":
Command: !d
  • 2