Đến nội dung


Hình ảnh
* * * - - 10 Bình chọn

[Yêu cầu] Lisp tạo viewport từ khung chọn bên model.


  • Please log in to reply
131 replies to this topic

#61 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 21 February 2013 - 06:07 PM

Cảm ơn KangKung!

Lsp của #60 của bác chạy rất tốt theo yêu cầu của Khaosatheco. Tuy nhiên do Khaosatheco yêu cầu chưa đầy đủ (sorry bác) nên kết quả chưa được như ý.

Mong KangKung sửa lại để kết quả đạt được bên layout là các viewport có hình dạng giống như các polyline kín đã vẽ bên model.

File đính kèm:

http://www.cadviet.c...84_file_mau.dwg


  • 0

#62 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 22 February 2013 - 07:56 AM

Nhoc cũng tính sữa thử nhưng level chưa tới ^^, nhoc chỉ có thể suy luận ra hướng thui chắc anh KangKung cũng có thể hình dung ra rùi ^^, nhưng có 1 điểm cần lưu ý ở đây là nếu anh KangKung sữa xong mún lsp chạy đc thì pl khép kín mà bạn chọn phải đc khép bằng "c" vì nếu bạn vẽ khép bằng bắt điểm thì cad sẽ ko tạo đc viewport với pl bạn đã vẽ.
Ps: chờ anh KangKung ra tay vậy ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#63 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 22 February 2013 - 09:23 AM

Cảm ơn nhoclangbat. Rất nhiều bản vẽ tổng thể có nhiều chi tiết chưa cần in nên buộc phải dùng các hình Pl kín được khép bằng "c" để khoanh những khu vực cần in và tạo viewport cho chúng.

Chờ anh KangKung ra tay giúp vậy.


  • 0

#64 girl

girl

    biết vẽ spline

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

Đã gửi 22 February 2013 - 10:09 AM

Lisp MTL hay nhưng khi khung chọn bên model là hình chữ nhật có cạnh không song song với trục X thì không chạy được ?

Đó là trường hợp tổng quát. Mong tác giả bổ sung thêm ! thanks !


  • 0

#65 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 22 February 2013 - 10:10 AM

bạn cần gấp ko nhoc thử mò nãy giờ nhưng có 1 chỗ chưa làm đc ^^, bước
cuối phải thủ công tí xíu ^^ đó là điều chỉnh tỉ lệ lại cho khung view,
ví dụ tỉ lệ 1/100 nghĩa là khung view sẽ scale lên 10 lần nhưng khi bấm
vào khung view chỉ đc 9.7 mấy thui nhoc chưa tìm ra cách khắc phục,
nhưng chỉ cần chỉnh thủ công xíu đổi thành 10 thì sẽ vừa khít ngay, nhoc
cũng chỉ làm đc tới đó thui, bạn thích thì dùng thử hen ^^, hoàn hảo
thì chờ anh KangKung biggrin.png

;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========

(defun C:mtl(/ taphop soluong size i index oldos p1)

  (command "UNDO" "BE")

  (setq oldos (getvar "osmode"))

  (setvar "OSMODE" 1)

  (setq taphop(ssget))
   (setq Tyle (getreal (strcat "\n Ty le 1/ <1000>: ")))
   (if (= Tyle nil) (setq Tyle 1000))

 
  (setq soluong (sslength taphop))

  (setq index 0)

  (setq i 0)

  (while (< index soluong)

(setq i 1)
(setq khung(ssname taphop index))
(setq lst(acet-geom-vertex-list khung))
(command "COPYCLIP" khung "")
(command "LAYOUT" "N" "Layout1")
(command "LAYOUT" "S" "Layout1")
(command "ERASE" "ALL" "")
(setq p1 (getpoint "\nchon diem dat:"))

(command "PASTECLIP" p1)
(command "SCALE" (entlast) "" p1 (/ 1000 tyle))

(command "MVIEW" "O" (entlast))
;;;(command "MVIEW" "L" "on" (entlast) "")

(command "MSPACE")

(command "ZOOM" "e")

(command "PSPACE")

(command "ZOOM" "E")


(setq index (+ index 1))

)

  (command "UNDO" "END")

  (setvar "OSMODE" oldos)

  (princ)

  )

  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#66 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 22 February 2013 - 11:42 AM

