Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 09 May 2011 - 11:48 PM

Lisp tính đặc trưng hình học của hình phức tạp: http://download830.m... 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
  • 1

#2 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 11 May 2011 - 07:04 AM

Dùng MassProp cũng được mà
  • 0

#3 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 11 June 2011 - 01:50 PM

Dùng MassProp cũng được mà

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?
  • 0

#4 pdle

pdle

    biết lệnh mtext

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

Đã gửi 11 June 2011 - 02:47 PM

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 :)
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#5 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 11 June 2011 - 04:13 PM

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

Đú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.
  • 0

#6 pdle

pdle

    biết lệnh mtext

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

Đã gửi 11 June 2011 - 06:10 PM

Đú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 ạ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#7 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 12 June 2011 - 08:32 AM

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.
  • 0

#8 pdle

pdle

    biết lệnh mtext

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

Đã gửi 12 June 2011 - 12:46 PM

- 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?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#9 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 12 June 2011 - 03:09 PM

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ứ.
  • 0

#10 pdle

pdle

    biết lệnh mtext

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

Đã gửi 13 June 2011 - 03:16 PM

- 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!
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#11 ntduy1988

ntduy1988

    biết vẽ arc

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

Đã gửi 13 June 2011 - 05:37 PM

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...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:

- Hình đã gửi
  • 0

#12 pdle

pdle

    biết lệnh mtext

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

Đã gửi 13 June 2011 - 06:22 PM

- 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...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
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D