Đến nội dung


Hình ảnh
- - - - -

Chọn đối tượng sau lệnh Copy


  • Please log in to reply
24 replies to this topic

#21 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 19 October 2009 - 05:22 AM

Chào bác Tuệ!
Bác có thể sửa lại để lisp có thể hoàn thiện hơn nữa ko: lệnh CPP có thể giống hệt với lệnh COPY trong Cad, và khi muốn gọi đối tượng vừa mới COPY thì vẫn dùng tham số P như trên, và khi Move hay Copy đối tượng mới đó thì cũng giống như là dùng Move với Copy trong cad, chứ không nó lại không hiện lên hình ảnh của đối tượng khi chuẩn bị đặt, bác giúp em nhé cảm ơn bác rất nhiều :bigsmile:

Chào study_forever
Lisp trên đã được Tue_NV hoàn thiện lại :

(defun c:cpp( / ss frome toe cur obj po1 po2)
(Command "undo" "be")
(setq frome (entlast));;
(Prompt "\nChon doi tuong :")
(setq obj (ssget))
(sssetfirst obj obj)
(setq po1 (getpoint "\n Base point : "))
(command "line" '(0 0 0) '(1 1 1) "")
(setq obj (ssadd (entlast) obj))

(command "copy" obj "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))

(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq obj (ssdel (entlast) obj))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))

(setq toe (entlast))

(setq cur frome
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)

(setq po1 po2)

(while po2
(setq frome (entlast))
(command "line" '(0 0 0) '(1 1 1) "")
(setq ss (ssadd (entlast) ss))
(command "copy" ss "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))
(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq ss (ssdel (entlast) ss))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))
(setq toe (entlast))
(setq cur frome; khoi tao
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)
(setq po1 po2)
)
(Command "undo" "end")
(princ)
)

Chúc các bạn một buổi sáng tốt lành
Edit : Chức năng Download Lisp File của diễn đàn bị lỗi -> bạn hãy nhấn nút Reply bài viết này của Tue_NV -> copy hết code này về chạy thử nhé
:bigsmile:
  • 1

#22 hai_1401

hai_1401

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 19 October 2009 - 08:14 PM

Chào study_forever
Lisp trên đã được Tue_NV hoàn thiện lại :


(defun c:cpp( / ss frome toe cur obj po1 po2)
(Command "undo" "be")
(setq frome (entlast));;
(Prompt "\nChon doi tuong :")
(setq obj (ssget))
(sssetfirst obj obj)
(setq po1 (getpoint "\n Base point : "))
(command "line" '(0 0 0) '(1 1 1) "")
(setq obj (ssadd (entlast) obj))

(command "copy" obj "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))

(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq obj (ssdel (entlast) obj))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))

(setq toe (entlast))

(setq cur frome
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)

(setq po1 po2)

(while po2
(setq frome (entlast))
(command "line" '(0 0 0) '(1 1 1) "")
(setq ss (ssadd (entlast) ss))
(command "copy" ss "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))
(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq ss (ssdel (entlast) ss))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))
(setq toe (entlast))
(setq cur frome; khoi tao
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)
(setq po1 po2)
)
(Command "undo" "end")
(princ)
)

Chúc các bạn một buổi sáng tốt lành
Edit : Chức năng Download Lisp File của diễn đàn bị lỗi -> bạn hãy nhấn nút Reply bài viết này của Tue_NV -> copy hết code này về chạy thử nhé
:bigsmile:

Lạ thật đấy anh Tuệ ơi, tại sao khi copy xong nó cứ ra cái dấu chấm j ấy anh ạ (1 đường line rất nhỏ), và khi muốn kết thúc lệnh CPP bằng Enter thì không được, đồng thời khi chọn đối tượng để copy trước rồi chọn lệnh CPP thì chưa được (bắt buộc phải chọn CPP trước)
  • 0

#23 dung05x1lt

dung05x1lt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 13 December 2010 - 04:02 PM

Sử dụng lệnh chọn lai đối tượng vừa copy xong cua ban TUE_VNC thi ok...nhung ma dung lenh copy tham so m...de copy nhieu doi tuong thi lai.....ko dc..TUE oi giup minh voi....??? co cach nao thoa man ca hai ko nhi?????
  • 0

