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ị

Theo như mình hiểu thì trong chương trình của bạn:

-Đầu tiên, xác định cao độ chuẩn để tính các cao độ khác. Nếu đặt cốt vào vị trí này thi sẽ tự động ghi là +-0.000

-Sau đó pick vị trí khác thì sẽ tính chênh cao và ghi ra giá trị chênh đó so với +-0.000. (chẳng hạn chênh cao là 3m thi sẽ ghi là +3.000)

OK?

Như thế đối với bản vẽ kiến trúc (mặt cắt, mặt đứng thì quá ngon lành)

Trong bản vẽ chuyên ngành khác, như bên thuỷ lợi, họ dùng cao độ thực tế của địa hình (chẳng hạn như cao độ đỉnh đập là +125.00, đáy đập là +100.00), nếu dùng cao độ 0.0 như trong chương trình thi sẽ phải đặt ở 1 điểm rất xa. Nên mình muốn như thế này:

-Cũng vẫn xác định cao độ gốc, nếu dùng cao độ tương đối thì giá trị là +-0.000, nếu là tuyệt đối thì giá trị có thể do người dùng nhập vào.

-Sau đó các vị trí khác sẽ tính theo việc dùng cao độ tương đối hoặc tuyệt đối.

Ví dụ với trường hợp cao độ tuyệt đối, mình pick vào điểm đỉnh đập trong mặt cắt đập, nhập vào là +125.00, sau đó pick xuống đáy đập thì sẽ tự động tính chênh cao và ghi là +100.00.

Mình nghĩ thực ra chỉ là việc mình coi caodo00 có giá trị =0 và #0 thôi. Giúp mình với nhé. Thank you!

 

bạn load lisp đánh cốt lên, sau đó load tiếp lisp dưới đây vào và dùng lệnh CS (cốt san nền)

 

(defun c:cs()

(c:cot00)

(c:dc)

)

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: <a href="http://www.cadviet.com/upfiles/danhcot.lsp" target="_blank">http://www.cadviet.com/upfiles/danhcot.lsp</a>

file danhcot.dwg: <a href="http://www.cadviet.com/upfiles/DANHCOT.zip" target="_blank">http://www.cadviet.com/upfiles/DANHCOT.zip</a>

 

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.

 

Bác Hoành cho em hỏi chút bản vẽ của chúng em thường để hệ là m nhưng ở lisp nay cao độ lại để là mm nếu em không nhầm. Vậy mình cần chỉnh như thế nào cho đúng bác (em không biết nhiều về lisp nên không đọc được các dòng lệnh của lisp0 này). Em cám ơn 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
Bác Hoành cho em hỏi chút bản vẽ của chúng em thường để hệ là m nhưng ở lisp nay cao độ lại để là mm nếu em không nhầm. Vậy mình cần chỉnh như thế nào cho đúng bác (em không biết nhiều về lisp nên không đọc được các dòng lệnh của lisp0 này). Em cám ơn bác

Trường hợp này bạn đang nhầm! cao độ của lisp hiện nay đang để là m, vì thế bạn cứ dùng mà không phải sửa gì 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
Trường hợp này bạn đang nhầm! cao độ của lisp hiện nay đang để là m, vì thế bạn cứ dùng mà không phải sửa gì cả.

 

Bác Hoành ơi bác xem hộ em file này với, em dùng lisp đánh cốt nhưng hệ đơn vị bản vẽ của em không phù hợp với đơn vị của lisp. Bác dạy em cách sửa lisp với, em cám ơn bác.

 

http://www.cadviet.com/upfiles/270421_Beuz..._123_124_C1.rar

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: <a href="http://www.cadviet.com/upfiles/danhcot.lsp" target="_blank">http://www.cadviet.com/upfiles/danhcot.lsp</a>

file danhcot.dwg: <a href="http://www.cadviet.com/upfiles/DANHCOT.zip" target="_blank">http://www.cadviet.com/upfiles/DANHCOT.zip</a>

 

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.

 

