Đến nội dung


Hình ảnh
- - - - -

xin giúp tôi file autolisp tính khối lượng san nền


  • Please log in to reply
27 replies to this topic

#1 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 13 April 2007 - 09:25 PM

tôi là thành viên mới gia nhập diễn đàn, hiện tôi đang cần file tính khối lượng san nền (số liệu đầu vào gồm : cao độ bình quân trong 1 ô lưới, cao độ thiết kế, diện tích 1 ô lưới . . .=> khối lượng san lấp) rất mong các thành viên trong diễn đàn giúp tôi, xin chân thành cảm ơn
  • 0

#2 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 13 April 2007 - 09:41 PM

Bạn có thể upload một file cad mẫu số liệu đầu vào và kết quả tính của bạn được không?

Để mọi người có thể tạo lisp giúp bạn.
  • 0

#3 bowxman

bowxman

    biết vẽ pline

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

Đã gửi 14 April 2007 - 12:20 AM

Đây là 1 chương trình san nền, bao gồm 1 file mausannen.dwg và 1 file sannen.fas.
Mở file mausannen.dwg, load file sannen.fas vào, block caodomoc là các điểm mốc xác định ô lưới, bạn click đôi vào để chỉnh sửa các thông số, cao độ thiết kế nằm phía trên bên phải (CD_TK), kế bên dưới là cao độ tự nhiên (CD_TN), độ chênh cao chương trình sẽ tự tính (CH_CAO). Một ô lưới có thể có từ 3,4 điểm hoặc nhiều hơn, thường thì 1 ô lưới bao gồm 4 điểm tạo thành hình vuông 20m x 20m, trừ những ô giáp ranh giới.
Để tính khối lượng trong 1 ô lưới, bạn đánh lệnh "kl", chọn các block caodomoc theo chieu kim đồng hồ hoặc ngược lại, sau đó chọn điểm để ghi khối lượng vừa tính được.
Chúc bạn thành công!!

http://www.cadviet.com/upfiles/SANNEN.rar
  • 1

#4 admin

admin

    Administrator

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

Đã gửi 14 April 2007 - 06:36 PM

Cảm ơn chuyên gia Bowxman về sự chia sẻ này.
:lol:
  • 0

#5 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 17 April 2007 - 09:47 PM

Bạn có thể upload một file cad mẫu số liệu đầu vào và kết quả tính của bạn được không?

Để mọi người có thể tạo lisp giúp bạn.


xin chân thành cảm ơn các anh trong diễn đàn, đặc biệt là anh Bowxman đã tặng tôi file lisp tính san nền, tuy nhiên nhu cầu của tôi có hơi khác, tôi xin được upload các file có liên quan (trong file Mphuoc_3.dwg tôi có ghi các nhu cầu và cách sử dụng) để các anh hướng dẫn giúp tôi. Nguyên trước đây tại cơ quan tôi, có 1 anh đã viết tiện ích san nền bằng autolisp, tuy nhiên khi tôi xin đem về nhà sử dụng, thì anh ấy đã cắt bớt 1 số code và sửa đổi trong file nên chạy không ổn định (chạy 1 lần thì đúng, từ lần thứ 2 kết quả...sai!) nay do nhu cầu công tác tôi đang cần tiện ích tính khối lượng san nền, mong các anh chị trong diễn đàn giúp tôi.
http://www.cadviet.com/upfiles/Ark_1.lsp
http://www.cadviet.com/upfiles/KLuong_1.dwg
http://www.cadviet.com/upfiles/Mphuoc_3_1.dwg
  • 0

#6 bowxman

bowxman

    biết vẽ pline

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

Đã gửi 18 April 2007 - 06:06 PM

Trong file của bạn tôi thấy có các layer và tôi nghĩ như sau:
-caodo : cao độ hiện trạng
-caodo2 : cao độ hiện trạng nội suy vào ô lưới (tôi ko chắc lắm vì thấy nó toàn sai)
Các thông tin còn lại tôi chưa hiểu lắm.
- Nhập cao độ thiết kế của ô lưới: tại sao vậy, khi san nền xong các ô lưới là hình bậc thang á? (vì cao độ mỗi ô lưới khác nhau)
- Khối lượng đào đắp tại sao chỉ có 1 dòng, khi trong 1 ô lưới vừa đào vừa đắp thì sao.

