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

Thay đổi tọa độ nút đường Pline

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

26 phút trước, cuongtk2 đã nói:

(defun pline-setvetex-at (pline n x y / NEW_COORD1)

(setq new_coord1 (vlax-make-variant
    (vlax-safearray-fill
        (vlax-make-safearray vlax-vbdouble '(0 . 1))
            (list x y)
        )
    )
)
(vla-put-coordinate pline n new_coord1)
  )

(defun c:test ()
  (setq pline (vlax-ename->vla-object (car (entsel "\nChon pline")))
        n (getint "\nThu tu dinh")
        pt (getpoint "\nVi tri moi:")
        )
  (pline-setvetex-at pline n (car pt) (cadr pt)
                     )
  )

Trên quan điểm lập trình thì code trước không sai vì mình làm hoàn toàn đúng theo quy trình, nhưng vì nó sai nên mình chết dúng quy trình.

Mò mãi mới tìm ra được mấy cái variant, safearray fill, test thấy OK, mặc dù không hiểu lắm

Kết quả ntn là ổn với yêu cầu của mình rồi, cảm ơn cac bác đã đóng góp ý kiế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
11 giờ trước, cuongtk2 đã nói:

Thử coi (setq ls ( list 1111))

(Setq ls (subst 2 (nth 2 ls) ls))

Vậy ls là (1121) hay là (2222)

có một hàm acet rất hay cho ví dụ này ạ

(acet-list-put-nth a lst n)

a là phần tử mới

n là vị trí của phần tử trong danh sách.

(defun pline-setvetex-at (ent pt n / plst)
  (setq 
    ent (entget ent)
    plst (vl-remove-if-not '(lambda (x) (member (car x) '(10 42))) ent)
    pt (list 10 (car pt) (cadr pt))
    plst (acet-list-put-nth pt plst (* 2 n))
    ent (append (reverse (member (assoc 70 ent) (reverse ent))) plst)
  )
  (entmod ent)
)

 

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  

×