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

Đánh cốt tự động bằng lisp DC

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

Bạn đã bao giờ mệt vì phải tính toán để đánh cốt cao độ của mặt cắt và mặt đứng hay chưa?

vừa phải tính xem từ điểm cần tính đến cốt 0.00 có khoảng cách h bao nhiêu, rồi lại nhập vào bản vẽ.

 

Bây giờ, bạn có thể làm điều này một cách nhanh chóng và tự động nhờ vào lisp dc của cadviet.

với lisp này, bạn chỉ cần gõ lệnh dc, chương trình sẽ hỏi bạn điểm bạn cần đánh cốt, sau đó chương trình sẽ chèn ký hiệu cốt vào đúng vị trí và giá trị mà bạn cần. Bạn dùng lệnh cot00 để định nghĩa điểm có cao độ là cot00.

 

Để sử dụng lệnh, trước tiên phải copy file cot.dwg vào thư mục support - Đây là file chứa nội dung của ký hiệu cốt. Sau đó appload file danhcot.lsp để sử dụng lệnh.

 

(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dc (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
  (alert "chua co cot 0.000")
  (c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
  )
  (list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
  )
  1
  1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau	   (cond
	 ((equal caodo 0.0 0.01) "%%p")
	 ((> caodo 0.0) "+")
	 (t "-")
   )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri	   (strcat (substr giatri 1 (- dodaichuoi 3))
		   "."
		   (substr giatri (- dodaichuoi 2))
	   )
 )
 (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)
)

file danhcot.lsp: http://www.cadviet.com/upfiles/danhcot.lsp

file danhcot.dwg: http://www.cadviet.com/upfiles/DANHCOT.zip

 

Lưu ý: Với mỗi file DWG mà bạn vẽ, bạn phải đặt lại biến ATTDIA về 0 trước khi dùng lệnh DC (chỉ cần đặt 1 lần cho mỗi file).

 

Rất mong có được sự phản hồi.

Cảm ơn.

trong kiến trúc các bạn dùng cos 0.00 làm mức so sánh. Nhưng trong giao thông và thuỷ lợi thì không dùng như thế.Theo tôi hiểu thì trong lsp của anh khi đánh lệnh cot00 thì nó hiểu điểm đó là cao độ 0.00. Khi đánh lệnh dc thì nó sẽ cộng khoảng cách theo phương đứng với 0.00? Anh có cách nào để thay cos 0.00 bằng cos bất kỳ không? Sau đó khi dùng lệnh dc thì nó sẽ cộng từ cos bất kỳ đó chứ không phải là cộng với 0.00?

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
trong kiến trúc các bạn dùng cos 0.00 làm mức so sánh. Nhưng trong giao thông và thuỷ lợi thì không dùng như thế.Theo tôi hiểu thì trong lsp của anh khi đánh lệnh cot00 thì nó hiểu điểm đó là cao độ 0.00. Khi đánh lệnh dc thì nó sẽ cộng khoảng cách theo phương đứng với 0.00? Anh có cách nào để thay cos 0.00 bằng cos bất kỳ không? Sau đó khi dùng lệnh dc thì nó sẽ cộng từ cos bất kỳ đó chứ không phải là cộng với 0.00?

Bạn có thể thêm vào lệnh sau Cotxx : dùng để định nghĩa cốt bất kỳ (tương tự cốt 0.00)

(defun c:cotxx ()
 (setq Cotxx (getreal "\nNhap cot can dinh nghia: ") 
    Cot00 (+ (cadr (getpoint (strcat "\nDiem co cot " (rtos cotxx 2 3) ": "))) Cotxx)
   )
 (princ)
)

 

Bạn cũng có thể kết hợp với lệnh tăng giảm cốt đồng loạt, tham khảo tại đây

http://www.cadviet.com/forum/index.php?sho...ost&p=37756

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

Đầu tiên là cảm ơn bạn về lisp này, đỡ cho mình nhiều lắm.

Hai là mình gặp vấn đề như bạn này:

Trích dẫn(nguoi_mong_du @ Sep 26 2008, 23:48) *

Ví dụ trong 1 bản vẽ ta đánh cốt 2 mặt cắt tỷ lệ là 1/100 hoặc 1/50 chẳng hạn. Trước khi đánh cốt mà có lựa chọn tỷ lệ mặt cắt mà mình định đánh thì hay quá.

 

