Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu ] Lisp Tự Động Phát Sinh Đối Tượng Theo " UCS ảo "


  • Please log in to reply
7 replies to this topic

#1 NTD

NTD

    biết lệnh rotate

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

Đã gửi 12 July 2012 - 06:02 AM

Em cần 1 Lisp chạy có tính năng như sau . Mục đích để khi gọi bất kỳ 1 lệnh vẽ ,hay khi gọi bất kỳ 1 lệnh nào có tính phát sinh đối tượng mới sẽ tự động copy ra thêm n đối tượng nữa nằm tai các vị trí mà ta đã cho trước các điểm làm chuẩn

Bước 1 - Gọi lệnh thứ nhất của Lips
Bước 2 - Chọn điểm A làm chuẩn , hướng X , hướng Y , đã xong 1 "UCS ảo" đầu tiên
- Chọn điểm B làm chuẩn , hướng X , hướng Y , đã xong 1 "UCS ảo" tiếp theo
- Chọn điểm C làm chuẩn , hướng X , hướng Y , đã xong 1 "UCS ảo" tiếp theo
.........
.........
( Có thể chọn n điểm bao nhiêu cũng đc để xác định các "UCS ảo" )

- Kết thúc ko chọn điểm nào nữa
Bước 3 - Đăt chế độ là On hay 1 để xác lập môi trường các cho mọi lênh cơ bản của AutoCAD mà làm phát sinh đối tượng mới sẽ tự động copy ra thêm n đối tượng nữa ( chế độ là OFF hay 0 sẽ làm mọi thứ như chưa bao giơ có Lips này nhưng các điểm ABC....N thì vần đc lưu trong bộ nhớ để khi cần thì về On )
Bước 4 - Enter kết thúc , đã xác lập xong môi trường "UCS ảo"

Vì đã đặt là On (1) nên vẽ bất kỳ đối tượng mới hay nhóm đối tượng mới nào cũng sẽ tự động copy chúng ra thêm ( Điểm A làm chuẩn cho đối tượng đâu tiên đc tạo bởi các lệnh cơ bản của AutoCAD . Điểm B, C ...N , làm chuẩn cho các đối tượng đươc phát sinh ) , Đăc biêt nếu nhìn rõ cả quá trình động thi tốt quá , VD vẽ 1 cái Dim chưa kết thúc lệnh mà di chuột thì sẽ thấy cái Dim đó di chuyển tại môi trường của các "UCS ảo" rồi .

* Nếu khó quá hay ý tưởng của em phi thức tế quá thì các bác viết theo hướng cho Gọi lệnh thứ 2 của Lips để chọn các đối tượng ==> Enter kêt thúc tự động copy ra n đối tượng còn lại , xong . Tức Lisp về lệnh Copy nhưng ko cần chọn điểm đầu tiên và các điểm tiếp theo vì sẽ tự động đưa thông tin tọa độ của điểm A là điểm đầu tiên , B,C,D ... cho các điểm tiếp theo

Em xin cảm ơn mọi coment và Lisp của các bác !
  • 0

#2 mathan

mathan

    biết vẽ rectang

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

Đã gửi 12 July 2012 - 07:27 AM

Bạn cho hình minh họa hoặc file CAD lúc trước và sau khi thực hiện Lisp đi mọi người dễ tưởng tượng và có file để chạy test thử lisp luôn.
  • 0
-----------
Hình đã gửi Hãy chia sẻ để thấy có được nhiều hơn điều mình muốn!
Best regard,

#3 NTD

NTD

    biết lệnh rotate

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

Đã gửi 12 July 2012 - 09:33 AM

em gủi File CAD minh họa ý tưởng đây thưa các bác http://www.cadviet.c...theo_ucs_ao.dwg

Post 1 em nói chưa hết ý :
- Sau khi thiết lập đc 1 hệ thống "UCS ảo" A-B-C-D....-N như vậy thì thông tin về hệ thống đó sẽ đc lưu giữ để sau khi đóng Files mở lại thì vẫn dùng tiếp được mà ko phải thiết lập lại từ đầu
- Có thêm chế độ Reset để xóa toàn bộ thông tin về hệ thống "UCS ảo" đó ===> Thiết lập 1 hệ thống "UCS ảo" khác cho 1 công việc khác

