Đến nội dung


Hình ảnh
- - - - -

Nhờ viết hộ lisp copy siêu tốc


  • Please log in to reply
35 replies to this topic

#21 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 February 2011 - 09:12 AM

Gửi ketxu,
Cám ơn bạn rất nhiều. Bạn thật nhiệt tình. Bạn sẽ là người đầu tiên mà mình gửi lisp (có thể là line hoặc vẽ hình gì đó mà mình tự viết). Hi vọng các bạn khác ko chê cười lisp của mình
Hoàng


Có một topic mình lập "Cùng nhau học LISP" trong box này để khởi động việc viết lisp, bạn có thể viết-hỏi thoải mái ở đó. Bạn cũng có thể thấy những câu hỏi trong đó của mình cũng bắt đầu từ số 0, nhưng chẳng có gì phải ngại cả, chẳng ai k học hỏi mà lại biết :)
Để vẽ được 1 Line từ 2 point,tạm thời bạn cần dùng : defun, getpoint, command.
Để biết cấu trúc các câu lệnh này, bạn nhấn F1 vào CAD Help, sau đó vào mục AutoLISP, Visual LISP, and DXF -> Chọn Autolisp Reference -> AutoLisp FUnction, hoặc cũng có thể post hỏi trực tiếp trên 4room :)

Hi, tớ đọc vội quá nên ko để ý.
Nhưng chắc chắn vẫn chưa cần dùng đến lisp. Vấn đề ở đây là chọn basepoint như nào cho hợp lý?
Ở trong request mình thấy bạn nói: chọn basepoint (basepoint) but không thấy bạn nói chọn điểm nào? Nhưng việc này lại rất quan trọng đấy ạ. Theo tôi hiểu, bạn sẽ chọn 1 điểm Endpoint (Hoặc Midpoint hoặc gì gì đó) trên vật thể.
Trong trường hợp này của bạn, tôi sẽ đặt chuột vào điểm Endponit đó cho nó hiện lên dấu cộng ở giữa (Bật chế độ OSTRACK và OSNAP) rồi đưa chuột sang phải hoặc trái => nhập số 200.

:) Sau khi đọc kỹ bài 1 thì bạn dòm xuống 2 bài tiếp theo xem sao :)
  • 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


#22 lemanhhung0302

lemanhhung0302

    biết vẽ polygon

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

Đã gửi 23 February 2011 - 09:18 AM

:) Sau khi đọc kỹ bài 1 thì bạn dòm xuống 2 bài tiếp theo xem sao :)

Ặc. Mình như ngố ấy. Hi. Xin lỗi mọi người.
  • 0

AutoLISP thật là đơn giản - Chia sẻ kiến thức về AutoLISP

Nhận cài đặt Win tại nhà, đánh máy văn bản, vẽ kỹ thuật theo yêu cầu.


#23 hoangtdh

hoangtdh

    biết vẽ ellipse

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

Đã gửi 23 February 2011 - 09:05 PM

Gửi bạn ketxu,
Cám ơn bạn đã hướng dẫn. Mình đang ngâm cứu và thấy code lisp cũng rất hay, so với lập trình bằng C++ học ngày trước cũng ko khác nhau là mấy(ngày xưa mình sợ mấy môn lập trình lắm vì làm thuật toán rất rắc rối, nhiều khi lập trình xong chạy mãi chẳng biết lỗi ở đâu hehe).ấn F1 toàn ra hàm tiếng anh. Đành chịu khó dịch vậy.
Hoàng
  • 0

#24 hoangtdh

hoangtdh

    biết vẽ ellipse

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

Đã gửi 07 March 2011 - 08:28 AM

Gửi bạn ketxu, phamthanhbinh, tuenv, phamngoctukts, doan van ha, nguyentuyen6, lp_hai và các bạn trong diễn đàn cadviet
Từ ngày tham gia diễn đàn mình đã được các bạn giúp đỡ rất nhiều, nhờ vậy mình đã học hỏi được nhiều lisp hay giúp ích cho công việc. Sau 1 thời gian mày mò mình viết tặng các bạn lisp đầu tay này thay cho lời cám ơn.
http://www.cadviet.c...pfiles/3/ts.lsp
Hoàng
  • 6

#25 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 07 March 2011 - 08:51 AM

Gửi bạn ketxu, phamthanhbinh, tuenv, phamngoctukts, doan van ha, nguyentuyen6, lp_hai và các bạn trong diễn đàn cadviet
Từ ngày tham gia diễn đàn mình đã được các bạn giúp đỡ rất nhiều, nhờ vậy mình đã học hỏi được nhiều lisp hay giúp ích cho công việc. Sau 1 thời gian mày mò mình viết tặng các bạn lisp đầu tay này thay cho lời cám ơn.
http://www.cadviet.c...pfiles/3/ts.lsp
Hoàng

