Đến nội dung


Hình ảnh
- - - - -

Nhờ Viết Lisp Copy Cộng Dồn Khoảng Cách


  • Please log in to reply
11 replies to this topic

#1 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 20 November 2015 - 08:55 AM

Nhờ các anh chị trong diễn đàn viết hộ em lisp hoặc có lệnh nào trong cad thì chỉ hộ em như sau:

Thao tác giống lệnh copy nhưng khi nhập khoảng cách lần sau (lần 2,3,4....) nó sẽ cộng thêm các khoảng cách lần trước.

Ví dụ cụ thể như sau: Đánh lệnh CCO -> chọn đối tượng cần copy và chọn hướng muốn copy -> nhập khoảng cách: 1254 (lần 1)->enter -> nhập khoảng cách ->6546 (lần 2) -> enter->nhập khoảng cách 1212 (lần 3)....

Kết quả là:

+ đối tượng thứ 2 cách đối tượng gốc là: 1254

+ đối tượng thứ 3 cách đối tượng gốc là: 1254+6546, cách đối tượng thứ 2 là: 6546

+ đối tượng thứ 4 cách đối tượng gốc là: 1254+6546+1212, ...

Mong các anh chị hiểu ý và giúp đỡ!

 


  • -1

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 November 2015 - 11:17 AM

Nhờ các anh chị trong diễn đàn viết hộ em lisp hoặc có lệnh nào trong cad thì chỉ hộ em như sau:

Thao tác giống lệnh copy nhưng khi nhập khoảng cách lần sau (lần 2,3,4....) nó sẽ cộng thêm các khoảng cách lần trước.

Ví dụ cụ thể như sau: Đánh lệnh CCO -> chọn đối tượng cần copy và chọn hướng muốn copy -> nhập khoảng cách: 1254 (lần 1)->enter -> nhập khoảng cách ->6546 (lần 2) -> enter->nhập khoảng cách 1212 (lần 3)....

Kết quả là:

+ đối tượng thứ 2 cách đối tượng gốc là: 1254

+ đối tượng thứ 3 cách đối tượng gốc là: 1254+6546, cách đối tượng thứ 2 là: 6546

+ đối tượng thứ 4 cách đối tượng gốc là: 1254+6546+1212, ...

Mong các anh chị hiểu ý và giúp đỡ!

Hề hề hề,

Không hiểu ý bạn có phải cái này không???

http://www.cadviet.c...pymultidist.lsp

