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

#21 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:59 PM

bạn đang trên topic phải không xem giúp tôi chưa
  • 0

#22 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

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

Cảm ơn Anh Tuệ rất nhiều. :bigsmile:
Đây là lisp đã đã được sửa để tính diện tích cả hình có lỗ khoét và không có lỗ khoét.

(defun c:bdt()
(setvar "cmdecho" 0)
(command "undo" "begin")
(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 2) " >: ")))
(if tl1 (setq tl tl1))
(if caot1 (setq h caot1))
(setq k 0 tdt 0)

(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)
(command "erase" ss "")
(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
(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary
(command "cecolor"4 "-boundary" pt1 "");; boundary
(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary
(setq cur frome ss (ssadd) S 0)
(while (not (eq cur toe));; chon cac doi tuong tu frome den toe
(setq cur (entnext cur) ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq dt (getvar "area") S (+ S dt))
);while
(command "area" "A" "O" "L" "" "")
(setq dt (getvar "area"))
(setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))
(setvar "CEColor" lacol)
(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 s 2 2))
(setq pt1 (getpoint (strcat "\nTong dien tich = " (rtos tdt 2 3) "m2. chon mien do tiep theo...")))
);while
(command "erase" ss "")
(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)
(command "undo" "end")
(setvar "cmdecho" 1)
)


@vantiteo: Mình đang bận quá, tranh thủ thời gian ngủ trưa để sửa lại lisp này cho mọi người thôi. bạn có thể xem lisp của anh Tuệ để tìm ra chỗ thiếu sót của bạn. lisp của anh Tuệ rất hay.
@xuandao0708: Bạn cần phân biệt tỷ lệ vẽ và tỷ lệ in nhé. lisp này yêu cầu nhập vào tỷ lệ vẽ vì chỉ có tỷ lệ vẽ mới ảnh hưởng trực tiếp đến kết quả tính toán. theo như bạn nói thì thì tỷ lệ 1/500 của bạn chính là tỷ lệ in của bản vẽ ra giấy. còn thực chất bản vẽ của bạn vẫn được vẽ với tỷ lệ 1/1. nghĩa là 1 đơn vị vẽ trong cad sẽ tương ứng với 1 đơn vị đo ngoài thực địa.
  • 6

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


#23 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 - 03:19 PM

Cảm ơn Anh Tuệ rất nhiều. :bigsmile:
Đây là lisp đã đã được sửa để tính diện tích cả hình có lỗ khoét và không có lỗ khoét.


(defun c:bdt()
(setvar "cmdecho" 0)
(command "undo" "begin")
(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 2) " >: ")))
(if tl1 (setq tl tl1))
(if caot1 (setq h caot1))
(setq k 0 tdt 0)

(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)
(command "erase" ss "")
(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
(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary
(command "cecolor"4 "-boundary" pt1 "");; boundary
(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary
(setq cur frome ss (ssadd) S 0)
(while (not (eq cur toe));; chon cac doi tuong tu frome den toe
(setq cur (entnext cur) ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq dt (getvar "area") S (+ S dt))
);while
(command "area" "A" "O" "L" "" "")
(setq dt (getvar "area"))
(setq S (* (+ S (* dt 2)) tl) tdt (+ s tdt))
(setvar "CEColor" lacol)
(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 s 2 2))
(setq pt1 (getpoint (strcat "\nTong dien tich = " (rtos tdt 2 3) "m2. chon mien do tiep theo...")))
);while
(command "erase" ss "")
(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)
(command "undo" "end")
(setvar "cmdecho" 1)
)


