Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

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


  • Please log in to reply
21 replies to this topic

#1 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 06 June 2017 - 07:48 AM

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


  • -1

#2 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 06 June 2017 - 04:57 PM

^^. 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.c...thue-viet-lisp/


  • 0

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***


#3 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 07 June 2017 - 03:24 PM

^^. 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.c...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!


  • 0

#4 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 07 June 2017 - 04:56 PM

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.c...block__test.lsp


  • 3

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***


#5 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 17 June 2017 - 04:17 PM

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!


  • 0

#6 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 17 June 2017 - 04:32 PM

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!


  • 0

#7 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 17 June 2017 - 05:29 PM

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 @@.


  • 0

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***


#8 cuongtk2

cuongtk2

    biết lệnh copy

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

Đã gửi 17 June 2017 - 05:40 PM

http://www.cadviet.c.../7/4301_b2l.lsp
lệnh B2L
Bạn có thể chỉnh lại góc xoay trong lisp ở chỗ đặt chú thích.
  • 0

#9 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 17 June 2017 - 06:16 PM

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.


  • 1

#10 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 18 June 2017 - 08:32 AM

: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 


  • 0

#11 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 21 June 2017 - 10:47 AM

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


  • 1

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***


#12 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 22 June 2017 - 08:03 AM

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é! :)
  • 0

#13 cuongtk2

cuongtk2

    biết lệnh copy

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

Đã gửi 22 June 2017 - 10:20 AM

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.


  • 0

#14 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 22 June 2017 - 03:06 PM

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
 


  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5527 Bài viết
Điểm đánh giá: 2662 (tuyệt vời)

Đã gửi 22 June 2017 - 03:27 PM

Tôi không xem dwg and lisp nhưng đoán mò là khi tạo block bạn đã đặt điểm base không phù hợp. :lol:


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 22 June 2017 - 03:29 PM

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.


  • 0

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***


#17 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 22 June 2017 - 04:17 PM

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...


  • 0

#18 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 23 June 2017 - 07:52 AM

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 

 


  • 0

#19 abiabu

abiabu

    biết vẽ circle

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

Đã gửi 23 June 2017 - 09:09 AM

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.c.../7/123670_1.dwg
123670_12.png


  • -1

#20 Danh Cong

Danh Cong

    biết lệnh insert

  • Moderator
  • PipPipPipPipPipPip
  • 426 Bài viết
Điểm đánh giá: 96 (tàm tạm)

Đã gửi 23 June 2017 - 10:21 AM

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) )


  • 0

              *** Vô lo - Vô nghĩ - Vô sầu hận ***
*** Chẳng thương - Chẳng giận - Chẳng đau lòng ***