Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
93 replies to this topic

#1 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 29 January 2007 - 11:55 AM

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.
  • 15

#2 khimatro

khimatro

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 08 February 2007 - 07:30 PM

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

#3 admin

admin

    Administrator

  • Root Admin
  • PipPipPipPip
  • 280 Bài viết
Điểm đánh giá: 485 (tốt)

Đã gửi 09 February 2007 - 01:38 PM

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.
  • 1

#4 trantrung78

trantrung78

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 March 2007 - 09:34 AM

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

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 16 March 2007 - 11:09 AM

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.
  • 1

#6 trantrung78

trantrung78

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 March 2007 - 02:44 PM

Cám ơn bác Nguyễn Hoành nhiều, nhưng nếu bác chèn vào một dòng lệch nào đó để scale lại cái block cot thì hay quá!!
  • 0

#7 trantrung78

trantrung78

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 March 2007 - 02:44 PM

Cám ơn bác Nguyễn Hoành nhiều, nhưng nếu bác chèn vào một dòng lệch nào đó để scale lại cái block cot thì hay quá!!
  • 0

#8 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 16 March 2007 - 04:50 PM

Mời bạn trantrung78 hãy xem lại topic:
http://www.cadviet.com/forum/index.php?sho...0&#entry944

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

#9 bowxman

bowxman

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 12 April 2007 - 03:51 AM

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

#10 bemove

bemove

    biết lệnh divide

  • Vip
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 1308 (rất tốt)

Đã gửi 06 May 2007 - 11:27 PM

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

#11 thanhliem98

thanhliem98

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 29 October 2007 - 09:59 PM

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.


  • 0

#12 thanhlamct

thanhlamct

    biết lệnh offset

  • Members
  • PipPipPip
  • 176 Bài viết
Điểm đánh giá: 70 (tàm tạm)

Đã gửi 30 October 2007 - 06:30 PM

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

Bác Hoành ơi, Linl chết rôì, em không down được
  • 0

#13 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 30 October 2007 - 10:01 PM

Bác Hoành ơi, Linl chết rôì, em không down được

Tôi sửa rồi, bạn check lại đi.
  • 0

#14 thanhlamct

thanhlamct

    biết lệnh offset

  • Members
  • PipPipPip
  • 176 Bài viết
Điểm đánh giá: 70 (tàm tạm)

Đã gửi 31 October 2007 - 01:35 PM

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

#15 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 31 October 2007 - 01:54 PM

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

#16 thang42c3

thang42c3

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 31 October 2007 - 06:14 PM

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: )
  • 0

#17 cavoitrang_11

cavoitrang_11

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 15 November 2007 - 10:55 AM


linh die rooi anh oi
  • 0

#18 binladen_mrp

binladen_mrp

    biết vẽ arc

  • Members
  • PipPip
  • 47 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 03 January 2008 - 08:05 AM

ơ 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
  • 0
Tư duy === > Tồn Tại

#19 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 03 January 2008 - 09:12 AM

ơ 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).
  • 0

#20 hang xom

hang xom

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 06 April 2008 - 02:49 PM

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é!)
  • 2