(defun c:cco (/ ss p0 p1 a d)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(alert "\n Chon doi tuong can copy")
(setq ss (ssget )
          p0 (getpoint "\n Chon diem goc")
          p1 (getpoint p0 "\n Chon diem dinh huong copy")
          a (angle p0 p1)
          e (entlast)  )
(while (setq d (getdist "\n Nhap khoang cach can copy tiep theo: "))
       (command "copy" ss "" p0 (setq p0 (polar p0 a d)))
       (setq ss (ssadd))
       (while (setq e (entnext e))
            (setq ss (ssadd e ss))
       )
       (setq e (entlast))
)
(setvar "osmode" oldos)
(princ)
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 20 November 2015 - 12:11 PM

 

Hề hề hề,

Không hiểu ý bạn có phải cái này không???

http://www.cadviet.c...pymultidist.lsp

(defun c:cco (/ ss p0 p1 a d)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(alert "\n Chon doi tuong can copy")
(setq ss (ssget )
          p0 (getpoint "\n Chon diem goc")
          p1 (getpoint p0 "\n Chon diem dinh huong copy")
          a (angle p0 p1)
          e (entlast)  )
(while (setq d (getdist "\n Nhap khoang cach can copy tiep theo: "))
       (command "copy" ss "" p0 (setq p0 (polar p0 a d)))
       (setq ss (ssadd))
       (while (setq e (entnext e))
            (setq ss (ssadd e ss))
       )
       (setq e (entlast))
)
(setvar "osmode" oldos)
(princ)
)

Cảm ơn anh Bình nhiều nhé! Lisp chạy oke, anh sửa thêm chút nữa nhé: bỏ hiển thị cái bảng OKE (chọn đối tượng cần copy) và nếu có thể anh sửa luôn giúp em ở chỗ là khi chọn đối tượng copy (ở vị trí khác), chọn điểm gốc và pick hướng thì đối tượng được copy ra nằm trên phương của điểm gốc và điểm pick hướng. Hehe, em nói quần quần không biết anh hiểu ý em không!


  • -1

#4 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 20 November 2015 - 01:22 PM

Bạn thử cái này :D

(defun c:CCO( / cmd ss base_pt dis huong)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(prompt "\nChon doi tuong copy !")
(setq ss (ssget))
(setq base_pt (getpoint "\nChon diem chuan: "))
(setq dis 0)
(while
    (setq huong (getpoint base_pt "\Chon diem thu hai: "))
    (command ".copy" ss "" base_pt (polar base_pt (angle base_pt huong) (setq dis (+ dis (distance base_pt huong)))))
)
(setvar "cmdecho" cmd)
(princ)
)

  • 1

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#5 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 20 November 2015 - 02:25 PM

 

Bạn thử cái này :D

(defun c:CCO( / cmd ss base_pt dis huong)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(prompt "\nChon doi tuong copy !")
(setq ss (ssget))
(setq base_pt (getpoint "\nChon diem chuan: "))
(setq dis 0)
(while
    (setq huong (getpoint base_pt "\Chon diem thu hai: "))
    (command ".copy" ss "" base_pt (polar base_pt (angle base_pt huong) (setq dis (+ dis (distance base_pt huong)))))
)
(setvar "cmdecho" cmd)
(princ)
)

Không phải anh ơi, ý em là là khi chọn đối tượng copy (ở vị trí khác trong bản vẽ),sau đó chọn điểm gốc (ở vị trí khác, không phải vị trí chọn đối tượng copy) và điểm pick hướng thì đối tượng được copy ra nằm trên phương (đường thẳng đi qua điểm gốc và điểm pick chọn hướng). Vẫn nhập khoảng cách như lisp của anh Bình vậy á!


  • 0

#6 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 21 November 2015 - 07:49 AM

Không phải anh ơi, ý em là là khi chọn đối tượng copy (ở vị trí khác trong bản vẽ),sau đó chọn điểm gốc (ở vị trí khác, không phải vị trí chọn đối tượng copy) và điểm pick hướng thì đối tượng được copy ra nằm trên phương (đường thẳng đi qua điểm gốc và điểm pick chọn hướng). Vẫn nhập khoảng cách như lisp của anh Bình vậy á!

Với đoạn "dịch nghĩa" này thì đúng là bó chân .com.canh :D :D :D

 

Phải chăng ý của bạn là copy từ bản vẽ khác ??? Mà nếu thế thì đoạn "thì đối tượng được copy ra nằm trên phương (đường thẳng đi qua điểm gốc và điểm pick chọn hướng)" được hiểu làm sao đây ?! Căn cứ vào cái gì để nói nó nằm trên phương.. nếu đó là một tập chọn chẳng biết điểm chuẩn ở đâu ??? ....

Bạn có thể giải thích thêm + hình minh họa .....

:D :D :D


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#7 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 21 November 2015 - 09:57 AM

Với đoạn "dịch nghĩa" này thì đúng là bó chân .com.canh :D :D :D

 

Phải chăng ý của bạn là copy từ bản vẽ khác ??? Mà nếu thế thì đoạn "thì đối tượng được copy ra nằm trên phương (đường thẳng đi qua điểm gốc và điểm pick chọn hướng)" được hiểu làm sao đây ?! Căn cứ vào cái gì để nói nó nằm trên phương.. nếu đó là một tập chọn chẳng biết điểm chuẩn ở đâu ??? ....

Bạn có thể giải thích thêm + hình minh họa .....

:D :D :D

Hehe, đây các anh xem file em sẽ hiểu, văn chương em viết không hay lắm, các anh thông cảm! http://www.cadviet.c...422_cadviet.dwg


  • 0

#8 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 21 November 2015 - 10:27 AM

Vậy đối tượng copy của bạn chỉ là block (hoặc point ...) chứ ?

>>> để biết nó đang "nằm trên phương..." nếu bạn không gán điểm chuản cho tập chọn


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#9 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 21 November 2015 - 10:57 AM

Vậy đối tượng copy của bạn chỉ là block (hoặc point ...) chứ ?

>>> để biết nó đang "nằm trên phương..." nếu bạn không gán điểm chuản cho tập chọn

Hehe, cảm ơn anh nhé! anh nói em mói biết là thiếu sót, vậy chắc phải thêm 1 thao tác nữa là chọn điểm chuẩn cho đối tượng nữa á anh, thao tác sẽ là thế này: Lệnh CCO -> chọn tập đối tượng -> pick chọn điểm chuẩn -> pick chọn điểm gốc -> pick chọn hướng -> nhập các khoảng cách.

Vậy chắc oke rồi anh hen, giúp em nhé!


  • 0

#10 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 21 November 2015 - 01:10 PM

Hehe, cảm ơn anh nhé! anh nói em mói biết là thiếu sót, vậy chắc phải thêm 1 thao tác nữa là chọn điểm chuẩn cho đối tượng nữa á anh, thao tác sẽ là thế này: Lệnh CCO -> chọn tập đối tượng -> pick chọn điểm chuẩn -> pick chọn điểm gốc -> pick chọn hướng -> nhập các khoảng cách.

Vậy chắc oke rồi anh hen, giúp em nhé!

Ý tưởng của bạn tuy đơn giản nhưng có vẽ khác người đó :blink:


  • 0

#11 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 21 November 2015 - 01:13 PM

Lâu lâu vận động trí óc để tránh Bệnh Alzheimer’s :D :

(defun c:cco (/ oldos css ss p0 p1 p2 a e d)
(defun css (ss p0 p1 a)
((lambda (i / e obj o1 i) (while (setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object e)) (setq o1 (vla-copy obj)) 
(if p0 (vla-move o1 (vlax-3d-point p0) (vlax-3d-point p1)))
(vla-move o1 (vlax-3d-point p1) (vlax-3d-point (polar p1 a d))) )) -1) )
(princ "\n Chon doi tuong can copy") (setq ss (ssget) 
p0 (getpoint "\n Chon diem chuan")
p1 (getpoint p0 "\n Chon diem goc") 
p2 (getpoint p1 "\n Chon diem dinh huong copy") 
a (angle p1 p2) e (entlast))
(while (setq d (getdist "\n Nhap khoang cach can copy tiep theo: "))
(css ss p0 p1 a) (setq ss (ssadd))
(while (setq e (entnext e)) (setq ss (ssadd e ss))) 
(setq p0 nil e (entlast)) )
(princ))


  • 2

