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.
Nguyen Hoanh

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

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

Nguyen Hoanh    4.524

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

  • Vote tăng 15

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
khimatro    2

Nguyen Hoanh oi cái lisp này hay nhưng mình không hiểu sao khi dùng thì bị như thế này:

------------------------------------------------------------------------------------------------------------

Command: dc

 

Vao diem can danh cot: .insert Enter block name or [?] <A$C18D51675>: danhcot

"danhcot.dwg": Can't find file in search path:

C:\Documents and Settings\MinhDuc\Desktop\ (current directory)

D:\Duc's document\

C:\Documents and Settings\MinhDuc\Application Data\Autodesk\AutoCAD

2007\R17.0\enu\support\

C:\Program Files\AutoCAD 2007\support\

C:\Program Files\AutoCAD 2007\fonts\

C:\Program Files\AutoCAD 2007\help\

C:\Program Files\AutoCAD 2007\Express\

C:\Program Files\AutoCAD 2007\support\color\

C:\Program Files\AutoCAD 2007\drv\

C:\Program Files\AutoCAD 2007\

*Invalid*

; error: Function cancelled

----------------------------------------------------------------------------------------

chỉ giáo thêm cho mì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
admin    484

khimatro nên đọc kỹ hướng dẫn của Nguyen Hoanh, trong đó có nhắc nhở phải copy file danhcot.dwg (bung ra từ file danhcot.zip) vào thư mục support.

 

Lỗi được thông báo như trên là do chương trình autocad không tìm thấy file danhcot.dwg.

  • 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
trantrung78    0

Bác Nguyễn Hoành oi! có cách nào scale lại các block caodo lại khi chèn điểm đánh cốt vào không bác! hiện tại khi tôi đánh cốt xong các block to qúa, tăng lên 100 lầ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
Nguyen Hoanh    4.524
Bác Nguyễn Hoành oi! có cách nào scale lại các block caodo lại khi chèn điểm đánh cốt vào không bác! hiện tại khi tôi đánh cốt xong các block to qúa, tăng lên 100 lần!!!

 

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.

  • 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
Nguyen Hoanh    4.524

Mời bạn trantrung78 hãy xem lại topic:

http://www.cadviet.com/forum/index.php?sho...0entry944

 

trong đó leona có hỏi về cách thay đổi tỷ lệ bản vẽ (mà thật ra là thay đổi kích thước các ký hiệu).

 

Bạn có thể dùng lệnh sb (scale block) ở đoạn mã lisp đã post trong topic đó.

 

VD: khi bạn muốn biến tỷ lệ 100 về 1, bạn chỉ cần gõ tại dòng command: sb 0.01 .

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
bowxman    21

Cái này cad có hổ trợ mà, dùng multiview block elevation kết hợp với ucs trục y, để khi move theo truc y cao độ sẽ tự động nhảy theo

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
bemove    1.308
Cái này cad có hổ trợ mà, dùng multiview block elevation kết hợp với ucs trục y, để khi move theo truc y cao độ sẽ tự động nhảy theo

 

multiview block elevation chỉ có trong ADT

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
thanhliem98    8
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.

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
thanhlamct    70
Tôi sửa rồi, bạn check lại đi.

cám ơn bác, nhưng em chỉ down được file Danhcot.lsp thôi còn Danhcot.dwg thì không được. Với lại mấy file bản đồ quy hoạch Thành Phố Hà nội Link đó cũng không down được.Thanks bác.

http://www.cadviet.com/upfiles/loi.jpg

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
Nguyen Hoanh    4.524
cám ơn bác, nhưng em chỉ down được file Danhcot.lsp thôi còn Danhcot.dwg thì không được. Với lại mấy file bản đồ quy hoạch Thành Phố Hà nội Link đó cũng không down được.Thanks bác.

http://www.cadviet.com/upfiles/loi.jpg

Đã sửa tiếp, bạn check lại giùm.

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
thang42c3    0

Báo cáo với quan bác Nguyễn Hoành là em đã dùng và sử dụng cái này. Em cũng rất thích.

 

Có một số cái em muốn học hỏi thêm.

 

Ở đây là tỷ lệ 1:1 thì phải. Tức là 1mm = 1 unit. Nhưng chỗ em thường hay dùng theo tỷ lệ (1 :1000) tức là 1m = 1 unit.