Theo tôi, một hồ sơ san nền chuẩn như sau:
- Thiết kế san nền: bao gồm bình đồ hiện trạng (tất nhiên phải có), bình đồ thiết kế được biểu diễn bằng các đường đồng mức thiết kế, các đường đồng mức thiết kế này có thể là đường thẳng, đường gãy khúc, đường cong... mô tả một mặt phẳng lưới thiết kế san nền. Sau đó trên mặt bằng ta chia ô lưới san nền, kích thước chuẩn một ô lưới là 20m x 20m (cho khối lượng chẵn, kông có số lẻ), nội suy các cao độ hiện trạng vào các đỉnh của ô lưới, các đường đồng mức thiết kế giúp ta tính toán được cao độ thiết kế tại đỉnh ô lưới.
- Tính toán khối lượng san nền: Khi có được thiết kế san nền, việc tính toán khối lượng tương đối dễ dàng, lấy cao độ thiết kế trừ cho cao độ hiện trạng ta có độ chênh cao (h), lấy h trung bình trong 1 ô lưới nhân cho diện tích ta có khối lượng trong ô lưới, nếu h âm: đào, h + : đắp. Nếu h trong 1 ô lưới có - có + thì vưa đào vừa đắp, và có ranh giới đào đắp.
Gửi các bạn 2 file tham khảo

file đầu: san nền qua 1 quả đồi, bạn sẽ thấy ranh giới đào đắp rõ rệt tiện ngang quả đồi.
file sau: có đồng mức thiết kế để tham khảo.

http://www.cadviet.com/upfiles/SANNEN.dwg
http://www.cadviet.com/upfiles/SANNEN2.dwg
  • 1

#7 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 18 April 2007 - 10:45 PM

Trong file của bạn tôi thấy có các layer và tôi nghĩ như sau:
-caodo : cao độ hiện trạng
-caodo2 : cao độ hiện trạng nội suy vào ô lưới (tôi ko chắc lắm vì thấy nó toàn sai)
Các thông tin còn lại tôi chưa hiểu lắm.
- Nhập cao độ thiết kế của ô lưới: tại sao vậy, khi san nền xong các ô lưới là hình bậc thang á? (vì cao độ mỗi ô lưới khác nhau)
- Khối lượng đào đắp tại sao chỉ có 1 dòng, khi trong 1 ô lưới vừa đào vừa đắp thì sao.

Theo tôi, một hồ sơ san nền chuẩn như sau:
- Thiết kế san nền: bao gồm bình đồ hiện trạng (tất nhiên phải có), bình đồ thiết kế được biểu diễn bằng các đường đồng mức thiết kế, các đường đồng mức thiết kế này có thể là đường thẳng, đường gãy khúc, đường cong... mô tả một mặt phẳng lưới thiết kế san nền. Sau đó trên mặt bằng ta chia ô lưới san nền, kích thước chuẩn một ô lưới là 20m x 20m (cho khối lượng chẵn, kông có số lẻ), nội suy các cao độ hiện trạng vào các đỉnh của ô lưới, các đường đồng mức thiết kế giúp ta tính toán được cao độ thiết kế tại đỉnh ô lưới.
- Tính toán khối lượng san nền: Khi có được thiết kế san nền, việc tính toán khối lượng tương đối dễ dàng, lấy cao độ thiết kế trừ cho cao độ hiện trạng ta có độ chênh cao (h), lấy h trung bình trong 1 ô lưới nhân cho diện tích ta có khối lượng trong ô lưới, nếu h âm: đào, h + : đắp. Nếu h trong 1 ô lưới có - có + thì vưa đào vừa đắp, và có ranh giới đào đắp.
Gửi các bạn 2 file tham khảo.
file đầu: san nền qua 1 quả đồi, bạn sẽ thấy ranh giới đào đắp rõ rệt tiện ngang quả đồi.
file sau: có đồng mức thiết kế để tham khảo.

http://www.cadviet.com/upfiles/SANNEN.dwg
http://www.cadviet.com/upfiles/SANNEN2.dwg


chào anh Bowxman
cảm ơn anh đã chỉ dẫn cách lập hoàn chỉnh một hồ sơ san nền, riêng về layer caodo 2 trong file dwg chỉ là cao độ đo tiếp lần 2, phần cao độ thiết kế thay đổi theo từng ô để tạo độ dốc i hoặc giật cấp. Thường thì khu đo do cơ quan chúng tôi khảo sát có diện tích nhỏ, chênh lệch về địa hình không nhiều nên đôi khi không thể hiện đường đồng mức. Qua những gì anh tư vấn, hy vọng anh cùng ngành nghề, mong anh có thể hướng dẫn thêm cho tôi các tiện ích về trắc đạc (freeware hay shareware . . .) hoặc giúp tôi chỉnh sửa file lsp trên thành hoàn thiện. Thân ái