bạn thử gõ chữ TYLE rồi nhập vào 50, hoặc 100 trước khi vẽ các tỷ lệ 50 và 100 xem sao?

 

Nói chung là trong bản vẽ mình hay dùng các tỷ lệ khác nhau (1/100, 1/50, 1/25...) nhưng mình chỉ dùng lisp này ở các mặt cắt có tỷ lệ của bản vẽ (giả sử là 1/100), ở các mặt cắt khác (giả như là 1/50, mình vẽ bằng cách scale 2) thì lisp này không dùng được nữa, bạn có cách nào có câu hỏi xác định lỷ lệ trước được không? (mình gõ TYLE mà cad không hiểu lệnh này, set dym hiện hành khác cũng không được).

Mình nghĩ câu hỏi tỷ lệ này nên có giá trị mặc định để chỉ thay đổi khi cần thiết thôi, chứ mỗi lần dùng lại một lần xác định thì cũng hơi mất công. Hoặc sét tỷ lệ theo thông số của dim style hiện hành thì càng tốt.

 

Cảm ơn 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
Đầu tiên là cảm ơn bạn về lisp này, đỡ cho mình nhiều lắm.

Hai là mình gặp vấn đề như bạn này:

Nói chung là trong bản vẽ mình hay dùng các tỷ lệ khác nhau (1/100, 1/50, 1/25...) nhưng mình chỉ dùng lisp này ở các mặt cắt có tỷ lệ của bản vẽ (giả sử là 1/100), ở các mặt cắt khác (giả như là 1/50, mình vẽ bằng cách scale 2) thì lisp này không dùng được nữa, bạn có cách nào có câu hỏi xác định lỷ lệ trước được không? (mình gõ TYLE mà cad không hiểu lệnh này, set dym hiện hành khác cũng không được).

Mình nghĩ câu hỏi tỷ lệ này nên có giá trị mặc định để chỉ thay đổi khi cần thiết thôi, chứ mỗi lần dùng lại một lần xác định thì cũng hơi mất công. Hoặc sét tỷ lệ theo thông số của dim style hiện hành thì càng tốt.

 

Cảm ơn bạn

 

Mọi người có thể sửa giúp mình vụ này 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
Bạn đã bao giờ mệt vì phải tính toán để đánh cốt cao độ của mặt cắt và mặt đứng hay chưa?

vừa phải tính xem từ điểm cần tính đến cốt 0.00 có khoảng cách h bao nhiêu, rồi lại nhập vào bản vẽ.

 

Bây giờ, bạn có thể làm điều này một cách nhanh chóng và tự động nhờ vào lisp dc của cadviet.

với lisp này, bạn chỉ cần gõ lệnh dc, chương trình sẽ hỏi bạn điểm bạn cần đánh cốt, sau đó chương trình sẽ chèn ký hiệu cốt vào đúng vị trí và giá trị mà bạn cần. Bạn dùng lệnh cot00 để định nghĩa điểm có cao độ là cot00.

 

Để sử dụng lệnh, trước tiên phải copy file cot.dwg vào thư mục support - Đây là file chứa nội dung của ký hiệu cốt. Sau đó appload file danhcot.lsp để sử dụng lệnh.

 

(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dc (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
  (alert "chua co cot 0.000")
  (c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
  )
  (list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
  )
  1
  1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau	   (cond
	 ((equal caodo 0.0 0.01) "%%p")
	 ((> caodo 0.0) "+")
	 (t "-")
   )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri	   (strcat (substr giatri 1 (- dodaichuoi 3))
		   "."
		   (substr giatri (- dodaichuoi 2))
	   )
 )
 (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)
)

file danhcot.lsp: http://www.cadviet.com/upfiles/danhcot.lsp

file danhcot.dwg: http://www.cadviet.com/upfiles/DANHCOT.zip

 

Lưu ý: Với mỗi file DWG mà bạn vẽ, bạn phải đặt lại biến ATTDIA về 0 trước khi dùng lệnh DC (chỉ cần đặt 1 lần cho mỗi file).

 

Rất mong có được sự phản hồi.

Cảm ơn.

