Đến nội dung


Hình ảnh
* * - - - 2 Bình chọn

[Đã xong] Nhờ giúp Lisp tính diện tích và lập bảng


  • Please log in to reply
92 replies to this topic

#1 matran

matran

    biết vẽ line

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

Đã gửi 31 July 2009 - 06:24 PM

Nhờ các bác viết giúp lisp tính diện tích và lập ra bảng như trong hình. Cám ơn các bác rất nhiều
Hình đã gửi
  • 0

#2 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 31 July 2009 - 06:55 PM

Anh thử tìm trong đây xem, nếu thấy anh hãy chia sẻ:

http://www.cadviet.c...;sa=Search#1345
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#3 matran

matran

    biết vẽ line

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

Đã gửi 31 July 2009 - 11:41 PM

Anh thử tìm trong đây xem, nếu thấy anh hãy chia sẻ:

http://www.cadviet.c...;sa=Search#1345

Cám ơn bạn, những lisp tính diện tích có nhiều trên diễn đàn mình đã tham khảo rồi. Nhưng lisp tính diện tích và lập bảng ngay trên cad thì có lẽ chưa có. Bởi vậy mới nhờ các pác pro giúp đỡ.
  • 0

#4 matran

matran

    biết vẽ line

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

Đã gửi 01 August 2009 - 07:23 PM

Chắc đề tài này quá nhàm chán hay sao kg thấy bác nào để tâm hết. Chết tui rùi.
  • 0

#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 August 2009 - 02:15 AM

Nhờ các bác viết giúp lisp tính diện tích và lập ra bảng như trong hình. Cám ơn các bác rất nhiều
Hình đã gửi


Của bạn đây. lisp sẽ tính diện tích thực theo tỷ lệ bản vẽ bạn nhập vào. đầu tiên bạn phải chọn vị trí đặt bảng thống kê diện tích trên bản vẽ rồi mới pick chọn các miền cần đo diện tích. pick tới đâu diện tích sẽ được thống kê vào bảng đến đó. Mình viết thêm cho bạn một ô tính tổng diện tích các miền đã đo (yêu cầu của bạn không thấy nêu vấn đề này), tuy nhiên bạn phải Enter để kết thúc lệnh (không nhấn Esc nhé) thì lisp mới vẽ được ô cuối cùng này.
(defun c:r()
(setvar "cmdecho" 0)
(setq lacol (getvar "CEColor"))
(setq ladin (getvar "dimzin"))
(setq laos (getvar "osmode"))
(if (not tl) (setq tl 1))
(if (not h) (setq h 1))
(setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))
caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >: ")))
(if tl1 (setq tl tl1))
(if caot1 (setq h caot1))

(setq k 0
tdt 0)
(setq ss (ssadd))

(setvar "dimzin" 0)
(setvar "OSMODE" 0)
(setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))
(setq P1 (list (+ (car PT)(* 6 h)) (cadr PT))
P2 (list (+ (car PT)(* 22 h)) (cadr PT))
P3 (list (car PT) (- (cadr PT)(* 3 h)))
P4 (list (car P1) (cadr P3))
P5 (list (car P2) (cadr P3))
P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))
P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
);setq
(command "pline" PT P2 P5 P3 "C"
"pline" P1 P4 ""
"text" "m" P6 (* 1.2 h) 0 "%%UB¶ng thèng kª diÖn tÝch"
"text" "m" P7 h 0 "STT"
"text" "m" P8 h 0 "DiÖn tÝch (m2)"
);command

(setq pt1 (getpoint "\n Chon mien tinh dien tich : "))
(while (/= pt1 nil)
(setq k (+ 1 k))
(command "TEXT" "m" pt1 (* 3 h) 0 (rtos k 2 0))
(setq PT (list (car P3) (cadr P3))
P1 (list (+ (car PT)(* 6 h)) (cadr PT))
P2 (list (+ (car PT)(* 22 h)) (cadr PT))
P3 (list (car PT) (- (cadr PT)(* 3 h)))
P4 (list (car P1) (cadr P3))
P5 (list (car P2) (cadr P3))
P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
P9 (list (car PT) (- (cadr P3)(* 3 h)))
P10 (list (car P1) (cadr P9))
P11 (list (car P2) (cadr P9))
P12 (list (car P7) (- (cadr P3)(* 1.5 h)))
P13 (list (car P8) (cadr P12))
);setq
(command "CECOLOR" 4 "-boundary" pt1 "" )
(setvar "CECOLOR" lacol)
(setq et (entlast))
(ssadd et ss)
(command "area" "e" "last")
(setq et (entlast))
(ssadd et ss)
(setq dtcon (* (getvar "AREA") tl tl))
(setq tdt (+ dtcon tdt))
(command "erase" ss "")

(command "pline" PT P2 P5 P3 "C"
"pline" P1 P4 ""
"text" "m" P7 h 0 (rtos k 2 0)
"text" "m" P8 h 0 (rtos dtcon 2 2))

(setq pt1 (getpoint "\n chon mien tinh dien tich tiep theo hoac enter de ket thuc lenh..."))
);while
(setq ss nil)
(setvar "DIMZIN" ladin)
(command "pline" P3 P9 P11 P5 "C"
"pline" P10 P4 ""
"text" "m" P12 h 0 "Tæng"
"text" "m" P13 h 0 (rtos tdt 2 2)
);command
(setvar "OSMODE" laos)
(setvar "cmdecho" 1)
)

  • 9

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 matran

