Chuyển đến nội dung
Diễn đàn CADViet
interwar1283

Đánh số thứ tự tăng dần

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

Lệnh CO.

 

Command: co

 

Copy Inteligent...

 

Select objects:

Bác ơi cho em hỏi : em đánh lệnh CO mà sao nó cũng giống như lệnh copy th6ng thường trong cad àh (command:CO -->select objects <_< thiếu dòng chữ copy inteligent ) . Bác giúp em với ! em mới biết sử dụng lisp àh !

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ác ơi cho em hỏi : em đánh lệnh CO mà sao nó cũng giống như lệnh copy th6ng thường trong cad àh (command:CO -->select objects <_< thiếu dòng chữ copy inteligent ) . Bác giúp em với ! em mới biết sử dụng lisp àh !

Nếu vậy, bạn có thể dùng 1 trong 2 cách sau để chạy lệnh:

1/ Vào menu Express -> Tools -> Command Alias Editor..; sửa phím tắt CO được gán cho copy thông thường bằng 1 phím tắt nào đó bạn thích (Các phím tắt bạn qui định nằm trong tập tin acad.pgp)

2/ Trong đoạn code của Lisp trên bạn thay từ CO bằng 1 từ nào đó. Sau đó load lên chạy lại lệ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

lisp rất tuyệt nhưng tại sao ko cho thêm 1 tùy chọn là tăng thêm bao nhiu đơn vị giống như tcount vậy?

nếu thêm đươc thì mình thấy rất hay. thay thế dc cho cả tcount và cao cấp hơn tcount

:bigsmile:

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
Ví dụ bạn muốn đánh số thứ tự (cầu thang, hay trục, hay số thứ tự một bảng nào đấy...). Bạn đang có số giá trị bất kỳ (giả sử là số 2) chẳng hạn, bạn aploap lisp đó, rồi đánh lệnh CO, chọn số đầu tiên muốn copy (số 2), thì bạn copy sang vị trí mới sẽ được số 3, cứ mỗi lần pick sang vị trí tiếp theo là tăng 1 đơn vị. Với các text là chữ cái thì tăng theo thứ tự trong bảng chữ cái (A, B, C...).

Sao em làm theo mà ko được nhỉ- trình độ còn kém quá- Phiền Bác giúp vậy!

Có phải là mình copy đoạn lisp vô dòng lệnh luôn ko Bác.

Cảm ơn Bác nha!

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
Sao em làm theo mà ko được nhỉ- trình độ còn kém quá- Phiền Bác giúp vậy!

Có phải là mình copy đoạn lisp vô dòng lệnh luôn ko Bác.

Cảm ơn Bác nha!

Bạn xem ở đây: http://www.cadviet.com/sub/tips/showtip.php?t=14

  • 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
Ví dụ bạn muốn đánh số thứ tự (cầu thang, hay trục, hay số thứ tự một bảng nào đấy...). Bạn đang có số giá trị bất kỳ (giả sử là số 2) chẳng hạn, bạn aploap lisp đó, rồi đánh lệnh CO, chọn số đầu tiên muốn copy (số 2), thì bạn copy sang vị trí mới sẽ được số 3, cứ mỗi lần pick sang vị trí tiếp theo là tăng 1 đơn vị. Với các text là chữ cái thì tăng theo thứ tự trong bảng chữ cái (A, B, C...).

Ok.thanks you,tuyệt cú mèo.Cảm ơn ai đã sinh ra lips trong thời đại cntt

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
Lệnh copy thông minh:

Command: co

mình dùng thấy thú vị hơn lệnh Tcount, tuy nhiên mỗi cái có điểm hay riêng.