Cái này mình ko cần gấp. Từ trước tới giờ vẫn làm thủ công. Nay tham gia diễn đàn thấy các cao thủ viết nhiều lsp hay quá nên mạnh dạn nhờ các bác giúp để bớt thủ công.

lsp của nhoc đã xử lý được khung mv là hình polyline kín đã vẽ bên model nhưng chọn nhiều khung bên model thì bên layout chỉ được 1 khung và tỷ lệ chưa đúng như Nhoc đã nói trên.

Mong các cao thủ trợ giúp tiếp. 


  • 0

#67 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 22 February 2013 - 01:25 PM

Từ trước đến nay chưa thấy ai tạo viewport dị như vậy, tuy nhiên tôi vẫn sửa theo yêu cầu của bạn. Pline của bạn có kín hay không thì vẫn tạo được viewport. Lisp mới của bạn đây:

http://www.cadviet.c...mtl_rev4i_1.lsp


;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
;=========================REV4ii=====================================
(defun C:mtl( / os lst khung X_min Y_min X_max Y_max X index taphop)
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq taphop(ssget ))
  (if (= Tyle nil)
    (setq Tyle1 1)
    (setq Tyle1 Tyle))
  (setq Tyle (getreal (strcat "\n Ty le: <" (rtos Tyle1 2 0) "> ")))
  (if (= Tyle nil)
    (setq Tyle Tyle1))
  (setq soluong (sslength taphop))
  (setq index 0)
  (command "LAYOUT" "N" "Layout1")
  (command "LAYOUT" "S" "Layout1")
  (command "ERASE" "ALL" "")
  (command "MODEL")
  (setq X 0)
  (command "ZOOM" "E")
  (while (< index soluong)
    (setq khung(ssname taphop index))
    (setq lst(acet-geom-vertex-list khung))
    (setq X_min 1000000000
      Y_min 1000000000
      X_max -1000000000
      Y_max -1000000000)
    (foreach a lst
      (if (< (car a) X_min) (setq X_min (car a)))
      (if (< (cadr a) Y_min) (setq Y_min (cadr a)))
      (if (> (car a) X_max) (setq X_max (car a)))
      (if (> (cadr a) Y_max) (setq Y_max (cadr a)))
      )
    (command "LAYOUT" "S" "Layout1")
    (command "ZOOM" "W" (list X_min Y_min) (list X_max Y_max))
    (command "PLINE")
    (foreach a lst
      (command a))
    (command "C")
    (command "MOVE" (entlast) "" (list X_min Y_min) (list X 0))
    (command "ZOOM" "W" (list 0 0) (list (+ X 100) 0))
    (command "SCALE" (entlast) "" (list X 0) (/ 1 tyle))
    (command "MVIEW" "O" (entlast))
    (command "MSPACE")
    (command "ZOOM" (list X_min Y_min) (list X_max Y_max))
    (command "PSPACE")
    (setq X(+ X 50 (/ (- X_max X_min) tyle)))
    (command "ZOOM" "W" (list 0 0) (list (+ X 100) 0))
    (setq index (+ index 1))
    )
  (command "MODEL")
  (command "UNDO" "END")
  (setvar "OSMODE" os)
  (princ)
  )

 

 

@Nhoclangbat: sử dụng lệnh copyclip và pasteclip nên tất cả các viewport đều có hình dạng giống với viewport đầu tiên.