Rất vui khi chạy xong tác phẩm đầu tay của bạn. Nhớ lần đầu tiên mình cũng như bạn, mò hòai, mò mãi cũng ra. hà hà :lol:
Rất cảm ơn sự giúp đỡ của mọi người.
Chúc bạn thành công.
THANKS
  • 0

#26 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 07 March 2011 - 09:42 AM

Gửi bạn ketxu, phamthanhbinh, tuenv, phamngoctukts, doan van ha, nguyentuyen6, lp_hai và các bạn trong diễn đàn cadviet
Từ ngày tham gia diễn đàn mình đã được các bạn giúp đỡ rất nhiều, nhờ vậy mình đã học hỏi được nhiều lisp hay giúp ích cho công việc. Sau 1 thời gian mày mò mình viết tặng các bạn lisp đầu tay này thay cho lời cám ơn.
http://www.cadviet.c...pfiles/3/ts.lsp
Hoàng

Kinh thật!
Lisp đầu tay của bạn hoành tráng hơn cái lisp đầu tay mình viết nhiều.Thankssssss!
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#27 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 07 March 2011 - 09:55 AM

Hì!!
bạn làm quả lisp đầu tay khủng thật đấy, hehe. Chúc mừng bạn nhé !!!! :D
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#28 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 March 2011 - 01:40 PM

Chúc mừng bạn, lisp đầu tay mà khá công phu ^^. Chẳng mấy chốc mà bạn thành lisper mất thôi ^^. Vậy dự định tiếp theo của bạn là 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


#29 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 07 March 2011 - 02:53 PM

Gửi bạn ketxu, phamthanhbinh, tuenv, phamngoctukts, doan van ha, nguyentuyen6, lp_hai và các bạn trong diễn đàn cadviet
Từ ngày tham gia diễn đàn mình đã được các bạn giúp đỡ rất nhiều, nhờ vậy mình đã học hỏi được nhiều lisp hay giúp ích cho công việc. Sau 1 thời gian mày mò mình viết tặng các bạn lisp đầu tay này thay cho lời cám ơn.
http://www.cadviet.c...pfiles/3/ts.lsp
Hoàng

Hề hề hề,
Cám ơn bạn Hoang rất nhiều.
Cái lisp đầu tay của bạn thực sự làm mình rất vui vì như vậy bạn đã chứng tỏ được rằng bạn hoàn toàn có đủ điều kiện để trở thành một lisper sáng giá của cộng đồng Cadviet. Rất mong bạn không từ bỏ niềm vui khi làm một lisper bạn nhé.
Trong tương lai gần mình tin là bạn sẽ sử dụng tốt công cụ này để phục vụ cho công việc của bạn cũng như giúp đỡ được nhiều người khác trong cộng đồng.
Chúc bạn luôn vui vẻ và thành công trong cuộc sống.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#30 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 07 March 2011 - 03:05 PM

hehhe
thanks bạn thêm lần nữa nè. chúc bạn ứng dụng tốt kiến thức của mình vào công việc nhá
  • 0
Hình đã gửi

#31 hoangtdh

hoangtdh

    biết vẽ ellipse

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

Đã gửi 16 March 2011 - 09:22 AM

Gửi bạn tuenv, phamngoctukts, nguyentuyen6, ketxu, phamthanhbinh, lp_hai
Cám ơn các bạn đã động viên mình khiến mình tự tin hơn trên con đường viết lisp. Dạo này bị sếp ép việc ghê quá nên mình không có nhiều thời gian lên diễn đàn.
Có vấn đề sau mình muốn nhờ các bạn giải quyết hộ. Đó là scale 1 nhóm bock theo tỷ lệ nhập vào tại tâm block đó (hoặc 1 điểm chọn thuộc block đó thì càng tốt)- giống lệnh xoay 1 nhóm block như rb.lisp của bạn ketxu .
Lưu ý: kích thước thật trong block vẫn giữ nguyên để tránh ảnh hưởng đến các đối tượng block khác ko được chọn.
Bạn nào giúp cải tiến hộ lisp rb.lisp cho quay tại 1 điểm nhập vào (ví dụ chọn điểm insert của block)?
Cám ơn vì tất cả.
Hoàng
  • 0

#32 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 16 March 2011 - 09:40 AM