;;;Edit by Interwar1283
;*********************************************************************
(defun ketthuc ()
(setvar	"cmdecho"	luuecho)
(setq *error*	luu
	luu		nil	
	luuecho	nil
);setq
(princ)
)		
;*********************************************************************
(defun modau ()
(setq 	luu *error
	luuecho	(getvar	"cmdecho")
	*error	(ketthuc)
)
)
;*********************************************************************
(defun xulytext (text / kytu ma sokt luusokt lui )
(setq 	kytu	(substr text (strlen text))
	ma	(ascii kytu)
	sokt	(read kytu) 
	lui	1
)
(if (numberp sokt)
	(progn
		(setq luusokt	(1+ sokt))
		(if (and 	(numberp sokt) 
				(> (strlen text) 1)
		    )	
		   (progn
			(setq 	kytu	(substr text (1- (strlen text)))
					sokt	(read kytu) 
									)
			(if 	(numberp sokt) 
				(setq luusokt (1+	sokt)
						lui 	2

					)
			)
		    );progn	
		)
		(if (= luusokt	100)	(setq 	luusokt	0))
		(setq 	kytu		(rtos luusokt 2 0)

				text	(strcat	(substr text 1 (- (strlen text) lui))  kytu)
		)
	);progn			 
	(if   (or 	(= kytu "z")
			(= kytu "Z")
		)
		(setq 	text		(strcat 	text	"0")
			textxl		"0"
		)
		(setq		ma	(1+	ma)
				text	(strcat	(substr text 1 (1- (strlen text)))  (chr ma))
		)
	);if
);if
)
;*********************************************************************
(defun doitext(tendoituong / chuoi doituong thoat tam dsach kieu text vitri10 vitri11 dem canle)
;Neu doi tuong la text thi tiep tuc
(setq 	doituong 	(entget  tendoituong)
kieu		(cdr (assoc 	0	doituong))
canle		(cdr (assoc 	72	doituong))
)	
(if (or (= kieu		"TEXT")
(= kieu 	"MTEXT")	
   ) 	
(progn
	(setq	textxl	(xulytext textxl)
		text	(cons 1 textxl)
		vitri10 	(cdr (assoc 10 doituong))
		vitri10 	(list (+ (car vitri10) (car vitrilech)) (+ (nth 1 vitri10) (nth 1 vitrilech)))
		vitri10		(cons 10 vitri10)
		vitri11 	(cdr (assoc 11 doituong))
		vitri11 	(list (+ (car vitri11) (car vitrilech)) (+ (nth 1 vitri11) (nth 1 vitrilech)))
		vitri11		(cons 11 vitri11)
		dem	0
		dsach	nil
	)
	(foreach tam 	doituong
		(cond
			((= (car tam)	1)	(setq dsach 	(append dsach (list text))))
			((= (car tam)	10)	(setq dsach 	(append dsach (list vitri10))))
			((= (car tam)	11)	(setq dsach 	(append dsach (list vitri11))))
			((setq dsach 	(append dsach (list tam))))
		)
	)
	(entmake dsach)
);progn
);if
);
;*********************************************************************
;sao doi tuong cu sang vi tri moi

(defun copy_dt (tendoituong )
(command "copy" tendoituong "" goc toi )
);defun

;*********************************************************************
(defun c:co ( / cumdt dodai thoat dem ten doituong textxl dem goc toi)
; Khoi dau cua chuong trinh
(princ "\nCopy Inteligent...\n")
(setq 	luuecho	(getvar	"cmdecho")
luu	*error*
*error*	ketthuc
cumdt 	(ssget)
dodai 	(sslength cumdt)
goc		(getpoint "\nSelect base point:")
thoat		nil
dem		0
textxl		nil
);
(setvar "cmdecho" 0)
; Loc ra duoc ong text de xu ly
(while	(and 	(= thoat	nil)
	(< dem	dodai)
)
(setq 	ten	(ssname cumdt dem)
	dem	(1+ 	dem)
	doituong (entget ten)
	kieu	 (cdr (assoc 	0	doituong))			
)

(if (or (= kieu		"TEXT")
	(= kieu 	"MTEXT")	
   	    )
	(setq 	thoat	T
		textxl 	(cdr (assoc 1 doituong)) 	
	)
)
);
(while T 
(setq	toi		(getpoint "\nSelect next point: " goc)
vitrilech 	(list 	(- (car toi) (car goc)) (- (nth 1 toi) (nth 1 goc)))
dem		0
)
(while	(< dem dodai)
(setq 	ten	(ssname cumdt dem)
	dem	(1+ 	dem)
	doituong (entget ten)
	kieu	 (cdr (assoc 	0	doituong))			
)

(if (or (= kieu		"TEXT")
	(= kieu 	"MTEXT")	
   	    )
	(doitext	ten)
	(copy_dt	ten)

);if
)
);while
(ketthuc)
);defun
(princ "Type \"DG\" to start")
;Note: bien toan cuc: textxl vitrilech