@girl: về yêu cầu chọn hình chữ nhật không song song trục X thì phải thêm lệnh để xoay khung HCN trong model về hướng nằm ngang. Yêu cầu này không khó, mình sẽ bổ sung sau.


  • 4

#68 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 22 February 2013 - 03:13 PM

Tuyệt cú mèo. Cảm ơn Kangkung. Cảm ơn Nhoclangbat. Cảm ơn diễn đàn.


  • 2

#69 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 22 February 2013 - 03:41 PM

nhoc chỉ biết thêm màu mè thui ^^, set layer cho khung view đó, khóa khung view sau khi tạo, thay đổi cách nhập tỉ lệ cho đở phải tính tóan nếu tỉ lệ lẻ ^^, như anh KangKung viết thì ví dụ tỉ lệ 1/500 thì chạy lsp sẽ hỏi khi đó bạn nhập là 0.5 tương đương 1/500 hay 0.1 = 1/100, nhoc sửa xíu bạn cứ nhập đúng tỉ lệ mún thể hiện nhập vào thẳng  200, 100 , 75 , 20  v...v. Bạn thử xem ^^


;========LISP TAO VIEWPORT TREN LAYOUT BANG CACH CHON O MODEL========
;=========================REV4ii=====================================
(defun C:mtll( / os lst khung X_min Y_min X_max Y_max X index taphop tyle)
(command "-layer" "m" "khung" "c" 3 "khung" "")
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq taphop(ssget ))
   (setq Tyle (getreal (strcat "\n Ty le 1/ <1000>: ")))
   (if (= Tyle nil) (setq Tyle 1000))
  (setq soluong (sslength taphop))
  (setq index 0)
  (command "LAYOUT" "N" "Layout1")
  (command "LAYOUT" "S" "Layout1")
  (command "ERASE" "ALL" "")
  (command "MODEL")
  (setq X 0)
  (command "ZOOM" "E")
  (while (< index soluong)
    (setq khung(ssname taphop index))
    (setq lst(acet-geom-vertex-list khung))
    (setq X_min 1000000000
      Y_min 1000000000
      X_max -1000000000
      Y_max -1000000000)
    (foreach a lst
      (if (< (car a) X_min) (setq X_min (car a)))
      (if (< (cadr a) Y_min) (setq Y_min (cadr a)))
      (if (> (car a) X_max) (setq X_max (car a)))
      (if (> (cadr a) Y_max) (setq Y_max (cadr a)))
      )
    (command "LAYOUT" "S" "Layout1")
    (command "ZOOM" "W" (list X_min Y_min) (list X_max Y_max))
    (command "PLINE")
    (foreach a lst
      (command a))
    (command "C")
    (command "MOVE" (entlast) "" (list X_min Y_min) (list X 0))
    (command "ZOOM" "W" (list 0 0) (list (+ X 100) 0))
    (command "SCALE" (entlast) "" (list X 0) (/ 1000 tyle))
    (command "MVIEW" "O" (entlast))
    (command "MSPACE")
    (command "ZOOM" (list X_min Y_min) (list X_max Y_max))
    (command "PSPACE")
	(command "MVIEW" "L" "on" (entlast) "")
    (setq X(+ X 50 (/ (- X_max X_min) (/ tyle 1000))))
    (command "ZOOM" "W" (list 0 0) (list (+ X 100) 0))
    (setq index (+ index 1))
    )
  (command "MODEL")
  (command "UNDO" "END")
  (setvar "OSMODE" os)
  (princ)
  )


  • 3
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#70 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 February 2013 - 04:26 PM

Đọc code chưa hiểu dùng xmin ymin xmax ymax làm gì ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#71 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 22 February 2013 - 06:54 PM

Đọc code chưa hiểu dùng xmin ymin xmax ymax làm gì ^^

1. Dùng điểm (Xmin Ymin) và (Xmax Ymax) để zoom khung nhìn cho viewport bằng đúng tỉ lệ nhập vào.

2. Dùng để tính điểm đặt cho viewport.


  • 0

