Rated 5/5 based on 240179 internet user reviews

Đến nội dung


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

[Đã xong] Tính tổng diện tích các hình trên bản vẽ, "Ed" vào text sẵn có


  • Please log in to reply
96 replies to this topic

#1 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 26 December 2007 - 10:46 PM

Em đang làm công việc là kiểm tra khối lượng thông qua việc kiểm tra diện tích các mặt cắt. Nội dung như sau:
Tính tổng diện tích các hình có trong bản vẽ thông qua việc chọn các hình. Sau đó ghi giá trị tổng diện tích này qua việc thay giá trị của 1 text sẵn có trên bản vẽ do người dùng chọn.
Vì công việc này em dùng lặp đi lặp lại nhiều lần, nên không thể cứ mỗi lần lại “area” “add” “object” rồi chọn các đối tượng sau đó lại “edit” các text được. Làm như vậy mất một số thao tác hơi lâu. Có bác nào giúp em với
  • 0

#2 thoclep

thoclep

    biết lệnh offset

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

Đã gửi 26 December 2007 - 11:00 PM

Em đang làm công việc là kiểm tra khối lượng thông qua việc kiểm tra diện tích các mặt cắt. Nội dung như sau:
Tính tổng diện tích các hình có trong bản vẽ thông qua việc chọn các hình. Sau đó ghi giá trị tổng diện tích này qua việc thay giá trị của 1 text sẵn có trên bản vẽ do người dùng chọn.
Vì công việc này em dùng lặp đi lặp lại nhiều lần, nên không thể cứ mỗi lần lại “area” “add” “object” rồi chọn các đối tượng sau đó lại “edit” các text được. Làm như vậy mất một số thao tác hơi lâu. Có bác nào giúp em với

Thử dùng lisp này nhé!
http://myfreefilehosting.com/f/dbeb446373_0.1MB
Lệnh lấy diện tích 1 vùng là dtt với 2 lựa chọn pick và selec, sau đó pick 1 điểm đẻ chèn kq hoặc enter để chọn 1 text có sẵn.
Cộng 2 kq bằng lệnh add
trừ bằng lệnh sub
tính diện tích sàn dts
Chú ý text style hiện hành phải có heigh=0 trong mặc định!
  • 1

#3 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 December 2007 - 11:08 PM

Em đang làm công việc là kiểm tra khối lượng thông qua việc kiểm tra diện tích các mặt cắt. Nội dung như sau:
Tính tổng diện tích các hình có trong bản vẽ thông qua việc chọn các hình. Sau đó ghi giá trị tổng diện tích này qua việc thay giá trị của 1 text sẵn có trên bản vẽ do người dùng chọn.
Vì công việc này em dùng lặp đi lặp lại nhiều lần, nên không thể cứ mỗi lần lại “area” “add” “object” rồi chọn các đối tượng sau đó lại “edit” các text được. Làm như vậy mất một số thao tác hơi lâu. Có bác nào giúp em với