do
  • 0

#8 bowxman

bowxman

    biết vẽ pline

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

Đã gửi 18 April 2007 - 11:35 PM

Tại sao bạn không đưa các cao độ vào đỉnh ô lưới? Trong thi công và nghiệm thu, người ta căn cứ vào các cao độ này. tại các đỉnh ô lưới người ta đánh dấu 1 cái mốc, đặt mia 1 chổ ngắm các điểm mốc đó là biết các cao độ thi công đúng hay sai.
  • 0

#9 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 22 April 2007 - 01:22 AM

xin chân thành cảm ơn các anh trong diễn đàn, đặc biệt là anh Bowxman đã tặng tôi file lisp tính san nền, tuy nhiên nhu cầu của tôi có hơi khác, tôi xin được upload các file có liên quan (trong file Mphuoc_3.dwg tôi có ghi các nhu cầu và cách sử dụng) để các anh hướng dẫn giúp tôi. Nguyên trước đây tại cơ quan tôi, có 1 anh đã viết tiện ích san nền bằng autolisp, tuy nhiên khi tôi xin đem về nhà sử dụng, thì anh ấy đã cắt bớt 1 số code và sửa đổi trong file nên chạy không ổn định (chạy 1 lần thì đúng, từ lần thứ 2 kết quả...sai!) nay do nhu cầu công tác tôi đang cần tiện ích tính khối lượng san nền, mong các anh chị trong diễn đàn giúp tôi.
http://www.cadviet.com/upfiles/Ark_1.lsp
http://www.cadviet.com/upfiles/KLuong_1.dwg
http://www.cadviet.com/upfiles/Mphuoc_3_1.dwg


Sau đây là chương trình Lisp CADVietSN (CADViet Sannen) với lệnh lisp là CVSN thỏa mãn yêu cầu của Vbao. Chương trình làm việc theo nguyên tắc sau:
Bước 1: Người sử dụng insert các block điểm tính toán (VD như KLuong_1) vào tâm của các ô lưới, và đặt tên cho các điểm này trước (bằng lệnh hiệu chỉnh ATTEDIT).
Bước 2: Người sử dụng gọi lệnh CVSN và nhập vào các thông số:
a. Tên layer chứa text có giá trị cao độ hiện trạng.
b. Tên layer chứa text có giá trị cao độ trung bình thiết kế.
c. Chiều dài ô lưới điển hình.
d. Tên block điểm tính toán.
Sau đó chương trình yêu cầu người sử dụng chọn các block điểm tính toán cần tính. Kết quả tính sẽ được update vào block điểm tính toán.

Chương trình sẽ tính bằng thuật toán sau với mỗi điểm block tính toán:
- Quét qua tất cả các text nằm trong layer cao độ trung bình thiết kế để tìm đối tượng text gần nhất. Lấy giá trị này vào giá trị cao độ trung bình thiết kế.
- Quét qua tất cả các text nằm trong layer cao độ hiện trạng (là các mắt của ô lưới) lấy 4 (hoặc 3 hay 5) điểm gần nhất thỏa mãn điều kiện khoảng cách từ điểm tính toán tới các điểm này nhỏ hơn chiều dài ô lưới. Tính cao độ trung bình và diện tích ô lưới theo 4 (hoặc 3|5) điểm này. Điền hai thông số này vào 2 ô trong block điểm tính toán.
- Tính khối lượng đào (hoặc đắp) bằng cách lấy khối tích của phần hiện trạng trừ đi khối tích của phần tính toán.

Như vậy, chương trình không quan tâm đến việc các điểm nào tạo nên ô lưới, nó chỉ tìm 4 (hoặc 3|5) điểm gần điểm tính toán nhất để tạo thành ô lưới. Và lấy điểm cao độ thiết kế gần nhất để làm cao độ thiết kế trung bình.

Block KLuong_1 nằm trong file KLuong_1.dwg dưới đây (không sử dụng được file ban đầu của Vbao do bạn làm thừa 2 Attribute dẫn đến chương trình sẽ chạy sai).