#72 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 23 February 2013 - 08:25 AM

anh KangKung ơi lsp nhoc nhờ anh hồi đó trong inbox anh có thử viết chưa anh ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#73 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 26 February 2013 - 11:09 AM

Lisp MTL hay nhưng khi khung chọn bên model là hình chữ nhật có cạnh không song song với trục X thì không chạy được ?
Đó là trường hợp tổng quát. Mong tác giả bổ sung thêm ! thanks !

 
Lisp mới tạo viewport cho tất cả hình chữ nhật có cạnh nằm ngang, đứng, ... ngồi biggrin.png hoặc nghiêng. Sơ qua về các đặc điểm của Lisp này:
1. Tạo viewport cho tất cả các khung hình chữ nhật
2. Thêm lựa chọn Xref khung tên bản vẽ
3. Các viewport được sắp xếp theo phương đứng thay vì phương ngang như các Lisp trước
Bác nào có nhu cầu thì down về rồi test thử và cho ý kiến nhé.
http://www.cadviet.c...62_mtl_rev5.lsp

P/S: Lisp này sẽ giảm rất nhiều thao tác và thời gian cho những ai biên tập bản đồ khu vực rộng đặc biệt là bản đồ dạng tuyến. 

@Nhoclangbat: Sẽ post Lisp theo yêu cầu của nhoc sau nhé.


  • 4

#74 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 26 February 2013 - 12:01 PM

Cám ơn Bạn, rất hay kể cả khi chọn một lượt tất cả khung.

Mình có một yêu cầu là bạn cho tạo lưới khung tọa độ mắt lưới khung cho các hình vừa chọn trên cho đúng yêu cầu xuất bản đồ,.. được chứ bạn.


  • 0

#75 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 26 February 2013 - 12:54 PM

:D topic nì đã vượt quá ngoài yêu cầu đơn thuần của chủ top phát triển ko ngừng ^^, có khả năng chắc sẽ đụng nóc "warnings" ^^

- Thế bạn mún tạo lưới bên model hay layout nhỉ, nhoc nghĩ có lẽ ko nên trên 4rum cũng có nhiều lsp chạy mắt lưới tọa độ rùi, bạn kím 1 cái về dùng kết hợp lsp anh KangKung chứ chạy 1 lúc hết mệt ah nha, có lần nhoc thử 1 lsp cũng nhiều chức năng máy nhoc đơ như cây cơ lun ^^. Có thể do máy nhoc già rùi ko chịu nổi cường độ cao nữa :D


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#76 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 26 February 2013 - 01:58 PM

Cám ơn Bạn, rất hay kể cả khi chọn một lượt tất cả khung.

Mình có một yêu cầu là bạn cho tạo lưới khung tọa độ mắt lưới khung cho các hình vừa chọn trên cho đúng yêu cầu xuất bản đồ,.. được chứ bạn.

Tất nhiên là làm được, cũng nhanh thôi. Mình đã tính đến việc vẽ khung lưới toạ độ cho các khung chọn này rồi nhưng chưa đưa vào vì các lý do sau:

1. Đối với các bản vẽ có nhiều khung in thì File chứa các khung mắt lưới nên tạo riêng rồi Xref vào chứ không nên để tất cả vào một file sẽ làm cho bản vẽ rất nặng.

2. Việc chia đối tượng thành các File riêng biệt sẽ chuyên nghiệp hơn là để chung tất cả vào một file. Ví dụ bạn vẽ khung luới vào một file, số liệu bình đồ 1 file, in ấn cũng tạo riêng một file v.v... sau đó xref tất cả các file liên quan vào trong một file để in là OK.

@Nhoclangbat: Lisp theo yêu cầu của Nhoc đây. Nhoc xem đã đúng theo yêu cầu chưa nhé.

http://www.cadviet.c...nhoclangbat.lsp


  • 3