nếu lỡ chon 1 điểm không đúng làm cốt 00 rồi, muốn bỏ đi điểm đấy đi lấy 1 điểm khác kiểu gì các bác ơ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
Cảm ơn.

 

em lam dc rui. cam on bac nhieu nhe! :cheers:

 

thay vì post bài vô ích này sao bạn ko click thanks

 

 

 

@macico

đây là câu trả lời của bạn

Nếu muốn thay đổi cốt 0.0 thì chỉ việc nhập lệnh cot00 rồi nhập vào cao độ 0.0 mớ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
Bạn sửa dòng lệnh này:

(command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)

 

số 100.0 chính là tỷ lệ. Bạn sửa về 1 là ok.

Bác Hoành ơi. Em vẽ theo tỷ lệ 1:1 . Tức là 1 m = 1000 đơn vị trong cad. Vậy sao khi đánh cốt thì hình cốt thì thấy rõ, nhưng text thì nhỏ không thấy. Mặc dù vào ed thì chỉ số nó đúng cao độ. Bác giúp em thể hiện text to ra 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

anh cho em hỏi, khi muốn thay đổi cốt 0,000 thì như thế nào. có nghĩa là 1 bản vẽ em có nhiêu hình, mỗi hình ở 1 vị trí, khi đó em muốn thay đổi cốt 0,000 cho phùi hợ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
anh cho em hỏi, khi muốn thay đổi cốt 0,000 thì như thế nào. có nghĩa là 1 bản vẽ em có nhiêu hình, mỗi hình ở 1 vị trí, khi đó em muốn thay đổi cốt 0,000 cho phùi hợp

Bạn đánh lệnh cot00 để nhập cost 0.000 mớ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

Cao độ của bác ghi là m. 1 units = 1mm . Em muốn 1cm=1units. Em xửa (Rtos(*caodo 10) 2 0) giống bài ở trên mà không được. Nhờ bác chỉnh xửa 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

bác hoành ơi.em dùng lisp đánh cốt nhưng đằng trước cốt đó có chữ sl ở đằng trước.em ko thể xoá dc bác ag.bác giúp em với.thank bác trướ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

Cao độ của bác ghi là m. 1 units = 1mm . Em muốn 1cm=1units. Em xửa (Rtos(*caodo 10) 2 0) giống bài ở trên mà không được. Nhờ bác chỉnh xửa giúp !

(Rtos(*caodo 10) 2 0) bạn sửa lại thành (Rtos(* caodo 10) 2 0) có dấu cách sau dấ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

bác hoành ơi.em dùng lisp đánh cốt nhưng đằng trước cốt đó có chữ sl ở đằng trước.em ko thể xoá dc bác ag.bác giúp em với.thank bác trước.

Có ai bị giống như của bạn đâ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

Em muốn xửa font chữ mặc định của lisp mà không phải kích double và chỉnh option, như thế rất lâu và em muốn chuyển blog về dạng blog mà em hay dung. Nhờ các bác giúp đỡ, lisp này rất hữu ích, tks các bác nhiều.

Chỉnh sửa theo hungbabahung

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

Sau một hồi ngồi đọc blog tìm ra cái lệnh battman điều chỉnh thuộc tính blog cho thằng này, còn blog thì xửa thằng đánh cốt trong support cad là ok. Nhưng còn về số đằng sau dấu , là 3 chữ số thành 2 chữ số thì chịu , xửa được thành 2 = cách thay dòng lisp "." so sau ,=1 thì nó lại ra số gần đúng.844.58 = 844.80 hix! Các bác giúp hộ chút để em hoàn thiện lisp này.

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

Chào amin ạ!

Em mới bước vào nghề, sử dụng cad chưa được thành thạo cho lắm. Có gì các anh trong diễn đàn giúp đỡ em với.

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

[lisp tính cao độ] giành cho hoàn công công trình.

Thưa các bác em rất muốn có một cái lisp đánh cốt mà không phải đánh cốt từ cốt +0.00 mà nó nhận bất cứ số nào trên bản vẽ trở thành cao độ gốc dau đó nó được tìm đến điểm mới để ghi cao độ. tuy nhiên chiều cao chữ phải được định dạng theo tỷ lệ từng file trong từng bản vẽ, bởi mỗi file ta sử dụng tỷ lệ khác nhau, nhất là trong công tác làm hoàn công, thì những đơn vị thi công thường được cung cấp cá bản vẽ từ nhiều nhà thiết kế khác nhau để phục vụ cho công tác hoàng công. nên ý em ở đây là mong các bác giúp em lập giúp một lips tính cao độ định điểm chèn, co Blook thuộc tính đi theo. và có đủ các yếu tố em vừa nêu trê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

