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

CHUYỂN HATCH SANG LINE HOẶC POLYLINE

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

Nhờ các bạn xem giúp, tình hình là có cái bảng chú thích, cái khung hiện tại là Hatch, vậy có cách nào làm cho Hatch chuyển thành Line hoặc Polyline cho tiện điều chỉnh không ạ.

Nếu phải dùng Lisp thì nhờ bạn nào biết Code hộ giúp mình cái Lisp.

Thank All!536249425_CHUYNHATCHSANGLINEHOCPOLYLINE.png.5759a173c2369772a242540b330935a9.png

CHUYỂN HATCH SANG LINE HOẶC POLYLINE.dwg

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

Thank bạn cuongtk2: cách này mình đã thử rồi, nhưng nó lệnh này nó tạo đường bao quanh Hatch, cái mình muốn là 1 line hoặc Polyline nằm chính giữa tâm của Hatch, giống như mình dùng Line để vẽ 1 cái khung vậy đó. 

Hatch.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
2 giờ trước, cuongtk2 đã nói:

Cái này thuê mình viết lisp 1000k cũng không dám nhận.

em nghĩ với bài toán này của bạn đó. dùng getboundingbox để lấy 2 điểm min,max -> Toạ ra cái Line theo chiều lớn nhất của Hatch là dc ak.

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 @CadExTools đã góp ý. 

Tuy nhiên khi lấy loop của hatch sẽ ra những polyline khép kín đại diện cho bao ngoài (boundary) và island (đảo) theo loại loop.

Bạn có nghĩ 1 đoạn segment có chiều dài lớn nhất của đảo (island) có đại diện cho 1 đường kẻ ngang (dọc) liền mạch được không.

Nếu không, bạn sẽ phải có phương án join chúng lại và extend ra biên. Đảm bảo chúng không đè lên nhau.

Bài toán này tốn sức, khó chính xác mà không có ý nghĩa trên thực tế. 

Trường hợp này với mình sẽ rã thành polyline rồi đồ lạ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

Đây là 1 table mà người vẽ chắc chưa rành dùng Cad, thay vì sử dụng width của pline thì họ lại dùng hatch, vừa thiếu chuyên nghiệp vừa nặng file.

Viết tạm cho vui thôi chứ chả mặn với bài toán này. Còn mấy chỗ hở hoặc dư thì bạn dùng extend hoặc trim để xử thủ công (viết lisp cũng được nhưng mất công).


(defun C:ABC(/ Midle ss i ent lst p1 p2 p3 p4)
 (defun Midle(p q) (mapcar '(lambda(p q) (/ (+ p q) 2.0)) p q))   (setq ss (ssget '((0 . "HATCH"))) i 0)
 (repeat (sslength ss)
  (setq lst nil ent (ssname ss i) i (1+ i))
  (setq lst (entget ent) lst (vl-remove-if '(lambda(x) (or (/= (car x) 10) (equal (cdr x) '(0.0 0.0 0.0)))) lst))
  (setq lst (vl-sort lst '(lambda(x y / p) (setq p (cdr (car lst))) (< (distance p (cdr x)) (distance p (cdr y))))))
  (setq p1 (cdr (car lst)) p2 (cdr (cadr lst)) p3 (cdr (caddr lst)) p4 (cdr (cadddr lst)))
  (entmakex (list (cons 0 "Line") (cons 10 (Midle p1 p2)) (cons 11 (Midle p3 p4))))
  (entdel ent))
  (princ))
  • Like 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  

×