Đến nội dung


Hình ảnh
- - - - -

lisp offset liên tục


  • Please log in to reply
38 replies to this topic

#21 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 March 2010 - 05:52 AM

Trời........
Mình nghe nói là lệnh OFFset về 2 phía mà sao thực tế offset ve có 1 phía zdậy ?????????

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

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 27 October 2010 - 08:14 AM

  • -1

#22 tamtron

tamtron

    biết vẽ arc

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

Đã gửi 26 October 2010 - 11:15 PM

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
  • 0

#23 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 October 2010 - 06:49 AM

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

Quan trọng là Phía Offset đó bạn ạ. Với nhiều curve thì nhiều khả năng là phía Offset bên này lại là phía Offset của Curve bên kia và ngược lại. Bạn hiểu ý của Tue_NV không?

Tue_NV cũng đã viết thành công Lisp Offset về phía trong hoặc phía ngoài.
Nội dung của nó là : Chọn 1 loạt đối tượng -> Nó sẽ offset ra phía trong hoặc phía ngoài với 1 khoảng cách do User nhập vào. Đương nhiên, phía trong của curve này không thể là phía ngoài của curve kia được :lol:

Nếu bạn có ý khác. Bạn có thể upload file .dwg và nói rõ hơn nhé.
Nếu Offset liên hoàn theo bạn nói thật sự hiệu quả đối với mọi người, mình sẽ viết
  • 0

#24 790312

790312

    biết lệnh fillet

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

Đã gửi 27 October 2010 - 07:15 AM

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

Sao sau khi nhập số lần offset thì lisp báp lỗi :; error: bad argument type: numberp: nil.Mong bác xem lại giúp.Thanks
  • 0

#25 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 October 2010 - 08:17 AM

Sao sau khi nhập số lần offset thì lisp báp lỗi :; error: bad argument type: numberp: nil.Mong bác xem lại giúp.Thanks

Đã sửa lại lỗi của code.
Bạn vui lòng test lại code ở bài viết số 21 trên nhé
  • 0

#26 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 October 2010 - 08:35 AM

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

  • 1

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


#27 tamtron

tamtron

    biết vẽ arc

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

Đã gửi 27 October 2010 - 06:34 PM

ĐÚ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!
  • 0

#28 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 28 October 2010 - 06:34 AM

ĐÚ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
  • 1

#29 tamtron

tamtron

    biết vẽ arc

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

Đã gửi 28 October 2010 - 06:32 PM

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

#30 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 October 2010 - 08:10 AM

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é
  • 1

#31 Binh47b

Binh47b

    biết zoom

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

Đã gửi 29 October 2010 - 10:03 AM

a
  • 0

#32 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 October 2010 - 10:19 AM

Offset của CAD vẫn làm được việc này mà :)
  • 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


#33 tamtron

tamtron

    biết vẽ arc

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

Đã gửi 31 October 2010 - 03:19 AM

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

#34 hathaiyb

hathaiyb

    biết pan

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

Đã gửi 02 September 2013 - 02:11 PM

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.


  • 0

#35 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 September 2013 - 07:09 PM

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


  • 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 minhhanghc

minhhanghc

    Chưa sử dụng CAD

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

Đã gửi 17 January 2014 - 10:17 AM

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


  • 0

#37 nguyenkhoadng

nguyenkhoadng

    biết vẽ line

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

Đã gửi 09 June 2014 - 06:37 PM

Cho mình hỏi sao một số lisp trên diễn đàn mình down về dùng không được vậy các bạn?

như lisp olt mình down ở bài #21 cũng vậy, khi sử dụng nó hiện lên dòng như hình

 

Untitled_zps0c83608b.png

 

Mình cảm ơn!


  • 0

#38 namvn007

namvn007

    biết vẽ line

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

Đã gửi 19 November 2014 - 10:29 PM

Cái này cad không hiểu lệnh. Bạn đã “ap” lisp chưa


  • 0

#39 vuvanviet

vuvanviet

    Chưa sử dụng CAD

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

Đã gửi 26 January 2015 - 01:39 AM

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 ạ


  • 0