Tại sao khi em sử dụng lisp này của bác lại ko đc,nó lại ra như trong anh nay vậy.bác sử gíp e đc ko? http://www.cadviet.com/upfiles/1_6.bmp

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
lấy cái copy tăng dần mà mình vừa up hôm nay i'

 

Cái lệnh copy tăng dân cua Oizdoioi, chi là số ko thì đc, chứ text chứa cả số và chữ thì ko dc. Ví như D1 copy thì ko thành D2, nhưng của Mr interewar thì dc vì có hàm xulitext.

Tôi cũng đã thử sủa đoạn

...

(if (= luusokt 100) (setq luusokt 0))

(setq kytu (rtos luusokt 2 0)

....

 

Thay luusokt> 100 thì chỉ giải quyết đc để 99 -> 100 chứ ko fải 99 ->0 ....

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 dùng thử chương trình sau. Có 2 lệnh:

1) Lệnh OD: Ordinate number with any format. Đánh số thứ tự với bất kỳ định dạng nào: số, chữ, chữ và số. Ví dụ:

Command: od

Begin at <1>: HTT-01-03. Nếu không nhập số, bấm Enter sẽ mặc định từ 1

Increment <1>: 3. Nếu không nhập số, bấm Enter sẽ lấy mặc định là 1

Base point <exit>: chỉ điểm -> HTT-01-03

Base point <exit>: chỉ điểm -> HTT-01-06

Base point <exit>: chỉ điểm -> HTT-01-09

.........

Đến khi... chán thì:

Base point <exit>: Enter -> Thoát

 

2) Lệnh OC: Ordinate number, Copy from template. Đánh số thứ tự bằng cách copy mẫu có sẵn. Hoạt động giống như trên, nhưng thay vì "Begin at" thì chọn một mẫu có sẵn và 1 điểm tham chiếu làm chuẩn (tương tự như trình của bạn Lê Huy Hà nhưng có thêm tính năng tùy chọn Increment theo ý bạn).

Các bạn dùng nếu thấy có gì bất ổn thì phản hồi để mình sửa.

 

;;;------------------------------------------------------------------------------------
(defun getTw() ;;;Get textstyle
(cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))
)
;;;------------------------------------------------------------------------------------
(defun getTh( / Th) ;;;Get textheight or textsize
(if (= (setq Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0) (getvar "textsize") Th)
)
;;;------------------------------------------------------------------------------------
(defun emkT (S p) ;;;Entmake text S at p
(entmake (list (cons 0 "TEXT") (cons 10 p) (cons 40 (getTh))
    (cons 41 (getTw)) (cons 1 S) (cons 7 (getvar "textstyle"))))
)
;;;------------------------------------------------------------------------------------
(defun incN (n dn / n2 i n1) ;;;Increase number n
(setq
   n2 (itoa (+ dn (atoi n)))
   i (- (strlen n) (strlen n2))
)
(if (> i 0) (setq n1 (substr n 1 i)) (setq n1 ""))
(strcat n1 n2)
)
;;;------------------------------------------------------------------------------------
(defun incC (c / i c1 c2) ;;;Increase character c
(setq
   i (strlen c)
   c1 (substr c 1 (- i 1))
   c2 (chr (1+ (ascii (substr c i 1))))
)
(if (or (= c2 "{") (= c2 "["))
   (progn (command "erase" (entlast) "") (alert "Over character!") (exit))
   (strcat c1 c2)
)
)
;;;==============================================
(defun C:OD( / cn dn c n p) ;;;Make OrDinal number with any format
(setq
   cn (getstring "\nBegin at <1>: " T)
   dn (getint "\nIncrement <1>: ")
)
(if (not dn) (setq dn 1))
(if (= cn "") (setq cn "1"))
(setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn))
(setq n (vl-string-subst "" c cn))
(if (/= n "") (setq mode 1) (setq mode 0))
(while (setq p (getpoint "\nBase point <exit>: "))
   (emkT cn p)
   (if (= n "") 
       (setq cn (incC cn))
       (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))        
   )
)
(princ)
)
;;;==============================================
(defun C:OC( / e dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from template
(setq
   e (car (entsel "\nSelect template text:"))
   dn (getint "\nIncrement <1>: ")
   p1 (getpoint "\nBase point:")
   cn (cdr (assoc 1 (entget e)))
)
(if (not dn) (setq dn 1))
(if (= cn "") (setq cn "1"))
(setq
   c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)
   n (vl-string-subst "" c cn)
)
(while (setq p2 (getpoint p1 "\nNew point <exit>: "))
   (command "copy" e "" p1 p2)
   (if (= n "") 
       (setq cn (incC cn))
       (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))        
   )
   (setq
       dat (entget (entlast))
       dat (subst (cons 1 cn) (assoc 1 dat) dat)
   )
   (entmod dat)    
)
(princ)
)
;;;==============================================

 

