Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ntduy1988

Đặc trưng hình học của hình phẳng phức tạp!

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

Lisp tính đặc trưng hình học của hình phức tạp: http://download830.mediafire.com/2me5dr9220yg/i8xljd9y12pdb64/TT+Dac+trung+hinh+phang.rar

- Lệnh: TT

- Kích chọn một điểm trong vùng cần tính

- Chờ một thời gian

- Chọn gốc của hệ trục ban đầu Oxy(tùy ý)

- Chờ một thời gian

- Kết quả: XC YC, Diện tích, Jx, Jy, Jxy, Jmax, Jmin

  • Vote tăng 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

Vậy bạn làm cách nào tính đặc trưng của một hình bị khoét rất nhiều lỗ bên trong?

 

Dùng region, rồi subtract, rồi massprop là được đấy anh :)

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

Đúng là cách này của bạn có hiệu quả, nhưng mình thấy lisp tiện hơn.

Nhưng lisp của anh không chạy được hay sao í anh ạ.

Em dùng lệnh TT và đây là kết quả:

Command: tt
units Report formats:      (Examples)
 1.  Scientific      1.55E+01
 2.  Decimal         15.50
 3.  Engineering     1'-3.50"
 4.  Architectural   1'-3 1/2"
 5.  Fractional      15 1/2
With the exception of Engineering and Architectural formats,
these formats can be used with any basic unit of measurement.
For example, Decimal mode is perfect for metric units as well
as decimal English units.
Enter choice, 1 to 5 <2>: 2 Enter number of digits to right of decimal point (0 
to 8) <4>: 8
Systems of angle measure:      (Examples)
 1.  Decimal degrees           45.0000
 2.  Degrees/minutes/seconds   45d0'0"
 3.  Grads                     50.0000g
 4.  Radians                   0.7854r
 5.  Surveyor's units          N 45d0'0" E
Enter choice, 1 to 5 <1>: 4 Enter number of fractional places for display of 
angles (0 to 8) <4>: 8
Direction for angle 0.00000000r:
  East    3 o'clock  =  0.00000000r
  North  12 o'clock  =  1.57079633r
  West    9 o'clock  =  3.14159265r
  South   6 o'clock  =  4.71238898r
Enter direction for angle 0r <0r>:
Measure angles clockwise? [Yes/No] <N>
Command: TT Unknown command "TT".  Press F1 for help.
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
4 loops extracted.
4 Regions created.
BOUNDARY created 4 regionsUnknown command "TT".  Press F1 for help.
Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
----------------   REGIONS   ----------------
Area:                    132.34858748
Perimeter:               40.78163068
Bounding box:         X: 9.66154220  --  22.64273842
                     Y: 1.50972658  --  14.49092280
Centroid:             X: 16.15214031
                     Y: 8.00032469
Moments of inertia:   X: 9864.88797717
                     Y: 35922.53039089
Product of inertia:  XY: 17102.39771944
Radii of gyration:    X: 8.63349066
                     Y: 16.47493862
Principal moments and X-Y directions about centroid:
                     I: 1393.89081749 along [1.00000000 0.00000000]
                     J: 1393.89081749 along [0.00000000 1.00000000]
"C:\tam.mpr":  Can't open file
; error: bad argument type: streamp nil

Không ra được như cái hình vidu trong Folder mà anh upload lên!

 

Ngoài ra:

 

1. Anh thay đổi UCS trong lúc dùng lệnh, nhưng xong lệnh thì không trả lại UCS hiện hành

2. Thay đổi chế độ bắt điểm, nhưng xong lệnh cũng không thèm trả lại

3. Chỉ cần các thông số về tiết diện, nhưng xong lệnh thì lại có 3 layer mới trong đó. Cái này có cần thiết không ạ?

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

Nhưng lisp của anh không chạy được hay sao í anh ạ.

Em dùng lệnh TT và đây là kết quả:

Command: tt
units Report formats:      (Examples)
 1.  Scientific      1.55E+01
 2.  Decimal         15.50
 3.  Engineering     1'-3.50"
 4.  Architectural   1'-3 1/2"
 5.  Fractional      15 1/2
With the exception of Engineering and Architectural formats,
these formats can be used with any basic unit of measurement.
For example, Decimal mode is perfect for metric units as well
as decimal English units.
Enter choice, 1 to 5 <2>: 2 Enter number of digits to right of decimal point (0 
to 8) <4>: 8
Systems of angle measure:      (Examples)
 1.  Decimal degrees           45.0000
 2.  Degrees/minutes/seconds   45d0'0"
 3.  Grads                     50.0000g
 4.  Radians                   0.7854r
 5.  Surveyor's units          N 45d0'0" E
Enter choice, 1 to 5 <1>: 4 Enter number of fractional places for display of 
angles (0 to 8) <4>: 8
Direction for angle 0.00000000r:
  East    3 o'clock  =  0.00000000r
  North  12 o'clock  =  1.57079633r
  West    9 o'clock  =  3.14159265r
  South   6 o'clock  =  4.71238898r