Gửi bạn tuenv, phamngoctukts, nguyentuyen6, ketxu, phamthanhbinh, lp_hai
Cám ơn các bạn đã động viên mình khiến mình tự tin hơn trên con đường viết lisp. Dạo này bị sếp ép việc ghê quá nên mình không có nhiều thời gian lên diễn đàn.
Có vấn đề sau mình muốn nhờ các bạn giải quyết hộ. Đó là scale 1 nhóm bock theo tỷ lệ nhập vào tại tâm block đó (hoặc 1 điểm chọn thuộc block đó thì càng tốt)- giống lệnh xoay 1 nhóm block như rb.lisp của bạn ketxu .
Lưu ý: kích thước thật trong block vẫn giữ nguyên để tránh ảnh hưởng đến các đối tượng block khác ko được chọn.
Bạn nào giúp cải tiến hộ lisp rb.lisp cho quay tại 1 điểm nhập vào (ví dụ chọn điểm insert của block)?
Cám ơn vì tất cả.
Hoàng

Bạn có thể lập 1 Topic mới cho đúng với chủ đề bạn đưa ra, sau này nếu ai gặp vào trường hợp của bạn thì search trên diễn đàn cũng tìm được " Scale 1 nhóm bock theo tỷ lệ nhập vào tại tâm block đó ". Qua đây cũng có lời chúc mừng bạn đến với sản phẩm lisp đầu tay của mình. Hi hi. Mình chỉ góp ý bạn cho đúng với diễn đàn đưa ra thôi. Hi hi. Chúc bạn vui vẻ nha.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#33 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 March 2011 - 09:57 AM

Gửi bạn tuenv, phamngoctukts, nguyentuyen6, ketxu, phamthanhbinh, lp_hai
Cám ơn các bạn đã động viên mình khiến mình tự tin hơn trên con đường viết lisp. Dạo này bị sếp ép việc ghê quá nên mình không có nhiều thời gian lên diễn đàn.
Có vấn đề sau mình muốn nhờ các bạn giải quyết hộ. Đó là scale 1 nhóm bock theo tỷ lệ nhập vào tại tâm block đó (hoặc 1 điểm chọn thuộc block đó thì càng tốt)- giống lệnh xoay 1 nhóm block như rb.lisp của bạn ketxu .
Lưu ý: kích thước thật trong block vẫn giữ nguyên để tránh ảnh hưởng đến các đối tượng block khác ko được chọn.
Bạn nào giúp cải tiến hộ lisp rb.lisp cho quay tại 1 điểm nhập vào (ví dụ chọn điểm insert của block)?
Cám ơn vì tất cả.
Hoàng

Chào bạn. Mình không nhớ kỹ nội dung lisp đó, nên nếu có thể bạn nên post lại luôn trong cùng bài hỏi, vì có thể trên diễn đàn có kha khá lệnh rb ^^
- Mình sơ qua phương án như thế này :
+ Nếu scale tại "tâm" : chắc trong lisp đó mình đã có phần lấy "tâm" của block, sau đó mình dùng lệnh rotate ? Vậy bây giờ bạn đổi lệnh rotate đó thành lệnh Scale, basepoint vẫn là điểm đó, thay góc nhập thành (getreal) để lấy tỉ lệ scale.
+ Nếu scale tại 1 điểm chọn khác hơn, thì bạn cần lấy 1 điểm làm mốc để lấy tọa độ tương ứng của điểm chọn với điểm mốc đó.ĐIểm mốc này có thể bạn lấy luôn là điểm "tâm" tại ý 1 hoặc lấy insertpoint thì dễ hơn.Sau đó dùng mapcar để lấy vector của điểm bạn chọn với điểm mốc của block đầu tiên.Sau đó, với các block khác, trong cùng vòng lặp bạn + điểm mốc với vector đó để lấy tâm scale.Trường hợp này bao hàm cả trường hợp 1 nên tổng quát hơn
Nói thì dài nhưng thực ra cũng rất ngắn, bạn thử xem có được không ??
  • 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


#34 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 16 March 2011 - 11:35 AM

Gửi bạn tuenv, phamngoctukts, nguyentuyen6, ketxu, phamthanhbinh, lp_hai
Cám ơn các bạn đã động viên mình khiến mình tự tin hơn trên con đường viết lisp. Dạo này bị sếp ép việc ghê quá nên mình không có nhiều thời gian lên diễn đàn.
Có vấn đề sau mình muốn nhờ các bạn giải quyết hộ. Đó là scale 1 nhóm bock theo tỷ lệ nhập vào tại tâm block đó (hoặc 1 điểm chọn thuộc block đó thì càng tốt)- giống lệnh xoay 1 nhóm block như rb.lisp của bạn ketxu .
Lưu ý: kích thước thật trong block vẫn giữ nguyên để tránh ảnh hưởng đến các đối tượng block khác ko được chọn.
Bạn nào giúp cải tiến hộ lisp rb.lisp cho quay tại 1 điểm nhập vào (ví dụ chọn điểm insert của block)?
Cám ơn vì tất cả.
Hoàng

