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

Nhờ code lisp lấy toạ độ điểm giao của rectang or pline or line

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

Nhờ các anh em trong diễn đàn code lisp. Trân thành cảm ơn

- Mình có vùng kín được tạo bởi Rectang hoặc Pline hoặc các Line rời rạc

- Pick vào điểm bất kì (POINT) trong vùng kín trên

- Sau khi pick vào điểm bất kỳ trên sẽ lấy tạo độ (TẠO ĐỘ ĐIỂM CẦN LẤY) theo bản vẽ đính kèm.

- Nhiệm vụ Gõ lệnh lisp, pick vào 1 điểm (POINT) trên vùng kín để vẽ các chi tiết trong vùng kín đó theo (TOẠ ĐỘ ĐIỂM CẦN LẤY) lấy được ở trên.

SAMPLE.dwg

d5bf88dc-4bfb-4698-b3ac-2e3305f78099.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

Lisp dạng này đã thấy ở đâu đó trên CV, nhưng còn có thêm các text ở các đỉnh thì mới biết đỉnh số mấy toạ độ bao nhiu chứ nhỉ. Ghi thành list thì dễ thôi, nhưng lại ko bít đỉnh đó nằm ở đâ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
2 giờ trước, HALUMGLASS@GMAIL.COM đã nói:

Toạ độ mình cần lấy gán vào biến dưới dạng list. Please!

ok, hãy đợi nhe.

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
(mapcar 'cdr (vl-remove-if '(lambda(x) (/= (car x) 10)) (entget (bpoly (getpoint)))))

Bác muốn gắn vào biến nên chắc bạn biết list. 

Thử dòng code trên. Nó sẽ tạo pline. và kq là list đỉnh. 

  • Like 1
  • Vote tăng 2

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

Lisp của bạn, các toạ độ góc được gắn vào biến polst

(defun sysvar-set (lst_setvar / strN var var_oldname n)
    (setq n 0
          lstvar_thiep nil
          lstValue_thiep nil
    )
    (repeat (/ (length lst_setvar) 2)
        (setq var         (nth n lst_setvar)
              var_oldname (strcat "oldvar_thiep" (itoa n))
        )
        (setq lstvar_thiep (append lstvar_thiep (list var)))
        (set (read var_oldname) (getvar var))
        (setq lstValue_thiep (append lstValue_thiep (list (read var_oldname))))
        (setvar var (nth (+ n 1) lst_setvar))
        (setq n (+ 2 n))
    )
)
(defun c:gdt (/ ucshold po ent_bo polst lstvar_thiep lstValue_thiep)
    (sysvar-set '("cmdecho" 0 "osmode" 0))
    (setq ucshold (acet-ucs-get nil))
    (acet-ucs-cmd '("w"))
    (setq po (getpoint "\Pick a point inside the closed boundary "))
    (command "_.-boundary" po "")
    (if (and (setq ent_bo (entlast)) (eq (acet-dxf 0 (entget ent_bo)) "LWPOLYLINE"))
        (progn (setq polst (acet-geom-object-point-list ent_bo nil))
               (if (equal (car polst) (last polst) 0.01)
                   (setq polst (cdr polst))
               )
            (entdel ent_bo)
        )
    )
    (acet-ucs-set ucshold)
    (mapcar '(lambda (var value) (setvar var (eval value)))
            lstvar_thiep
            lstValue_thiep
    )
    (and polst(princ polst))
    (princ)
)

 

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

×