Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
thuanledo

XIN GIÚP ĐỠ VỀ OFFSET POLYLINE DẠNG RECTANG

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

CHÀO CÁC ANH CHỊ, TÌNH HÌNH LÀ EM CÓ MỘT CÁI POLYLINE DẠNG RECTANG HOẶC 1 ĐA GIÁC NHIỀU ĐỈNH EM MUỐN OFFSET NÓ RA 500M THÌ CODE VBA AUTOCAD NHƯ THẾ NÀO

MONG CÁC ANH CHỊ GIÚP ĐỠ

HÌNH EM GỬI ĐÍNH KÈM BÊN DƯỚI Ạ.

 

RECTANG.png

DA GIAC.png

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
3 giờ trước, thuanledo đã nói:

CHÀO CÁC ANH CHỊ, TÌNH HÌNH LÀ EM CÓ MỘT CÁI POLYLINE DẠNG RECTANG HOẶC 1 ĐA GIÁC NHIỀU ĐỈNH EM MUỐN OFFSET NÓ RA 500M THÌ CODE VBA AUTOCAD NHƯ THẾ NÀO

MONG CÁC ANH CHỊ GIÚP ĐỠ

Offset 500 và -500 rồi so sánh 2 pline mới, thằng nào có diện tích (AREA) lớn hơn thì chọn, xóa thằng kia.

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
22 giờ trước, gia_bach đã nói:

Offset 500 và -500 rồi so sánh 2 pline mới, thằng nào có diện tích (AREA) lớn hơn thì chọn, xóa thằng kia.

Một cách khác không phải so sánh diện tích rồi xoá đỡ tốn thời gian. Lisp này lấy trên nền lisp OFS của @tranducanh18 gửi ở trên

(vl-load-com)
(defun GetA (lst)
    (apply '+
           (mapcar '(lambda (a b) (- (* (car b) (cadr a)) (* (car a) (cadr b))))
                   lst
                   (cons (last lst) lst)
           )
    )
)
(defun c:ofs (/ ss lay lst obj bit #d #dold)
    (setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
    (vla-StartUndoMark ActDoc)
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (setq #dold (getvar "offsetdist"))
    (cond ((setq ss (ssget '((0 . "CIRCLE,ELLIPSE,*POLYLINE,SPLINE"))))
           (if (null
                   (setq #d (getdist (strcat "\nOffsetdist <" (rtos #dold 2 2) ">")))
               )
               (setq #d #dold)
               (setvar "offsetdist" #d)
           )
           (foreach ent (acet-ss-to-list ss)
               (setq obj (vlax-ename->vla-object ent)
                     bit (GetA (acet-geom-vertex-list ent))
               )
               (if (vlax-method-applicable-p obj 'Offset)
                   (cond ((< bit 0) (vlax-invoke obj 'Offset #d))
                         ((> bit 0) (vlax-invoke obj 'Offset (- #d)))
                   )
               )
           )
          )
          (T (princ "\nNo thing to do"))
    )
    (acet-sysvar-restore)
    (vla-EndUndoMark ActDoc)
    (princ)
)

 

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

Mình không rõ về VBA lắm nhưng quy trình cũng biết, offset 2 hướng được 2 cái pline. Có thể so sánh bằng Centroid to CurveClosedPoint, Area, hay tổng khoảng cách từ 1 điểm trên pline cũ đến toàn bộ điểm trên pline mới. Cái nào lớn hơn là ngoà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

Tôi có cái tool bé xíu, viết cho mấy mục đích nho nhỏ, có phần chọn offset trong/ngoài đó, bác có thể tải về dùng thử ở đây.

 

51227660900_be39b73faf_z.jpg

 

 

  • 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

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  

×