Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
abiabu

Giúp Viết Lisp Rải Đối Tượng Theo Yêu Cầu!

Các bài được khuyến nghị

Chào các bác,em xin các bác giúp em viết một lisp theo yêu cầu sau:

 + Rải đối tượng là block sao cho các block sẽ vuông góc với 1 đầu mút(hoặc 2 đầu mút) của đoạn pline(line) như hình vẽ sau:

Em xin cảm ơn các bác!

123670_1.png

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

^^. Nếu giúp được, bạn có đồng ý đóng góp ít kinh phí cho hoạt động ấp ủ lâu nay của diễn đàn được ko :v :v :)

http://www.cadviet.com/forum/topic/168566-thue-viet-lisp/

Thực ra viết lisp thì là bỏ ra chất xám để giúp người khác nên những người viết lisp xứng đáng được trả tiền rồi,nhưng khổ nỗi em mới đi thực tập nên xèng cũng không dư dả lắm.Nếu lisp của em yêu cầu cao quá khó viết hoặc phải trả tiền thì bác nào cao thủ vào trả lời giùm em để em đỡ trông ngóng! Em xin cảm ơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thực ra viết lisp thì là bỏ ra chất xám để giúp người khác nên những người viết lisp xứng đáng được trả tiền rồi,nhưng khổ nỗi em mới đi thực tập nên xèng cũng không dư dả lắm.Nếu lisp của em yêu cầu cao quá khó viết hoặc phải trả tiền thì bác nào cao thủ vào trả lời giùm em để em đỡ trông ngóng! Em xin cảm ơn!

Vậy mong bạn sớm ra trường, cố gắng kiếm nhiều xèng , rồi giúp đỡ người có hoàn cảnh khó khăn hơn mình, và ủng hộ diễn đàn nhé !!! 10k, 20k,...50k... Góp gió nhỏ rồi sẽ thành bão lớn thôi.

Tặng bạn cái lisp: Lệnh Test , bạn xem có hợp ý không :)

http://www.cadviet.com/upfiles/7/124641_insert_block__test.lsp

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như bạn đang nhầm: "Nhap Ten Block:  chứ đâu phải  "Nhập góc xoay " đâu ?

Lisp sẽ làm được hàng loạt nếu chèn ở 2 đầu mút.

Còn muốn chèn chỉ 1 đầu thì vẫn viết lisp được , nhưng có lẽ làm hơi thủ công  ( vì cad không phân biệt đâu là đầu, cuối của 1 đường Polyline ).

Cách nhanh thì bạn chèn xong rồi xóa 1 đầu đi là được.

Em làm theo thứ tự: gõ lệnh test > quét toàn bộ line hoặc pline > nhập tên block nhưng không được!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như bạn đang nhầm: "Nhap Ten Block:  chứ đâu phải  "Nhập góc xoay " đâu ?

Lisp sẽ làm được hàng loạt nếu chèn ở 2 đầu mút.

Còn muốn chèn chỉ 1 đầu thì vẫn viết lisp được , nhưng có lẽ làm hơi thủ công  ( vì cad không phân biệt đâu là đầu, cuối của 1 đường Polyline ).

Cách nhanh thì bạn chèn xong rồi xóa 1 đầu đi là được.

Có chứ nhỉ??? Không thì tại sao có: vlax-curve-getEndParam

Thay vì: "Nhap Ten Block" thì pick vào Block để lấy tên có lẽ hay hơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có chứ nhỉ??? Không thì tại sao có: vlax-curve-getEndParam

Thay vì: "Nhap Ten Block" thì pick vào Block để lấy tên có lẽ hay hơn!

:v :v, anh #QuocManh soi kỹ quá ^^ :, hì em nói nôm na thế , nhưng nếu ko dùng EndParam để xác định mà chỉ nhìn bằng mắt trên màn hình thì ko phân biệt được đâu là đầu, đâu là cuối @@.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tham gia 1 cái:

 