có cách nào để bỏi chữ SL trước cao đọ không vậy Pá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
Trường hợp này bạn đang nhầm! cao độ của lisp hiện nay đang để là m, vì thế bạn cứ dùng mà không phải sửa gì cả.

 

Bác Hoành ơi bác xem hộ em file này với, em dùng lisp đánh cốt nhưng hệ đơn vị bản vẽ của em không phù hợp với đơn vị của lisp. Bác dạy em cách sửa lisp với, em cám ơn bác.

 

http://www.cadviet.com/upfiles/270421_Beuz..._123_124_C1.rar

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 bác xem hộ em file này với, em dùng lisp đánh cốt nhưng hệ đơn vị bản vẽ của em không phù hợp với đơn vị của lisp. Bác dạy em cách sửa lisp với, em cám ơn bác.

 

http://www.cadviet.com/upfiles/270421_Beuz..._123_124_C1.rar

Bạn gặp khó khăn gì khi sử dụng lisp đánh cốt với bản vẽ 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
Bạn gặp khó khăn gì khi sử dụng lisp đánh cốt với bản vẽ này?

 

Khi dùng lisp đánh cốt cho bản vẽ này thì lẽ ra cốt phải là 2.56 chẳng hạn thì lisp lại cho kết quả là 0.003. Em nghĩ là đơn vị đã bị thay đổi 1/1000 lần. Bác thử dùng lisp cho bản vẽ của em sẽ thấy rõ hơn. Bác chỉ cho em cách sửa cho lisp này với. Em cám ơn 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
bạn load lisp đánh cốt lên, sau đó load tiếp lisp dưới đây vào và dùng lệnh CS (cốt san nền)

 

(defun c:cs()

(c:cot00)

(c:dc)

)

http://www.cadviet.com/upfiles/banvekiemtra.dwg

http://www.cadviet.com/upfiles/caodo_sua.lsp

Mình gửi lại Hoanh mot file bản vẽ và file lsp mình đã sửa theo ý mình. Trong bản vẽ có 2 phần, phần ngoài vòng tròn là phần khoảng cách giữa 2 đường là 1000mm (offset 1000) thì cho kết quả rất tốt, kể cả trường hợp mình nhập cao độ tuyết đối vào (như trước mình cũng đã nói về loại toạ độ này, thực ra mình muốn tiện hơn thôi, không muốn phụ thuộc vào gốc 0.0 mà có thể tính cao độ từ một điểm mà mình đã biết cao độ trong bản vẽ). Phần trong vòng tròn mình thử với khoảng cách giưa hai đường la 5m (offset 5) thì kết quả không đúng, nếu chỉ offset 1 thì lại trả kết quả về 0.000. Mình cũng không hiểu rõ lắm nên mạo muội sửa nhưng không được. Nhờ bạn giúp 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
http://www.cadviet.com/upfiles/banvekiemtra.dwg

http://www.cadviet.com/upfiles/caodo_sua.lsp

Mình gửi lại Hoanh mot file bản vẽ và file lsp mình đã sửa theo ý mình. Trong bản vẽ có 2 phần, phần ngoài vòng tròn là phần khoảng cách giữa 2 đường là 1000mm (offset 1000) thì cho kết quả rất tốt, kể cả trường hợp mình nhập cao độ tuyết đối vào (như trước mình cũng đã nói về loại toạ độ này, thực ra mình muốn tiện hơn thôi, không muốn phụ thuộc vào gốc 0.0 mà có thể tính cao độ từ một điểm mà mình đã biết cao độ trong bản vẽ). Phần trong vòng tròn mình thử với khoảng cách giưa hai đường la 5m (offset 5) thì kết quả không đúng, nếu chỉ offset 1 thì lại trả kết quả về 0.000. Mình cũng không hiểu rõ lắm nên mạo muội sửa nhưng không được. Nhờ bạn giúp nhé.

Bạn thử tắt osnap xem sao?

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 dùng lệnh dc thi báo là chưa co cost 0.000 là sao hả anh Hoành. Em chưa hiểu lắm, anh nói cụ thể hơn được không, Cảm ơn anh

