tdvn 53 Báo cáo bài đăng Đã đăng Tháng 5 8, 2009 Mấy hôm nay cũng hơi bận nên ít vào diễn đàn với lại không nhớ trong đề tài này mình có viết lisp nên không trả lời cho các bạn. Thành thật xin lỗi. Vấn đề này các bạn cũng đã giải quyết đc rồi tuy nhiên mình cũng gởi đoạn lisp do mình viết để các bạn tham khảo. Đoạn này mặc định là text, nếu là mtext hay các thứ khác và muốn kiểm tra loại đối tượng thì phải viết thêm tí nữa (setq kt T) (initget 128) (while (and kt (setq p (getpoint "\nPick : "))) (cond ((listp p) (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n)))))) ) ((= (type p) 'STR) (setq kt nil)) (T (setq kt nil)) ) (initget 128) ) (princ) 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
amateurday 15 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 Mấy hôm nay cũng hơi bận nên ít vào diễn đàn với lại không nhớ trong đề tài này mình có viết lisp nên không trả lời cho các bạn. Thành thật xin lỗi. Vấn đề này các bạn cũng đã giải quyết đc rồi tuy nhiên mình cũng gởi đoạn lisp do mình viết để các bạn tham khảo. Đoạn này mặc định là text, nếu là mtext hay các thứ khác và muốn kiểm tra loại đối tượng thì phải viết thêm tí nữa (setq kt T) (initget 128) (while (and kt (setq p (getpoint "\nPick : "))) (cond ((listp p) (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n)))))) ) ((= (type p) 'STR) (setq kt nil)) (T (setq kt nil)) ) (initget 128) ) (princ) bác tdvn thật nhiệt tình, em thử rồi nên góp ý chút ít: -lisp của bác nataca hay ở chỗ khi mình pick điểm thì nó không hiện chữ pick ở đầu, điều này có lợi khi muốn copy sang excel. cái này hay. -lisp của bác nataca lại pick điểm khó trúng hơn của bác tdvn, có lẽ do 1 người dùng ô vuông, 1 người dùng chữ thập để pick điểm. cái này hay. -lisp của bác nataca khi pick trật thì xem như không pick (vì cad không thực hiện lệnh nào hết), cái này cũng hay. -file em up lên các bác xem thử, cùng là mtext mà sao pick 2 cái lại ra khác nhau http://www.cadviet.com/upfiles/Drawing_5.dwg 2 lisp của 2 bác mà kết hợp được như thế thì tiện nhiều lắm. thank các bác 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
tdvn 53 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 bác tdvn thật nhiệt tình, em thử rồi nên góp ý chút ít:-lisp của bác nataca hay ở chỗ khi mình pick điểm thì nó không hiện chữ pick ở đầu, điều này có lợi khi muốn copy sang excel. cái này hay. -lisp của bác nataca lại pick điểm khó trúng hơn của bác tdvn, có lẽ do 1 người dùng ô vuông, 1 người dùng chữ thập để pick điểm. cái này hay. -lisp của bác nataca khi pick trật thì xem như không pick (vì cad không thực hiện lệnh nào hết), cái này cũng hay. -file em up lên các bác xem thử, cùng là mtext mà sao pick 2 cái lại ra khác nhau http://www.cadviet.com/upfiles/Drawing_5.dwg 2 lisp của 2 bác mà kết hợp được như thế thì tiện nhiều lắm. thank các bác Muốn không hiện chữ Pick, bạn chỉ cần sửa (getpoint "\nPick : ") thành (getpoint) và chữ "princ" thành "print" trong đoạn (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n)))))) Tuy nhiên, muốn copy sang excel, có nhiều cách hay hơn như có bạn đã đề cậ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
amateurday 15 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 Muốn không hiện chữ Pick, bạn chỉ cần sửa (getpoint "\nPick : ") thành (getpoint)và chữ "princ" thành "print" trong đoạn (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n)))))) Tuy nhiên, muốn copy sang excel, có nhiều cách hay hơn như có bạn đã đề cập thế thì bây giờ nó lại thêm dấu "" nữa, có bỏ được không bác, với lại file em up lên, với 2 chuỗi 1:1.5 , vậy pick 2 chuỗi kết quả lại khác nhau, bác thử xem hộ em cái. em thì toàn dùng cách này để lấy ký tự qua excel thôi, em chưa biết cách nào khác, em thấy cái này cũng tiện rồi nên không tìm cách khác. 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
tdvn 53 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 thế thì bây giờ nó lại thêm dấu "" nữa, có bỏ được không bác, với lại file em up lên, với 2 chuỗi 1:1.5 , vậy pick 2 chuỗi kết quả lại khác nhau, bác thử xem hộ em cái. em thì toàn dùng cách này để lấy ký tự qua excel thôi, em chưa biết cách nào khác, em thấy cái này cũng tiện rồi nên không tìm cách khác. Muốn không có """" bạn thay thề đoạn (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n)))))) thành (if (setq n (nentselp p)) (princ (strcat "\n" (Cdr (assoc 1 (entget (car n))))))) Còn cách chuyển text qua file như bác là quá thủ công. Người ta có thể chuyển qua file dạng text một lúc tất cà các text bạn chọn, mỗi text trên một dòng hoặc muốn theo thứ tự như bác chọn từng đối tượng cũng đc nhưng viết lisp còn dễ hơn cái bác muốn hiện nay. Trên diễn đàn này đã có xử lý về vấn đề này rồi Mình đã xem cái file của bạn. Hai mtext của bạn là 2 chuỗi có dữ liệu khác nhau, bạn xem đoạn màu đỏ : Select object: ((-1 . <Entity name: 4007b410>) (0 . "MTEXT") (330 . <Entity name: 40079cf8>) (5 . "152") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMText") (10 24.501 24.0719 0.0) (40 . 10.0) (41 . 62.3505) (71 . 1) (72 . 5) (1 . "{\\H0.75x;1:1.5}") (7 . "Standard") (210 0.0 0.0 1.0) (11 0.824469 0.565908 0.0) (42 . 20.0) (43 . 10.0) (50 . 0.601534) (73 . 1) (44 . 1.0)) Select object: ((-1 . <Entity name: 4007b418>) (0 . "MTEXT") (330 . <Entity name: 40079cf8>) (5 . "153") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMText") (10 203.771 24.7784 0.0) (40 . 7.5) (41 . 62.3505) (71 . 3) (72 . 5) (1 . "1:1.5") (7 . "Standard") (210 0.0 0.0 1.0) (11 0.828738 -0.559637 0.0) (42 . 20.0) (43 . 7.5) (50 . 5.68924) (73 . 1) (44 . 1.0)) Bạn thấy lisp cho 2 kết quả khác nhau là đúng rồi vì thực tế hai mtext của bạn nó khác nhau. Việc hai đối tượng mtext có dữ liệu khác nhau nhưng nhìn thấy trên màn hình giống nhau thì mình không rõ lắm, vì công việc của mình không dùng mtext nên không hiểu sâu lắm. Có thể các bạn trên diễn đàn hiểu rõ về mtext sẽ trả lời cho bạ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
amateurday 15 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 Muốn không có """" bạn thay thề đoạn (if (setq n (nentselp p)) (princ (Cdr (assoc 1 (entget (car n))))))thành (if (setq n (nentselp p)) (princ (strcat "\n" (Cdr (assoc 1 (entget (car n))))))) Cái file của bạn mình chưa xem đc vì mình đang ở trên máy chỉ có cad2002 thôi. Khoảng hơn 11h thì mình sẽ xem cái file đó cho bác. Còn cách chuyển text qua file như bác là quá thủ công. Người ta có thể chuyển qua file dạng text một lúc tất cà các text bạn chọn, mỗi text trên một dòng hoặc muốn theo thứ tự như bác chọn từng đối tượng cũng đc nhưng viết lisp còn dễ hơn cái bác muốn hiện nay. Trên diễn đàn này đã có xử lý về vấn đề này rồi tại vì em mới biết lisp gần đây thôi, em cũng chưa học được nên phải làm thủ công thế. bác có thể chỉ cho em bài viết nào liên quan về vấn đề này không. cám ơn bác nhiều 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
tdvn 53 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 tại vì em mới biết lisp gần đây thôi, em cũng chưa học được nên phải làm thủ công thế. bác có thể chỉ cho em bài viết nào liên quan về vấn đề này không. cám ơn bác nhiều Mình vừa tìm đc đoạn code này. Có thể còn nhiều nữa. ;TEXTOUT.LSP By: Jeffery P. Sanders ;This program gets text from an AutoCAD drawing and writes it to a text file. ;define program - listing your variable names here ; resets them to nil after the program finishes (defun C:TEXTOUT(/ lts ernote filen fil eset en enlist cntr) ;turn echo off (setvar "cmdecho" 0) ;get ltscale (Note: ltscale should always equal dimscale) (setq lts(getvar "ltscale")) ;set the exit note to successful (setq ernote "\n....TextOut Complete.") ;use dialog box to set file name / the 1 allows ;the user to type in a new file name ;the "txt" sets the default to be "*.txt" (setq filen (getfiled "Type or Select Text File Name" "" "txt" 1) ) ;open file to write (if (setq fil(open filen "w")) ;progn necessary for multiple statements inside an if statement (progn ;if ssget returns a valid selection set (if (setq eset(ssget)) ;progn necessary for multiple statements inside an if statement (progn ;set the entity counter to zero [the first entity in a set is zero] (setq cntr 0) ;step through each entity in the selection set (while (< cntr (sslength eset)) ;get the entity name indexed by cntr (setq en(ssname eset cntr)) ;get the DXF group codes for the entity (setq enlist(entget en)) ;check the group code 0 to see if entity type = TEXT (if(= "TEXT" (cdr(assoc 0 enlist))) ;progn necessary for multiple statements inside an if statement (progn ;get the text string from the entity's DXF Group Code 1 (setq str(cdr(assoc 1 enlist))) ;print the string to the command line (princ (strcat "\nOutput To File: " str)) ;print the string to the file (princ (strcat "\n" str) fil) );close the if progn );close the if statement ;increment the counter to get the next entity (setq cntr(+ cntr 1)) );close the while loop ;close the text file (close fil) );close the if progn ;set the exit note as an error (setq ernote "\nError - No Entities Selected.") ); close the if statement );close the if progn ;set the exit note to be an error (setq ernote (strcat "\nError - Could not create File: " filen)) );close the if statement ;turn the command echo back on (setvar "cmdecho" 1) ;print the exit note to the command line (princ ernote) ;clear the command line (princ "\n ") ;supress last echo (princ) );close the program 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
amateurday 15 Báo cáo bài đăng Đã đăng Tháng 5 9, 2009 Mình vừa tìm đc đoạn code này. Có thể còn nhiều nữa. ;TEXTOUT.LSP By: Jeffery P. Sanders ;This program gets text from an AutoCAD drawing and writes it to a text file. ;define program - listing your variable names here ; resets them to nil after the program finishes (defun C:TEXTOUT(/ lts ernote filen fil eset en enlist cntr) ;turn echo off (setvar "cmdecho" 0) ;get ltscale (Note: ltscale should always equal dimscale) (setq lts(getvar "ltscale")) ;set the exit note to successful (setq ernote "\n....TextOut Complete.") ;use dialog box to set file name / the 1 allows ;the user to type in a new file name ;the "txt" sets the default to be "*.txt" (setq filen (getfiled "Type or Select Text File Name" "" "txt" 1) ) ;open file to write (if (setq fil(open filen "w")) ;progn necessary for multiple statements inside an if statement (progn ;if ssget returns a valid selection set (if (setq eset(ssget)) ;progn necessary for multiple statements inside an if statement (progn ;set the entity counter to zero [the first entity in a set is zero] (setq cntr 0) ;step through each entity in the selection set (while (< cntr (sslength eset)) ;get the entity name indexed by cntr (setq en(ssname eset cntr)) ;get the DXF group codes for the entity (setq enlist(entget en)) ;check the group code 0 to see if entity type = TEXT (if(= "TEXT" (cdr(assoc 0 enlist))) ;progn necessary for multiple statements inside an if statement (progn ;get the text string from the entity's DXF Group Code 1 (setq str(cdr(assoc 1 enlist))) ;print the string to the command line (princ (strcat "\nOutput To File: " str)) ;print the string to the file (princ (strcat "\n" str) fil) );close the if progn );close the if statement ;increment the counter to get the next entity (setq cntr(+ cntr 1)) );close the while loop ;close the text file (close fil) );close the if progn ;set the exit note as an error (setq ernote "\nError - No Entities Selected.") ); close the if statement );close the if progn ;set the exit note to be an error (setq ernote (strcat "\nError - Could not create File: " filen)) );close the if statement ;turn the command echo back on (setvar "cmdecho" 1) ;print the exit note to the command line (princ ernote) ;clear the command line (princ "\n ") ;supress last echo (princ) );close the program cái này hay thật bác à. chọn rất nhanh. thank bác. bác còn cái nào up lên nữa 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