Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
BKXD98

Xin lisp / vba xác định chiều dài của nhiều đường polyline

Các bài được khuyến nghị

BKXD98    0

Tôi đang cần lisp hay vba để xác định tổng chiều dài của nhiều đường polyline, bác nào có vui lòng cho tôi xin với.

Tôi cũng biết lisp và vba nhưng chưa tìm ra được giải thuật để viết (trong acad tôi ko tìm thấy system variable nào chứa chiều dài của nó (giống như biến area chứa diện tích sau khi dùng lệnh area), còn bảng mã dxf của đối tượng polyline chỉ chứa tọa độ các điểm, nếu tính tay từng đoạn thì đối với phân đoạn arc trong poline thì sao ??), nếu bác nào đã biết vui lòng hướng dẫn tôi phương pháp cũng được.

Xin cảm ơn.

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nguyen Hoanh    4.524
Tôi đang cần lisp hay vba để xác định tổng chiều dài của nhiều đường polyline, bác nào có vui lòng cho tôi xin với.

Tôi cũng biết lisp và vba nhưng chưa tìm ra được giải thuật để viết (trong acad tôi ko tìm thấy system variable nào chứa chiều dài của nó (giống như biến area chứa diện tích sau khi dùng lệnh area), còn bảng mã dxf của đối tượng polyline chỉ chứa tọa độ các điểm, nếu tính tay từng đoạn thì đối với phân đoạn arc trong poline thì sao ??), nếu bác nào đã biết vui lòng hướng dẫn tôi phương pháp cũng được.

Xin cảm ơn.

- Lisp: để tính chiều dài của đối tượng bạn xem ở đây:

http://www.cadviet.com/forum/index.php?showtopic=763

 

- VBA: để tính chiều dài của đối tượng, bạn dùng thuộc tính (property) Length của nó.

Đây là ví dụ mẫu của AutoCAD:

 

Sub Example_Length()
  ' This example adds a line in model space and returns the length of the new line

   Dim lineObj As AcadLine
   Dim startPoint(0 To 2) As Double, endPoint(0 To 2)  As Double

   ' Define the start and end points for the line
   startPoint(0) = 1: startPoint(1) = 1: startPoint(2) = 0
   endPoint(0) = 5: endPoint(1) = 5: endPoint(2) = 0

   ' Create the line in model space
   Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)

   ThisDrawing.Application.ZoomAll

   MsgBox "The length of the new Line is: " & lineObj.length
End Sub

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
BKXD98    0

Xin cảm ơn các bác !

 

Qua đây, tôi mới biết thêm là lệnh "lengthen" có chức năng là xác định chiều dài 1 đối tượng và biến "PERIMETER" lưu giá trị này, còn vba thì quá đơn giản (do tôi vội quá nên nhờ vả mà ko chịu đọc help).

 

Tôi cũng đã search trên google tìm được đoạn code này trên 1 forum của nước ngoài, chức năng là xác định tổng chiều dài / diện tích của các đường polyline thuộc 1 layer

;   Length/Area of Polyline by Layer
;   David Bethel May 2004 from an original idea by David Watson
;   This command will give a total area or length for all polylines on a specified layer.
;
(defun c:zone ( / ss la rv i tv op en) 

  (while (not ss) 
	  (princ "\nPick any object on the required layer") 
	  (setq ss (ssget))) 

  (initget "Length Area") 
  (setq rv (getkword "\nWould you like to measure Length/<Area> : ")) 
  (and (not rv) 
	(setq rv "Area")) 

  (setq la (cdr (assoc 8 (entget (ssname ss 0)))) 
	 ss (ssget "X" (list (cons 0 "*POLYLINE") 
						 (cons 8 la))) 
	  i (sslength ss) 
	 tv 0 
	 op 0) 
  (while (not (minusp (setq i (1- i)))) 
	  (setq en (ssname ss i)) 
	  (command "_.AREA" "_E" en) 
	  (cond ((= rv "Length") 
			 (setq tv (+ tv (getvar "PERIMETER")))) 
			(T 
			 (setq tv (+ tv (getvar "AREA"))) 
			 (if (/= (logand (cdr (assoc 70 (entget en))) 1) 1) 
				 (setq op (1+ op)))))) 

  (princ (strcat "\nTotal " rv 
			  " for layer " la 
			  " = " (rtos tv 2 2) 
			  " in " (itoa (sslength ss)) " polylines\n" 
			  (if (/= rv "Length") 
				  (strcat (itoa op) " with open polylines") ""))) 
  (prin1))

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×