@vantiteo: Mình đang bận quá, tranh thủ thời gian ngủ trưa để sửa lại lisp này cho mọi người thôi. bạn có thể xem lisp của anh Tuệ để tìm ra chỗ thiếu sót của bạn. lisp của anh Tuệ rất hay.
@xuandao0708: Bạn cần phân biệt tỷ lệ vẽ và tỷ lệ in nhé. lisp này yêu cầu nhập vào tỷ lệ vẽ vì chỉ có tỷ lệ vẽ mới ảnh hưởng trực tiếp đến kết quả tính toán. theo như bạn nói thì thì tỷ lệ 1/500 của bạn chính là tỷ lệ in của bản vẽ ra giấy. còn thực chất bản vẽ của bạn vẫn được vẽ với tỷ lệ 1/1. nghĩa là 1 đơn vị vẽ trong cad sẽ tương ứng với 1 đơn vị đo ngoài thực địa.

Rất mừng vì bạn đã xây dựng thành công code này. Và có lẽ người được chúng ta cảm ơn nhiều nhất chính là bác Hoành vì bác Hoành đã góp phần cho chúng ta có được code hay và xây dựng được các chương trình rất hay
Một lần nữa cảm ơn bác Hoành. Thanks
  • 2

#24 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 - 03:48 PM

Cám ơn thaistreetz và anh tuệ nhé đây la chương trình mình đã thêm phần tính khối lượng, vì mình làm đóng tàu nên khối lượng riêng mình lấy là của thép mọi người tham khảo nhé
http://www.cadviet.c...les/2/ert_1.lsp
  • 1

#25 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 23 August 2009 - 08:26 PM

Đây là lisp đã đã được sửa để tính diện tích cả hình có lỗ khoét và không có lỗ khoét.

(defun c:bdt()
(setvar "cmdecho" 0)
(command "undo" "begin")
(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 2) " >: ")))
(if tl1 (setq tl tl1))
(if caot1 (setq h caot1))
(setq k 0 tdt 0)

(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)
(command "erase" ss "")
(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
(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary
(command "cecolor"4 "-boundary" pt1 "");; boundary
(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary
(setq cur frome ss (ssadd) S 0)
(while (not (eq cur toe));; chon cac doi tuong tu frome den toe
(setq cur (entnext cur) ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq dt (getvar "area") S (+ S dt))
);while
(command "area" "A" "O" "L" "" "")
(setq dt (getvar "area"))
(setq S (* (+ S (* dt 2)) tl) tdt (+ s tdt))
(setvar "CEColor" lacol)
(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 s 2 2))
(setq pt1 (getpoint (strcat "\nTong dien tich = " (rtos tdt 2 3) "m2. chon mien do tiep theo...")))
);while
(command "erase" ss "")
(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)
(command "undo" "end")
(setvar "cmdecho" 1)
)

[/quote]
Bạn Thaistreetz có thể xem lại giúp mình không, cái này khi tính với tỷ lệ 1/1 thì d/t đúng, nhưng với những tỷ lệ khác thì không chính xác
(VD: Mình có khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000m2, vậy thiếu đi 10 lần)
Mình muốn là nhập tỷ lệ bản vẽ vào thì lisp tự tính diện tích sao cho d/t đó là d/t thực của khu đất. Cảm ơn bạn
  • 1

#26 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 August 2009 - 08:41 PM

Cám ơn thaistreetz và anh tuệ nhé đây la chương trình mình đã thêm phần tính khối lượng, vì mình làm đóng tàu nên khối lượng riêng mình lấy là của thép mọi người tham khảo nhé
http://www.cadviet.c...les/2/ert_1.lsp