Qúa tuyệt với. Mình thường xuyên phải đánh số thứ tự trong cad. Cảm ơn bạn rát nhiều 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

Mình thấy bài viết của bạn rất hay, minh cung da biết về lênh này nhưng chưa biết cách sử dụng ntn, mình đã copy lệnh của bạn về nhưng khi load về máy, dánh lệnh co, máy ko hiện lên dòng lệnh inteligent. chi guip minh cách để có thể sử dung được lệnh này. cảm ơn bạn rất rất 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

Xin chào các bác!

Em đang làm cái hồ sơ tính toán khối lượng đào đất để thanh quyết toán. Nhưng khối lượng nhập các thông số vào autocad thì rất nhiều, mỗi lần cứ phải nhập vào một thông số của khối lượng. Như vậy sẽ là thật mất công một khi nó có sự sửa đổi.

Nay kô biết có lisp nào có thể làm được chức năng: chọn tất cả text một lần, rồi nhập lệnh vào là tự động nó cộng (hoặc trừ) vào text cũ để hiển thị ra kết quả mới! Được như vậy thì sẽ đỡ mất thời gian rất nhiều cho việc nhập kết quả tính này.

Rất mong các bác hỗ trợ giúp!

Thank!

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

Xin chào các bác!

Em đang làm cái hồ sơ tính toán khối lượng đào đất để thanh quyết toán. Nhưng khối lượng nhập các thông số vào autocad thì rất nhiều, mỗi lần cứ phải nhập vào một thông số của khối lượng. Như vậy sẽ là thật mất công một khi nó có sự sửa đổi.

Nay kô biết có lisp nào có thể làm được chức năng: chọn tất cả text một lần, rồi nhập lệnh vào là tự động nó cộng (hoặc trừ) vào text cũ để hiển thị ra kết quả mới! Được như vậy thì sẽ đỡ mất thời gian rất nhiều cho việc nhập kết quả tính này.

Rất mong các bác hỗ trợ giúp!

Thank!

Cái này bác sang bên topic viết lisp theo yêu cầu để hỏi nhé. Vì chủ đề này là đánh số thứ tự nên sợ ít người quan tâm đến câu hỏi của 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
Lệnh copy thông minh:

Command: co

mình dùng thấy thú vị hơn lệnh Tcount, tuy nhiên mỗi cái có điểm hay riêng.

 

lệnh này của bạn sao mà chạy đến 100 là lại về 0. Bác nào sửa lại giúp em với

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
Lệnh copy thông minh:

Command: co

mình dùng thấy thú vị hơn lệnh Tcount, tuy nhiên mỗi cái có điểm hay riêng.

