Đến nội dung


Hình ảnh
- - - - -

Hỏi về cách viết 1 đoạn mã


  • Please log in to reply
6 replies to this topic

#1 quocanhxd05

quocanhxd05

    biết vẽ ellipse

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

Đã gửi 19 June 2009 - 11:59 AM

Chào các sư huynh,
Đệ muốn nhờ mấy huynh hướng dẫn cách viết ra 1 đoạn mã để lấy ra tên của các Layout tab.
Xin cảm ơn.
Tiểu đệ.
  • 0
-------------------- Sống ở trên đời cần một chữ NHẪN --------------------

#2 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 19 June 2009 - 12:34 PM

Chào các sư huynh,
Đệ muốn nhờ mấy huynh hướng dẫn cách viết ra 1 đoạn mã để lấy ra tên của các Layout tab.
Xin cảm ơn.
Tiểu đệ.


Đoạn mã này lấy hết các layout tab của bản vẽ hiện hành, Kể cả layout "Model".

(vl-load-com)
(vlax-for lay (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq Lst (cons (vla-get-Name lay) Lst)))
  • 4

#3 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 19 June 2009 - 01:59 PM

Đoạn mã này lấy hết các layout tab của bản vẽ hiện hành, Kể cả layout "Model".

(vl-load-com)
(vlax-for lay (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq Lst (cons (vla-get-Name lay) Lst)))

q288, cảm ơn bạn, bạn có nhiều đoạn mã VL rất hay, thiep này còn phải học mót bạn nhiều.
Từ đoạn mã này, Thiep phát triển thêm để lấy tên của layers, groups, Linetypes, blocks, thuận tiện hơn hàm tblnext nhiều. Tuy nhiên lấy tên của block thì kết quả cho thêm vài cái tên ngoài ý muốn:
(defun c:tenblock (/ lay Lst)
(vlax-for lay (vla-get-blocks
(vla-get-ActiveDocument (vlax-get-acad-object)))
(setq Lst (cons (vla-get-Name lay) Lst))
)
)
Kết quả: ("ten" "TRAM-COT" "_Dot" "at" "*Paper_Space0" "*Paper_Space" "*Model_Space")
Các tên màu đỏ là tên block ngoài ý muốn. Thiep chưa hiểu tại sao?
  • 0

#4 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 19 June 2009 - 02:05 PM

q288, cảm ơn bạn, bạn có nhiều đoạn mã VL rất hay, thiep này còn phải học mót bạn nhiều.
Từ đoạn mã này, Thiep phát triển thêm để lấy tên của layers, groups, Linetypes, blocks, thuận tiện hơn hàm tblnext nhiều. Tuy nhiên lấy tên của block thì kết quả cho thêm vài cái tên ngoài ý muốn:
(defun c:tenblock (/ lay Lst)
(vlax-for lay (vla-get-blocks
(vla-get-ActiveDocument (vlax-get-acad-object)))
(setq Lst (cons (vla-get-Name lay) Lst))
)
)
Kết quả: ("ten" "TRAM-COT" "_Dot" "at" "*Paper_Space0" "*Paper_Space" "*Model_Space")
Các tên màu đỏ là tên block ngoài ý muốn. Thiep chưa hiểu tại sao?


Cad coi các dim và các space (Model_Space, Paper_Space) cũng là block luôn,
chỉ khác với block thật là có dấu * đằng trước thôi.
  • 1

#5 quocanhxd05

quocanhxd05

    biết vẽ ellipse

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

Đã gửi 19 June 2009 - 02:54 PM

Đoạn mã này lấy hết các layout tab của bản vẽ hiện hành, Kể cả layout "Model".

(vl-load-com)
(vlax-for lay (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq Lst (cons (vla-get-Name lay) Lst)))


Xin cảm ơn sư huynh nhiều. Tiểu đệ còn phải học ở huynh rất nhiều.
Đệ đã load và sử dụng đoạn mã của huynh rồi. Nhưng thú thật đệ không hiểu gì hết. Huynh có thể giải thích cho đệ không?
Đệ có xem trong menu help nhưng vẫn không hiểu.
Cảm ơn huynh nhiều nha!
  • 0
-------------------- Sống ở trên đời cần một chữ NHẪN --------------------

#6 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 19 June 2009 - 03:32 PM

Xin cảm ơn sư huynh nhiều. Tiểu đệ còn phải học ở huynh rất nhiều.
Đệ đã load và sử dụng đoạn mã của huynh rồi. Nhưng thú thật đệ không hiểu gì hết. Huynh có thể giải thích cho đệ không?
Đệ có xem trong menu help nhưng vẫn không hiểu.
Cảm ơn huynh nhiều nha!


(vlax-get-acad-object) = cái acad bạn đang mở.
(vla-get-ActiveDocument (vlax-get-acad-object)) = bản vẽ hiện hành (trong số các bản vẽ đang mở)
(vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object))) = tập hợp các layout của bản vẽ hiện hành.

(vlax-for lay ...) = ứng với mỗi layout (tạm đặt tên là lay)
(vla-get-Name lay) = lấy tên của layout lay
(cons (vla-get-Name lay) Lst) = đưa cái tên đó vào danh sách Lst.
  • 2

#7 quocanhxd05

quocanhxd05

    biết vẽ ellipse

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

Đã gửi 19 June 2009 - 04:48 PM

(vlax-get-acad-object) = cái acad bạn đang mở.
(vla-get-ActiveDocument (vlax-get-acad-object)) = bản vẽ hiện hành (trong số các bản vẽ đang mở)
(vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object))) = tập hợp các layout của bản vẽ hiện hành.

(vlax-for lay ...) = ứng với mỗi layout (tạm đặt tên là lay)
(vla-get-Name lay) = lấy tên của layout lay
(cons (vla-get-Name lay) Lst) = đưa cái tên đó vào danh sách Lst.


Một lần nữa xin cảm ơn huynh.
  • 0
-------------------- Sống ở trên đời cần một chữ NHẪN --------------------