Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
lark

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)!

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

lark    0

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 đỡ 

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
ketxu    2.652

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:

  • 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
nguyentuyen6    127

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))))

  • Vote tăng 2

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
lark    0

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é!

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
lark    0
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é!

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
Tue_NV    3.841
......

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)

.....

  • Vote tăng 2

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
nguyentuyen6    127

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.

  • Vote tăng 2

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
lark    0
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:

  • 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
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 !

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Ì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 !

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  

×