traichoi85 1 Báo cáo bài đăng Đã đăng Tháng 10 22, 2014 chào cả nhà. mặc dù chủ đề này mình có hỏi bên thớt " o ffset tự động" nhưng không ai trả lời nên em post lên đây để mọi người giúp đỡ mình làm bên quy hoạch. muốn vẽ các ô phố thì mình offset từ vỉa hè ra ngoài. Nếu làm 4 hoặc 5 đối tượng thì được. gặp nhiều lô đất gần cả 100 đối tượng thì gặp khó khăn. nên em mong các bạn viết dùm mình 1 lisp để quét các đối tượng o ffset về 1 phía ( ra ngoài hoạch vô trong) theo khoảng cách tùy chon. ( các li sp của anh hạ và anh ketxu mình có thử nhưng không làm được) ám ơn các bạn nhiều 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
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 22, 2014 Các đối tượng của bạn là loại gì ? Có đặc thù gì để quét chọn k lẫn các đối tượng khác ? "Ra ngoài" tức là làm cho nó to hơn, "vào trong" tức là nhỏ hơn đúng k ? Bạn gửi file CAD đầu vào đầu ra lên, chắc chắn sẽ có ngay đáp á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
traichoi85 1 Báo cáo bài đăng Đã đăng Tháng 10 23, 2014 trước hết mình xin cảm ơn bạn ketxu đã quan tâm đến câu hỏi của mình. theo bạn góp ý mình đã làm chi tiết hơn. và mình cũng xin nhờ các bạn giúp mình viết dum 2 li sp nữa ( xin lỗi vì yêu cầu có hơi cao quá. các bạn thông cảm làm thủ công mệt quá). mình xin các bạn giúp dùm các khoảng 1. o ffset nhiều đối tượng cùng 1 lúc 2. fillet cùng 1 lúc 3. champer cùng 1 lúc mình xin cám ơn. và đây là ví dụ của mình hình mình họa: và đây là file cad: https://www.mediafire.com/?0y3zy179d6bw127 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
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 23, 2014 Quick code cho bạn 4 lisp o+, o-, mF, mC. Bạn test nếu thấy sai thì ấn F2 copy đoạn lỗi lên nhé. Mình chỉ kịp làm thế này thôi, phải đi rồi ^^ (vl-load-com) (defun ooo(f / ss isClosed) (cond ( (ssget '((0 . "CIRCLE,ELLIPSE,POLYLINE,LWPOLYLINE,SPLINE"))) (or #d (setq #d 5)) (setq #d (cond ((getdist (strcat "\nDistance <" (rtos #d 2 2) ">")))(#d)) isClosed (lambda(x) (or (and (= (vla-get-ObjectName x) "AcDbEllipse")(zerop (vla-get-StartAngle x))) (= (vla-get-objectname x) "AcDbCircle") (and (wcmatch (vla-get-ObjectName x) "AcDb*line") (equal (car (setq sth (acet-geom-vertex-list (vlax-vla-object->ename x)))) (last sth) 0.01 ) ) ) ) ) (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (if (isclosed obj) (vla-delete (f (vl-sort (mapcar 'car (list (vlax-invoke obj 'Offset #d) (vlax-invoke obj 'Offset (- #d)))) '(lambda(x y)(< (vlax-get x 'Area)(vlax-get y 'Area))) ) ) ) ) ) (vla-delete ss) ) (T (princ "\nNo thing to do")) ) ) (defun c:o-()(ooo last)) ;Offset thu nho (defun c:o+()(ooo car)) ;Offset phong to (defun c:mF(/ ss);Multi Fillet (cond ((setq ss (ssget '((0 . "LWPOLYLINE")))) (or #r (setq #r (getvar 'FILLETRAD))) (setq #r (cond ((getdist (strcat "\nRadius : <" (rtos #r 2 2) ">")))(#r))) (setvar 'FILLETRAD #r) (foreach o (acet-ss-to-list ss) (vl-cmdf "._Fillet" "_Polyline" o) ) ))) (defun c:mC(/ ss);Multi chamfer (cond ((setq ss (ssget '((0 . "LWPOLYLINE")))) (or #dis (setq #dis (getvar 'CHAMFERA))) (setq #dis (cond ((getdist (strcat "\nDistance : <" (rtos #dis 2 2) ">")))(#dis))) (mapcar 'setvar '(CHAMFERA CHAMFERB) (list #dis #dis)) (foreach o (acet-ss-to-list ss) (vl-cmdf "._Chamfer" "_Polyline" 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
traichoi85 1 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Cám ơn bạn "ketxu" đã giúp mình nhiều. đúng là đã gỡ được rắc rối cho mình trong nhiều năm qua. nhưng trong lúc thao làm mình thấy còn 1 vấn không biết bạn giúp mình được không. Đó là bạn giúp mình lúc o ffset đối tượng thì sẽ nhảy thành laye r hiện hành luôn hoặc 1 laye r này khác. Bạn có thể giúp mình để khi mình bật tắt laye r và fillet hoặc champer cho nó nhanh. Mình cảm ơn bạn nhé Đây là file ảnh Đây là file cad: https://www.mediafire.com/?mchpj3e8rthxobn 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
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Bạn định chọn layer hiện hành hay layer nào khác bằng cách nào ? Chọn đối tượng mẫu, đánh tê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
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Chỉ là put layer đơn giản thôi n k kịp chờ bạn trả lời rồi. :) Hẹn bạn khi mình đi về (tối CN) hoặc mấy bác khác giúp 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
Tot77 508 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Sửa chút xíu lsp của Ket, có 2 điều : 1. Pline không cần phải closed mới dùng được, nhưng dĩ nhiên pline phải có nhiều đoạn nó mới biết cái nào vào trong cái nào ra ngoài. 2. Gộp 2 lệnh o+o- vào chung 1 lệnh, bạn nhập số >0 thì offset ra ngoài, <0 thì offset vào trong. Còn các lệnh chamfer và fillet vẫn như cũ. Bạn đặt sẵn layer hiện hành trước khi chạy lsp, màu theo bylayer. (vl-load-com) (defun c:ofs( / ss lay lst) (setq lay (getvar 'clayer)) (cond ((ssget '((0 . "CIRCLE,ELLIPSE,POLYLINE,LWPOLYLINE,SPLINE"))) (or #d (setq #d 5)) (setq #d (cond ((getdist (strcat "\nDistance <" (rtos #d 2 2) ">"))) (#d))) (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (setq lst (mapcar 'car (list (vlax-invoke obj 'Offset #d) (vlax-invoke obj 'Offset (- #d))))) (mapcar '(lambda (x) (vla-put-Layer x lay) (vla-put-Color x 256)) lst) (vla-delete (car (vl-sort lst '(lambda(x y) ((if (< #d 0) > <) (vlax-get x 'Area) (vlax-get y 'Area))) )) ) ) (vla-delete ss) ) (T (princ "\nNo thing to do")) ) ) 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
ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Cám ơn tot77 tương trợ ^^ Ý 1 của tot77 cũng hơi chủ quan, pline 1000 phân đoạn thẳng nhau như kẻ thì cũng k có khái niệm to, bé hơn chứ đừng nói vào trong, ra ngoài :) Vì pline luôn có thuộc tín diên tích nên theo logic chỉ cẩn kiểm tra tất cả đỉnh k thẳng hàng là được chứ k thể "nhiều đoạn là đc" đc. 4fun :) 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
Tot77 508 Báo cáo bài đăng Đã đăng Tháng 10 25, 2014 Bâc Ket lại bắt bẻ câu cú nữa rồi, nói như tren thì user phải tự hiểu là 2 đoạn k thẳng hàng, chứ nếu thg hàng hoăc dạng kín kiểu aba thì nó cũng offset thôi, nhưng chiều thì hên xui ráng mà chịu. 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
traichoi85 1 Báo cáo bài đăng Đã đăng Tháng 10 27, 2014 cám ơn bạn "ketxu" và bạn "tot77" đã giúp mình li sp theo yêu cầu 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
peiruan88 0 Báo cáo bài đăng Đã đăng Tháng 10 27, 2014 Hì, không liên quan lắm, em có mấy cái lisp trên diễn đàn, nhưng vì lệnh lisp mỗi người đặt một cách, em muốn đặt theo ý mình thì phải làm sao ah, mong mọi người chỉ giú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
Doan Van Ha 3.201 Báo cáo bài đăng Đã đăng Tháng 10 27, 2014 Mở file lisp ra. Xem cái đoạn nào có dạng (defun C:XYZ(...) thì bạn sửa chữ XYZ lại tùy thích. 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
HUNGMETRO 5 Báo cáo bài đăng Đã đăng Tháng 10 15, 2015 Sửa chút xíu lsp của Ket, có 2 điều : 1. Pline không cần phải closed mới dùng được, nhưng dĩ nhiên pline phải có nhiều đoạn nó mới biết cái nào vào trong cái nào ra ngoài. 2. Gộp 2 lệnh o+o- vào chung 1 lệnh, bạn nhập số >0 thì offset ra ngoài, <0 thì offset vào trong. Còn các lệnh chamfer và fillet vẫn như cũ. Bạn đặt sẵn layer hiện hành trước khi chạy lsp, màu theo bylayer. (vl-load-com) (defun c:ofs( / ss lay lst) (setq lay (getvar 'clayer)) (cond ((ssget '((0 . "CIRCLE,ELLIPSE,POLYLINE,LWPOLYLINE,SPLINE"))) (or #d (setq #d 5)) (setq #d (cond ((getdist (strcat "\nDistance <" (rtos #d 2 2) ">"))) (#d))) (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (setq lst (mapcar 'car (list (vlax-invoke obj 'Offset #d) (vlax-invoke obj 'Offset (- #d))))) (mapcar '(lambda (x) (vla-put-Layer x lay) (vla-put-Color x 256)) lst) (vla-delete (car (vl-sort lst '(lambda(x y) ((if (< #d 0) > <) (vlax-get x 'Area) (vlax-get y 'Area))) )) ) ) (vla-delete ss) ) (T (princ "\nNo thing to do")) ) ) Cảm ơn bạn nhiêu nha đoạn lisp trên thật tuyệt đúng lúc minh cầ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
dotrungbac 0 Báo cáo bài đăng Đã đăng Tháng 10 3, 2018 Chào các bạn Cho mình hỏi sao mình tải lisp ofs của bạn Tot77 về, load rồi nhưng dùng lệnh không hoạt động được vậy các bạn? Trân trọ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
maihanh191 16 Báo cáo bài đăng Đã đăng Tháng 10 18, 2018 Vào lúc 3/10/2018 tại 17:22, dotrungbac đã nói: Chào các bạn Cho mình hỏi sao mình tải lisp ofs của bạn Tot77 về, load rồi nhưng dùng lệnh không hoạt động được vậy các bạn? Trân trọng mình lúc đầu cũng không chạy được. Bạn cop toàn bộ nội dung text của lisp sang file text mới rồi lưu dưới dạng .lsp thì chạy bt. Bạn thử xem 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
haicau 1 Báo cáo bài đăng Đã đăng Tháng 7 21, 2019 Chào các bạn mình tải lisp ofs của bạn Tot77 về giữa nguyên bản, load rồi nhưng không có lệnh ofs ? 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