Enter direction for angle 0r <0r>:
Measure angles clockwise? [Yes/No] <N>
Command: TT Unknown command "TT".  Press F1 for help.
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: erase
Select objects:
Command: TT Unknown command "TT".  Press F1 for help.
Command: Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
4 loops extracted.
4 Regions created.
BOUNDARY created 4 regionsUnknown command "TT".  Press F1 for help.
Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
Unknown command "S".  Press F1 for help.
Unknown command "TT".  Press F1 for help.
----------------   REGIONS   ----------------
Area:                    132.34858748
Perimeter:               40.78163068
Bounding box:         X: 9.66154220  --  22.64273842
                     Y: 1.50972658  --  14.49092280
Centroid:             X: 16.15214031
                     Y: 8.00032469
Moments of inertia:   X: 9864.88797717
                     Y: 35922.53039089
Product of inertia:  XY: 17102.39771944
Radii of gyration:    X: 8.63349066
                     Y: 16.47493862
Principal moments and X-Y directions about centroid:
                     I: 1393.89081749 along [1.00000000 0.00000000]
                     J: 1393.89081749 along [0.00000000 1.00000000]
"C:\tam.mpr":  Can't open file
; error: bad argument type: streamp nil

Không ra được như cái hình vidu trong Folder mà anh upload lên!

 

Ngoài ra:

 

1. Anh thay đổi UCS trong lúc dùng lệnh, nhưng xong lệnh thì không trả lại UCS hiện hành

2. Thay đổi chế độ bắt điểm, nhưng xong lệnh cũng không thèm trả lại

3. Chỉ cần các thông số về tiết diện, nhưng xong lệnh thì lại có 3 layer mới trong đó. Cái này có cần thiết không ạ?

- Lạ nhỉ, bạn dùng cad bao nhiêu vậy, mình đã chạy thử trên cad 2004 và 2008 thấy chạy bình thuờng mà, không hề có lỗi như trên

- Còn về bắt điểm thì mình có trả lại ban đầu, nhưng do bạn chạy bị lỗi thì đến đoạn lỗi là lisp không chạy nữa, nên không trả lại bắt điểm,

- Tạo ra các layer là cần thiết, nó sẽ dễ quản lý, ví dụ muốn xóa những cái do lisp tạo ra thì chỉ việc chọn các đối tượng trong layer đó

- Đúng là mình không trả lại UCS hiện hành vì mình thấy không cần thiết lắm.

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

- Lạ nhỉ, bạn dùng cad bao nhiêu vậy, mình đã chạy thử trên cad 2004 và 2008 thấy chạy bình thuờng mà, không hề có lỗi như trên

- Còn về bắt điểm thì mình có trả lại ban đầu, nhưng do bạn chạy bị lỗi thì đến đoạn lỗi là lisp không chạy nữa, nên không trả lại bắt điểm,

- Tạo ra các layer là cần thiết, nó sẽ dễ quản lý, ví dụ muốn xóa những cái do lisp tạo ra thì chỉ việc chọn các đối tượng trong layer đó

- Đúng là mình không trả lại UCS hiện hành vì mình thấy không cần thiết lắm.

 

Em dùng CAD 2010 anh ạ. À mà sao anh không set CMDECHO bằng 0 đi cho nó ẩn những thao tác trong LISP đi, không thể hiện ở dòng commandline?

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

Em dùng CAD 2010 anh ạ. À mà sao anh không set CMDECHO bằng 0 đi cho nó ẩn những thao tác trong LISP đi, không thể hiện ở dòng commandline?

- Mình chưa thử trên Cad 2010, có thể là cấu trúc lệnh trong cad 2010 so với các phiên bản cũ đã bị thay đổi nên gây ra lỗi

- Mình có đặt cmdecho 0 đó chứ.

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

- Mình chưa thử trên Cad 2010, có thể là cấu trúc lệnh trong cad 2010 so với các phiên bản cũ đã bị thay đổi nên gây ra lỗi

- Mình có đặt cmdecho 0 đó chứ.

Em không biết là code anh viết như thế nào, vì em không xem được. Nếu không có gì bí mật thì anh có thể share lên được không ạ ?

 

Bằng cách sử dụng một số hàm trên diễn đàn của anh gia-bach, và gợi ý của anh ketxu, em đã viết ra lisp sau để tính các thông số tiết diện cho vùng bị khoét lỗ, như sau:

 

