Đến nội dung


Hình ảnh
- - - - -

[Nhờ chỉnh sửa] Lisp arm (array kết hợp với move)


  • Please log in to reply
8 replies to this topic

#1 tkd247

tkd247

    biết zoom

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

Đã gửi 13 March 2012 - 09:49 PM

Gửi các bạn trong diễn đàn Cad Việt,
Mình có viết 1 lisp arm với nội dung tương tự lệnh array trong cad nhưng thuận tiện hơn nhờ nhập số liệu từ bàn phím. Mình muốn cải tiến cho nó kết hợp với lệnh move các đối tượng vừa tạo ra theo yêu cầu của mình (Các bạn xem thêm hình minh họa). Vì vậy nhờ các bạn chỉnh sửa lại code giúp mình nhé.
Mình gửi kèm lisp
http://www.cadviet.c...01944_arm_1.lsp
và hình minh họa để các bạn tham khảo.
http://www.cadviet.c..._lisp_arm_1.dwg
Rất mong được giúp đỡ,
Tkd247
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 March 2012 - 10:16 AM

Bạn đã viết đến đấy rồi thì cố nốt 1 chút nữa thôi :)
Đầu tiên bạn search các hàm con sau :
- Viết 1 hàm lấy boundingbox của đối tượng (trên CV có rồi)
- Viết 1 hàm lấy boundingbox của tập đối tượng (cũng có rồi)
- Viết 1 hàm collect toàn bộ đối tượng sau đối tượng e (có rồi)
- VIết hàm lấy trung điểm của 2 điểm (cũng có luôn rồi)

THứ tự thực hiện :
- Lấy ename của đối tượng e cuối cùng (entlast)
- Copy đoạn mã của bạn vào dưới
- Dùng hàm collect để lấy toàn bộ đối tượng sinh ra sau khi thực hiện array (sinh ra sau e) và cons thêm đối tượng chọn vào list ename này
- Lấy boundingbox toàn bộ tập đối tượng mới sinh
- Lấy trung điểm của 2 cạnh chéo boundingbox
- THực hiện lệnh move từ trung điểm này tới trung điểm chọn từ 2 cạnh chéo HCN
- Xong ^^
- Có gì khó khăn bạn cứ hỏi :D
  • 2

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


#3 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 March 2012 - 11:25 AM

Ngoài ra, để giải quyết nhu cầu cụ thể, rõ ràng bài toán của bạn giống việc tính toán và chèn BLock hơn, nếu đi theo hướng chọn đối tượng, chọn HCN, sau đó bạn tính ra được cụ thể từng điểm chèn của Block và chèn vào đó, lúc đó code sẽ ngắn hơn nhiều :)
  • 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


#4 vuongviva

vuongviva

    biết zoom

  • Advance Member
  • Pip
  • 12 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 14 March 2012 - 11:53 AM

Bạn đã viết đến đấy rồi thì cố nốt 1 chút nữa thôi :)
Đầu tiên bạn search các hàm con sau :
- Viết 1 hàm lấy boundingbox của đối tượng (trên CV có rồi)
- Viết 1 hàm lấy boundingbox của tập đối tượng (cũng có rồi)
- Viết 1 hàm collect toàn bộ đối tượng sau đối tượng e (có rồi)
- VIết hàm lấy trung điểm của 2 điểm (cũng có luôn rồi)

THứ tự thực hiện :
- Lấy ename của đối tượng e cuối cùng (entlast)
- Copy đoạn mã của bạn vào dưới
- Dùng hàm collect để lấy toàn bộ đối tượng sinh ra sau khi thực hiện array (sinh ra sau e) và cons thêm đối tượng chọn vào list ename này
- Lấy boundingbox toàn bộ tập đối tượng mới sinh
- Lấy trung điểm của 2 cạnh chéo boundingbox
- THực hiện lệnh move từ trung điểm này tới trung điểm chọn từ 2 cạnh chéo HCN
- Xong ^^
- Có gì khó khăn bạn cứ hỏi :D

Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.
  • 0
vuongviva

#5 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 March 2012 - 12:25 PM

Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.


Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.

Hề hề hề,
Làm thì được thôi, nhưng luôn thì cứ phải từ từ vì hổng phải bác ấy chỉ có một việc ngồi viết lisp theo yêu cầu đâu. Hãy chịu khó nhẫn nại chờ một chút.
Hề hề hề....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 March 2012 - 01:02 PM

Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.

Bạn làm chuyên ngành j mà hay áp dụng lisp này :)
  • 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