------------------------------------------
Cách sử dụng:
Bước 1 - Chuẩn bị file tính toán:
- Text chứa giá trị cao độ hiện trạng phải có điểm chèn trùng với đỉnh ô lưới (để chương trình biết chính xác tọa độ) và nằm trong cùng 1 layer riêng.
- Text chứa giá trị cao độ trung bình thiết kế phải nằm gần tâm ô lưới
- Insert file KLuong_1.dwg vào file tính toán để thành block KLuong_1.
- Copy các block điểm tính toán này vào tâm các ô lưới.

Bước 2 - Chạy chương trình:
2. Upload file CADVietSN.lsp.
3. Gọi lệnh CVSN
- Nhập vào các thông số: tên layer chứa cao độ hiện trạng, tên layer chứa cao độ thiết kế, chiều dài ô lưới điển hình, tên block điểm tính toán (nhập vào KLuong_1).
- Chọn các block cần update kết quả tính toán.

Dưới đây là file lisp, file KLuong_1.dwg và file mẫu chuẩn.
Với file mẫu này, layer chứa cao độ hiện trạng là caodo2, layer chứa cao độ thiết kế là caodo, chiều dài lưới điển hình là 25, tên block điểm tính toán là KLuong_1

http://www.cadviet.com/upfiles/filemau.zip
http://www.cadviet.com/upfiles/KLuong_1.zip
http://www.cadviet.com/upfiles/CADVietSN.lsp

Với file mẫu trên, sử dụng chương trình CADViet SanNen:

Trước khi chạy chương trình
Hình đã gửi

Sau khi chạy chương trình
Hình đã gửi
Chú ý: block điểm tính toán phải đặt chuẩn vào tâm của hình vuông, để chương trình nhận biết được các điểm thuộc ô lưới.
  • 1

#10 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 22 April 2007 - 01:59 PM

Sau đây là chương trình Lisp CADVietSN (CADViet Sannen) với lệnh lisp là CVSN thỏa mãn yêu cầu của Vbao. Chương trình làm việc theo nguyên tắc sau:
Bước 1: Người sử dụng insert các block điểm tính toán (VD như KLuong_1) vào tâm của các ô lưới, và đặt tên cho các điểm này trước (bằng lệnh hiệu chỉnh ATTEDIT).
Bước 2: Người sử dụng gọi lệnh CVSN và nhập vào các thông số:
a. Tên layer chứa text có giá trị cao độ hiện trạng.
b. Tên layer chứa text có giá trị cao độ trung bình thiết kế.
c. Chiều dài ô lưới điển hình.
d. Tên block điểm tính toán.
Sau đó chương trình yêu cầu người sử dụng chọn các block điểm tính toán cần tính. Kết quả tính sẽ được update vào block điểm tính toán.

Chương trình sẽ tính bằng thuật toán sau với mỗi điểm block tính toán:
- Quét qua tất cả các text nằm trong layer cao độ trung bình thiết kế để tìm đối tượng text gần nhất. Lấy giá trị này vào giá trị cao độ trung bình thiết kế.
- Quét qua tất cả các text nằm trong layer cao độ hiện trạng (là các mắt của ô lưới) lấy 4 (hoặc 3 hay 5) điểm gần nhất thỏa mãn điều kiện khoảng cách từ điểm tính toán tới các điểm này nhỏ hơn chiều dài ô lưới. Tính cao độ trung bình và diện tích ô lưới theo 4 (hoặc 3|5) điểm này. Điền hai thông số này vào 2 ô trong block điểm tính toán.
- Tính khối lượng đào (hoặc đắp) bằng cách lấy khối tích của phần hiện trạng trừ đi khối tích của phần tính toán.

Như vậy, chương trình không quan tâm đến việc các điểm nào tạo nên ô lưới, nó chỉ tìm 4 (hoặc 3|5) điểm gần điểm tính toán nhất để tạo thành ô lưới. Và lấy điểm cao độ thiết kế gần nhất để làm cao độ thiết kế trung bình.

Block KLuong_1 nằm trong file KLuong_1.dwg dưới đây (không sử dụng được file ban đầu của Vbao do bạn làm thừa 2 Attribute dẫn đến chương trình sẽ chạy sai).

------------------------------------------
Cách sử dụng:
Bước 1 - Chuẩn bị file tính toán:
- Text chứa giá trị cao độ hiện trạng phải có điểm chèn trùng với đỉnh ô lưới (để chương trình biết chính xác tọa độ) và nằm trong cùng 1 layer riêng.
- Text chứa giá trị cao độ trung bình thiết kế phải nằm gần tâm ô lưới
- Insert file KLuong_1.dwg vào file tính toán để thành block KLuong_1.
- Copy các block điểm tính toán này vào tâm các ô lưới.

