Chuyển đến nội dung
Diễn đàn CADViet
Nguyễn Nam Nguyên

Lisp mirror nhiều đối tượng polyline

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

Dạ em có một vấn đề nhờ mọi người giúp đỡ ạ!

Đặt vấn đề: Em muốn mirror hàng loạt các đối tượng polyline được chọn, biết trục đối xứng là cạnh có chiều dài lớn nhất của đối tượng và sẽ xóa đối tượng ban đầu sau khi thực hiện lệnh.

Sau đây là đoạn lisp em kiếm được, nhưng không sử dụng được và do sự gà non về lisp nên không tìm được lỗi của nó ạ, mong mọi người giúp đỡ. Em cảm ơn ạ!

 

(defun c:mirror-polyline ()
  (setq ss (ssget "_X" '((0 . "LWPOLYLINE"))))
  (setq max_length 0)
  (setq max_edge nil)
  (if (setq obj (ssname ss 0))
    (progn
      (setq vertex_count (vlax-get-property (vlax-ename->vla-object obj) 'NumberOfVertices))
      (setq vertices (vlax-get-property (vlax-ename->vla-object obj) 'VertexCoordinates))
      (setq prev_point (car vertices))
      (setq max_edge_start prev_point)
      (setq max_edge_end (car (last vertices)))
      (setq max_length (distance max_edge_start max_edge_end))
      (setq cur_vertex 1)
      (while (< cur_vertex vertex_count)
        (setq cur_point (nth cur_vertex vertices))
        (setq cur_length (distance prev_point cur_point))
        (if (> cur_length max_length)
          (progn
            (setq max_length cur_length)
            (setq max_edge_start prev_point)
            (setq max_edge_end cur_point)
          )
        )
        (setq prev_point cur_point)
        (setq cur_vertex (1+ cur_vertex))
      )
      (setq mirror_axis (vlax-3d-point (mapcar '/ (mapcar '+ max_edge_start max_edge_end) '(2.0 2.0 2.0))))
      (command "_.MIRROR" obj "" mirror_axis "")
      (command "_.ERASE" obj "")
    )
  )
  (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

 Bạn dùng lisp mình viết xem sao. lisp kia nhìn hơi quê. Lệnh MLE nhé

(defun c:MLE (/ ss i obj lst1 p1 p2)
  (setq ss (ssget '((0 . "*POLYLINE"))))
  (repeat (setq i (sslength ss))
    (setq 
      i (1- i)
      obj (vlax-ename->vla-object (ssname ss i))
      lst1 (vlax-safearray->list (vlax-variant-value (vla-explode obj)))
      lst1 (vl-sort lst1 '(lambda (a b) 
                            (> (vlax-curve-getDistAtParam a (vlax-curve-getEndParam a)) 
                               (vlax-curve-getDistAtParam b (vlax-curve-getEndParam b)))))
      p1 (vlax-3d-point (vlax-curve-getstartpoint (car lst1)))
      p2 (vlax-3d-point (vlax-curve-getendpoint (car lst1)))
    )
    (mapcar 'vla-delete lst1)
    (vla-Mirror obj p1 p2)
    (vla-delete obj)
  )
  (princ)
)

 

  • 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

×