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  
tuananhcmd

lisp offset liên tục

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

Tue_NV có thể viết được lisp offset liên hoàn ko?? tức là offset nhiều đối tượng với 1 khoảng cách cùng 1 lúc,

hoặc bổ sung vào lisp olt, thay vì chọn đối tượng thì là chọn các đối tượng 1 lúc rồi mới offset ấy

Với đối tượng đơn thuần line,pline,bạn thử dùng cái này xem sao

;;ketxu KCVN jsc
(defun ssnames (selection_set / num lst)
 (repeat (setq num (sslength selection_set))
   (setq num (1- num)
  lst (cons (ssname selection_set num) lst)
   )
 )
 lst
)

(defun c:oo (/ ss objlst dist)
(setq dist (getdist "\nKhoang cach offset:  "))
 (princ "\nChon doi tuong offset  ")
 (setq ss (ssget '((0 . "*LINE"))))
 (if ss
   (progn
     (setq objlst (mapcar 'vlax-ename->vla-object (ssnames ss)))      
     (foreach obj objlst
(vla-offset obj dist)
(vla-offset obj (* dist -1))	
     )
   )
 )
 (princ)
)

  • 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

ĐÚNG LÀ NHƯ VẬY! SAU KHI POST XONG BÀI MÌNH MỚI NHẬN RA LÀ CÒN PHÍA OFFSET!

 

CÒN 1 TRƯỜNG HỢP OFFSET VỚI ĐỐI TƯỢNG KÍN: PHÍA TRONG VÀ NGOÀI NHƯ BẠN NÓI.

 

NẾU BẠN ĐÃ VIẾT ĐƯỢC LISP ĐÓ RỒI THÌ CÓ THỂ CHO MÌNH XIN ĐƯỢC KO? CHÂN THÀNH CÁM ƠN 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
ĐÚNG LÀ NHƯ VẬY! SAU KHI POST XONG BÀI MÌNH MỚI NHẬN RA LÀ CÒN PHÍA OFFSET!

 

CÒN 1 TRƯỜNG HỢP OFFSET VỚI ĐỐI TƯỢNG KÍN: PHÍA TRONG VÀ NGOÀI NHƯ BẠN NÓI.

 

NẾU BẠN ĐÃ VIẾT ĐƯỢC LISP ĐÓ RỒI THÌ CÓ THỂ CHO MÌNH XIN ĐƯỢC KO? CHÂN THÀNH CÁM ƠN BẠN!

Offset được cả phía trong, phía ngoài đối tượng kínoffset được cả phía bên trái, phía bên phải đối tượng không kín nữa nếu vecto từ điểm đầu đến điểm cuối của đối tượng không kín không bị ngược hướng với nhau.

Lisp này Tue_NV viết đã khá lâu với sự giúp đỡ của anh gia_bach, tìm kiếm nó cũng "bở cả hơi tai"

Bạn thử Lisp xem nhé :

Bài viết số 2063 - Lisp ofs

  • 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

cám ơn TUE_NV nhiều, đúng là cái mình đang cần:).

 

Cho mình hỏi thêm chút nữa là đối với đối tượng ko kín thì phía trong và ngoài sẽ được tính như 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
cám ơn TUE_NV nhiều, đúng là cái mình đang cần:).

 

Cho mình hỏi thêm chút nữa là đối với đối tượng ko kín thì phía trong và ngoài sẽ được tính như thế nào?

Với đối tượng kín : phía trong và phía ngoài như các bạn đã biết

 

Với đối tượng không kín : phía trong và phía ngoài tuân theo quy tắc "Bàn tay phải"

- Quy tắc "Bàn tay phải" như sau :

Đặt bàn tay phải, úp lòng bàn tay vào màn hình máy vi tính, Chiều từ cổ tay đến ngón tay theo chiều từ điểm đầu Curve đến điểm cuối của Curve . Ngón tay Cái lúc này choải ra góc 90 độ. Chiều chỉ của ngón tay cái đó chính là phía OFFSET phía TRONG. Ngược với phía TRONG là phía NGOÀI.

 

Các bạn cứ thử xem nhé

  • 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ới đối tượng kín : phía trong và phía ngoài như các bạn đã biết

 

Với đối tượng không kín : phía trong và phía ngoài tuân theo quy tắc "Bàn tay phải"

- Quy tắc "Bàn tay phải" như sau :

Đặt bàn tay phải, úp lòng bàn tay vào màn hình máy vi tính, Chiều từ cổ tay đến ngón tay theo chiều từ điểm đầu Curve đến điểm cuối của Curve . Ngón tay Cái lúc này choải ra góc 90 độ. Chiều chỉ của ngón tay cái đó chính là phía OFFSET phía TRONG. Ngược với phía TRONG là phía NGOÀI.

 

Các bạn cứ thử xem nhé

 

thực sự thì mình thấy chưa thuyết phục lắm:D vì 1 đoạn thẳng thì có 2 điểm ở 2 đầu, làm sao biết được điểm nào là điểm cuối, nếu tính từ đầu này sang thì phía trong lại ngược lại với đầu kia. bạn hiểu ý mình chứ:)

 

thực ra thì cũng ko cần thiết phải lan man về vấn đề này nhiều nữa, vì lisp của bạn đã giúp được mình rất nhiều. Cám ơn Tue_NV nhiều nhé, chúc bạn và gia đình sức khỏe.

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 bạn đã phát hiện ra lỗi này. Tue_NV đã nhầm trong quá trình tính toán.

Xin gửi lại bạn Lisp offset liên tục về 1 bên, offset liên tục về 2 bên hoàn chỉnh

(defun c:olt(/ ss po p1 p2 m n kc oldos)(vl-load-com)(setvar "cmdecho" 0)(setq oldos (getvar "osmode"))(setvar "osmode" 0)(while (null (setq ss (car(entsel "\n Chon doi tuong offset :")))) (Prompt "\n Hay chon lai doi tuong :"))(setq po(getpoint "\n phia offset:")) (if (not kco) (setq kco 100))(setq kc (getdist(strcat "\n khoang cach offset: < " (rtos kco) " > :")))(if (not kc) (setq kc kco) (setq kco kc)) (setq n (getint "\n so lan offset:"))(setq m 0 )(setq p1 (vlax-curve-getClosestPointTo ss po))(setq p2 (list (- (* 2 (car p1)) (car po)) (- (* 2 (cadr p1)) (cadr po)) 0.0))(repeat n(setq m(+ m 1))(command "offset" (* m kc) ss po "")) (initget "Y N") ;;;Init keywords(setq ans (getkword "\n Ban co muon offset sang 2 ben khong? [Yes/No] :")) ;;;Get answer from user(if (= ans "Y") (Progn(setq m 0 )(repeat n(setq m(+ m 1))(command "offset" (* m kc) ss p2 "")) ))(setvar "osmode" oldos)(setvar "modemacro" "\nCHUC BAN LAM VIEC HIEU QUA - tue_nvcc@yahoo.com")(princ))

 

Của Tue_LV thì khi Upload nó báo thế này: 

 

Command: ap

APPLOAD olt.lsp successfully loaded

Command: ; error: malformed list on input

 

 

 

Command: ap
APPLOAD olt (1).lsp successfully loaded.
 
 
Command: ; error: malformed list on input
Command: ap
APPLOAD olt (1).lsp successfully loaded.
 
 
Command: ; error: malformed list on input
APPLOAD olt (1).lsp successfully loaded.
Command: ; error: malformed list on input

;;ketxu KCVN jsc(defun ssnames (selection_set / num lst) (repeat (setq num (sslength selection_set)) (setq num (1- num) lst (cons (ssname selection_set num) lst) ) ) lst)(defun c:oo (/ ss objlst dist)(setq dist (getdist "\nKhoang cach offset: ")) (princ "\nChon doi tuong offset ") (setq ss (ssget '((0 . "*LINE")))) (if ss (progn (setq objlst (mapcar 'vlax-ename->vla-object (ssnames ss))) (foreach obj objlst (vla-offset obj dist) (vla-offset obj (* dist -1)) ) ) ) (princ))

 Còn của Ketxtu khi Upload ko báo lỗi nhưng oánh lệnh OO thì nó ko nhận. 

Các bạn xem giúp mình vớ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

Bạn Enter cho đoạn (defun xuống 1 dòng là xong. Code trên lỗi dính dòng comment vào code rồ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

lisp của anh tue_NV rất hay và cũng được dùng nhiều, nhưng em mong anh có thể điều chỉnh lại 1 tý. tại giai đoạn nhập số lần offset nếu có thêm lựa chọn pick 2 điểm để có khoảng cách, các đối tượng được offset chỉnh này trong khoảng cách đó mà thôi, mong anh giúp đỡ để có 1 lisp hay hơn.

chân thành 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

nhờ các bác viết hộ em cái lisp offset đặc biệt này ạ

em làm bên giao thông nên có yêu cầu sau:

offset từ tim đường ra 2 bên, mỗi bên 2 đường( 1 đường mép đường và 1 đường mép hè). câu lệnh đại ý như sau:

lệnh:

chọn đường cần offset:

chọn khoảng cách 1, chọn khoảng cách 2:

kết thúc lệnh(không có lựa chọn 1 hay 2 bên, mặc định là 2 bên luôn). câu lệnh có lưu giá trị để lần sau lặp lại đỡ phải nhập ạ

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  

×