Bạn đã bao giờ mệt vì phải tính toán để đánh cốt cao độ của mặt cắt và mặt đứng hay chưa?

vừa phải tính xem từ điểm cần tính đến cốt 0.00 có khoảng cách h bao nhiêu, rồi lại nhập vào bản vẽ.

 

Bây giờ, bạn có thể làm điều này một cách nhanh chóng và tự động nhờ vào lisp dc của cadviet.

với lisp này, bạn chỉ cần gõ lệnh dc, chương trình sẽ hỏi bạn điểm bạn cần đánh cốt, sau đó chương trình sẽ chèn ký hiệu cốt vào đúng vị trí và giá trị mà bạn cần. Bạn dùng lệnh cot00 để định nghĩa điểm có cao độ là cot00.

 

Để sử dụng lệnh, trước tiên phải copy file cot.dwg vào thư mục support - Đây là file chứa nội dung của ký hiệu cốt. Sau đó appload file danhcot.lsp để sử dụng lệnh.

 

(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dc (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
 	(alert "chua co cot 0.000")
 	(c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
 	)
 	(list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
 	)
 	1
 	1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau       (cond
     ((equal caodo 0.0 0.01) "%%p")
     ((> caodo 0.0) "+")
     (t "-")
      )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri       (strcat (substr giatri 1 (- dodaichuoi 3))
	       "."
	       (substr giatri (- dodaichuoi 2))
       )
 )
 (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)
)

file danhcot.lsp: http://www.cadviet.com/upfiles/danhcot.lsp

file danhcot.dwg: http://www.cadviet.com/upfiles/DANHCOT.zip

 

Lưu ý: Với mỗi file DWG mà bạn vẽ, bạn phải đặt lại biến ATTDIA về 0 trước khi dùng lệnh DC (chỉ cần đặt 1 lần cho mỗi file).

 

Rất mong có được sự phản hồi.

Cảm ơn.

thanks bác kú.khà khà.

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 đã bao giờ mệt vì phải tính toán để đánh cốt cao độ của mặt cắt và mặt đứng hay chưa?

vừa phải tính xem từ điểm cần tính đến cốt 0.00 có khoảng cách h bao nhiêu, rồi lại nhập vào bản vẽ.

 

Bây giờ, bạn có thể làm điều này một cách nhanh chóng và tự động nhờ vào lisp dc của cadviet.

với lisp này, bạn chỉ cần gõ lệnh dc, chương trình sẽ hỏi bạn điểm bạn cần đánh cốt, sau đó chương trình sẽ chèn ký hiệu cốt vào đúng vị trí và giá trị mà bạn cần. Bạn dùng lệnh cot00 để định nghĩa điểm có cao độ là cot00.

 

Để sử dụng lệnh, trước tiên phải copy file cot.dwg vào thư mục support - Đây là file chứa nội dung của ký hiệu cốt. Sau đó appload file danhcot.lsp để sử dụng lệnh.

 

(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dc (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
 	(alert "chua co cot 0.000")
 	(c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
 	)
 	(list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
 	)
 	1
 	1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau       (cond
     ((equal caodo 0.0 0.01) "%%p")
     ((> caodo 0.0) "+")
     (t "-")
      )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri       (strcat (substr giatri 1 (- dodaichuoi 3))
	       "."
	       (substr giatri (- dodaichuoi 2))
       )
 )
 (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)
)

file danhcot.lsp: http://www.cadviet.com/upfiles/danhcot.lsp

file danhcot.dwg: http://www.cadviet.com/upfiles/DANHCOT.zip

 

Lưu ý: Với mỗi file DWG mà bạn vẽ, bạn phải đặt lại biến ATTDIA về 0 trước khi dùng lệnh DC (chỉ cần đặt 1 lần cho mỗi file).

 

Rất mong có được sự phản hồi.

Cảm ơn.

Thanks bác cá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

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


×