matran

    biết vẽ line

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

Đã gửi 02 August 2009 - 02:44 AM

Của bạn đây. lisp sẽ tính diện tích thực theo tỷ lệ bản vẽ bạn nhập vào. đầu tiên bạn phải chọn vị trí đặt bảng thống kê diện tích trên bản vẽ rồi mới pick chọn các miền cần đo diện tích. pick tới đâu diện tích sẽ được thống kê vào bảng đến đó. Mình viết thêm cho bạn một ô tính tổng diện tích các miền đã đo (yêu cầu của bạn không thấy nêu vấn đề này), tuy nhiên bạn phải Enter để kết thúc lệnh (không nhấn Esc nhé) thì lisp mới vẽ được ô cuối cùng này.


Cám ơn bạn rất nhiều. Cái cách bạn kẻ ô thật linh động. Bạn thật chu đáo khi tính thêm cái tổng. Nếu có thể bạn xóa cái polyline mới tạo khi tính diện tích và chỉ cần lấy một số lẽ thôi. Một lần nữa xin cám ơn bạn
  • 0

#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 August 2009 - 02:53 AM

Nếu có thể bạn xóa cái polyline mới tạo khi tính diện tích và chỉ cần lấy một số lẽ thôi. Một lần nữa xin cám ơn bạn


Tưởng mỗi mình thức đêm chứ. ^^
Mình đã sửa trực tiếp vào code trên theo như yêu cầu của bạn rồi đấy.
  • 6

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#8 kiukiu.

kiukiu.

    biết vẽ line

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

Đã gửi 19 August 2009 - 08:57 AM

Nhờ 2 bác Thaitreets và matran ma em xin được lisp tính diện tích hay; nhưng em có ý kiến như này nhờ bác Thaistreets sửa dùm hoặc viết dùm hộ em nhé trên lisp đó nhé:
1 Nét của các ô lưới dường như to quá.
2. Phông chữ bị lỗi, và để kiểu chữ đó thì xấu quá.
3. Các số TT hiện trên hình vẽ, bác có thể để vào một layer khác không? Bởi vì khi xoá chúng đi tiện hơn rất là nhiều (đối với những bản vẽ có nhiều vùng để tính).
4. Bác có thể cho thêm cột toạ độ các điểm vào vì trong quy hoạch có các tiện ích đó nó sẽ tiện hơn.
Nhờ bác Thaistreets giúp em nhé!
  • 0

#9 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 22 August 2009 - 12:56 PM

Nhờ các Bác chỉnh lại lisp này dùm em 1 cái, em làm bên trắc địa nên khi yêu cầu nhập tì lệ thì em nhập 1/500 ( tương đương tỉ lệ 1/1), 200 ( tương đương 5/2), 1000 ( tương đương 1/2), 2000 ( tương đương 5/20). Cá mơn các Bác nhiều
  • 0

#10 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 22 August 2009 - 12:57 PM

Nhờ các Bác chỉnh lại lisp này dùm em 1 cái, em làm bên trắc địa nên khi yêu cầu nhập tì lệ thì em nhập 1/500 ( tương đương tỉ lệ 1/1), 200 ( tương đương 5/2), 1000 ( tương đương 1/2), 2000 ( tương đương 5/20). Cá mơn các Bác nhiều
  • 0

#11 shinnikel

shinnikel

    biết vẽ line

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

Đã gửi 22 August 2009 - 12:59 PM

Lisp hay nhưng nếu bổ xung thêm tính năng tính được DT có khoét bên trong luôn thì còn gì bằng. :bigsmile:
  • 0

#12 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 22 August 2009 - 01:27 PM

