Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 28 May 2015 - 10:57 AM

http://www.cadviet.c...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


  • -1

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 29 May 2015 - 08:27 AM

Up

Bạn nào giúp mình đi  :wacko:

Thanks

Bạn thử down cái lisp mà bạn gởi lên, xem được không nhé!


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 29 May 2015 - 10:55 AM

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.c...ua-mot-rectang/Thanks


  • 0

#4 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 10 June 2015 - 02:52 PM

đã 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


  • 1

#5 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 10 June 2015 - 10:01 PM

đã 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. 


  • 0

#6 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 11 June 2015 - 09:07 AM

@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?


  • 1

#7 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 11 June 2015 - 01:55 PM

@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


  • 0

#8 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 11 June 2015 - 03:22 PM

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ì


  • 1

#9 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 11 June 2015 - 08:44 PM

 

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.c...317_da_nang.rar


  • 0

#10 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 24 June 2015 - 09:36 PM

up cái, bác nào giúp 1 tay cái nào :)


  • 0