Chuyển đến nội dung
Diễn đàn CADViet
hoangtdh

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

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

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.com/upfiles/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!

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

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ì ?

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

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.com/upfiles/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.

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

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á

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

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

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

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.

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

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

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

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.

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á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 ?

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

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


×