- Mà tốt nhất là các bác làm theo kiểu : Tại các điểm A-B-C-D-....-N sẽ tự động chèn vào các Block có tên lần lần lượt là Goc-A ; Goc-B ; Goc-C; Goc-D ; Goc-N . Các Block này có điểm chèn nằm tại chính các các điểm A-B-C-D-....-N . Mục đích của việc này là nhằm sử dụng tọa độ điểm chèn của các Block đó đưa vô hệ thống và giả lập lên tọa độ của các "UCS ảo" trong UCS quốc tế thật . Nhờ thế sẽ chỉnh sửa thêm bớt tùy biến được hệ thống "UCS ảo" bằng các lệnh cơ bản nhất như Move , Erase , Copy .... ===> Giải quyết đc bài toán vẽ hàng loat các thứ giống nhau tại các vùng khác nhau trên bản vẽ sao cho nhàn nhất có thể VD: cụ thể ơ đây là hàng loạt các Text giống nhau trên các MB của 1 tòa nhà cao tầng như em đã vẽ trong File CAD minh họa ý tưởng
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 July 2012 - 11:45 AM

em gủi File CAD minh họa ý tưởng đây thưa các bác http://www.cadviet.c...theo_ucs_ao.dwg

Post 1 em nói chưa hết ý :
- Sau khi thiết lập đc 1 hệ thống "UCS ảo" A-B-C-D....-N như vậy thì thông tin về hệ thống đó sẽ đc lưu giữ để sau khi đóng Files mở lại thì vẫn dùng tiếp được mà ko phải thiết lập lại từ đầu
- Có thêm chế độ Reset để xóa toàn bộ thông tin về hệ thống "UCS ảo" đó ===> Thiết lập 1 hệ thống "UCS ảo" khác cho 1 công việc khác

- Mà tốt nhất là các bác làm theo kiểu : Tại các điểm A-B-C-D-....-N sẽ tự động chèn vào các Block có tên lần lần lượt là Goc-A ; Goc-B ; Goc-C; Goc-D ; Goc-N . Các Block này có điểm chèn nằm tại chính các các điểm A-B-C-D-....-N . Mục đích của việc này là nhằm sử dụng tọa độ điểm chèn của các Block đó đưa vô hệ thống và giả lập lên tọa độ của các "UCS ảo" trong UCS quốc tế thật . Nhờ thế sẽ chỉnh sửa thêm bớt tùy biến được hệ thống "UCS ảo" bằng các lệnh cơ bản nhất như Move , Erase , Copy .... ===> Giải quyết đc bài toán vẽ hàng loat các thứ giống nhau tại các vùng khác nhau trên bản vẽ sao cho nhàn nhất có thể VD: cụ thể ơ đây là hàng loạt các Text giống nhau trên các MB của 1 tòa nhà cao tầng như em đã vẽ trong File CAD minh họa ý tưởng

Ý của bạn chủ topic giống như là vẽ đối tượng trong ETAB với chế độ vẽ Similar Story (Vẽ cho từng tầng giống nhau) -> Vẽ cho tầng điển hình thì các tầng Similar Story tự phát sinh đối tượng
Hoặc là chế độ vẽ All Story (Vẽ cho toàn bộ các tầng) Vẽ tầng điển hình thì toàn bộ các tầng cũng phát sinh đối tương như thế
Cái này hơi bị khó nhỉ? Chắc là đi theo phương án 2 của bạn thôi
  • 0

#5 mathan

mathan

    biết vẽ rectang

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

Đã gửi 12 July 2012 - 12:18 PM

Mình viết cho bạn đây rùi đây theo phương án đơn giản hơn là phương án số 2 của bạn
Bạn đóng điểm gốc thành 1 block và copy vào các điểm gốc mà bạn chọn
Khi đó bạn không cần pick lần lượt từng điểm gốc nữa nhé
Lệnh: CPN chuyển phát nhanh :D

