Chuyển đến nội dung
Diễn đàn CADViet
doanduyhung

Hỏi cách chuyển đổi vị trí tọa độ đầu cuối của 1 polyline

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

1 đoạn lsp lấy giá trị của lwpolyline (VD lấy toạ độ điểm các đỉnh LWPOLYLINE) mong bác chỉ dùm

 

Xem thêm đoạn code Getvert của bác SSG nhé :

 

(defun GetVert (e / i L CL k x LL) ;;;Return list Point of all vertex from pline e
  (vl-load-com)
  (setq i 0 k 0 L nil)    
  (setq CL (ent_close e))
  (if (= CL 1)
    (setq k (fix (+ (vlax-curve-getEndParam e) 1)))
    (setq k (fix (+ (vlax-curve-getEndParam e) 2)))    
  )
  (repeat k
    (setq L (append L (list (vlax-curve-getPointAtParam e i))))
    (setq i (1+ i))
  )
  (foreach x L (if (/= x nil) (setq LL (append LL (list x)))) )
  LL
);
(defun ent_close (e / cl sp ep x_ep x_sp y_ep y_sp) ;Return integer value (0 or 1)
  (vl-load-com)
  (setq
     sp (vlax-curve-getStartPoint e)
     ep (vlax-curve-getEndPoint e)
     x_sp (cadr sp)  y_sp (car sp)
     x_ep (cadr ep)  y_ep (car ep)
  )
  (if (and (= x_sp x_ep) (= y_sp y_ep))    
    (setq cl 1) ;=1 is Close
    (setq cl 0) 
  )    
);

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

Xem thêm đoạn code Getvert của bác SSG nhé :

Cảm ơn pác nhưng pác ui ý em hỏi ở đây lấy toạ độ điểm của đỉnh và lấy luôn dxf 40, 41, 42 của đỉnh đấy luôn có được k?

VD POLYLINE

((-1 . <Entity name: 7c51eea8>) (0 . POLYLINE) (330 . <Entity name:

7ec89338>) (5 . 1086ED) (100 . AcDbEntity) (67 . 1) (410 . A3) (8 . 0) (62 .

150) (100 . AcDb2dPolyline) (66 . 1) (10 0.0 0.0 0.0) (70 . 0) (40 . 0.0) (41 .

0.0) (210 0.0 0.0 1.0) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0))

Thì sau mỗi lần next của dxf 66 ta lấy được giá trị 1 điểm.

Nhưng còn với LWPOLYLINE

((-1 . <Entity name: 7c51eef8>) (0 . LWPOLYLINE) (330 . <Entity

name: 7ec89338>) (5 . 1086F7) (100 . AcDbEntity) (67 . 1) (410 . A3) (8 . 0)

(62 . 150) (100 . AcDbPolyline) (90 . 8) (70 . 1) (43 . 0.0) (38 . 0.0) (39 .

0.0) (10 -615769.0 -189154.0) (40 . 0.0) (41 . 0.0) (42 . -0.414214) (10

-615764.0 -189149.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -615523.0 -189149.0)

(40 . 0.0) (41 . 0.0) (42 . -0.414214) (10 -615518.0 -189154.0) (40 . 0.0) (41

. 0.0) (42 . 0.0) (10 -615518.0 -189393.0) (40 . 0.0) (41 . 0.0) (42 .

-0.414214) (10 -615523.0 -189398.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10

-615764.0 -189398.0) (40 . 0.0) (41 . 0.0) (42 . -0.414214) (10 -615769.0

-189393.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))

Thì điểm chỉ cho 3 giá trị dxf 10 40 41 42 thì lấy ra kiểu chi.

Mong các pác chỉ cho em.

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

Sao bác không list các list 10 (point),40 (Swidth),41(Ewidth),42 (bugle) thành 4 list riêng biệt trong cùng 1 vòng lặp thì nó sẽ có tính tương ứng ?Lúc xử lý thì lấy nth i của cả 4 list

Ví dụ ntn :

 

(defun c:ex()
(vl-load-com)
(defun loc (lst vl /) (setq lst(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) vl)) lst))))
(setq ent (entget(car(entsel)));CHon LWLPolyline
     lst10 (loc ent 10)
     lst40 (loc ent 40)
     lst41 (loc ent 41)
     lst42 (loc ent 42)
))

  • 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

Mình thì hay dùng cách đơn giản này: gõ lệnh PEDIT -> Reverse

Tùy chọn này hình như bắt đầu xuất hiện từ AutoCAD 2010, bản 2007 hông thấy, 2008-2009 chưa dùng nên hog bít ^^ !

  • 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

Mong các bác viết lisp vấn đề này có thể áp dụng cho multiline (mline). Tôi vẽ mline cây thép hình V (justify = zero, đường tim của nó cách mép là 2 hai khoảng khác nhau). Mỗi lần muốn đổi chiều thì phải đổi scale của nó từ + sang - (ví dụ 1 phải đổi thành -1) , khi chưa có lisp thì phải làm thế thôi. Nhưng có lisp thì sẽ nhanh hơn nhiều. Xin 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

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

×