Lisp của bạn chưa chạy được vì thiếu đâu đó một (hoặc vài) dấu đóng ngoặc.
mình đã xem qua lisp của bạn và có vài điều lưu ý bạn về lisp này.
- Xóa dòng (vl-load-com) đi vì lisp này không cần dùng đến nó. nếu để nó lại thì không sao đối với các bản cad từ 2004 trở lên. nhưng đối với các bản cad cũ như cad 14 sẽ không chạy được. Một số người vẫn phải dùng cad14 cho 1 vài việc.
- tuyệt đối không sử dụng chữ ký tự t làm biến nhé. (bạn tham khảo giải thích của Bác Hoành về biến này tại đây
- Nên có thêm phần khai báo khối lượng riêng của vật liệu cho phù hợp với nhu cầu chung của nhiều người, nhiều loại công việc.
- Nên sửa lại phần kẻ bảng cho gọn gàng hơn, giúp lisp chạy nhanh hơn đồng thời đỡ rác bản vẽ.
- Khi viêt lisp nên chú ý đặt ra trường hợp người dùng đang chạy thì nhất ESC bỏ dở lệnh giữa chừng dẫn đến việc rất nhiều biến hệ thống lisp can thiệp từ đầu sẽ bị thay đổi, dẫn đến khó khăn cho người vẽ. để giảm thiểu những thay đổi này thì nên trả lại giá trị ban đầu của các biến hệ thống ngay sau 1 thay đổi càng sớm càng tốt.
  • 1

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


#27 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 August 2009 - 08:46 PM

Bạn Thaistreetz có thể xem lại giúp mình không, cái này khi tính với tỷ lệ 1/1 thì d/t đúng, nhưng với những tỷ lệ khác thì không chính xác
(VD: Mình có khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000m2, vậy thiếu đi 10 lần)
Mình muốn là nhập tỷ lệ bản vẽ vào thì lisp tự tính diện tích sao cho d/t đó là d/t thực của khu đất. Cảm ơn bạn


Chết thật. đúng là mình nhầm chỗ này. đúng ra diện tích đo được phải chia cho bình phương của tỷ lệ vẽ mới đúng. mình mới nhân 1 lần. cảm ơn bạn đã phát hiện ra sai sót chết người này. :bigsmile:
Mình sửa trực tiếp vào code đã post bên trên rồi nhé.
  • 1

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


#28 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 23 August 2009 - 09:16 PM

Chết thật. đúng là mình nhầm chỗ này. đúng ra diện tích đo được phải chia cho bình phương của tỷ lệ vẽ mới đúng. mình mới nhân 1 lần. cảm ơn bạn đã phát hiện ra sai sót chết người này. :D
Mình sửa trực tiếp vào code đã post bên trên rồi nhé.

Vẫn chưa đúng bạn ơi, bây giờ thì diệất nhiều
(Cụ thể như: khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000.000m2, nhưng với khu đất 1000m2 vẽ với tỷ lệ 1/1 thì d/ là 1.000.000m2 gấp 1000 lần)
Nhờ bạn xem lại
  • 0

#29 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 August 2009 - 09:30 PM

Vẫn chưa đúng bạn ơi, bây giờ thì diệất nhiều
(Cụ thể như: khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000.000m2, nhưng với khu đất 1000m2 vẽ với tỷ lệ 1/1 thì d/ là 1.000.000m2 gấp 1000 lần)
Nhờ bạn xem lại


Đâu nhỉ. lần này mình chạy đúng mà.
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/1 thì chiều dài mỗi cạnh là 100 trên bản vẽ => lisp chạy đc kq là 10000.00
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 10 trên bản vẽ => lisp chạy đc kq là 10000.00
Như vậy là chính xác. lần này thì bạn nhầm rồi. hehe
  • 0

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


#30 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 23 August 2009 - 09:59 PM

Đâu nhỉ. lần này mình chạy đúng mà.
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/1 thì chiều dài mỗi cạnh là 100 trên bản vẽ => lisp chạy đc kq là 10000.00
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 10 trên bản vẽ => lisp chạy đc kq là 10000.00
Như vậy là chính xác. lần này thì bạn nhầm rồi. hehe

Bạn có nhầm không, sao lại 10.000m2, tỷ lệ 1/10 lại là mỗi cạnh là 10 trên bản vẽ, phải là 1000 mới đúng chứ nên kết quả là sai bạn à (100.000.000m2)
Bạn có thể xem lại được không
  • 0

#31 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 - 10:13 PM

Bạn có nhầm không, sao lại 10.000m2, tỷ lệ 1/10 lại là mỗi cạnh là 10 trên bản vẽ, phải là 1000 mới đúng chứ nên kết quả là sai bạn à (100.000.000m2)
Bạn có thể xem lại được không

10.000m2 (100x100) , tỷ lệ 1/10 => mỗi cạnh là 10 => S= 100m2 ới đúng chứ phải không bạn HoangSon?
Bạn sửa dòng này :
(setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))
thành dòng này :
(setq S (/ (+ S (* dt 2)) tl tl) tdt (+ s tdt))
  • 1