Tuy vậy em cũng không hiểu là tại sao quan anh dùng đúng tỷ lệ 1 :1 được nhỉ. Hay là do tham số (2) ở trong dòng lệnh này :

 

giatri (rtos caodo 2 0)

 

Em dùng thì em sửa đi 1 tí như sau :

 

 

 

giatri (rtos (*caodo 1000)2 0) :unsure:

 

Nhưng thắc mắc 1 chút là tham số 2 hình như em biết là kiểu decimal. (Hic chưa rành lắm chỗ này :unsure: )

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.file dwg làm gì vậy.bác hướng dẫn em cách dùng với.có fải copy file này vào thư mục Exprees trong ổ cài không ạ.chúc bác buổi sáng tốt lành .he

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
Nguyen Hoanh    4.524
ơ bác Hoành ơi.file dwg làm gì vậy.bác hướng dẫn em cách dùng với.có fải copy file này vào thư mục Exprees trong ổ cài không ạ.chúc bác buổi sáng tốt lành .he

file dwg này chứa ký hiệu cốt để chương trình chèn vào khi dùng lệnh.

 

Bạn phải copy file này vào thư mục support của AutoCAD (như đã hướng dẫn ở 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
hang xom    4
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ái Lisp này của bác quá tiện. Cảm ơn bác nhiều (Em đã ấn nút Thanks roi nhé!)

  • 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
haptkts    0

Ban Hoanh oi! Lisp đánh cao độ của bạn áp dụng cho bản vẽ kiến trúc thì quá chuẩn luôn, nhưng với các bản vẽ chuyên ngành khác như thuỷ lợi... họ không dùng caodo 0.0 mà dùng cao độ tự nhiên (chẳng hạn như lệnh lưu cao độ 0.0 có thể là một cao độ có giá trị khác). Bạn có thể giúp thêm phần này được không? Mình cũng đã loay hoay sửa nhưng không được, không phải vì lười mà vì mức độ am hiểu về lisp còn quá non nớt. Cảm ơn bạn rất nhiều. Mong được hồi âm sớm.

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
Nguyen Hoanh    4.524
Ban Hoanh oi! Lisp đánh cao độ của bạn áp dụng cho bản vẽ kiến trúc thì quá chuẩn luôn, nhưng với các bản vẽ chuyên ngành khác như thuỷ lợi... họ không dùng caodo 0.0 mà dùng cao độ tự nhiên (chẳng hạn như lệnh lưu cao độ 0.0 có thể là một cao độ có giá trị khác). Bạn có thể giúp thêm phần này được không? Mình cũng đã loay hoay sửa nhưng không được, không phải vì lười mà vì mức độ am hiểu về lisp còn quá non nớt. Cảm ơn bạn rất nhiều. Mong được hồi âm sớm.

 

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.

 

Tôi chưa hiểu khó khăn của 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
haptkts    0
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.

 

Tôi chưa hiểu khó khăn của bạn.

Theo mình được biết thì trong một số trường hợp người ta không dùng cao độ tương đối (+-00) mà dùng cao độ tuyệt đối (theo cao độ địa hình). Chẳng hạn như cao độ 0,0 tương đối ứng với cao độ +132.00 ngoài thực tế. Mình muốn thay số +-0.000 = +132.00. Sau đó các cao độ khác sẽ tính theo cốt +132.00 (chẳng hạn +135.00 chứ không phải là +3.000 theo cốt 0.0 nữa).

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
Nguyen Hoanh    4.524
Theo mình được biết thì trong một số trường hợp người ta không dùng cao độ tương đối (+-00) mà dùng cao độ tuyệt đối (theo cao độ địa hình). Chẳng hạn như cao độ 0,0 tương đối ứng với cao độ +132.00 ngoài thực tế. Mình muốn thay số +-0.000 = +132.00. Sau đó các cao độ khác sẽ tính theo cốt +132.00 (chẳng hạn +135.00 chứ không phải là +3.000 theo cốt 0.0 nữa).

Quả thật tôi không phải bên chuyên ngành này nên không rõ.

 

Bạn hãy nêu yêu cầu thật cụ thể, nếu bạn muốn có 1 lisp đánh cốt đúng ý 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
haptkts    0
Quả thật tôi không phải bên chuyên ngành này nên không rõ.

 

Bạn hãy nêu yêu cầu thật cụ thể, nếu bạn muốn có 1 lisp đánh cốt đúng ý bạn.

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!

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


×