Xây dựng các đối tượng hình học bằng tính toán hình học

Một phần của tài liệu đồ án kỹ thuật cơ khí Mô phỏng quá trình gia công CNC trên máy DENFORD (Trang 68)

VI. Displaylist 1 Định nghĩa

2.Xây dựng các đối tượng hình học bằng tính toán hình học

Sau khi khởi tạo xong đối tượng OpenGlInit chóng ta xây dựng các hàm tính tọa độ cung cấp cho OpenGl render lên thành đối tượng 3D. Trong qua trình tính ta phải tìm ra chi tiết cơ bản nhất có khả năng mô tả được nhiều nhất các đối tượng 3D. Đồ án xây dựng một đối tượng 3D khá tổng quát có thể mô tả được hầu hết các hình khối dạng trụ.

void OpenGLInit::DrawFan(const GLdouble radius1,

const GLdouble radius2, const GLint angle, const GLdouble heiht,

COLORREF m_nBackColor) { glPushMatrix(); glPushMatrix(); SetMaterial(m_nBackColor); DrawfaceFan(radius1,radius2,angle); glEnd(); glTranslated(0,0,heiht); DrawfaceFan(radius1,radius2,angle); glPopMatrix(); SetMaterial(RGB(GetRValue(m_nBackColor),GetGValue(m_nBackColor),GetGValue( m_nBackColor)-30)); Drawfaceheiht(radius1,angle,heiht); Drawfaceheiht(radius2,angle,heiht); SetMaterial(RGB(GetRValue(m_nBackColor),GetGValue(m_nBackColor),GetGValue( m_nBackColor)-30));

glVertex3f(radius1*cos(GOC_CONG*PI/180),radius1*sin(GOC_CONG*PI/180),0); glVertex3f(radius1*cos(GOC_CONG*PI/180),radius1*sin(GOC_CONG*PI/180),heiht); glVertex3f(radius2*cos(GOC_CONG*PI/180),radius2*sin(GOC_CONG*PI/180),heiht); glVertex3f(radius2*cos(GOC_CONG*PI/180),radius2*sin(GOC_CONG*PI/180),0); glEnd(); glBegin(GL_QUADS); glVertex3f(radius1*cos((angle+GOC_CONG)*PI/180),radius1*sin((angle+GOC_CON G)*PI/180),0); glVertex3f(radius1*cos((angle+GOC_CONG)*PI/180),radius1*sin((angle+GOC_CON G)*PI/180),heiht); glVertex3f(radius2*cos((angle+GOC_CONG)*PI/180),radius2*sin((angle+GOC_CON G)*PI/180),heiht); glVertex3f(radius2*cos((angle+GOC_CONG)*PI/180),radius2*sin((angle+GOC_CON G)*PI/180),0); glEnd(); glPopMatrix(); }

Hàm vẽ có năm tham sè trong đó bốn tham số đầu quan trọng, chỉ với việc truyền các giá trị khác nhau cho các tham sè ta có thể tạo ra các hình solid khác nhau vì bản thân đối tượng chung nhất là một khối quạt có bán kính trong, bán kính ngoài chiều cao của khối và khối quạt này quét một góc

bao nhiêu độ. Tất cả các tọa độ đỉnh glVertex3f(x,y,z); đều được tính trong thời gian thực(tại mỗi thời điểm chương trình đều tính lại tọa độ để cập nhật hình chi tiết gia công theo thới gian).

Bé dao gia công trong chương trình cũng được tính toán theo tọa độ để OpenGl mô tả lại :

Giải thuật sinh lưới tự động từ bộ điểm do người dùng cung cấp được sử dụng trong chương trình để tạo ra các mặt cắt trên trạm phay của hệ thống CIM. Sau đây là hình ảnh lưới được chia theo tọa độ chạy của dao phay. Dao phay đi tới đâu chương trình sẽ kết hợp các tọa độ biên dạng của dao phay và tọa độ biên dạng của phôi(được tính toán từ kích thước phôi do người sử dụng nhập vào cho chương trình) để hình thành biên dạng cắt. Hình ảnh dưới đây là hình ảnh tấm lưới đang bị chia RealTime một cách tự động trên mặt phẳng, tọa độ biên dạng đều được kiểm soát nên từ biên dạng chương trình xây dựng ra mô hình 3D mô phỏng quá trình gia công trên trạm phay. Giải thuật chia tam giác theo bộ điểm cho trước chúng ta có thể tham khảo trong cuốn : Computational Geometry And Computer

Graphics in C++ của tác giả Micheal J.Laszlo(Nova shoutheastern

Việc chia lưới tự động không chỉ giúp Ých trong giải các bài toán số, phần tử hữu hạn mà trong kỹ thuật đồ họa nó cũng có ý nghĩa rất lớn. Vì với trường hợp đối tượng sinh ra RealTime mà có biên dạng phức tạp việc tính toán để mô phỏng gặp nhiều khó khăn nhưng hàm chia lưới tự động sẽ thực hiện chia tối ưu để hình thành mô hình 3D mà không cần sự can thiệp tính toán quá kho khăn đối với người lập trình.

3. Gắn đối tượng OpenGlInit lên Dialog của lớp CMainDialog

Lớp đối tượng CMainDialog là lớp kế thừa từ một lớp Dialog được ObjectARX hỗ trợ : class CMainDialog : public CAcUiDialog Líp CAcUiDialog

đảm bảo cho chóng ta thực hiện thao tác Èn CMainDialog tạm thời chuyển focus cho AutoCAD

LONG CMainDialog::OnACADKeepFocus(UINT,UINT) {return true;}

để ta có thể thực hiện việc chọn đối tượng trong bản vẽ, bóc tách dữ liệu của đối tượng được lựa chọn một cách dễ dàng. Khi lấy xong dữ liệu ta lại lấy lại được quyền điều khiển cho CMainDialog.

Như vậy việc xây dựng đối tượng CMainDialog kế thừa từ

CAcUiDialog giúp ta dễ dàng truy nhập vào dữ liệu mở rộng của bản vẽ thiết kế cung cấp dữ liệu cho bộ phận mô phỏng. Để chọn bước gia công ta muốn xem mô phỏng ta klick vào nút "Chọn bước gia công" khi đó Dialog "Main Windows" tạm thời Èn đi chuyển điều khiển cho AutoCAD. Ta chọn xem các bước gia công bằng cách kick vào các hình vuông có chữ "OK" . Dữ liệu của đối tượng chính là dữ liệu mở rộng được chương trình gắn vào đối tượng chứa các thông tin về kích thước cơ bản của đối tượng. Đối tượng p_Wnd của được khai báo trong líp CMainDialog sẽ thực hiện mô tả quá trình gia công trên phôi theo từng bước gia công đã thiết kế trong quy trình công nghệ.

Một phần của tài liệu đồ án kỹ thuật cơ khí Mô phỏng quá trình gia công CNC trên máy DENFORD (Trang 68)