#32 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 23 August 2009 - 10:27 PM

10.000m2 (100x100) , tỷ lệ 1/10 => mỗi cạnh là 10 => S= 100m2 ới đúng chứ phải không bạn HoangSon?
Bạn sửa dòng này :
(setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))
thành dòng này :
(setq S (/ (+ S (* dt 2)) tl tl) tdt (+ s tdt))

Tue_NV xem lại dùm mình được không
Với tl vẽ 1/10 cho khu đất 10.000m2 thì đúng, nhưng cũng với tl vẽ đó (1/10) cho khu đất 1.000m2 thì không đúng (chỉ có 100m2, giảm đi 10 lần)
  • 0

#33 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 - 10:28 PM

mọi ngươi tranh luận ghê quá
  • 0

#34 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 23 August 2009 - 10:36 PM

Đâu nhỉ. lần này mình chạy đúng mà.
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/1 thì chiều dài mỗi cạnh là 100 trên bản vẽ => lisp chạy đc kq là 10000.00
khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 10 trên bản vẽ => lisp chạy đc kq là 10000.00
Như vậy là chính xác. lần này thì bạn nhầm rồi. hehe

Xin lỗi bạn Thaistreetz và Tue_NV mình đã nhầm
[ quote]khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000.000m2, nhưng với khu đất 1000m2 vẽ với tỷ lệ 1/1 thì d/ là 1.000.000m2 gấp 1000 lần[ /quote]
@Khu đất 1.000m2 nên mới có cạnh 100x100 t/l 1/10 dẫn tới sự hiểu lầm của 2 bạn.
  • 0

#35 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 August 2009 - 10:57 PM

Xin lỗi bạn Thaistreetz và Tue_NV mình đã nhầm
[ quote]khu đất 10.000m2 (100x100) vẽ với tỷ lệ 1/10 thì chiều dài mỗi cạnh là 100, nhưng d/t tính ra là 1000.000m2, nhưng với khu đất 1000m2 vẽ với tỷ lệ 1/1 thì d/ là 1.000.000m2 gấp 1000 lần[ /quote]
@Khu đất 1.000m2 nên mới có cạnh 100x100 t/l 1/10 dẫn tới sự hiểu lầm của 2 bạn.


Đúng rồi đó. Bạn chỉ cần hiểu đơn giản: Ngoài thực địa khu đất của bạn có mỗi cạnh là 100m. nhưng bạn vẽ với tỷ lệ 1/10 (1 đơn vị vẽ trong cad = 10m ngoài thực địa) thì bản vẽ của bạn sẽ có kích thước 10x10 như mình đã nói.
cách tính của lisp như sau:
đo diện tích trên bản vẽ được S = 10x10=100. => diện tích thực = S/(Tỷ lê)^2 = 100x10x10 = 10000.
  • 0

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


#36 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 - 11:27 PM

mình đã sửa nhờ thaistreetz kiểm tra hộ lisp còn kem nên giờ đang học hỏi
http://www.cadviet.c...les/2/ert_2.lsp
  • 0

#37 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 24 August 2009 - 12:38 AM