Lệnh UDT (Update diện tích) dưới đây sẽ làm điều bạn muốn:
(defun c:udt(/ ss tong ham tmp tt)  (setq    ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))	    tong 0.0    ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))    tmp (mapcar 'ham (ss2ent ss))      tt (entget (car (entsel "\nChon text ket qua: ")))    tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))  )  (entmod (subst (cons 1 tong) (assoc 1 tt) tt)))(defun ss2ent(ss / sodt index lstent)  (setq     sodt (if ss (sslength ss) 0)	     index 0  )  (repeat sodt    (setq ent (ssname ss index)	  index (1+ index)	  lstent (cons ent lstent)    )  )  (reverse lstent))(princ "\nUpdate Area - free lisp from cadviet.com")(princ "\nUse UDT command to start!")(vl-load-com)

  • 4

#4 sumi

sumi

    biết lệnh offset

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

Đã gửi 27 December 2007 - 01:22 PM

Hoanh ơi,hình như lisp của anh yêu cầu dối tượng là 1 polyline,có cách nào để tính diện tích 1 hình mà gồm các line,spline,arc nối lại ko,nhờ Hoanh chỉ júp,cảm ơn nhìu
  • 0
"Xin chào bạn. Đây là tổng đài tin nhắn. Ấn phím 1 để có 1 lời khen. Phím 2 cho một lời chúc tốt đẹp. Phím 3 cho 1 nụ hôn. Phím 4 cho 1 cuộc hẹn. Nếu muốn tất cả hãy bấm số của tôi"

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 December 2007 - 02:12 PM

Hoanh ơi,hình như lisp của anh yêu cầu dối tượng là 1 polyline,có cách nào để tính diện tích 1 hình mà gồm các line,spline,arc nối lại ko,nhờ Hoanh chỉ júp,cảm ơn nhìu

Bạn muốn tính diện tích của hình phức tạp như vậy, Đầu tiên hãy sử dụng lệnh boundary để tạo đối tượng REGION là miền tạo bởi giới hạn các đối tượng đó. Tiếp đến mới sử dụng lisp trên.
  • 0

#6 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 29 December 2007 - 12:16 PM

Lệnh UDT (Update diện tích) dưới đây sẽ làm điều bạn muốn:

(defun c:udt(/ ss tong ham tmp tt)  (setq    ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))	    tong 0.0    ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))    tmp (mapcar 'ham (ss2ent ss))      tt (entget (car (entsel "\nChon text ket qua: ")))    tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))  )  (entmod (subst (cons 1 tong) (assoc 1 tt) tt)))(defun ss2ent(ss / sodt index lstent)  (setq     sodt (if ss (sslength ss) 0)	     index 0  )  (repeat sodt    (setq ent (ssname ss index)	  index (1+ index)	  lstent (cons ent lstent)    )  )  (reverse lstent))(princ "\nUpdate Area - free lisp from cadviet.com")(princ "\nUse UDT command to start!")(vl-load-com)


Cám ơn bác Hoanh nhé, yêu cầu của em đã được đáp ứng. Diễn đàn Cadviet rất có ích cho những cư dân dùng AutoCad. Năm mới, em chúc bác mạnh khỏe, thành đạt và hạnh phúc trong cuộc sống.
  • 0

#7 lquocthinh

lquocthinh

    biết zoom

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

Đã gửi 23 September 2009 - 04:46 PM

Lệnh UDT (Update diện tích) dưới đây sẽ làm điều bạn muốn:

(defun c:udt(/ ss tong ham tmp tt)  (setq    ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))	    tong 0.0    ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))    tmp (mapcar 'ham (ss2ent ss))      tt (entget (car (entsel "\nChon text ket qua: ")))    tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))  )  (entmod (subst (cons 1 tong) (assoc 1 tt) tt)))(defun ss2ent(ss / sodt index lstent)  (setq     sodt (if ss (sslength ss) 0)	     index 0  )  (repeat sodt    (setq ent (ssname ss index)	  index (1+ index)	  lstent (cons ent lstent)    )  )  (reverse lstent))(princ "\nUpdate Area - free lisp from cadviet.com")(princ "\nUse UDT command to start!")(vl-load-com)


Anh cho em hỏi nếu tỉ lệ bản vẽ không phải là 1/1 thì sửa thế nào để giá trị diện tích đo được gán vào text được đúng ( VD: bản vẽ dùng đơn vị là mm nhưng cần thể hiện kết quả diện tích là m2 chứ không phải mm2 ?Phải chỉnh lại lisp này chổ nào ? Em không biết nhiều về lisp. :cheers:
  • 0
Nắng có hồng bằng đôi môi em ? Mưa có buồn bằng đôi mắt trong ?

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5829 Bài viết
Điểm đánh giá: 3034 (tuyệt vời)

Đã gửi 23 September 2009 - 07:56 PM

Anh cho em hỏi nếu tỉ lệ bản vẽ không phải là 1/1 thì sửa thế nào để giá trị diện tích đo được gán vào text được đúng ( VD: bản vẽ dùng đơn vị là mm nhưng cần thể hiện kết quả diện tích là m2 chứ không phải mm2 ? Em không biết nhiều về lisp. :cheers:

1m2 = 1000000 mm2
Tỷ lệ bản vẽ là 1/a thì kết quả diện tích sẽ phải nhân lên a^2 bạn ạ.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 lquocthinh

lquocthinh

    biết zoom

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

Đã gửi 24 September 2009 - 10:59 AM

1m2 = 1000000 mm2
Tỷ lệ bản vẽ là 1/a thì kết quả diện tích sẽ phải nhân lên a^2 bạn ạ.


Dạ ý em hỏi là phải sửa lisp này thế nào để kết quả nhận được ( gán vào text) đúng đơn vị mình mong muốn. VD: bản vẽ của em đang dùng đơn vị mm--> kết quả diện tích tính được gán vào text là mm2--> phải chia cho 10^6 thì mới được kết quả là m2.
Có nghĩa là sau khi gán kết quả vào text thì em phải edit text lần nữa mới được kết quả mong muốn. :cheers:
  • 0
Nắng có hồng bằng đôi môi em ? Mưa có buồn bằng đôi mắt trong ?

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 September 2009 - 11:27 AM

Dạ ý em hỏi là phải sửa lisp này thế nào để kết quả nhận được ( gán vào text) đúng đơn vị mình mong muốn. VD: bản vẽ của em đang dùng đơn vị mm--> kết quả diện tích tính được gán vào text là mm2--> phải chia cho 10^6 thì mới được kết quả là m2.
Có nghĩa là sau khi gán kết quả vào text thì em phải edit text lần nữa mới được kết quả mong muốn. :cheers:

Kích thước của chương trình đang sử dụng là mm
Bạn muốn đổi sang mét thì nhập vào hệ số chuyển đổi đơn vị là 1/1000 (hoặc 0,001) nhé.
Code sửa lại đây :

(defun c:udt(/ ss tong ham tmp tt hstl oldim)
(prompt "\n Kich thuoc cua chuong trinh tinh theo don vi mm ")
(setq hstl (getreal "\n Nhap ti le chuyen doi don vi :"))
(setq tp (getint "\n so chu so thap phan : "))
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(setq
ss (ssget '((-4 . "")))
tong 0.0
ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
tmp (mapcar 'ham (ss2ent ss))
tt (entget (car (entsel "\nChon text ket qua: ")))
tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
)
(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 2)) (assoc 1 tt) tt))
(setvar "Dimzin" oldim)
(princ)
)

(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com)
  • 3

#11 lquocthinh

lquocthinh

    biết zoom

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

Đã gửi 24 September 2009 - 02:10 PM

Kích thước của chương trình đang sử dụng là mm
Bạn muốn đổi sang mét thì nhập vào hệ số chuyển đổi đơn vị là 1/1000 (hoặc 0,001) nhé.
Code sửa lại đây :

(defun c:udt(/ ss tong ham tmp tt hstl oldim)
(prompt "\n Kich thuoc cua chuong trinh tinh theo don vi mm ")
(setq hstl (getreal "\n Nhap ti le chuyen doi don vi :"))
(setq tp (getint "\n so chu so thap phan : "))
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(setq
ss (ssget '((-4 . "")))
tong 0.0
ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
tmp (mapcar 'ham (ss2ent ss))
tt (entget (car (entsel "\nChon text ket qua: ")))
tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
)
(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 2)) (assoc 1 tt) tt))
(setvar "Dimzin" oldim)
(princ)
)

(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com)


Hic hic..anh ơi ! Sau khi chuyển đơn vị, chọn số chử số thập phân xong, chương trình bảo chọn text để gán kết quả, bỏ qua bước chọn đối tượng để tính diện tích. Thế nên kết quả gán vào text là 0.00 hoài <_< :cheers: :cheers: :cheers: :cheers:
  • 0
Nắng có hồng bằng đôi môi em ? Mưa có buồn bằng đôi mắt trong ?

#12 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 September 2009 - 02:41 PM

Hic hic..anh ơi ! Sau khi chuyển đơn vị, chọn số chử số thập phân xong, chương trình bảo chọn text để gán kết quả, bỏ qua bước chọn đối tượng để tính diện tích. Thế nên kết quả gán vào text là 0.00 hoài <_< :cheers: :cheers: :cheers: :cheers:

Không hiểu sao chép code lên lại bị lỗi. Vào cả codebox cũng bị lỗi. Nhờ Bác Hoành xem lại chổ này với
Thế này nhé bạn nhấn nút Reply bài viết số 10 của Tue_NV -> Chép hết code của Tue_NV về chạy là được
  • 3

#13 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 24 September 2009 - 03:49 PM

...
bạn nhấn nút Reply bài viết số 10 của Tue_NV -> Chép hết code của Tue_NV về chạy là được

Bạn Tue_NV cho hỏi : làm thế nào bạn biết đuợc cách nhấn nút Reply sẽ cho kết quả (đoạn code) đúng?
Tài thật ! :cheers:
  • 0

#14 lquocthinh

lquocthinh

    biết zoom

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

Đã gửi 24 September 2009 - 04:55 PM

Không hiểu sao chép code lên lại bị lỗi. Vào cả codebox cũng bị lỗi. Nhờ Bác Hoành xem lại chổ này với
Thế này nhé bạn nhấn nút Reply bài viết số 10 của Tue_NV -> Chép hết code của Tue_NV về chạy là được


Cảm ơn anh Tue_NV rất nhiều, cảm ơn bác Hoành nữa ! Em làm được rồi. Kì này em phải cố học thêm lisp mới được. Có gì mong các anh trên diễn đàn chỉ bảo thêm. :cheers: :cheers:
  • 0
Nắng có hồng bằng đôi môi em ? Mưa có buồn bằng đôi mắt trong ?

#15 Phương Anh

Phương Anh

    biết vẽ line

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

Đã gửi 25 September 2009 - 08:27 AM

Gửi anh Tue_NV: Anh có thể cải tiến lisp trên có tác dụng kích điểm chọn vùng tính diện tích như lệnh tính diện tích của autocad và bổ sung thêm giá trị tỉ lệ và số lẻ mặc định của lần nhập trước đó được không? Vì mỗi lần làm lại lện udt thì lại pjhair nhập lại 0.001 rất mất thời gian. Cảm ơn anh đã quan tâm.
  • 0

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 September 2009 - 10:01 AM

Gửi anh Tue_NV: Anh có thể cải tiến lisp trên có tác dụng kích điểm chọn vùng tính diện tích như lệnh tính diện tích của autocad và bổ sung thêm giá trị tỉ lệ và số lẻ mặc định của lần nhập trước đó được không? Vì mỗi lần làm lại lện udt thì lại pjhair nhập lại 0.001 rất mất thời gian. Cảm ơn anh đã quan tâm.

Lisp này Tue_NV đã hoàn thành lại theo ý bạn PhuongAnh.
Có 2 lựa chọn cho bạn tính diện tích
1. Tính diện tích theo cách chọn đối tượng
2. Tính diện tích theo cách Pick điểm vào miền kín
Các bạn test lại xem nhé :

Command: udt : gõ lệnh udt
Kich thuoc cua chuong trinh tinh theo don vi mm
Nhap ti le chuyen doi don vi <0.001> :1/1000

Nhap So chu so thap phan <4> :2

Chon doi tuong de tinh dien tich hay Enter de tinh dien tich theo Pick diem
Select objects: -> Nếu ở dòng này bạn chọn đối tượng -> sẽ Tính diện tích theo cách chọn đối tượng
-> Nếu ở dòng này bạn nhấn Enter -> sẽ Tính diện tích theo cách Pick điểm vào miền kín

Code đây : http://www.cadviet.c...files/2/udt.lsp

Bạn Tue_NV cho hỏi : làm thế nào bạn biết đuợc cách nhấn nút Reply sẽ cho kết quả (đoạn code) đúng?
Tài thật ! :cheers:

Chào anh gia_bach.
Em phát hiện điều này là do suy luận và nhìn code thấy có sự sai khác so với code gốc. Khi ta viết bài viết thì chắc chắn là các kí tự trong Code phải đúng. Nhưng khi ta gửi bài đi thì một số kí tự bị mã hoá như dấu < ; dấu (
Do đó Code không đúng nữa

Cảm ơn anh Tue_NV rất nhiều, cảm ơn bác Hoành nữa ! Em làm được rồi. Kì này em phải cố học thêm lisp mới được. Có gì mong các anh trên diễn đàn chỉ bảo thêm. :cheers: :cheers:

@ lquocthinh : Bạn cứ yên tâm. Anh em trên diễn đàn sẽ hỗ trợ nhiệt tình cho bạn.
  • 5

#17 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 06 January 2010 - 02:54 PM

cho em hỏi!em muốn khi pick nó tạo thành POLYLINE luôn dc ko vậy anh TUE?
  • 0

#18 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 January 2010 - 03:48 PM

cho em hỏi!em muốn khi pick nó tạo thành POLYLINE luôn dc ko vậy anh TUE?

Có những trường hợp mà các Line cắt nhau và chúng tạo thành miền kín. Mình chỉ có thể giữ lại Polyline tạo thành miền đó mà thôi.

Nếu bạn muốn giữ lại Polyline tạo bởi miền kín thì hãy bỏ dòng này trong code
(command "erase" ss "")

hoặc bạn thêm 1 dấu chấm phẩy trước dòng đó -> thành :
;(command "erase" ss "")
  • 2

#19 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 06 January 2010 - 04:37 PM

mình có cái lisp tính diện tích này,mấy bạn dùng thử nha,có rất nhiều lênh,tính diện tích thì đánh dt0( bấm vào vùng kín) dt(bấm vào polyline kín). nếu thấy hay,cảm ơn nhó cảm ơn mình nha,http://www.cadviet.com/upfiles/2/pro.rar
  • 0

#20 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 456 (tốt)

Đã gửi 06 January 2010 - 04:41 PM

mình có cái lisp tính diện tích này,mấy bạn dùng thử nha,có rất nhiều lênh,tính diện tích thì đánh dt0( bấm vào vùng kín) dt(bấm vào polyline kín). nếu thấy hay,cảm ơn nhó cảm ơn mình nha,http://www.cadviet.com/upfiles/2/pro.rar

vùng kín là vùng nào hả bạn??
  • 1
Hãy ước cho trọn 1 ước mơ!