Khi mới bắt đầu viết lisp thì những bài toán bạn quan tâm hầu như sẽ trùng với nhiều người kkhi họ cũng vửa bắt đầu. Cadviet có rất nhiều người như bạn bắt đầu từ ngay trên này nên những bài toán này gần như được giải quyết sẳn. Bạn nên tìm hoặc tự viết, vướng thì hỏi chổ vướng thôi thì nhanh tiến bộ hơn.
Đây là đoạn quay block tại tâm.

(Defun rotateblock ( )
(command "undo" "be")
(Princ "\nHay chon BLOCK muon quay :")
(setq SS (ssget '((0 . "insert"))))

(setq rotBl (dnint "\nNhap goc quay: "rotBl1))
(setq rotBl1 rotBl)


(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq BLENT (ssname SS i))
(setvar "osmode" 0)
(setq BLENTS (entget BLENT))
(setq diemquay (cdr (assoc 10 BLENTS)))

(command ".rotate" BLENT "" diemquay rotBl)

(setq i (1+ i))
)
(command "undo" "end")
(Princ)
)


Còn đoạn chọn đểm bất kỳ thì làm được. (Lúc trước mình có 1 líp thay đổi điểm chèn của block có dùng đoạn xác định điểm này) bạn nghien cứu đạn ấy kêt hợp với đoạn trên xem sao.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#35 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 March 2011 - 11:56 AM

Bác Duy có hơi miss 1 tẹo, đoạn bác viết là quay tại InsertPoint ^^
E tin với góp ý bên trên chắc bạn Hoàng sẽ xơi được yêu cầu này ngon nghẻ thôi ^^
@ bạn H : mình nói rõ thêm 1 chút về việc xác định điểm khác ngoài InsertPoint (IP), với giả sử bạn chọn điểm mốc là IP
Điểm user nhập vào là P => vector P IP sẽ là (setq vt (mapcar '- IP P1))
Trong vòng lặp foreach, với mỗi block A, bạn sẽ có điểm IP1 của block A đó (dxf 10).Bây giờ lấy tâm scale thì bạn trừ điểm IP1 này với vectơ đã có vt thì sẽ ra điểm P1 tâm scale tương ứng, vẫn bằng mapcar ^^ (ngược lại phép ban đầu) P1 = ( mapcar '- IP1 vt)
Được không bạn ?
  • 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


#36 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 16 March 2011 - 12:18 PM

Bác Duy có hơi miss 1 tẹo, đoạn bác viết là quay tại InsertPoint ^^
E tin với góp ý bên trên chắc bạn Hoàng sẽ xơi được yêu cầu này ngon nghẻ thôi ^^
@ bạn H : mình nói rõ thêm 1 chút về việc xác định điểm khác ngoài InsertPoint (IP), với giả sử bạn chọn điểm mốc là IP
Điểm user nhập vào là P => vector P IP sẽ là (setq vt (mapcar '- IP P1))
Trong vòng lặp foreach, với mỗi block A, bạn sẽ có điểm IP1 của block A đó (dxf 10).Bây giờ lấy tâm scale thì bạn trừ điểm IP1 này với vectơ đã có vt thì sẽ ra điểm P1 tâm scale tương ứng, vẫn bằng mapcar ^^ (ngược lại phép ban đầu) P1 = ( mapcar '- IP1 vt)
Được không bạn ?

Mình nói đoạn xác định điểm là trong lisp đổi điểm chèn block í chưứ ko phải đoạn trên <_< .
-Để xác định điểm cơ sở với điểm chèn phải lấy, xét, tính nhiều thứ (đây là trong trường hợp cùng 1 tên block chứ nà nhiều tên block thì có mà vỡ mẹt :ph34r: ):
+Góc quay của block.
+Scale theo chiều x của block.
+Scale theo chiều y của block.
*Đoạn đó hắn như sau:
(setq TYLEX (cdr (assoc 41 doituong)))
(setq TYLEY (cdr (assoc 42 doituong)))
(setq DIEMTINH (list (/ (car DIEMCHENMOI) TYLEX) (/ (cadr DIEMCHENMOI) TYLEY)))
(setq XDIEMTINH (car DIEMTINH))
(setq YDIEMTINH (cadr DIEMTINH))
(setq DAICHUAS (distance (list 0 0) DIEMTINH))
(setq GOCCHUAS (angle (list 0 0) DIEMTINH))
(setq DIEMCHENTUONGDOI (polar (LIST 0 0) GOCCHUAS DAICHUAS))

Từ đó mới tính ra tính tương đối giữa điểm chọn và điểm chèn.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D