;;;Edit by Interwar1283
;*********************************************************************
(defun ketthuc ()
(setvar	"cmdecho"	luuecho)
(setq *error*	luu
	luu		nil	
	luuecho	nil
);setq
(princ)
)		
;*********************************************************************
(defun modau ()
(setq 	luu *error
	luuecho	(getvar	"cmdecho")
	*error	(ketthuc)
)
)
;*********************************************************************
(defun xulytext (text / kytu ma sokt luusokt lui )
(setq 	kytu	(substr text (strlen text))
	ma	(ascii kytu)
	sokt	(read kytu) 
	lui	1
)
(if (numberp sokt)
	(progn
		(setq luusokt	(1+ sokt))
		(if (and 	(numberp sokt) 
				(> (strlen text) 1)
		    )	
		   (progn
			(setq 	kytu	(substr text (1- (strlen text)))
					sokt	(read kytu) 
									)
			(if 	(numberp sokt) 
				(setq luusokt (1+	sokt)
						lui 	2

					)
			)
		    );progn	
		)
		(if (= luusokt	100)	(setq 	luusokt	0))
		(setq 	kytu		(rtos luusokt 2 0)

				text	(strcat	(substr text 1 (- (strlen text) lui))  kytu)
		)
	);progn			 
	(if   (or 	(= kytu "z")
			(= kytu "Z")
		)
		(setq 	text		(strcat 	text	"0")
			textxl		"0"
		)
		(setq		ma	(1+	ma)
				text	(strcat	(substr text 1 (1- (strlen text)))  (chr ma))
		)
	);if
);if
)
;*********************************************************************
(defun doitext(tendoituong / chuoi doituong thoat tam dsach kieu text vitri10 vitri11 dem canle)
;Neu doi tuong la text thi tiep tuc
(setq 	doituong 	(entget  tendoituong)
kieu		(cdr (assoc 	0	doituong))
canle		(cdr (assoc 	72	doituong))
)	
(if (or (= kieu		"TEXT")
(= kieu 	"MTEXT")	
   ) 	
(progn
	(setq	textxl	(xulytext textxl)
		text	(cons 1 textxl)
		vitri10 	(cdr (assoc 10 doituong))
		vitri10 	(list (+ (car vitri10) (car vitrilech)) (+ (nth 1 vitri10) (nth 1 vitrilech)))
		vitri10		(cons 10 vitri10)
		vitri11 	(cdr (assoc 11 doituong))
		vitri11 	(list (+ (car vitri11) (car vitrilech)) (+ (nth 1 vitri11) (nth 1 vitrilech)))
		vitri11		(cons 11 vitri11)
		dem	0
		dsach	nil
	)
	(foreach tam 	doituong
		(cond
			((= (car tam)	1)	(setq dsach 	(append dsach (list text))))
			((= (car tam)	10)	(setq dsach 	(append dsach (list vitri10))))
			((= (car tam)	11)	(setq dsach 	(append dsach (list vitri11))))
			((setq dsach 	(append dsach (list tam))))
		)
	)
	(entmake dsach)
);progn
);if
);
;*********************************************************************
;sao doi tuong cu sang vi tri moi

(defun copy_dt (tendoituong )
(command "copy" tendoituong "" goc toi )
);defun

;*********************************************************************
(defun c:co ( / cumdt dodai thoat dem ten doituong textxl dem goc toi)
; Khoi dau cua chuong trinh
(princ "\nCopy Inteligent...\n")
(setq 	luuecho	(getvar	"cmdecho")
luu	*error*
*error*	ketthuc
cumdt 	(ssget)
dodai 	(sslength cumdt)
goc		(getpoint "\nSelect base point:")
thoat		nil
dem		0
textxl		nil
);
(setvar "cmdecho" 0)
; Loc ra duoc ong text de xu ly
(while	(and 	(= thoat	nil)
	(< dem	dodai)
)
(setq 	ten	(ssname cumdt dem)
	dem	(1+ 	dem)
	doituong (entget ten)
	kieu	 (cdr (assoc 	0	doituong))			
)

(if (or (= kieu		"TEXT")
	(= kieu 	"MTEXT")	
   	    )
	(setq 	thoat	T
		textxl 	(cdr (assoc 1 doituong)) 	
	)
)
);
(while T 
(setq	toi		(getpoint "\nSelect next point: " goc)
vitrilech 	(list 	(- (car toi) (car goc)) (- (nth 1 toi) (nth 1 goc)))
dem		0
)
(while	(< dem dodai)
(setq 	ten	(ssname cumdt dem)
	dem	(1+ 	dem)
	doituong (entget ten)
	kieu	 (cdr (assoc 	0	doituong))			
)

(if (or (= kieu		"TEXT")
	(= kieu 	"MTEXT")	
   	    )
	(doitext	ten)
	(copy_dt	ten)

);if
)
);while
(ketthuc)
);defun
(princ "Type \"DG\" to start")
;Note: bien toan cuc: textxl vitrilech