Của bạn đây. lisp sẽ tính diện tích thực theo tỷ lệ bản vẽ bạn nhập vào. đầu tiên bạn phải chọn vị trí đặt bảng thống kê diện tích trên bản vẽ rồi mới pick chọn các miền cần đo diện tích. pick tới đâu diện tích sẽ được thống kê vào bảng đến đó. Mình viết thêm cho bạn một ô tính tổng diện tích các miền đã đo (yêu cầu của bạn không thấy nêu vấn đề này), tuy nhiên bạn phải Enter để kết thúc lệnh (không nhấn Esc nhé) thì lisp mới vẽ được ô cuối cùng này.

(defun c:r()
(vl-load-com)
(setvar "cmdecho" 0)
(setq lacol (getvar "CEColor"))
(setq ladin (getvar "dimzin"))
(setq laos (getvar "osmode"))
(if (not tl) (setq tl 1))
(if (not h) (setq h 1))
(setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))
caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >: ")))
(if tl1 (setq tl tl1))
(if caot1 (setq h caot1))

(setq k 0
tdt 0)
(setq ss (ssadd))

(setvar "dimzin" 0)
(setvar "OSMODE" 0)
(setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))
(setq P1 (list (+ (car PT)(* 6 h)) (cadr PT))
P2 (list (+ (car PT)(* 22 h)) (cadr PT))
P3 (list (car PT) (- (cadr PT)(* 3 h)))
P4 (list (car P1) (cadr P3))
P5 (list (car P2) (cadr P3))
P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))
P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
);setq
(command "pline" PT P2 P5 P3 "C"
"pline" P1 P4 ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "m" P6 (* 1.2 h) 0 "%%UBAÛNG THOÁNG KEÂ DIEÄN TÍCH"
"text" "m" P7 h 0 "STT"
"text" "m" P8 h 0 "DIEÄN TÍCH (M2)"
);command

(setq pt1 (getpoint "\n Chon mien tinh dien tich : "))
(while (/= pt1 nil)
(setq k (+ 1 k))
(command "TEXT" "m" pt1 (* 3 h) 0 (rtos k 2 0))
(setq PT (list (car P3) (cadr P3))
P1 (list (+ (car PT)(* 6 h)) (cadr PT))
P2 (list (+ (car PT)(* 22 h)) (cadr PT))
P3 (list (car PT) (- (cadr PT)(* 3 h)))
P4 (list (car P1) (cadr P3))
P5 (list (car P2) (cadr P3))
P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
P9 (list (car PT) (- (cadr P3)(* 3 h)))
P10 (list (car P1) (cadr P9))
P11 (list (car P2) (cadr P9))
P12 (list (car P7) (- (cadr P3)(* 1.5 h)))
P13 (list (car P8) (cadr P12))
);setq
(command "CECOLOR" 4 "-boundary" pt1 "" )
(setvar "CECOLOR" lacol)
(setq et (entlast))
(ssadd et ss)
(command "area" "e" "last")
(setq et (entlast))
(ssadd et ss)
(setq dtcon (* (getvar "AREA") tl))
(setq tdt (+ dtcon tdt))
(command "erase" ss "")

(command "pline" PT P2 P5 P3 "C"
"pline" P1 P4 ""
"text" "m" P7 h 0 (rtos k 2 0)
"text" "m" P8 h 0 (rtos dtcon 2 2))

(setq pt1 (getpoint "\n chon mien tinh dien tich tiep theo hoac enter de ket thuc lenh..."))
);while
(setq ss nil)
(setvar "DIMZIN" ladin)
(command "pline" P3 P9 P11 P5 "C"
"pline" P10 P4 ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "m" P12 h 0 "TOÅNG"
"text" "m" P13 h 0 (rtos tdt 2 2)
);command
(setvar "OSMODE" laos)
(setvar "cmdecho" 1)
)

Nếu được bạn bổ sung thêm gán text là font Vni-Hel thì đẹp mắt hơn bạn à, chứ như thế xấu quá
Xin lỗi bạn Thaistreetz mình xin bổ sung thêm gán text lá font Vni-helcon để bạn nào có nhu cầu thì sử dụng

Bài viết đã được chỉnh sửa nội dung bởi HoangSon614: 22 August 2009 - 01:38 PM

  • 3

#13 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 22 August 2009 - 03:29 PM