Bước 2 - Chạy chương trình:
2. Upload file CADVietSN.lsp.
3. Gọi lệnh CVSN
- Nhập vào các thông số: tên layer chứa cao độ hiện trạng, tên layer chứa cao độ thiết kế, chiều dài ô lưới điển hình, tên block điểm tính toán (nhập vào KLuong_1).
- Chọn các block cần update kết quả tính toán.

Dưới đây là file lisp, file KLuong_1.dwg và file mẫu chuẩn.
Với file mẫu này, layer chứa cao độ hiện trạng là caodo2, layer chứa cao độ thiết kế là caodo, chiều dài lưới điển hình là 25, tên block điểm tính toán là KLuong_1

http://www.cadviet.com/upfiles/filemau.zip
http://www.cadviet.com/upfiles/KLuong_1.zip
http://www.cadviet.com/upfiles/CADVietSN.lsp

Với file mẫu trên, sử dụng chương trình CADViet SanNen:

Trước khi chạy chương trình
Hình đã gửi

Sau khi chạy chương trình
Hình đã gửi
Chú ý: block điểm tính toán phải đặt chuẩn vào tâm của hình vuông, để chương trình nhận biết được các điểm thuộc ô lưới.


thật tuyệt, xin chân thành cảm ơn anh Nguyen Hoanh, anh Bowxman, đã hướng dẫn và giải đáp thắc mắc cho tôi, hy vọng điễn đàn ngày càng phát triển, là nơi các thành viên có thể giao lưu, học hỏi lẫn nhau. . .một lần nữa xin chúc các anh và gia quyến luôn an, vui, may mạnh.
  • 0

#11 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 02 December 2007 - 04:21 PM

Anh Hoành ơi, cho em xin cái đường links khác với. Links ở trên die rồi.Thanks
  • 0

#12 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 02 December 2007 - 08:18 PM

Anh Hoành ơi, cho em xin cái đường links khác với. Links ở trên die rồi.Thanks

Đã sửa.
Bạn hãy check lại.
  • 0

#13 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 03 December 2007 - 01:24 PM

Đã sửa.
Bạn hãy check lại.

đã load được, cảm ơn anh Hoanh rất nhiều
  • 0

#14 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 02 January 2008 - 08:33 AM

NHO ANH EM CHI .CACH XUAT DU LIEU TU AUTOCAD SANG SKETCHUP VA NGUOC LAI .
CO THE HUONG DAN CHO EM CACH SU DUNG SKETCHUP DUOC KHONG ?XIN CAM ON RAT NHIEU