(defun c:Bou (/ pt1 lstEname emax x lstEname1 Elast Res Area Centroid PrinMo PrinDi MoofIn ProfIn )
(setvar "cmdecho" 0)
(vl-load-com)
(setq 	Elast (entlast)
		pt1 (getpoint "\nPick mot diem trong vung can tao region: ")
); setq
(command "-boundary" "a" "o" "r" "" pt1 "")
(while (setq Elast (entnext Elast)) (setq lstEname (cons Elast lstEname)))
(if (/= lstEname nil)
(progn
	(setq emax(ssb lstEname) lstEname1 (vl-remove emax lstEname) ss1 (ssadd))
	(foreach x lstEname1 (ssadd x ss1))
	(command "subtract" emax "" ss1 "")
	(setq 	fod (vlax-ename->vla-object (entlast)) 
		Area (vlax-get fod 'Area)
		Centroid (vlax-get fod 'Centroid)
		PrinMo (vlax-get fod 'PrincipalMoments)
		PrinDi (vlax-get fod 'PrincipalDirections)
		MoofIn (vlax-get fod 'MomentofInertia)
		ProfIn (vlax-get fod 'ProductofInertia)
	)
	(entdel (entlast))
	(setq Res (strcat "Dien tich = " (rtos Area) "\n")
		  Res (strcat Res "Trong tam:"  " XC = " (rtos (car Centroid)) "  " " YC = " (rtos (cadr Centroid)) "\n")
		  Res (strcat Res "Moment quan tinh: Jx = " (rtos (car MoofIn)) "  " "Jy = " (rtos (cadr MoofIn))  "\n")
          Res (strcat Res "Moment quan tinh XY: Jxy = " (rtos ProfIn) "\n")
		  Res (strcat Res "Truc chinh 1: ( " (rtos (nth 0 PrinDi)) " , " (rtos (nth 2 PrinDi)) "). Moment quan tinh chinh truc 1: Jxx= " (rtos (car PrinMo)) "\n")
		  Res (strcat Res "Truc chinh 2: ( " (rtos (nth 1 PrinDi)) " , " (rtos (nth 3 PrinDi)) "). Moment quan tinh chinh truc 2: Jyy= " (rtos (cadr PrinMo)) "\n")
	)
	(princ Res)
); progn
(princ "\n Da co loi xay ra, co the do duong bao khong kin! Hay kiem tra lai")
); if
(princ)
)
(defun ssb ( ss / ss1 boundary e minPt maxPt )  ;select region boundary
   (setq boundary (boundarySS ss))
   (foreach e (mapcar 'vlax-ename->vla-object ss)
(vla-getBoundingBox e 'minPt 'maxPt)
(setq minPt (vlax-safearray->list minPt)
      maxPt (vlax-safearray->list maxPt))
(if (equal (list minPt  maxPt ) boundary 0.001)
  (setq ss1 (vlax-vla-object->ename e))
)
); foreach
)
;ham tra ve 2 diem (LowerLeft TopRight) cua hinh chu nhat bao quanh cac doi tuong 
(defun boundarySS (ss / all_max all_min ll maxpt minpt ur); 
 (setq	all_min	(list)
all_max	(list)  ) 
 (foreach x (mapcar 'vlax-ename->vla-object ss)
   (vla-GetBoundingBox x 'minpt 'maxpt)
   (setq all_min (cons (vlax-safearray->list minpt) all_min)
  all_max (cons (vlax-safearray->list maxpt) all_max)  )
   ) ;foreach
 (setq ll (list (car (vl-sort (mapcar 'car all_min) '<))
	 (car (vl-sort (mapcar 'cadr all_min) '<))
	 (car (vl-sort (mapcar 'caddr all_min) '<)) ) ;list
ur (list (last (vl-sort (mapcar 'car all_max) '<))
	 (last (vl-sort (mapcar 'cadr all_max) '<))
	 (last (vl-sort (mapcar 'caddr all_max) '<))) ;list
) ;setq
 (list ll  ur )
 )

 

Em kiểm tra thì chạy trên CAD 2010 rất ổn.

 

Mong anh và mọi người cho ý kiến!

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

Em không biết là code anh viết như thế nào, vì em không xem được. Nếu không có gì bí mật thì anh có thể share lên được không ạ ?

 

Em kiểm tra thì chạy trên CAD 2010 rất ổn.

 

Mong anh và mọi người cho ý kiến!

- Mình đã chạy thử lisp của bạn, hình như nó ko chạy được trên cad2008, trên cad 2010 thì chạy được nhưng chưa in ra hết các kết quả. Nhưng lisp của bạn rất hay ở chỗ nó khá ngắn gọn.

- Đây là code lisp của mình: http://www.mediafire.com/?dw68k594wp3o566

(Trình độ lập trình có hạn, mong mọi người đừng cười)

- Mình đã chạy thử lisp trên cad 2010 thấy kết quả bình thường, lần đầu chạy hơi lâu một chút.

- Dưới đây là kết quả tính trên cad2010:

 

- vd_2.jpg

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

- Mình đã chạy thử lisp của bạn, hình như nó ko chạy được trên cad2008, trên cad 2010 thì chạy được nhưng chưa in ra hết các kết quả. Nhưng lisp của bạn rất hay ở chỗ nó khá ngắn gọn.

- Đây là code lisp của mình: http://www.mediafire.com/?dw68k594wp3o566

(Trình độ lập trình có hạn, mong mọi người đừng cười)

- Mình đã chạy thử lisp trên cad 2010 thấy kết quả bình thường, lần đầu chạy hơi lâu một chút.

 

 

Em thử trên cad 2007 chạy ổn mà anh!

Em chưa in hết các kết quả, là vì em chỉ làm cái này như một ví dụ thôi. Nếu yêu cầu thực tế cần những thuộc tính gì cụ thể thì lấy property tương ứng của region thôi ạ.

Lisp của anh dài thật, em chưa đọc hết được :D

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

Đăng nhập để thực hiện theo  

×