Tôi muốn biết tại sao bạn có câu hỏi này trong khi bao nhiêu người khác dùng mà không cần hỏi. Và cuối cùng thì bạn có dùng được 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 gặp khó khăn gì khi sử dụng lisp đánh cốt với bản vẽ này?

 

http://www.cadviet.com/upfiles/270421_Beuz..._123_124_C1.rar

 

Khi dùng lisp đánh cốt cho bản vẽ này thì lẽ ra cốt phải là 2.56 chẳng hạn thì lisp lại cho kết quả là 0.003. Em nghĩ là đơn vị đã bị thay đổi 1/1000 lần. Bác thử dùng lisp cho bản vẽ của em sẽ thấy rõ hơn. Bác chỉ cho em cách sửa cho lisp này với. Em cám ơn 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
em đã thử lại rồi mà cũng không được, chỉ ra được block cost thôi anh à, còn chỉ số cost thì không hiện ra. không biết bị lỗi gì nữa

Sau khi dùng lệnh DC, bạn nhấn F2 rồi copy nội dung CAD thông báo và post lên đây được 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
Sau khi dùng lệnh DC, bạn nhấn F2 rồi copy nội dung CAD thông báo và post lên đây được không?

Em đã bỏ file DANHCOT.DWG vào support rồi. sử dụng lệnh nó hiện lên cái hộp thoại như em đã post, rồi ra cái block của cost thôi. Không biết có do thiếu font không nữa.

Đây là nội dung nè anh:

Command: cot00

 

Diem co cot 0.000:

Command:

Command: dc

 

Vao diem can danh cot: .insert Enter block name or [?]: danhcot

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

ARX_ERROR: eNotThatKindOfClassSubstituting [simplex.shx] for [tvromanc].

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

Units: Millimeters Conversion: 1

Specify insertion point or

[basepoint/Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]:

Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>:

100.0000000000000 Enter Y scale factor <use X scale factor>: 100.0000000000000

Specify rotation angle <0>: 0.000000000000000

Enter attribute values

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

AMDUONG <#>: +

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

GIATRI <#>: 4.100

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

 

C:\Program Files\AutoCAD 2006\UNG DUNG\HO TRO TK THEP2006\Fonts CAD\vns.shx is

a normal text font file, not a big-font file.

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 đã bỏ file DANHCOT.DWG vào support rồi. sử dụng lệnh nó hiện lên cái hộp thoại như em đã post, rồi ra cái block của cost thôi. Không biết có do thiếu font không nữa.

Đây là nội dung nè anh:

Command: cot00

 

Diem co cot 0.000:

Command:

Command: dc

Đơn giản là bạn bị lỗi font. Bạn hãy dùng lệnh style, chọn font Romans, bỏ ô check ở bigfont đi.

  • 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
http://www.cadviet.com/upfiles/270421_Beuz..._123_124_C1.rar

 

Khi dùng lisp đánh cốt cho bản vẽ này thì lẽ ra cốt phải là 2.56 chẳng hạn thì lisp lại cho kết quả là 0.003. Em nghĩ là đơn vị đã bị thay đổi 1/1000 lần. Bác thử dùng lisp cho bản vẽ của em sẽ thấy rõ hơn. Bác chỉ cho em cách sửa cho lisp này với. Em cám ơn bác.

 

bạn tìm dòng code (- (cadr diem) cot00) thay bằng bằng (* 1000.0 (- (cadr diem) cot00)) là được.

  • 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
Nếu đánh cốt trong 1 bản vẽ nhưng ở các tỷ lệ khác nhau thì hay quá. Có thể thay đổi tỷ lệ trước khi đánh cốt đc không???

'Tỷ lệ' của bạn được hiểu theo nghĩa nào?

Bạn có thể nói rõ hơn 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

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á.

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ụ 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á.

Vậy thì nên nhân thêm "scale factor" của dimstyle hiện thờ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
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?

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

×