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

Yêu câu lisp: copy chính giữa đối tượng vào Rectang

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

http://www.cadviet.com/upfiles/4/11317_m2c.lsp

Mình có lisp trên mình muốn tăng thêm các tính năng sau bạn nào có thể giúp mình được không :

+ Có thể lựa chọn copy hoặc move ( lần sau đánh lệnh có thể lưu giữ mặc định lấn sử dụng lệnh trước copy hoặc move, lần nào cũng lựa chọn hơi mất công )

+ Chọn 1 hoặc nhiều Rectang, sau đó đối tượng mình muốn copy hay move sẽ vào chính giữa các Rectang đó. Thêm chức năng quét 1 khu vực thì đối tượng được chọn sẽ copy hay move vào chính giữa , thực hiện lệnh này 1 cách liên tiếp không cần đánh lại lệnh

Mình đang cần lệnh này để thực hiện bản vẽ của minh được mau hơn, yêu cầu của mình hơi nhiều, mong các bạn giúp đỡ mình sớm.

Thanks

  • Vote giảm 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áy mình bị trục trặc úp lên mà không dowm được bạn vào mục này xem giúp mình nhé

Bạn viết giúp mình nhé, bạn viết 1 lísp hoàn toàn mới cũng được

http://www.cadviet.com/forum/topic/280-lisp-move-text-vao-chinh-giua-mot-rectang/Thanks

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