Xin lổi hình như nhầm chỗ
pác Hoanh ơi! hôm qua mình rãnh rổi nên có nghiên cứu cái lisp san nền của pác, tuyệt lắm nhưng mà còn mấy điểm chưa ổn, pác có thể chỉnh lại một chút được không:
1. thường thì cao trình tự nhiên (cao trình đo) nằm lung tung trên mặt bằng và cứ 3 điểm coi như là một mặt phẳng nên pác chỉnh lại để cao độ tự nhiên là cao độ chương trình sẽ quét quanh trọng tâm ô để tính tốt nhất là chọn 3 cao độ sao cho trọng tâm ô nằm trong tam giác này
2. ngược lại cao trình thiết kế là cao trình được ấn định nên chỉ cần chọn 3 cao độ tại 3 điểm nào đó nằm trong mặt phẳng thiết kế để nội suy ra cao độ thiết kế tại ô tính toán
3. việc quét và tính diện tích ô không để lại "dấu vết" gì nên khó phát hiện có tính sót hay không
Ngoài ra pác có thể chỉ giúp mình việc:
1. đọc dữ liệu từ thuộc tính của blook (tọa độ điểm chèn, cao độ, vvv)
2. làm thế nào để đọc được yêu cầu của lệnh cad ví dụ: muốn biết đăngf sau (command "ucs" ... thì viết tiếp cái gìư
còn nhiểu nữa mong pác chỉ giáo
  • 0

#15 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 02 January 2008 - 09:42 AM

Xin trả lời bạn về chương trình như sau:
1. Việc quét quanh trọng tâm để tìm 3 điểm tuy có tốt hơn nhưng lisp lại phức tạp hơn rất nhiều. Hơn nữa, mã lệnh lisp trên tôi viết đã lâu, bây giờ đọc lại cũng chẳng còn nhớ nữa. Việc nâng cấp như vậy rất khó.
2. Giống 1.
3. Để kiểm tra lisp có làm sót hay không, trước khi bạn chạy lisp, hãy cho tất cả các giá trị về rỗng (như file mẫu của tôi). Nếu sót chỗ nào thì chỗ đó không hiện số (vì hiện giá trị cũ là rỗng).

Trả lời kiến thức lisp:
1. Để đọc được attribute bằng lisp, bạn cần lấy được entname của attribute đó thông qua entname của block (INSERT). muốn lấy entame của attribute thứ n (n=1,2,3,4...) từ ename của block, mã lệnh như sau:
(setq ent entbl)
(repeat n (setq ent (entnext ent)))
Trong đó, ent là ename của attribute, entbl là ename của block.

Ví dụ lệnh test sau đây sẽ highlight attribute đầu tiên của block được chọn:
(defun c:test()
(setq entbl (car (entsel "\nHay chon block: ")))

(setq ent entbl)
(repeat 1 (setq ent (entnext ent)))

(redraw ent 3)
(princ)
)

2. Bạn dùng lệnh CAD, sau đó ghi lại thứ tự những gì mà bạn nhập vào.
Ví dụ những gì mà bạn gõ tại dòng lệnh:

Command: ucs
Current ucs name: *WORLD*
Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]
: 3
Specify new origin point <0,0,0>: 0,0,0
Specify point on positive portion of X-axis <1.0000,0.0000,0.0000>: @1,1
Specify point on positive-Y portion of the UCS XY plane
<-0.7071,0.7071,0.0000>: @1,2

Thì tương đương với:
(command "ucs" "3" "@1,1" "@1,2")

  • 0

#16 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 02 January 2008 - 10:45 AM

Xin trả lời bạn về chương trình như sau:
1. Việc quét quanh trọng tâm để tìm 3 điểm tuy có tốt hơn nhưng lisp lại phức tạp hơn rất nhiều. Hơn nữa, mã lệnh lisp trên tôi viết đã lâu, bây giờ đọc lại cũng chẳng còn nhớ nữa. Việc nâng cấp như vậy rất khó.
2. Giống 1.
3. Để kiểm tra lisp có làm sót hay không, trước khi bạn chạy lisp, hãy cho tất cả các giá trị về rỗng (như file mẫu của tôi). Nếu sót chỗ nào thì chỗ đó không hiện số (vì hiện giá trị cũ là rỗng).

Trả lời kiến thức lisp:
1. Để đọc được attribute bằng lisp, bạn cần lấy được entname của attribute đó thông qua entname của block (INSERT). muốn lấy entame của attribute thứ n (n=1,2,3,4...) từ ename của block, mã lệnh như sau:

(setq ent entbl)
(repeat n (setq ent (entnext ent)))
Trong đó, ent là ename của attribute, entbl là ename của block.

Ví dụ lệnh test sau đây sẽ highlight attribute đầu tiên của block được chọn:
(defun c:test()
(setq entbl (car (entsel "\nHay chon block: ")))

(setq ent entbl)
(repeat 1 (setq ent (entnext ent)))

(redraw ent 3)
(princ)
)

2. Bạn dùng lệnh CAD, sau đó ghi lại thứ tự những gì mà bạn nhập vào.
Ví dụ những gì mà bạn gõ tại dòng lệnh:

Thì tương đương với:
(command "ucs" "3" "@1,1" "@1,2")

Cám ơn Nguyễn Hoanh!
Tôi vẫn con lơ mơ một tí, cái trên thì được rồi nhưng mà trường hợp thực hiện lệnh thì hắn ra hộp thoại ví dụ như lện layer, hatch ... tôi nhớ có ai đó đã chỉ rồi nhưng tìm hoài không thấy hình như có Pause rồi ghi lại - phiền pác chỉ giúp.
Tôi có một đoạn lisp về nội suy nhưng không biết làm sao chuyển để pác đọc để hiểu ý của tôi
  • 0

#17 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 02 January 2008 - 01:32 PM

... cái trên thì được rồi nhưng mà trường hợp thực hiện lệnh thì hắn ra hộp thoại ví dụ như lện layer, hatch ... tôi nhớ có ai đó đã chỉ rồi nhưng tìm hoài không thấy hình như có Pause rồi ghi lại - phiền pác chỉ giúp.