bạn ơi cho mình hỏi. sao mình coppy toàn bộ phần trong code về rùi save lsp rùi cũng load lên rùi mà sao gỏ co nó chẳng hiện ra cái gì cả.

mình chẳng biết vì sao nữa. giúp mình với.

Thanks...

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

:lol2:

Bạn dùng thử chương trình sau. Có 2 lệnh:

1) Lệnh OD: Ordinate number with any format. Đánh số thứ tự với bất kỳ định dạng nào: số, chữ, chữ và số. Ví dụ:

Command: od

Begin at <1>: HTT-01-03. Nếu không nhập số, bấm Enter sẽ mặc định từ 1

Increment <1>: 3. Nếu không nhập số, bấm Enter sẽ lấy mặc định là 1

Base point <exit>: chỉ điểm -> HTT-01-03

Base point <exit>: chỉ điểm -> HTT-01-06

Base point <exit>: chỉ điểm -> HTT-01-09

.........

Đến khi... chán thì:

Base point <exit>: Enter -> Thoát

 

2) Lệnh OC: Ordinate number, Copy from template. Đánh số thứ tự bằng cách copy mẫu có sẵn. Hoạt động giống như trên, nhưng thay vì "Begin at" thì chọn một mẫu có sẵn và 1 điểm tham chiếu làm chuẩn (tương tự như trình của bạn Lê Huy Hà nhưng có thêm tính năng tùy chọn Increment theo ý bạn).

Các bạn dùng nếu thấy có gì bất ổn thì phản hồi để mình sửa.

 

;;;------------------------------------------------------------------------------------
(defun getTw() ;;;Get textstyle
(cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))
)
;;;------------------------------------------------------------------------------------
(defun getTh( / Th) ;;;Get textheight or textsize
(if (= (setq Th (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0) (getvar "textsize") Th)
)
;;;------------------------------------------------------------------------------------
(defun emkT (S p) ;;;Entmake text S at p
(entmake (list (cons 0 "TEXT") (cons 10 p) (cons 40 (getTh))
    (cons 41 (getTw)) (cons 1 S) (cons 7 (getvar "textstyle"))))
)
;;;------------------------------------------------------------------------------------
(defun incN (n dn / n2 i n1) ;;;Increase number n
(setq
   n2 (itoa (+ dn (atoi n)))
   i (- (strlen n) (strlen n2))
)
(if (> i 0) (setq n1 (substr n 1 i)) (setq n1 ""))
(strcat n1 n2)
)
;;;------------------------------------------------------------------------------------
(defun incC (c / i c1 c2) ;;;Increase character c
(setq
   i (strlen c)
   c1 (substr c 1 (- i 1))
   c2 (chr (1+ (ascii (substr c i 1))))
)
(if (or (= c2 "{") (= c2 "["))
   (progn (command "erase" (entlast) "") (alert "Over character!") (exit))
   (strcat c1 c2)
)
)
;;;==============================================
(defun C:OD( / cn dn c n p) ;;;Make OrDinal number with any format
(setq
   cn (getstring "\nBegin at <1>: " T)
   dn (getint "\nIncrement <1>: ")
)
(if (not dn) (setq dn 1))
(if (= cn "") (setq cn "1"))
(setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn))
(setq n (vl-string-subst "" c cn))
(if (/= n "") (setq mode 1) (setq mode 0))
(while (setq p (getpoint "\nBase point <exit>: "))
   (emkT cn p)
   (if (= n "") 
       (setq cn (incC cn))
       (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))        
   )
)
(princ)
)
;;;==============================================
(defun C:OC( / e dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from template
(setq
   e (car (entsel "\nSelect template text:"))
   dn (getint "\nIncrement <1>: ")
   p1 (getpoint "\nBase point:")
   cn (cdr (assoc 1 (entget e)))
)
(if (not dn) (setq dn 1))
(if (= cn "") (setq cn "1"))
(setq
   c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)
   n (vl-string-subst "" c cn)
)
(while (setq p2 (getpoint p1 "\nNew point <exit>: "))
   (command "copy" e "" p1 p2)
   (if (= n "") 
       (setq cn (incC cn))
       (setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))        
   )
   (setq
       dat (entget (entlast))
       dat (subst (cons 1 cn) (assoc 1 dat) dat)
   )
   (entmod dat)    
)
(princ)
)
;;;==============================================

