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  
amateurday

đối tượng + command line

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

tdvn    53

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)

  • 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
amateurday    4
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á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    4
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
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    4
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
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

  • 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
amateurday    4
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

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  

×