Nếu nhập lệnh từ dòng nhắc command:
Command: layer + Enter -> Hiện hộp thoại Layer Properties Manager

Nhưng nếu nhập:
Command: (command "layer" pause) + Enter (có khi cũng chẳng cần pause) nó sẽ hiện các lệnh con:
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
Thực hiện các lệnh con bằng cách gõ chữ HOA ở đầu mỗi tuỳ chọn. Ví dụ, muốn tạo layer mới gõ N + Enter... Tóm lại, nó yêu cầu cái gì mình đáp ứng cái đó cho đến khi kết thúc lệnh. Ghi lại toàn bộ và đưa vào biểu thức lisp tất cả những yêu cầu trên là OK.
  • 0

#18 thu-thuy

thu-thuy

    biết pan

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

Đã gửi 06 April 2008 - 07:58 PM

Sau đây là chương trình Lisp CADVietSN (CADViet Sannen) với lệnh lisp là CVSN thỏa mãn yêu cầu của Vbao. Chương trình làm việc theo nguyên tắc sau:
Bước 1: Người sử dụng insert các block điểm tính toán (VD như KLuong_1) vào tâm của các ô lưới, và đặt tên cho các điểm này trước (bằng lệnh hiệu chỉnh ATTEDIT).
Bước 2: Người sử dụng gọi lệnh CVSN và nhập vào các thông số:
a. Tên layer chứa text có giá trị cao độ hiện trạng.
b. Tên layer chứa text có giá trị cao độ trung bình thiết kế.
c. Chiều dài ô lưới điển hình.
d. Tên block điểm tính toán.
Sau đó chương trình yêu cầu người sử dụng chọn các block điểm tính toán cần tính. Kết quả tính sẽ được update vào block điểm tính toán.

Chương trình sẽ tính bằng thuật toán sau với mỗi điểm block tính toán:
- Quét qua tất cả các text nằm trong layer cao độ trung bình thiết kế để tìm đối tượng text gần nhất. Lấy giá trị này vào giá trị cao độ trung bình thiết kế.
- Quét qua tất cả các text nằm trong layer cao độ hiện trạng (là các mắt của ô lưới) lấy 4 (hoặc 3 hay 5) điểm gần nhất thỏa mãn điều kiện khoảng cách từ điểm tính toán tới các điểm này nhỏ hơn chiều dài ô lưới. Tính cao độ trung bình và diện tích ô lưới theo 4 (hoặc 3|5) điểm này. Điền hai thông số này vào 2 ô trong block điểm tính toán.
- Tính khối lượng đào (hoặc đắp) bằng cách lấy khối tích của phần hiện trạng trừ đi khối tích của phần tính toán.

Như vậy, chương trình không quan tâm đến việc các điểm nào tạo nên ô lưới, nó chỉ tìm 4 (hoặc 3|5) điểm gần điểm tính toán nhất để tạo thành ô lưới. Và lấy điểm cao độ thiết kế gần nhất để làm cao độ thiết kế trung bình.

Block KLuong_1 nằm trong file KLuong_1.dwg dưới đây (không sử dụng được file ban đầu của Vbao do bạn làm thừa 2 Attribute dẫn đến chương trình sẽ chạy sai).

------------------------------------------
Cách sử dụng:
Bước 1 - Chuẩn bị file tính toán:
- Text chứa giá trị cao độ hiện trạng phải có điểm chèn trùng với đỉnh ô lưới (để chương trình biết chính xác tọa độ) và nằm trong cùng 1 layer riêng.
- Text chứa giá trị cao độ trung bình thiết kế phải nằm gần tâm ô lưới
- Insert file KLuong_1.dwg vào file tính toán để thành block KLuong_1.
- Copy các block điểm tính toán này vào tâm các ô lưới.

Bước 2 - Chạy chương trình:
2. Upload file CADVietSN.lsp.
3. Gọi lệnh CVSN
- Nhập vào các thông số: tên layer chứa cao độ hiện trạng, tên layer chứa cao độ thiết kế, chiều dài ô lưới điển hình, tên block điểm tính toán (nhập vào KLuong_1).
- Chọn các block cần update kết quả tính toán.

Dưới đây là file lisp, file KLuong_1.dwg và file mẫu chuẩn.
Với file mẫu này, layer chứa cao độ hiện trạng là caodo2, layer chứa cao độ thiết kế là caodo, chiều dài lưới điển hình là 25, tên block điểm tính toán là KLuong_1