Việc mình không tạo textstyle riêng cho lisp này là có 1 vài lý do.
1. việc lisp tạo ra 1 textstyle mới rất có thể sảy ra trường hợp trùng tên với 1 textstyle đã có trong bản vẽ. và như thế lisp có thể gây ra sự thay đổi về font chữ của các chi tiết khác ngoài ý muốn.
2. việc sử dụng font chữ nào còn tùy vào nhu cầu của người sử dụng. mỗi người thích dùng 1 loại font chữ khác nhau, với mỗi loại bản vẽ cũng lại có những font chữ mang đặc thù riêng.
3. Lisp sẽ sử dụng textstyle hiện thời khi bạn vẽ. như thế sẽ đảm bảo sự đồng bộ về các textstyle của người sử dụng. ngoài ra nó cũng giúp người sử dụng có được sự lựa chọn linh động hơn cho nhu cầu của mình.
Mình là KS người Băc, KS ngoài này thường thích sử dụng bảng mã TCVN3 nên mình mặc định lisp chạy với TCVN3. còn các bạn miền nam thì lại thích sử dụng bảng mã VNI hơn. các bạn cần chỉnh lại 1 chút trước khi sử dụng.
  • 4

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#14 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 22 August 2009 - 03:50 PM

Nhờ các Bác chỉnh lại lisp này dùm em 1 cái, em làm bên trắc địa nên khi yêu cầu nhập tì lệ thì em nhập 1/500 ( tương đương tỉ lệ 1/1), 200 ( tương đương 5/2), 1000 ( tương đương 1/2), 2000 ( tương đương 5/20). Cá mơn các Bác nhiều

Mình ko fải dân trắc địa nên không hiểu lắm ý của bạn về mấy tỷ lệ kia.
Theo như mình hiểu thì cái bạn cần không fải là diện tích thực tế mà là diện tích thực tế /500 lần. Nếu đúng vậy thì con số này dùng vào việc gì nhỉ?
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#15 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 22 August 2009 - 08:07 PM

.............
2. việc sử dụng font chữ nào còn tùy vào nhu cầu của người sử dụng. mỗi người thích dùng 1 loại font chữ khác nhau, với mỗi loại bản vẽ cũng lại có những font chữ mang đặc thù riêng.
3. Lisp sẽ sử dụng textstyle hiện thời khi bạn vẽ. như thế sẽ đảm bảo sự đồng bộ về các textstyle của người sử dụng. ngoài ra nó cũng giúp người sử dụng có được sự lựa chọn linh động hơn cho nhu cầu của mình.
............

Đồng ý với bạn, tương tự lệnh LINE, TEXT ... trong CAD, lệnh trong LISP nên lấy các giá trị hiện hành như : layer, linetype, textstyle, ...
Viêc sử dụng layer, linetype, textstyle, ... nào sẽ do người dùng quyết định.
(Trừ trường hợp LISP được viết theo Đơn đặt hàng cụ thể.)

......... font Vni-Hel thì đẹp mắt hơn bạn à, chứ như thế xấu quá

font đẹp hay xấu là theo chủ quan của mỗi người, đặc biệt là ý của chủ đầu tư. (khách hàng là thượng đế)
  • 2

#16 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 22 August 2009 - 11:07 PM

Cá mơn Thaistreetz và Bác giabach nhiều, vì mình là dân trác địa nên tỷ lẽ bạn vẽ của mình là 1/500 tương đưong với tỷ lệ thực của bản vẽ là 1/1, nếu mình vẽ ở tỷ lệ 1/200 tương dương với tỷ lệ thực của bản vẽ là 2/5. Sau đây là file mẫu của mình theo 4 tỷ lệ khác nhau nhưng cùng kích thước hình học.http://www.cadviet.com/upfiles/2/mau_6_1.dwg
  • 0

#17 tivanteo

tivanteo

    biết vẽ circle

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

Đã gửi 23 August 2009 - 12:52 AM

Nhờ thaistreetz có thể làm cho lisp tính diện tích này có thể tính diện tích có trừ đi phần diện tích lỗ khoét
  • 0

#18 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 August 2009 - 05:05 AM

Nhờ thaistreetz có thể làm cho lisp tính diện tích này có thể tính diện tích có trừ đi phần diện tích lỗ khoét

Chào thaistreetz :
Bạn có thể xem code ở bài viết của Tue_NV có tính diện tích trừ đi phần lỗ khoét.
Nếu đa giác không khoét lỗ : tính diện tích của đa giác
Nếu đa giác khoét lỗ : tính diện tích của đa giác trừ đi phần khoét lỗ
http://www.cadviet.c...amp;#entry53407
Hy vọng bạn xây dựng code này thành công
  • 2

#19 tivanteo

tivanteo

    biết vẽ circle

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

Đã gửi 23 August 2009 - 12:26 PM

minh sửa thử nhưng nó chỉ tính được vùng diện tích lỗ khoét xin mọi người cho biết lỗi tại đâu
http://www.cadviet.c...files/2/ert.lsp
  • 0

#20 tivanteo

tivanteo

    biết vẽ circle

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

Đã gửi 23 August 2009 - 12:39 PM

xin lỗi thaistreetz vì đã sửa chương trình, có thể xem giúp hộ được không
  • 0