Nếu mình không lầm thì bạn Hoangson614 cũng là bên nghành trắc địa nhưng mình. Bạn Thaistreetz có thể cho mình giải thích 1 tý về tỷ lệ bản vẽ như sau, khi bản đồ ở tỷ lệ 1/500 thì tương đương với bản vẽ khi tính diện tích là 1/1, khi bản đồ ở tỷ lệ 1/200 thì tương đương với bản vẽ khi tính diện tích là 5/2, khi bản đồ ở tỷ lệ 1/1000 thì tương đương với bản vẽ khi tính diện tích là 5/10 và khi bản đồ ở tỷ lệ 1/2000 thì tương đương với bản vẽ khi tính diện tích là 5/20. Do khi tính dt bằng lisp R của bạn nó không cho mình nhập tỷ lệ là 2/5 nên cùng 1 thửa đất mà 2 diện tích khác nhau. Đây là file cad mẫu của mình
http://www.cadviet.c...les/2/mau_7.dwg
  • 0

#38 matran

matran

    biết vẽ line

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

Đã gửi 24 August 2009 - 01:12 AM

Nếu mình không lầm thì bạn Hoangson614 cũng là bên nghành trắc địa nhưng mình. Bạn Thaistreetz có thể cho mình giải thích 1 tý về tỷ lệ bản vẽ như sau, khi bản đồ ở tỷ lệ 1/500 thì tương đương với bản vẽ khi tính diện tích là 1/1, khi bản đồ ở tỷ lệ 1/200 thì tương đương với bản vẽ khi tính diện tích là 5/2, khi bản đồ ở tỷ lệ 1/1000 thì tương đương với bản vẽ khi tính diện tích là 5/10 và khi bản đồ ở tỷ lệ 1/2000 thì tương đương với bản vẽ khi tính diện tích là 5/20. Do khi tính dt bằng lisp R của bạn nó không cho mình nhập tỷ lệ là 2/5 nên cùng 1 thửa đất mà 2 diện tích khác nhau. Đây là file cad mẫu của mình
http://www.cadviet.c...les/2/mau_7.dwg

Bạn lấy diện tích tính đc chia cho (500/mẫu số tỷ lệ bản đồ) bình phương
Với ví dụ của bạn.
- TH 1 : tl 1/500 = 4158.67 / sqr(500/500)=4158.67
- TH 2 : tl 1/200 = 25991.7089 / sqr(500/200) = 4158.67
- TH 3 : tl 1/1000 = 1039.6684 / sqr(500/1000) = 4158.67
- TH 4 : tl 1/2000 = 259.9171 / sqr(500/2000) = 4158.67
  • 1

#39 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 24 August 2009 - 09:44 AM

Cá mơn bạn matran đã tính ra tỷ lệ cho mình, nhưng khi thực hiện công việc với nhiều vùng cần tính dt khác nhau thì chả lẽ bạn lấy từng dt trong bảng để chia cho tỷ lệ cần tính thì hơi mất công quá bạn ơi. Nên mình mới nhờ mọi người là chỉnh lisp này 1 ít để mình có thể nhập tỷ lệ bản đồ, nếu mình viết có gì sai xót xin bạn thông cảm bỏ qua cho.
  • 0

#40 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 24 August 2009 - 10:46 AM

Sao bạn không vẽ tất cả bản vẽ của mình với tỷ lệ là 1/1. sau đó qua layout dùng viewport (lệnh MV) để zoom bản vẽ theo tỷ lệ bất kỳ nào mà bạn mong muốn nhỉ. Vẽ với tỷ lệ khác 1/1 rất khổ.
Mình góp ý thế thôi, còn nếu đó là thói quen làm việc hoặc do đặc thù riêng công việc của bạn thì bạn có thể sửa thế này cho fù hợp với nhu cầu của mình vậy.
Đối với Lisp thứ nhất.
bạn sửa dòng này: (setq dtcon (* (getvar "AREA") tl tl))
Thành: (setq dtcon (* (getvar "AREA") tl (/ tl 500 500) ))

Đối với lisp thứ 2:
Bạn sửa dòng này: (setq S (* (+ S (* dt 2)) tl tl) tdt (+ s tdt))
Thành: (setq S (* (+ S (* dt 2)) tl (/ tl 500 500)) tdt (+ s tdt))

PS: bạn dùng lisp thứ 2 là đủ.
  • 1

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