đã chỉnh sửa cho Bạn

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/280-lisp-move-text-vao-chinh-giua-mot-rectang/
(defun c:m2c (/ comm src des oldos mid)
  (defun mid (ent / p1 p2)
    (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
    (setq p1 (vlax-safearray->list p1)
	  p2 (vlax-safearray->list p2)
	  pt (mapcar '+ p1 p2)
	  pt (mapcar '* pt '(0.5 0.5 0.5))
    )
    pt
  )
  (or com (setq com "C"))
  (initget "C M")
  (setq comm (getkword  (strcat "\nBan muon Copy hay Move <"com">:")))
  (if(not comm)(setq comm com))
  (setq com comm)
  (setq oldos (getvar "osmode"))
  (setvar "osmode" 0)
  (while (and
	   (setq src (car (entsel "\nDoi tuong can di chuyen: ")))
	   (not(redraw src 3))
	   (setq des (car (entsel "\nDoi tuong dich: ")))
	   (not(redraw src 4))
	 )
    (if	(= (strcase comm) "C")
      (command ".copy" src "" (mid src) (mid des))
      (command ".move" src "" (mid src) (mid des))
    )
  )
  (setvar "osmode" oldos)
  (princ)
)
(vl-load-com)

Việc chon nhiều rectang rồi chọn các đối tương thì chưa có vì phải có qui luật sắp xếp. Nếu sắp xếp theo thứ tự chọn thì làm theo lisp trên sẽ nhanh hơn

  • 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

đã chỉnh sửa cho Bạn

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/280-lisp-move-text-vao-chinh-giua-mot-rectang/
(defun c:m2c (/ comm src des oldos mid)
  (defun mid (ent / p1 p2)
    (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
    (setq p1 (vlax-safearray->list p1)
	  p2 (vlax-safearray->list p2)
	  pt (mapcar '+ p1 p2)
	  pt (mapcar '* pt '(0.5 0.5 0.5))
    )
    pt
  )
  (or com (setq com "C"))
  (initget "C M")
  (setq comm (getkword  (strcat "\nBan muon Copy hay Move <"com">:")))
  (if(not comm)(setq comm com))
  (setq com comm)
  (setq oldos (getvar "osmode"))
  (setvar "osmode" 0)
  (while (and
	   (setq src (car (entsel "\nDoi tuong can di chuyen: ")))
	   (not(redraw src 3))
	   (setq des (car (entsel "\nDoi tuong dich: ")))
	   (not(redraw src 4))
	 )
    (if	(= (strcase comm) "C")
      (command ".copy" src "" (mid src) (mid des))
      (command ".move" src "" (mid src) (mid des))
    )
  )
  (setvar "osmode" oldos)
  (princ)
)
(vl-load-com)

Việc chon nhiều rectang rồi chọn các đối tương thì chưa có vì phải có qui luật sắp xếp. Nếu sắp xếp theo thứ tự chọn thì làm theo lisp trên sẽ nhanh hơn

 Cảm ơn bạn đã giúp mình, mình đã sử dụng lisp chạy ổn nhưng còn 1 số chỗ bạn điều chỉnh giúp mình được không

+ khi dùng lisp xong thì mất hết chon điêm Osnap, mình thử mấy lần rùi vẫn thế

+ bạn có thể cho lísp lựa chọn thêm chức năng copy hoặc move được không

+Thêm lựa chon chức năng quét 1 khu vực hoặc lựa chọn Rectang thì đối tượng được chọn sẽ copy hay move vào chính giữa

Thanks bạn rất nhiề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

@hung1608:

 

-Để kết thúc lệnh Bạn nên enter hoặc click chuột, không dùng escape để thoát lệnh

- lisp trên đã có rồi, Bạn muốn copy thì nhấn "C", move thì nhấn "M". Khi chạy lần đầu mặc định là copy, các lấn sau (sau khi gõ lệnh M2C) thì nó đã nhớ lệnh lần trước rồi, nếu đúng thì chỉ enter là được

- Việc quét chọn mình đã giải thích rồi, lần chọn đối tượng nguốn gồm các đ/tượng a,b,c,d,... các đ/tượng đích là A,B,C,D,.... . Bạn muốn copy (hoặc move) a->A, b->B, c->C ... nhưng nó thực hiện a->B, b->C, c->A,.... thì có đúng theo ý BẠn không?

  • 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

@hung1608:

 

-Để kết thúc lệnh Bạn nên enter hoặc click chuột, không dùng escape để thoát lệnh

- lisp trên đã có rồi, Bạn muốn copy thì nhấn "C", move thì nhấn "M". Khi chạy lần đầu mặc định là copy, các lấn sau (sau khi gõ lệnh M2C) thì nó đã nhớ lệnh lần trước rồi, nếu đúng thì chỉ enter là được

- Việc quét chọn mình đã giải thích rồi, lần chọn đối tượng nguốn gồm các đ/tượng a,b,c,d,... các đ/tượng đích là A,B,C,D,.... . Bạn muốn copy (hoặc move) a->A, b->B, c->C ... nhưng nó thực hiện a->B, b->C, c->A,.... thì có đúng theo ý BẠn không?

Không được bạn ơi tớ thử ân C rùi vẫn không được nó toàn move thôi bạn ah. Bạn thử check hộ lại mình xem

Cái quét ý của minh là khi k co rectang để chọn mình có 1 khu vực thì minh quét khu vực đó thì đối tượng của minh se vào chính giữa vị trí đó

Thanks

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

Không được bạn ơi tớ thử ân C rùi vẫn không được nó toàn move thôi bạn ah. Bạn thử check hộ lại mình xem

Cái quét ý của minh là khi k co rectang để chọn mình có 1 khu vực thì minh quét khu vực đó thì đối tượng của minh se vào chính giữa vị trí đó

Thanks

 

lỗi code diễn đàn bị mất tên biến. Bạn lấy lisp này (mình chỉ đổi lại tên biến)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/280-lisp-move-text-vao-chinh-giua-mot-rectang/
(defun c:m2c (/ comm src des oldos mid)
  (defun mid (ent / p1 p2)
    (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
    (setq p1 (vlax-safearray->list p1)
	  p2 (vlax-safearray->list p2)
	  pt (mapcar '+ p1 p2)
	  pt (mapcar '* pt '(0.5 0.5 0.5))
    )
    pt
  )
  (or cm (setq cm "C"))
  (initget "C M")
  (setq comm (getkword  (strcat "\nBan muon Copy hay Move <" cm ">: ")))
  (if(not comm)(setq comm cm))
  (setq cm comm)
  (setq oldos (getvar "osmode"))
  (setvar "osmode" 0)
  (while (and
	   (setq src (car (entsel "\nDoi tuong can di chuyen: ")))
	   (not(redraw src 3))
	   (setq des (car (entsel "\nDoi tuong dich: ")))
	   (not(redraw src 4))
	 )
    (if	(= (strcase comm) "C")
      (command ".copy" src "" (mid src) (mid des))
      (command ".move" src "" (mid src) (mid des))
    )
  )
  (setvar "osmode" oldos)
  (princ)
)
(vl-load-com)

Giả sử Bạn quét chọn có 2 đối tượng, thì đối tượng nào là nguồn, là đích, khi quét được n đối tượng thì sẽ ra sao

Mô tả của Bạn khó hiểu quá. Bạn hãy up file lên trong đó thể hiện trước và sau khi thực hiện lệnh, "khu vực đó" là gì

  • 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

 

lỗi code diễn đàn bị mất tên biến. Bạn lấy lisp này (mình chỉ đổi lại tên biến)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/280-lisp-move-text-vao-chinh-giua-mot-rectang/
(defun c:m2c (/ comm src des oldos mid)
  (defun mid (ent / p1 p2)
    (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
    (setq p1 (vlax-safearray->list p1)
	  p2 (vlax-safearray->list p2)
	  pt (mapcar '+ p1 p2)
	  pt (mapcar '* pt '(0.5 0.5 0.5))
    )
    pt
  )
  (or cm (setq cm "C"))
  (initget "C M")
  (setq comm (getkword  (strcat "\nBan muon Copy hay Move <" cm ">: ")))
  (if(not comm)(setq comm cm))
  (setq cm comm)
  (setq oldos (getvar "osmode"))
  (setvar "osmode" 0)
  (while (and
	   (setq src (car (entsel "\nDoi tuong can di chuyen: ")))
	   (not(redraw src 3))
	   (setq des (car (entsel "\nDoi tuong dich: ")))
	   (not(redraw src 4))
	 )
    (if	(= (strcase comm) "C")
      (command ".copy" src "" (mid src) (mid des))
      (command ".move" src "" (mid src) (mid des))
    )
  )
  (setvar "osmode" oldos)
  (princ)
)
(vl-load-com)

Giả sử Bạn quét chọn có 2 đối tượng, thì đối tượng nào là nguồn, là đích, khi quét được n đối tượng thì sẽ ra sao

Mô tả của Bạn khó hiểu quá. Bạn hãy up file lên trong đó thể hiện trước và sau khi thực hiện lệnh, "khu vực đó" là gì

 

Vẫn thế bạn ơi, vẫn chỉ Move thôi k copy được, không có lựa chon copy hay move gì cả

Bạn xem file nay của mình, mình có các căn hộ cần bố trí tiết bị ở giữa phòng, mình muốn dùng lisp để thực hiện công việc này có được không bạn

Cảm ơn bạn đã xem bài viết của mình

http://www.cadviet.com/upfiles/5/11317_da_nang.rar

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  

×