;; Free lisp code from CADViet.com
;;;;;;;;;;;;;;; Chuyen phat nhanh doi tuong theo block - edit by Mathan
(defun c:CPN ( )
(command "undo" "be")
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(princ "\nChon vung doi tuong: ")
(setq vungdt (ssget))
(princ "\n Chon doi tuong block goc toa do cua vung vua copy ")
(setq blockgoc (ssget (list (cons 0 "INSERT"))))
(setq goc1 (cdr (assoc 10 (entget (ssname blockgoc 0)))))
(setq ten (cdr (assoc 2 (entget (ssname blockgoc 0)))))
(setq sset (ssget "_X" (list (cons 0 "INSERT")(cons 2 ten))))

(setq n (sslength sset))
(setq i 0)
(while (< i n)
(setq Ent (ssname sset i))
(setq dgock (cdr (assoc 10 (entget ENT))))
(if (= goc1 dgock) (princ "\n Trung diem goc ")
(command "COPY" vungdt "" goc1 dgock)
)

(setq i (+ i 1))
)
(setvar "osmode" os)
(command "undo" "end")


(princ)
)

  • 1
-----------
Hình đã gửi Hãy chia sẻ để thấy có được nhiều hơn điều mình muốn!
Best regard,

#6 NTD

NTD

    biết lệnh rotate

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

Đã gửi 12 July 2012 - 02:22 PM

Cảm ơn bác mathan em đã xài thử , đã đáp ứng đc phần nào cái em muốn , em có nhận xét như sau
- Bác dựa vào các Block đã có sẵn để làm gốc UCS ảo, ý này hay quá , đỡ tốn công tạo mới, vì bản vẽ các tầng đều có các Block giống nhau có vị tri tương đối như nhau so với hê thống lưới cột , Nếu hệ thống lưới côt cũng là 1 Block như trong File em gửi thì độ chính xác khỏi lo
- Có 1 vấn đề bác chưa tính tới đó là khi có các mặt bằng bị xoay đi thì Lips chưa tính góc xoay của Block đc chọn ==> ko xoay đối tượng theo Block mẫu . Bác sửa cho em chỗ này với ( Mặt bằng có thẻ bị xoay 90 độ đi để vẽ Măt Đứng Mặt Cắt thậm chí là xoay chéo để vẽ các mẳt đứng chéo mà )
- Dòng mã (setq sset (ssget "_X" (list (cons 0 "INSERT")(cons 2 ten)))) em nghĩ nên bỏ "_X"
===> (setq sset (ssget (list (cons 0 "INSERT")(cons 2 ten)))) ===> sẽ ko copy cả vô các MB minh ko muốn
- Em vừa phát hiện thêm 1 lỗi nữa là khi UCS xoay thì kết quả sẽ ko như mong muốn
  • 0

#7 mathan

mathan

    biết vẽ rectang

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

Đã gửi 12 July 2012 - 02:44 PM

Thứ nhất: Về dòng code thì mình biết chứ, nhưng để tiện và nhanh mình thấy vẫn thấy nên chọn tất cả, còn tất nhiên khi bạn dùng bạn có thể tùy biến
Thứ hai: Yêu cầu của bạn không có chỗ nào nói về xoay khi copy đi cả. Đó là vấn đề của quá trình yêu cầu !!
Bạn nên thật ngắn ngọn và đủ ý, file mẫu của bạn cũng k hề có xoay đâu.
Bạn yêu cầu đầy đủ thì người viết giúp bác sẽ không mất công sửa lại nhiều lần.
  • 0
-----------
Hình đã gửi Hãy chia sẻ để thấy có được nhiều hơn điều mình muốn!
Best regard,

#8 NTD

NTD

    biết lệnh rotate

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

Đã gửi 12 July 2012 - 03:01 PM

Vâng lần đâu post yêu cầu Lips em chưa kinh nghiệm , lần sau sễ cố gắng ngắn nhất mà đủ ý :D
  • 0