#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 March 2012 - 03:03 PM

Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.

Hề hề hề,
Luôn thì luôn đây. Tuy nhiên mình không phải là bác ketxu nên mình chỉ luôn được đến thế này. Cái vụ chọn điểm nguồn và điểm đích của việc move mình để cho người dùng chọn bằng tay cho nó ...... khỏi phải nghĩ. Bởi vì theo mình nghĩ thì như thế có khi lại thuận lợi cho nhiều người dùng hơn, Cái yệu cầu của chủ thớt là điểm nguồn phải là tâm của nhóm đối tượng và điểm đích là tâm của một HCN khác mà mình thì chả biết cái HCN ây của chủ thớt ở đâu nên cứ làm thế này đã. Nếu chủ thớt không khoái có thể tự chỉnh lại lisp cho nó vuông được mà.
Hề hề hề
Luôn đây:


(defun *error* (msg)
(setvar "osmode" 0)
(princ "\n you lost it - homer")
(princ)
)
(defun C:ARM ()
(setvar "cmdecho" 0)
(setq SSET (ssget))

(if (not *COL)(setq *COL 1))
(princ "\n number of columns <||||>:<")
(princ *COL)
(setq COL (getint "> "))
(if (not COL)(setq COL *COL)(setq *COL COL))

(if (not *COLD)(setq *COLD 1))
(princ "\n column distance <| | | |>:<")
(princ *COLD)
(setq COLD (getint "> "))
(if (not COLD)(setq COLD *COLD)(setq *COLD COLD))

(if (not *ROW)(setq *ROW 1))
(princ "\n number of rows <---->:<")
(princ *ROW)
(setq ROW (getint "> "))
(if (not ROW)(setq ROW *ROW)(setq *ROW ROW))

(if (not *ROWD)(setq *ROWD 1))
(princ "\n row distance <- - - ->:<")
(princ *ROWD)
(setq ROWD (getint "> "))
(if (not ROWD)(setq ROWD *ROWD)(setq *ROWD ROWD))

(setq ent (entlast))
(command "array" SSET "" "R" ROW COL ROWD COLD)
(While ent
(setq ent (entnext ent))
(if ent (setq sset (ssadd ent sset)))
)
(command "move" sset "" (setq p1 (getpoint "\n Chon diem goc")) (getpoint p1 "\n Chon diem dich"))
(princ)
)


Chúc mọi người luôn vui vẻ.

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 14 March 2012 - 03:07 PM
Chỉnh sửa do codebox bị chập mạch.

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

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 March 2012 - 04:45 PM

Bạn làm luôn rồi up lên cho mọi người được ko?Mình thấy lisp này cũng hay áp dụng.Thanks.

Hề hề hề,
Tiện tay gửi luôn các bạn hai hàm con dùng để lấy tâm nhóm đối tượng (getcen ....) và lấy tâm của một đối tượng (getcen1.... ) để các bạn tiện bề sử dụng.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun getcen (ss / pt)
(setq pt (mapcar '(lambda (x) (/ x 2)) (mapcar '+ (car (acet-ss-zoom-extents ss)) (cadr (acet-ss-zoom-extents ss)))))
pt
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun getcen1 (en /pt)
(setq pt (mapcar '(lambda (x) (/ x 2)) (mapcar '+ (car (acet-ent-geomextents en)) (cadr (acet-ent-geomextents en)))))
pt
)

Với hai hàm con con này, hy vọng rằng chủ thớt sẽ biết cách đưa nó vào trong lisp trên để xài cho trúng ý đò của chủ thớt.
Hề hề hề,...

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 14 March 2012 - 04:47 PM
Sửa lại do cái codebox bị chập cheng

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

#9 tkd247

tkd247

    biết zoom

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

Đã gửi 15 March 2012 - 11:31 AM

Gửi bạn Ketxu,
Cám ơn các gợi ý của bạn, để thực hiện được hết các ý tưởng của bạn chắc mình còn phải nghiên cứu thêm nhiều. Hiện nay mình mới tập viết 1 số lisp cơ bản để giảm thiểu thao tác thôi.
Gửi bạn Phamthanhbinh,
Cám ơn bạn rất nhiều vì đã hỗ trợ code. Trên cơ sở gợi ý của bạn mình đã hoàn thiện lisp theo đúng ý mình. Mình gửi lại lisp để bạn nào quan tâm có thể lấy sử dụng.
http://www.cadviet.c...01944_arm_3.lsp
Tkd247
  • 1