Đế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

#21 haptkts

haptkts

    biết pan

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

Đã gửi 25 May 2008 - 12:45 AM

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

#22 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 25 May 2008 - 07:52 AM

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

#23 haptkts

haptkts

    biết pan

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

Đã gửi 26 May 2008 - 11:35 AM

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

#24 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 11:44 AM

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

#25 haptkts

haptkts

    biết pan

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

Đã gửi 26 May 2008 - 01:30 PM

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

#26 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 01:52 PM

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

#27 lengan

lengan

    biết vẽ ellipse

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

Đã gửi 26 May 2008 - 06:28 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.


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

#28 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 07:28 PM

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

#29 lengan

lengan

    biết vẽ ellipse

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

Đã gửi 27 May 2008 - 09:59 AM

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.c..._123_124_C1.rar
  • 0

#30 nguyenbakien

nguyenbakien

    biết lệnh scale

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

Đã gửi 27 May 2008 - 10:50 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: <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?
  • 0

#31 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 May 2008 - 11:04 AM

có cách nào để bỏi chữ SL trước cao đọ không vậy Pác?

Bạn dùng lệnh refedit, sửa block đó rồi xoá chữ SL đi.
  • 0

#32 lengan

lengan

    biết vẽ ellipse

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

Đã gửi 27 May 2008 - 11:25 AM

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.c..._123_124_C1.rar
  • 0

#33 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 May 2008 - 01:14 PM

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

#34 lengan

lengan

    biết vẽ ellipse

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

Đã gửi 27 May 2008 - 01:49 PM

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

#35 haptkts

haptkts

    biết pan

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

Đã gửi 27 May 2008 - 10:48 PM

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.c...anvekiemtra.dwg
http://www.cadviet.c...s/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é.
  • 0

#36 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 28 May 2008 - 08:19 AM

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

#37 nguyenhoangvuong83

nguyenhoangvuong83

    biết vẽ circle

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

Đã gửi 28 May 2008 - 10:37 AM

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
  • 0
CHình đã gửiDVietHình đã gửi

#38 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 28 May 2008 - 11:03 AM

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

#39 lengan

lengan

    biết vẽ ellipse

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

Đã gửi 28 May 2008 - 11:21 AM

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

#40 nguyenhoangvuong83

nguyenhoangvuong83

    biết vẽ circle

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

Đã gửi 28 May 2008 - 11:46 AM

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
  • 0
CHình đã gửiDVietHình đã gửi