Nếu dùng lệnh OD của bạn mà copy cho mình cái này được kô " Bản vẽ số n/1200" với n chạy từ 1 đến 1200. Hoặc bạn có phương án nào hay giải quyết bài toán này giúp mình để kô phải làm thủ công . Thanks a lot

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
:lol2:

Nếu dùng lệnh OD của bạn mà copy cho mình cái này được kô " Bản vẽ số n/1200" với n chạy từ 1 đến 1200. Hoặc bạn có phương án nào hay giải quyết bài toán này giúp mình để kô phải làm thủ công . Thanks a lot

Tue_NV mới viết cái Lisp này.

Hy vọng bạn hài lòng :

(defun c:dstt(/ dau tong po po1 ent i)
(prompt "\n Danh so thu tu dang n/m ")
(setvar "cmdecho" 0)

(setq dau (getint "\n Danh so bat dau (n) :"))
(setq tong (getint "\n Danh so tong (m) :"))

(setq po (getpoint (strcat "\n Cho diem chen cua so : " (itoa dau) "/" (itoa tong))) i 1)
(wtxt (strcat (itoa dau) "/" (itoa tong)) po)

(Repeat (- tong dau)
(setq po1 (getpoint po (strcat "\n Cho diem chen cua so : " (itoa (+ dau i)) "/" (itoa tong))))

(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent (subst (cons 1 (strcat(itoa (+ dau i)) "/" (itoa tong))) (assoc 1 ent) ent))
(entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

  • 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
Tue_NV mới viết cái Lisp này.

Hy vọng bạn hài lòng :

(defun c:dstt(/ dau tong po po1 ent i)
(prompt "\n Danh so thu tu dang n/m ")
(setvar "cmdecho" 0)

(setq dau (getint "\n Danh so bat dau (n) :"))
(setq tong (getint "\n Danh so tong (m) :"))

(setq po (getpoint (strcat "\n Cho diem chen cua so : " (itoa dau) "/" (itoa tong))) i 1)
(wtxt (strcat (itoa dau) "/" (itoa tong)) po)

(Repeat (- tong dau)
(setq po1 (getpoint po (strcat "\n Cho diem chen cua so : " (itoa (+ dau i)) "/" (itoa tong))))

(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent (subst (cons 1 (strcat(itoa (+ dau i)) "/" (itoa tong))) (assoc 1 ent) ent))
(entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

Hay quá , cảm ơn bác Tue_NV 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
mình ko biết dung lisp.có bạn nào chỉ giúp mình cái

thanks you các bạn nhiều.

trong cad, vào menu Tools, chọn appload, tìm đến tập tin lisp, OK. gõ lệnh của lisp, ví dụ lisp trên gõ dstt, xem trên dòng lệnh nó bảo gì làm theo nấy, Ok

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

cho mình hỏi thêm phần này là có phải co:lisp không sử dụng được với font Vni và font times new roman. Còn lisp od-oc:lisp thi không thay đổi font được phải không

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

cho mình hỏi thêm phần này là có phải co:lisp không sử dụng được với font Vni và font times new roman. Còn lisp od-oc:lisp thi không thay đổi font được phải không

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

×