Đến nội dung


Hình ảnh
- - - - -

Giúp tạo List copy nội dung text (khi nhấp chuột vào text1, text2 thì text1 chuyển thành text 2)!


  • Please log in to reply
10 replies to this topic

#1 lark

lark

    biết pan

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

Đã gửi 23 October 2010 - 10:30 PM

Các bạn có thể giúp mình tạo 1 lisp dùng để sửa text như thế này được không:
Ví dụ mình có các đối tượng text là:

Text1 Text2
Text3 Text4
…… ……

Giờ mình muốn khi dùng chuột chọn lần lượt từ: text1, text3, ….. rồi đến text2, text4, ….
Kết quả nhận được sẽ là:

Text2 Text2
Text4 Text4
……. …….

Tức là copy text2 sang text1, text4 sang text3, …. Các text sẽ được copy theo từng cặp như thế. (dĩ nhiên không dùng được lệnh copy vì khoảng cách các hàng của 2 cột text không đồng nhất).
Rất mong được các bạn giúp đỡ 
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 October 2010 - 11:26 PM

LISP bạn ạ
Mỗi lần thực hiện lệnh với 1 cặp được không bạn ^^.Vì yêu cầu của bạn phải biết các hàm về cấu trúc list,mà mình chưa mót đuợc đến đấy :lol:
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 24 October 2010 - 02:15 PM

Bạn thử cái này nhé:

(defun c:tt(/ ltt i text2 el el2 text str)
(setq ltt '()
i 0
text2 nil)

(while (and (setq textthay (car(entsel"\nChon text lay noi dung: "))) (/= textthay ""))
(setq el (entget textthay)
str (cdr (assoc 1 el)))
(setq ltt (append ltt (list str)))
(princ str)
)
(reverse ltt)
(princ ltt)
(while (= text2 nil)
(setq  text2 (car(entsel"\nChon text thay: "))
el2 (entget text2)
stt (nth i ltt);lay stt
);setq
( moddxf 1 stt text2)
(setq text2 nil)
(setq i (1+ i))
)
(princ)
)
(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))

  • 2

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#4 lark

lark

    biết pan

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

Đã gửi 24 October 2010 - 03:24 PM

Thanks bạn nguyentuyen6 nhiều nhé!
Lisp của bạn đã giải quyết được vấn đề thật nhanh chóng, chỉ có điều cấu trúc lệnh ngược lại với yêu cầu mình đưa ra, nhưng không vấn đề gì cả. :lol:

Thêm nữa có chút thắc mắc hỏi bạn, tại sao khi kết thúc câu lệnh thì mặc dù đã copy xong, mọi thứ đã ok, trên dòng command vấn báo error:

Lỗi khi thừa đối tượng copy:
error: bad DXF group: (1)

Lỗi khi enter kết thúc câu lệnh:
error: bad argument type: lentityp nil

Bạn có thể cho thêm lệnh: khi đã copy theo cặp xong thì tự động thoát lệnh; hoặc khi đối tượng đích nhiều hơn đối tượng nguồn thì có thông báo là 'đã copy đủ cặp, đối tượng đích bạn định copy không có nguồn, chọn lại nguồn cho đối tượng này' đại loại thế và thoát lệnh.

(hi, hơi tham lam, mình muốn thêm 1 yêu cầu nữa là: bạn cho thêm dòng báo đếm tổng số đối tượng nguồn sau khi đã chọn hết nguồn, và sau khi copy sang đích thì có dòng báo đã có bao nhiêu đối tượng đích được thay thế, như thế sẽ kiểm soát được là mình đã chọn đúng số lượng đích và nguồn chưa :lol: )

hi, rất thanks bạn nguyentuyen6 nhé!
  • 0

#5 lark

lark

    biết pan

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

Đã gửi 24 October 2010 - 03:32 PM

Mỗi lần thực hiện lệnh với 1 cặp được không bạn ^^.Vì yêu cầu của bạn phải biết các hàm về cấu trúc list,mà mình chưa mót đuợc đến đấy :lol:



thansk bạn đã quan tâm, Lisp copy cho từng cặp một mình cũng biết sơ qua, căn bản là nó thủ công quá, mình cứ phải nhấp tay rồi đảo qua đảo lại rất nhiều lần thành ra mới nhờ cao thủ giúp đỡ làm theo từng cột! :lol:

hi, thansk bạn nhé!
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 October 2010 - 03:39 PM