#12 taipham

taipham

    biết vẽ ellipse

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

Đã gửi 21 November 2015 - 01:49 PM

 

Lâu lâu vận động trí óc để tránh Bệnh Alzheimer’s :D :

(defun c:cco (/ oldos css ss p0 p1 p2 a e d)
(defun css (ss p0 p1 a)
((lambda (i / e obj o1 i) (while (setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object e)) (setq o1 (vla-copy obj)) 
(if p0 (vla-move o1 (vlax-3d-point p0) (vlax-3d-point p1)))
(vla-move o1 (vlax-3d-point p1) (vlax-3d-point (polar p1 a d))) )) -1) )
(princ "\n Chon doi tuong can copy") (setq ss (ssget) 
p0 (getpoint "\n Chon diem chuan")
p1 (getpoint p0 "\n Chon diem goc") 
p2 (getpoint p1 "\n Chon diem dinh huong copy") 
a (angle p1 p2) e (entlast))
(while (setq d (getdist "\n Nhap khoang cach can copy tiep theo: "))
(css ss p0 p1 a) (setq ss (ssadd))
(while (setq e (entnext e)) (setq ss (ssadd e ss))) 
(setq p0 nil e (entlast)) )
(princ))

Yeah, đúng ý rồi, cảm ơn anh,các anh và Cadviet


  • 0