#77 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 26 February 2013 - 04:57 PM

 
Lisp mới tạo viewport cho tất cả hình chữ nhật có cạnh nằm ngang, đứng, ... ngồi biggrin.png hoặc nghiêng. Sơ qua về các đặc điểm của Lisp này:
1. Tạo viewport cho tất cả các khung hình chữ nhật
2. Thêm lựa chọn Xref khung tên bản vẽ
3. Các viewport được sắp xếp theo phương đứng thay vì phương ngang như các Lisp trước
Bác nào có nhu cầu thì down về rồi test thử và cho ý kiến nhé.
http://www.cadviet.c...62_mtl_rev5.lsp

P/S: Lisp này sẽ giảm rất nhiều thao tác và thời gian cho những ai biên tập bản đồ khu vực rộng đặc biệt là bản đồ dạng tuyến. 

@Nhoclangbat: Sẽ post Lisp theo yêu cầu của nhoc sau nhé.

2. Thêm lựa chọn Xref và chọn thay đổi tỉ lệ khung tên bản vẽ khi in

--------------------------------------------------------

Vì thường in trên layout, nên mình đặt khung tên bản vẽ với tỉ lệ in là 1:1 với khung nhìn bên trong thì thay đổi để in tỷ lệ 1:500 hoặc 1:200.

Nhờ bạn giúp cho việc khi chọn Xref khung tên bản vẽ sẻ thay đổi theo tỉ lệ tạo các viewport và chèn theo nó.

Ps: Bạn sửa giúp cho việc đặt lại tỷ lệ in theo tỷ lệ bản đồ như ; 100, 200, 500...cho dễ nhớ.

Cám ơn


  • 0

#78 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 27 February 2013 - 07:17 AM

nhoc thấy thế này
1- khung tên bên layout cứ đặt 1:1, cần chi thay đổi vì khung view đa set đúng tỉ lệ cần rùi mà, sau đó cứ in 11 thui, chỉnh khung ở đây chỉ là chỉnh khổ giấy thui cho phù hợp với tỉ lệ khung view đã đặt.
2- việc chỉnh lại cách nhập tỉ lệ 1 số lsp trên nhoc đã chỉnh lại rùi bạn thử tự chỉnh sữa xem :D
  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#79 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 27 February 2013 - 09:35 AM

2. Thêm lựa chọn Xref và chọn thay đổi tỉ lệ khung tên bản vẽ khi in

--------------------------------------------------------

Vì thường in trên layout, nên mình đặt khung tên bản vẽ với tỉ lệ in là 1:1 với khung nhìn bên trong thì thay đổi để in tỷ lệ 1:500 hoặc 1:200.

Nhờ bạn giúp cho việc khi chọn Xref khung tên bản vẽ sẻ thay đổi theo tỉ lệ tạo các viewport và chèn theo nó.

Ps: Bạn sửa giúp cho việc đặt lại tỷ lệ in theo tỷ lệ bản đồ như ; 100, 200, 500...cho dễ nhớ.

Cám ơn

Thông thường Khung tên bên Layout được in với tỉ lệ 1:1 nên không cần thiết  phải chọn thay đổi tỉ lệ khung tên bản vẽ khi in. Còn cái tỉ lệ 1:500, 1:200, ... là tỉ lệ giữa kích thước bên Layout và kích thước bên Model của cùng một đối tượng. Bạn muốn in tỉ lệ bao nhiêu thì chỉ việc tính tỉ lệ giữa khung Mview bên Layout và khung hình chữ nhật bên Model thôi.

P/S: Sửa code mãi để kiếm Like của bác tientracdia mà chả được. Nản rồi.


  • 1

#80 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 27 February 2013 - 11:04 AM

Lsp chưa đúng với ý đồ lém ^^

:D, anh KangKung chắc chưa hỉu rõ ý nhoc, nhóc lấy hình minh họa hen ^^

104473_111111111.jpg

 

 


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^