......
Bạn có thể cho thêm lệnh: khi đã copy theo cặp xong thì tự động thoát lệnh; hoặc khi đối tượng đích nhiều hơn đối tượng nguồn thì có thông báo là 'đã copy đủ cặp, đối tượng đích bạn định copy không có nguồn, chọn lại nguồn cho đối tượng này' đại loại thế và thoát lệnh.

Bạn có thể thay dòng :
(while (= text2 nil)
.....
thành dòng :
(Repeat (length ltt)
.....
  • 2

#7 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 24 October 2010 - 04:23 PM

Bạn thử lại cái này nhé. hì
(defun c:tt(/ ltt i text2 el el2 text str str2 n)
(setq ltt '()
i 0
n 0
text2 nil)
(while (and (setq textthay (car(entsel"\nChon text lay noi dung:"))) (/= textthay ""))
(setq el (entget textthay)
str (cdr (assoc 1 el)))
(setq ltt (append ltt (list str)))
(princ str)
(setq n (1+ n))
)
(reverse ltt)
(princ ltt)
(princ (strcat "\nSo doi tuong nguon la: " (rtos n 2 0) " "))
(while (and (= text2 nil) (> n i))
(setq text2 (car(entsel"\nChon text thay:"))
stt (nth i ltt);lay stt
);setq
( moddxf 1 stt text2)
(setq text2 nil)
(setq i (1+ i))
(princ (strcat "\nBan da chon: "(rtos i 2 0) "/"(rtos n 2 0)" "))
)
(while (= n i)
(alert "\n Het nguon ")
(setq n nil
)
)
(princ)
)
(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))


Làm ngược là vì mình thấy viết sẽ phức tạp hơn bạn ạ, nên đành phải như thế này, bạn thông cảm nhé!!
p/s: mình vừa thêm mấy cái thông báo theo ý của bạn.
  • 2

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#8 lark

lark

    biết pan

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

Đã gửi 24 October 2010 - 09:27 PM

Làm ngược là vì mình thấy viết sẽ phức tạp hơn bạn ạ, nên đành phải như thế này, bạn thông cảm nhé!!
p/s: mình vừa thêm mấy cái thông báo theo ý của bạn.



Thanks nguyentuyen6 đã rất nhiệt tình, chúc bạn có một tuần mới nhiều may mắn nhé! :lol:
  • 1

#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 30 October 2010 - 11:10 AM

Bạn thử lại cái này nhé. hì

(defun c:tt(/ ltt i text2 el el2 text str str2 n)
(setq ltt '()
i 0
n 0
text2 nil)
(while (and (setq textthay (car(entsel"\nChon text lay noi dung:"))) (/= textthay ""))
(setq el (entget textthay)
str (cdr (assoc 1 el)))
(setq ltt (append ltt (list str)))
(princ str)
(setq n (1+ n))
)
(reverse ltt)
(princ ltt)
(princ (strcat "\nSo doi tuong nguon la: " (rtos n 2 0) " "))
(while (and (= text2 nil) (> n i))
(setq text2 (car(entsel"\nChon text thay:"))
stt (nth i ltt);lay stt
);setq
( moddxf 1 stt text2)
(setq text2 nil)
(setq i (1+ i))
(princ (strcat "\nBan da chon: "(rtos i 2 0) "/"(rtos n 2 0)" "))
)
(while (= n i)
(alert "\n Het nguon ")
(setq n nil
)
)
(princ)
)
(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))


Làm ngược là vì mình thấy viết sẽ phức tạp hơn bạn ạ, nên đành phải như thế này, bạn thông cảm nhé!!
p/s: mình vừa thêm mấy cái thông báo theo ý của bạn.

Cái của bạn khá hay nhưng nếu xử lý theo cách chọn chuỗi là ok ???
Thân !
  • 0

#10 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 30 October 2010 - 11:27 AM

Cái của bạn khá hay nhưng nếu xử lý theo cách chọn chuỗi là ok ???
Thân !

MÌnh không hiểu ý bạn hỏi lắm !!!!!
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#11 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 30 October 2010 - 12:17 PM

MÌnh không hiểu ý bạn hỏi lắm !!!!!

Xin lỗi bạn, do text nham , m thử lại oki.
Một chút góp ý: Nếu thay chọn từng text bằng chọn tất cả các text thì hay hơn ?( số đối tượng nguồn không đối nghĩa là: click chọn n text riêng và quét chọn n text thì số đối tượng nguồn đều là n)
Cám ơn nhiều !
Thân !
  • 0