(defun c:tt  (/ *error* blk ent)
  (defun *error*  (msg)
    (and lsb (mapcar 'vla-delete lsb))
    (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
      (princ (strcat "\n** Error: " msg " **")))
    (princ))
  (if (and (setq blk (car (entsel "\nPick block mau: "))) (eq (cdr (assoc 0 (entget blk))) "INSERT"))
    (while (and (setq ent (car (entsel "\nPick *LINE, ARC: ")))
                (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC"))
      ((lambda (/ ang-end ang-sta bln doc end-poi gr lsb msp prt pt str-poi tmp)
         (setq doc (vla-get-activedocument (vlax-get-acad-object))
               msp (vla-get-modelspace doc))
         (setq bln (cdr (assoc 2 (entget blk))))
         (setq tmp t)
         (princ (setq prt "\nPick diem hoac [Hai dau/Mot dau]: "))
         (while (and (setq gr (grread T 15 0)) tmp)
           (cond ((eq (car gr) 5)
                  (setq pt (cadr gr))
                  (and lsb (mapcar 'vla-delete lsb))
                  (setq ang-end (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getEndParam ent)))
                        ang-sta (angle '(0 0 0) (vlax-curve-getFirstDeriv ent (vlax-curve-getstartParam ent)))
                        str-poi (vlax-curve-getstartpoint ent)
                        end-poi (vlax-curve-getendpoint ent))
                  (if (eq #chenblock2dau# t)
                    (setq lsb (mapcar '(lambda (p a n) (vlax-invoke msp 'InsertBlock p bln 1 1 1 (+ a (* n pi))))
                                      (list str-poi end-poi)
                                      (list ang-sta ang-end)
                                      (list 0.5 1.5)))
                    (if (< (distance pt str-poi) (distance pt end-poi))
                      (setq lsb (list (vlax-invoke msp 'InsertBlock str-poi bln 1 1 1 (+ ang-sta (* 0.5 pi)))))
                      (setq lsb (list (vlax-invoke msp 'InsertBlock end-poi bln 1 1 1 (+ ang-end (* 1.5 pi))))))))
                 ((member gr '((2 72) (2 104))) (setq #chenblock2dau# t) (princ (strcat prt " -> Chen 2 dau.")))
                 ((member gr '((2 77) (2 109))) (setq #chenblock2dau# nil) (princ (strcat prt " -> Chen 1 dau.")))
                 ((or (member (car gr) '(25 11)) (equal gr '(2 32)) (equal gr '(2 13)))
                  (and lsb (mapcar 'vla-delete lsb))
                  (setq tmp nil))
                 ((eq (car gr) 3) (setq tmp nil))))))))
  (princ))

H/d:

- Gõ H hoặc M thì sẽ chèn 2 đầu hoặc 1 đầu (1 đầu thì di chuột về phía đầu nào sẽ chèn block vào đầu đó).

- Phím phải chuột, Enter, SpaceBar, Esc thoát và không chèn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:v :v, anh #QuocManh soi kỹ quá ^^ :, hì em nói nôm na thế , nhưng nếu ko dùng EndParam để xác định mà chỉ nhìn bằng mắt trên màn hình thì ko phân biệt được đâu là đầu, đâu là cuối @@.

"Ní Nuận" kiểu "Lôm La" như vậy là có nguy cơ làm "Chánh Chụy" rồi đó! :D 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Anh ơi em thử rồi nhưng vẫn không được,lisp của anh em copy ra 1 notepad rồi dùng không biết như thế có ảnh hưởng gì đến lisp không?

Bạn dùng thử lisp của bác #Cuongtk hay #QuocManh đi :) Nhiều anh chị khác bỏ công hỗ trợ cho bạn rồi, thì bạn phải có "Trách nhiệm " test thử lisp của họ , rồi cho ý kiến chứ.  :D  :D  :D

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Tham gia 1 cái:

H/d:

- Gõ H hoặc M thì sẽ chèn 2 đầu hoặc 1 đầu (1 đầu thì di chuột về phía đầu nào sẽ chèn block vào đầu đó).

- Phím phải chuột, Enter, SpaceBar, Esc thoát và không chèn.

Anh ơi em dùng lisp của anh thì bị gặp các vấn đề:

+ Các block không dính vào các đầu mút của pline hoặc line

+ Chỉ có tác dụng với một pline hoặc line không thể quét toàn bộ các line hoặc pline

Mong anh giúp đỡ.Em xin cảm ơn!

 

 

Bạn dùng thử lisp của bác #Cuongtk hay #QuocManh đi :) Nhiều anh chị khác bỏ công hỗ trợ cho bạn rồi, thì bạn phải có "Trách nhiệm " test thử lisp của họ , rồi cho ý kiến chứ. :D :D :D

Em cảm ơn anh rất nhiều vì đã bỏ thời gian viết lisp cho em,chắc do vấn đề nào đó nên lisp chưa chạy được! Còn lisp của anh Cuongtk em chạy thử rồi nhưng không hiểu sao cũng không được,còn của anh QuocManh thì chạy được nhưng em muốn thay đổi để phù hợp với công việc của em hơn

Em cảm thấy rất vui vì các anh đã giúp đỡ em nhiệt tình :D :D :D .Chúc các anh sức khỏe và nhiều thành công trong cuộc sống nhé! :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lệnh của mình chỉ cho phép pick chọn khối cần chèn rồi pick chọn lần lượt vào các đường thôi. Bạn muốn chọn đầu nào thì pick vào phía đó. Xin lỗi vì không mô tả rõ cách dùng cho bạn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lệnh của mình chỉ cho phép pick chọn khối cần chèn rồi pick chọn lần lượt vào các đường thôi. Bạn muốn chọn đầu nào thì pick vào phía đó. Xin lỗi vì không mô tả rõ cách dùng cho bạn.

Cảm ơn anh nhé nhưng anh ơi sao các block sau khi dùng lisp cứ nhảy linh tinh vậy anh ơi? Vì những block không đính vào đầu mút của pline thì sau đó em chỉnh lại rất mất thời gian!

123670_1_1.png

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cảm ơn anh nhé nhưng anh ơi sao các block sau khi dùng lisp cứ nhảy linh tinh vậy anh ơi? Vì những block không đính vào đầu mút của pline thì sau đó em chỉnh lại rất mất thời gian!

Cũng có thể lỗi do hệ tọa độ bản vẽ không ở dạng World mà ở dạng Current:,  hoặc lỗi như bác #Ha nói ở trên.  :D  :D  :D

Làm thử cách sau:

B1: UCS---> World

B2: Plan---> World 

Rồi thử lại lisp.

Không được thì gửi bản vẽ lên coi thế nào.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Nếu nhìn hình ở bài #14 thì không phải do User UCS.

2. Đoàn dự: do điểm chèn của Block, khi tạo Block chủ TP không Pick Point để chọn điểm chèn mà để mặc định  X, Y, Z ~ 0.00, 0.00, 0.00.

Minh họa:

141736_block.jpg

P/s:

- Các lisp ở trên, nếu điểm chèn của Block nằm ở điểm giữa của cạnh dài dưới (theo đề bài) thì kết quả luôn chuẩn.

141736_bbb_1.jpg

- Nếu muốn quét chọn nhiều *LINE thì phương án giống DanhCong là phải chèn 2 đầu...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cảm ơn anh DanhCong,Quocmanh04tt và Doan Van Ha nhé :) ,em làm được rồi đúng là do lỗi base em đặt không đúng điểm chèn. Các anh có kiến thức uyên thâm thật....! :D  :D  :D 

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cũng có thể lỗi do hệ tọa độ bản vẽ không ở dạng World mà ở dạng Current:,  hoặc lỗi như bác #Ha nói ở trên.  :D  :D  :D

Làm thử cách sau:

B1: UCS---> World

B2: Plan---> World 

Rồi thử lại lisp.

Không được thì gửi bản vẽ lên coi thế nào.

Anh ơi lisp của anh sau khi dùng thì block bị biến dạng bất thường:

files cad của em đây: http://www.cadviet.com/upfiles/7/123670_1.dwg

123670_12.png

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn mở lisp: Thay thế dòng :

 

(command "-insert" Tenblock ptst 1 (- (* (/ ang1 pi) 180) 90) )

 

(command "-insert" Tenblock ptend 1 (- (* (/ ang2 pi) 180) 90) )

 

 

 Thành 

 

(command "-insert" Tenblock ptst 1 1 (- (* (/ ang1 pi) 180) 90) )

 

(command "-insert" Tenblock ptend 1 1 (- (* (/ ang2 pi) 180) 90) )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Bạn mở lisp: Thay thế dòng :

 

(command "-insert" Tenblock ptst 1 (- (* (/ ang1 pi) 180) 90) )

 

(command "-insert" Tenblock ptend 1 (- (* (/ ang2 pi) 180) 90) )

 

 

 Thành 

 

(command "-insert" Tenblock ptst 1 1 (- (* (/ ang1 pi) 180) 90) )

 

(command "-insert" Tenblock ptend 1 1 (- (* (/ ang2 pi) 180) 90) )

 

Cảm ơn anh nhiều nhé.Em làm được rồi  :) :)  :)  . Diễn đàn này nhiều người nhiệt tình như anh thì tốt quá! :D. Chúc anh sức khỏe và thành công trong cuộc sống nhé! :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Nếu nhìn hình ở bài #14 thì không phải do User UCS.

2. Đoàn dự: do điểm chèn của Block, khi tạo Block chủ TP không Pick Point để chọn điểm chèn mà để mặc định  X, Y, Z ~ 0.00, 0.00, 0.00.

Minh họa:

141736_block.jpg

P/s:

- Các lisp ở trên, nếu điểm chèn của Block nằm ở điểm giữa của cạnh dài dưới (theo đề bài) thì kết quả luôn chuẩn.

141736_bbb_1.jpg

- Nếu muốn quét chọn nhiều *LINE thì phương án giống DanhCong là phải chèn 2 đầu...

Cảm ơn anh nhé,anh giải thích rất dễ hiểu khi dùng hình ảnh  :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×