<a href="http://www.cadviet.com/upfiles/filemau.zip" target="_blank">http://www.cadviet.com/upfiles/filemau.zip</a>
<a href="http://www.cadviet.com/upfiles/KLuong_1.zip" target="_blank">http://www.cadviet.com/upfiles/KLuong_1.zip</a>
<a href="http://www.cadviet.com/upfiles/CADVietSN.lsp" target="_blank">http://www.cadviet.com/upfiles/CADVietSN.lsp</a>

Với file mẫu trên, sử dụng chương trình CADViet SanNen:

Trước khi chạy chương trình
Hình đã gửi

Sau khi chạy chương trình
Hình đã gửi
Chú ý: block điểm tính toán phải đặt chuẩn vào tâm của hình vuông, để chương trình nhận biết được các điểm thuộc ô lưới.



đã áp dụng đúng cách của bạn hướng dẫn, nhưng phần tính diện tích ko đúng mình nhập là 10 thi phải ra là 100.đằng náy nó lại ra lẻ lẻ.đo thử cái file mẫu thấy cũng ko chuẩn. diện tích là 625 (chiều dài mỗi canh là 25)nhưng đo chỉ đc 23,5.ai biết cách khắc phục chỉ dùm với
  • 0

#19 traiquebavi

traiquebavi

    biết vẽ circle

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

Đã gửi 01 May 2008 - 10:38 AM

rất cám ơn anh Hoàng vì tiện ích trên.
  • 0

#20 thangkho

thangkho

    biết vẽ line

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

Đã gửi 08 August 2008 - 10:37 PM

Trong file của bạn tôi thấy có các layer và tôi nghĩ như sau:
-caodo : cao độ hiện trạng
-caodo2 : cao độ hiện trạng nội suy vào ô lưới (tôi ko chắc lắm vì thấy nó toàn sai)
Các thông tin còn lại tôi chưa hiểu lắm.
- Nhập cao độ thiết kế của ô lưới: tại sao vậy, khi san nền xong các ô lưới là hình bậc thang á? (vì cao độ mỗi ô lưới khác nhau)
- Khối lượng đào đắp tại sao chỉ có 1 dòng, khi trong 1 ô lưới vừa đào vừa đắp thì sao.

Theo tôi, một hồ sơ san nền chuẩn như sau:
- Thiết kế san nền: bao gồm bình đồ hiện trạng (tất nhiên phải có), bình đồ thiết kế được biểu diễn bằng các đường đồng mức thiết kế, các đường đồng mức thiết kế này có thể là đường thẳng, đường gãy khúc, đường cong... mô tả một mặt phẳng lưới thiết kế san nền. Sau đó trên mặt bằng ta chia ô lưới san nền, kích thước chuẩn một ô lưới là 20m x 20m (cho khối lượng chẵn, kông có số lẻ), nội suy các cao độ hiện trạng vào các đỉnh của ô lưới, các đường đồng mức thiết kế giúp ta tính toán được cao độ thiết kế tại đỉnh ô lưới.
- Tính toán khối lượng san nền: Khi có được thiết kế san nền, việc tính toán khối lượng tương đối dễ dàng, lấy cao độ thiết kế trừ cho cao độ hiện trạng ta có độ chênh cao (h), lấy h trung bình trong 1 ô lưới nhân cho diện tích ta có khối lượng trong ô lưới, nếu h âm: đào, h + : đắp. Nếu h trong 1 ô lưới có - có + thì vưa đào vừa đắp, và có ranh giới đào đắp.
Gửi các bạn 2 file tham khảo

file đầu: san nền qua 1 quả đồi, bạn sẽ thấy ranh giới đào đắp rõ rệt tiện ngang quả đồi.
file sau: có đồng mức thiết kế để tham khảo.

<a href="http://www.cadviet.c...les/SANNEN.dwg" target="_blank"><a href="http://www.cadviet.c...les/SANNEN.dwg" target="_blank">http://www.cadviet.com/upfiles/SANNEN.dwg</a></a>
<a href="http://www.cadviet.c...es/SANNEN2.dwg" target="_blank"><a href="http://www.cadviet.c...es/SANNEN2.dwg" target="_blank">http://www.cadviet.com/upfiles/SANNEN2.dwg</a></a>

anh boxman gữi link khác đi anh, link trên die rồi. Thanks
  • 0