#24 dung05x1lt

dung05x1lt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 13 December 2010 - 04:02 PM

Chào study_forever
Lisp trên đã được Tue_NV hoàn thiện lại :


(defun c:cpp( / ss frome toe cur obj po1 po2)
(Command "undo" "be")
(setq frome (entlast));;
(Prompt "\nChon doi tuong :")
(setq obj (ssget))
(sssetfirst obj obj)
(setq po1 (getpoint "\n Base point : "))
(command "line" '(0 0 0) '(1 1 1) "")
(setq obj (ssadd (entlast) obj))

(command "copy" obj "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))

(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq obj (ssdel (entlast) obj))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))

(setq toe (entlast))

(setq cur frome
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)

(setq po1 po2)

(while po2
(setq frome (entlast))
(command "line" '(0 0 0) '(1 1 1) "")
(setq ss (ssadd (entlast) ss))
(command "copy" ss "" po1)
(while (< 0 (getvar "CMDACTIVE")) (command pause))
(setq dc (cdr(assoc 10 (entget (entlast)))))
(setq ss (ssdel (entlast) ss))
(entdel (entlast))
(setq kc (distance '(0 0 0) dc))
(setq ang (angle '(0 0 0) dc))
(setq po2 (polar po1 ang kc))
(setq toe (entlast))
(setq cur frome; khoi tao
ss (ssadd)
)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)
(setq po1 po2)
)
(Command "undo" "end")
(princ)
)

Chúc các bạn một buổi sáng tốt lành
Edit : Chức năng Download Lisp File của diễn đàn bị lỗi -> bạn hãy nhấn nút Reply bài viết này của Tue_NV -> copy hết code này về chạy thử nhé
:undecided:

Sử dụng lệnh chọn lai đối tượng vừa copy xong cua ban TUE_VNC thi ok...nhung ma dung lenh copy tham so m...de copy nhieu doi tuong thi lai.....ko dc..TUE oi giup minh voi....??? co cach nao thoa man ca hai ko nhi?????
  • 0

#25 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 13 December 2010 - 10:52 PM

Sử dụng lệnh chọn lai đối tượng vừa copy xong cua ban TUE_VNC thi ok...nhung ma dung lenh copy tham so m...de copy nhieu doi tuong thi lai.....ko dc..TUE oi giup minh voi....??? co cach nao thoa man ca hai ko nhi?????

Xin mạn phép TUE viết cái lisp tương tự để các bạn sd cho vui.
;Ham tra ve tap hop tu name cho den last
(defun nametoSS( name addname / ss n i name1)
(if (null name) (setq name (entnext) addname T))
(setq ss (ssadd))
(setq name1 name)
(if addname (ssadd name1 ss))
(setq i 0)
(while (setq n (entnext name1))
(setq i (1+ i))
(ssadd n ss)
(setq name1 n)
)
(if (null addname) (ssdel name ss))
(command "_.select" ss "")
(if (> (sslength ss) 0) ss nil)
)

(defun c:dcpp( / ss n p p2)
(setq n (entlast))
(if (setq ss (ssget)) (progn
(initget 128)
(setq p (getpoint "\nSpecify base point or displacement, or [Multiple]:"))
(cond
((listp p)
(setq n (entlast))
(command "_.copy" ss "" p "\\")
(nametoss n nil)
)
((= (strcase p) "M")
(setq n (entlast))
(setq p (getpoint "\nSpecify base point:"))
(while (setq p2 (getpoint p "\nSpecify second point of displacement or :"))
(setq n (entlast))
(command "_.copy" ss "" p p2)
(nametoss n nil)
)
)
(T)
)
) nil)
(princ)
)
Lệnh là dcpp. Lệnh này gần với lệnh copy của cad kể cả với lựa chọn "m", sau khi kết thúc lệnh, nếu thực hiện một lệnh mới có chọn đối tượng với lựa chọn "p" thì sẽ chọn đc một tập mới copy sau cùng.
Lệnh này chỉ thiếu mỗi cái nhóm đối tượng chạy theo cái dây khi copy với lựa chọn "m", muốn làm đc điều này phải tốn thêm một ít công sức nhưng mình thì rất bận
  • 1