Mô phỏng OpenGL

OpenGL- là chữ viết tắt của Open Graphic Library- là một thư viện đồ họa tốc độ cao và độc lập với hệ thống giao diện các hệ điều hành. Thư viện này được phát triển bởi tập đoàn Silicon Graphic Library Inc. Và hiện nay OpenGL là một công cụ được sử dụng rộng rãi trong các hệ điều hành như: win9x, win NT.

Ngày nay việc ứng dụng các công nghệ đồ họa vào cuộc sống đang phát triển mạnh mẽ. Trong kỹ thuật, việc sử dụng các ứng dụng của OpenGL hay DirectX vào việc mô phỏng các cơ cấu máy móc, các hoạt động của các thiết bị máy móc, robot công nghiệp trước khi đi vào thiết kế, thử nghiệm.bằng mô hình thực đang được rất nhà chế tạo quan tâm bởi tính trực quan đem lại khi xây dựng được các mô hình đồ họa hoạt động trong không gian 3 chiều. Và đó cũng là lý do tôi chọn thư viện lập trình OpenGL kết hợp lập trình C++ để xây dựng bài toán mô phỏng cho quá trình sản xuất đang tiến hành.

 

docx27 trang | Chia sẻ: NamTDH | Lượt xem: 1453 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Mô phỏng OpenGL, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHẦN IV - MÔ PHỎNG OPENGL CHƯƠNG 11 – MÔ PHỎNG HOẠT ĐỘNG HỆ THỐNG BẰNG LẬP TRÌNH MFC SỬ DỤNG THƯ VIỆN OPENGL. 11.1. GIỚI THIỆU CHUNG VỀ OPENGL. 11.1.1. OpenGL. Hình 11.1:OpenGL logo OpenGL- là chữ viết tắt của Open Graphic Library- là một thư viện đồ họa tốc độ cao và độc lập với hệ thống giao diện các hệ điều hành. Thư viện này được phát triển bởi tập đoàn Silicon Graphic Library Inc. Và hiện nay OpenGL là một công cụ được sử dụng rộng rãi trong các hệ điều hành như: win9x, win NT... Ngày nay việc ứng dụng các công nghệ đồ họa vào cuộc sống đang phát triển mạnh mẽ. Trong kỹ thuật, việc sử dụng các ứng dụng của OpenGL hay DirectX vào việc mô phỏng các cơ cấu máy móc, các hoạt động của các thiết bị máy móc, robot công nghiệp trước khi đi vào thiết kế, thử nghiệm..bằng mô hình thực đang được rất nhà chế tạo quan tâm bởi tính trực quan đem lại khi xây dựng được các mô hình đồ họa hoạt động trong không gian 3 chiều. Và đó cũng là lý do tôi chọn thư viện lập trình OpenGL kết hợp lập trình C++ để xây dựng bài toán mô phỏng cho quá trình sản xuất đang tiến hành. 11.1.2. Đặc điểm của OpenGL. OpenGl là một thư viện đồ họa rất lớn, gồm khoảng 150 hàm hỗ trợ một số tính năng cơ bản như sau: Khả năng thể hiện các hàn đối tượng đồ họa cơ bản. OpenGL có thể thể hiện đượcc các đối tượng đồ họa cơ bản như: điểm, đoạn thẳng, đa giác, các đường cong hay mặt cong bậc hai. Ngoài ra còn một số đối tượng 3 chiều cơ bản khác như: hình cầu, hình trụ, hình hộp...Từ đó có thể xây dựng nên các đối tượng 3 chiều phút tạp hơn, thậm chí có thể tự định nghĩa hay thiết kế các phần mềm hỗ trợ 3 chiều như AutoCad, SolidWorks, 3Dmax. Khả năng quan sát đối tượng. Các đối tượng có thể quan sát từ nhiều góc độ khác nhau thông qua các phép biến đổi vị trí mắt hay phép biến đổi vị trí vật cũng như các phép chiếu... Khả năng định màu sắc vật liệu đối tượng. Cho phép thể hiện màu sắc đối tượng một cách đa dạng và thuộc tính vật liệu. Khả năng tạo hiệu ứng ánh sáng trong chương trình mô phỏng. Cho phép tạo hiệu ứng ánh sáng như thực tế tạo ra cảm giác thật cho các mô hình và khung cảnh 3 chiều. Khả năng tạo khung cảnh mô phỏng thực tế OpenGL. Hỗ trợ các kỹ thuật tạo các khung cảnh giống thực tế như : Kỹ thuật dán ảnh (texture mapping) để tạo các khung cảnh thực tế. Kỹ thuật sương mù (fog) cho phép tạo hiệu ứng ảnh mờ dần khi đối tượng chuyển động xa khỏi mắt nhìn. Kỹ thuật trộn màu (blending) tạo các vật thể trong mờ có thể nhìn xuyên qua được. Kỹ thuật loại bỏ răng cưa (antialiasing). Khả năng cải thiện tốc độ OpenGL. Cho phép cải thiện tốc độ hiển thị bằng kỹ thuật danh sách hiển thì (display list) Khả năng chọn các đối tượng đồ họa (selection and hitting derect). Kỹ thuật cho phép chọn các đối tượng đồ họa 3 chiều và ứng dụng trong kỹ thuật mô phỏng va chạm của vật thể. 11.2. GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH VISUAL C++ VÀ ỨNG DỤNG MFC. Visual C++ là một trong các ngôn ngữ lập trình thuộc dòng Visual Studio của hãng Microsoft, phát triển dựa trên nền tảng là ngôn ngữ lập trình hướng đối tượng C++. Visual C++ ra đời khoảng những năm 1990 và càng ngày càng được sử dụng rộng rãi nhất là các ứng dụng trong kỹ thuật như là lập trình nhúng, lập trình điều khiển và lập trình mô phỏng. Việc tạo ra các giao diện phức tạp và trình bày đẹp đối với Visual C++ khá là đơn giản, và đây chính là thế mạnh của Visual C++ trong việc trợ giúp đắc lực cho người lập trình khi xây dựng những dự án lớn hoặc trong kỹ thuật lập trình hệ thống. MFC (Microsoft Foundation Classes) – là thư viện cơ sở chứa các lớp (class) C++ do Microsoft cung cấp nhằm đặt một trình bao bọc Windows API tạo sự thuận lợi cao cho người dùng trong việc phát triển ứng dụng. Ngoài ra, MFC còn cung cấp kiến trúc View/Document giúp định nghĩa cấu trúc chương trình và cấu trúc tài liệu cho trình ứng dụng đơn giản, uyển chuyển và dễ phát triển hơn. Do đó MFC còn được xem là một khung ứng dụng (application framework). Lập trình Windows với MFC là kỹ thuật lập trình sử dụng bộ thư viện MFC để xây dụng các trình ứng dụng trong Windows (Window App) và các dạng ứng dụng khác như DLL, COM, ActiveX... 11.3. MÔ PHỎNG BÀI TOÁN CẦN THỰC HIỆN. 11.3.1. Cách tạo một Project MFC để mô phỏng hoạt động. Các bước tiến hành như sau: -Chọn File→New, chọn tab Projects, khi đó xuất hiện các Project được lập trình trên Visual C++ 6.0→Chọn MFC AppWizard(exe). Trong Project name, gõ tên muốn đặt vào, ví dụ “van”, và trong lacation chọn vị trí lưu Project vừa tạo. Hình 11.2: Bắt đầu thiết lập Project MFC. -Tiếp đó xuất hiện các hộp thoại cho phép thiết lập đặc tính của Project tạo ra, cụ thể như sau: Bước 1: Chọn Single Document Interface- đây là loại giao diện đơn tài liệu tại một thời điểm, chỉ có một tài liệu được mở và hiện hành, để cho người dùng thao tác trên đó. Trong trường hợp này, do cần mô phỏng hoạt động của một hệ thống hàn nên sử dụng kiểu tài liệu này. Hình 11.3: Thiết lập 1 Bước 2: Do ứng dụng không sử dụng dữ liệu nên trong mục Database Support chọn None. Hình 11.4: Thiết lập 2. Bước 3: Do không dùng tài liệu phức tạp nên chọn None. Hình 11.5: Thiết lập 3. Bước 4: Lựa chọn các thiết lập sau: Docking Toolbar: Yes –Chọn thanh công cụ có gắn vào cửa sổ. Initial Status Bar: Yes –Chọn thanh trạng thái có gắn vào ứng dụng. Printing an Printer Preview: No-Không cần in ấn. 3D controls: Yes-Có điều khiển nối. Toolbars look: Normal –Dạng thanh công cụ bình thường. Hình 11.6: Thiết lập 4. Bước 5: Chọn các thiết lập sau: MFC Standard: dạng chuẩn. Hình 11.7:Thiết lập 5. Bước 6: Hoàn tất việc thiết lập. Hình 11.8: Hoàn thành thiết lập Project MFC. Về cơ bản sau khi tạo lập xong một Project, chương trình đã tạo sẵn ra một giao diện trước. Khi nhấn chạy thử chương trình ra được như sau: Hình 11.9:Chạy thử chương trình khi mới thiết lập xong. Khi một ứng dụng được tạo ra nó có các lớp cơ bản sau: Hình 11.10: Các lớp cơ bản của ứng dụng. Chức năng cảu các lớp cơ sở của ứng dụng MFC như sau: - CApp : là lớp ứng dụng (Applicatiton Class) có nhiệm vụ là khởi tạo và chạy ứng dụng. - CDoc : là lớp tài liệu (Document Class) của ứng dụng, có nhiệm vụ nạp và duy trì 1 tài liệu. Một tài liệu có thể là bất cứ cái gì,từ một bản thảo cho đến các việc cài đặt của một thiết bị mạng…Tuy nhiên, mục đích sử dụng của chương trình là mô phỏng nên không cần quan tâm nhiều đến lớp này. - CView: là lớp hiển thị của ứng dụng (View Class),có nhiệm vụ cung cấp một hay nhiều View (khung) cho tài liệu.Trong chương trình mô phỏng ta sẽ cần sử dụng rất nhiều trong lớp này để khởi tạo cho OpenGL và các thao tác vẽ lại trên lớp này. - CmainFrame: là lớp khung (Frame Class) của ứng dụng và có nhiệm vụ hiển thị và truyền lệnh của người dùng. 11.3.2. Khởi tạo và thiết lập các gói thư viện của OpenGL. Để tạo ra và hiện hành một ngữ cảnh biểu diễn OpenGL có 3 bước cơ bản sau : Bước 1 : Ta phải định dạng điểm ảnh . Bước 2 : Ta phải tạo ngữ cảnh biểu diễn . Bước 3 : Làm cho ngữ cảnh biểu diễn hiện hành. Qua 6 bước cơ bản trên ta đã tạo ra được 1 Project MFC, để mô phỏng được các hoạt động của hệ thống thì ta phải thiết lập môi trường đồ họa. Hình 11.11:Thêm các thư viện sử dụng. Để tạo được ngữ cảnh biểu diễn của OpenGL thì trước tiên ta phải include (bao gồm) tất cả các tập thư viện của OpenGL vào trong Project này. Từ thanh Menu chính của chương trình Visual C++ 6.0 ta chọn Project -> Settings sau đó chọn Tab là Link , chọn category là “General” và nhập vào hộp thoại Object/library modules là : “opengl32.lib glu32.lib” như hình vẽ trên và chọn nút OK. Khai báo và sử dụng lớp ST_SplitterWnd: Đây là lớp dung để chia đôi khung ứng dụng khi chạy chương trình.Ta nhấn đúp vào lớp CMainFrame trong ClassView/file MainFrm.h và phải khai báo thêm : #include"Splitter/ST_SplitterWnd.h" Ngoài ra khi sử dụng thư viện OpenGl thì ta phải khai báo trong lớp CView #include "OpenGL_LIB/InitOpenGL.h" #include "OpenGL_LIB/ObjectsOpenGL.h" using namespace ObjectsOpenGL; 11.3.3. Tạo các hàm. Để tạo thành một chương trình hoàn chỉnh, cần khai báo cũng như sử dụng rất nhiều biến, hàm... Vì thế trong giới hạn của kiến thức bản thân, cũng như phạm vi của đồ án, ở đây tôi chỉ xin trình bày các hàm chính trong chương trình. Khai báo biến các con trỏ để khởi tạo thiết bị và môi trường vẽ trong lớp CDoc: // Attributes public: CInitOpenGL *m_pInitGLView; CListPoint m_Orbitan; Tiến hành thiết lập môi trường đồ họa OpenGL trong lớp Cview: -Thiết lập điểm nhìn đối tượng: CvanView::CvanView()//Diem nhin { m_pInitGL = new CInitOpenGL(this); m_pInitGL->SetScale(0.5); m_pInitGL->m_TranslateX = -450; m_pInitGL->m_TranslateY = -20; m_pInitGL->m_TranslateZ = -120; } -Thiết lập các hàm tạo môi trường hiển thị void CvanView::OnDraw(CDC* pDC) { CVANDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); m_pInitGL->BeforeDrawing(); glPushMatrix(); m_Enviroment.DisableLighting(); glRasterPos3d(-4, 3.8, -10); glColor3d(1, 0.5, 0); m_pInitGL->PrintString(" ");//hien text len man hinh glRasterPos3d(-5, 3.8, -11); glColor3d(1, 0.5, 0); m_pInitGL->PrintString(" ");//hien text len man hinh glPopMatrix(); m_pInitGL->UseUCS(); m_pInitGL->TranslateGL(); m_pInitGL->MouseMoveGL(); m_pInitGL->ScaleGL(); pDoc->DrawScene(); m_pInitGL->AfterDrawing(); } -Thiết tạo hàm OnInitiaUpdate() để update các khâu khớp, cũng như các thay đổi của đối tượng, có thể thiết lập màu nền tại đây. void CvanView::OnInitialUpdate() { CView::OnInitialUpdate(); GetDocument()->SetInitGLView(m_pInitGL); m_pInitGL->SetBkgColor(RGB(50,150,200));//Mau nen m_pInitGL->BeginGLCommand(); GetDocument()->InitModel(); m_pInitGL->EndGLCommand(); Out32(0x378,255); } -Tiếp theo, thêm các hàm Oncreate, On Destroy, Onsize vào để có thể thay đổi kích thước hay giá trị và các hàm OnButton, OnMouseMove để sử dụng phím và chuột. int CvanView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_pInitGL->OnCreateGL(); m_pInitGL->BeginGLCommand(); m_Enviroment.EnableLighting(); m_Enviroment.TurnOnLight(); m_pInitGL->EndGLCommand(); return 0; } void CvanView::OnDestroy() { CView::OnDestroy(); m_pInitGL->OnDestroyGL(); } void CvanView::OnLButtonDown(UINT nFlags, CPoint point) { m_pInitGL->OnLeftButtonDown(point); CView::OnLButtonDown(nFlags, point); } void CvanView::OnLButtonUp(UINT nFlags, CPoint point) { m_pInitGL->OnLeftButtonUp(); CView::OnLButtonUp(nFlags, point); } void CvanView::OnMouseMove(UINT nFlags, CPoint point) { m_pInitGL->OnMouseMove(point); CView::OnMouseMove(nFlags, point); } void CvanView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); m_pInitGL->OnSizeGL(cx, cy); } Trong lớp CDoc: Xây dựng hàm InitModel để nhập các đối tượng 3D dạng file *.STL xuất từ các chương trình vẽ đối tượng 3D, đồng thời quy định màu sắc cho đối tượng. void CvanDoc::InitModel() { //Chon vi tri ban dau cua gia do m_thetabinh = 0; m_thetadia=0; m_thetapittong = 0; x1 = 0; x1v = 0; x2 = 0; x3 = 0; tam1 = tam2 = tam3 = tam4 = tam5 = 0; //Khoi tao cac khau: m_nen.setModel("Model File/nen.STL"); m_nen.setMaterial(storageMaterial[16]); m_khung.setModel("Model File/khung.STL"); m_khung.setMaterial(storageMaterial[9]); m_v.setModel("Model File/v.STL"); m_v.setMaterial(storageMaterial[19]); m_binh.setModel("Model File/binh.STL"); m_binh.setMaterial(storageMaterial[10]); m_dia.setModel("Model File/dia.STL"); m_dia.setMaterial(storageMaterial[4]); m_h1.setModel("Model File/h1.STL"); m_h1.setMaterial(storageMaterial[19]); m_h2.setModel("Model File/h2.STL"); m_h2.setMaterial(storageMaterial[10]); m_pittong1_1.setModel("Model File/pittong1_1.STL"); m_pittong1_1.setMaterial(storageMaterial[6]); m_pittong1_2.setModel("Model File/pittong1_2.STL"); m_pittong1_2.setMaterial(storageMaterial[16]); m_pittong2.setModel("Model File/pittong2.STL"); m_pittong2.setMaterial(storageMaterial[9]); m_xl1.setModel("Model File/xl1.STL"); m_xl1.setMaterial(storageMaterial[11]); m_xl2.setModel("Model File/xl2.STL"); m_xl2.setMaterial(storageMaterial[19]); m_xl3.setModel("Model File/xl3.STL"); m_xl3.setMaterial(storageMaterial[19]); m_m1.setModel("Model File/m1.STL"); m_m1.setMaterial(storageMaterial[8]); m_m2.setModel("Model File/m2.STL"); m_m2.setMaterial(storageMaterial[6]); m_m3.setModel("Model File/m3.STL"); m_m3.setMaterial(storageMaterial[17]); m_m4_1.setModel("Model File/m4_1.STL"); m_m4_1.setMaterial(storageMaterial[16]); m_m4_2.setModel("Model File/m4_2.STL"); m_m4_2.setMaterial(storageMaterial[4]); m_m4_3.setModel("Model File/m4_3.STL"); m_m4_3.setMaterial(storageMaterial[9]); m_m5_1.setModel("Model File/m5_1.STL"); m_m5_1.setMaterial(storageMaterial[11]); m_m5_2.setModel("Model File/m5_2.STL"); m_m5_2.setMaterial(storageMaterial[18]); m_ng1.setModel("Model File/ng1.STL"); m_ng1.setMaterial(storageMaterial[8]); m_ng2.setModel("Model File/ng2.STL"); m_ng2.setMaterial(storageMaterial[9]); m_ng3.setModel("Model File/ng3.STL"); m_ng3.setMaterial(storageMaterial[11]); m_dk1.setModel("Model File/dk1.STL"); m_dk1.setMaterial(storageMaterial[8]); m_dk2.setModel("Model File/dk2.STL"); m_dk2.setMaterial(storageMaterial[19]); m_dk3.setModel("Model File/dk3.STL"); m_dk3.setMaterial(storageMaterial[11]); m_day1.setModel("Model File/day1.STL"); m_day1.setMaterial(storageMaterial[9]); m_day2.setModel("Model File/day2.STL"); m_day2.setMaterial(storageMaterial[14]); m_day3.setModel("Model File/day3.STL"); m_day3.setMaterial(storageMaterial[11]); m_khi1.setModel("Model File/khi1.STL"); m_khi1.setMaterial(storageMaterial[13]); m_khi2.setModel("Model File/khi2.STL"); m_khi2.setMaterial(storageMaterial[12]); m_khi3.setModel("Model File/khi3.STL"); m_khi3.setMaterial(storageMaterial[11]); m_khi4.setModel("Model File/khi4.STL"); m_khi4.setMaterial(storageMaterial[9]); m_khi5.setModel("Model File/khi5.STL"); m_khi5.setMaterial(storageMaterial[10]); //Quy dao m_Orbitan.setSize(1000); m_Orbitan.setColor(CColor(1, 1, 0)); m_Orbitan.setSizePoint(2); } -Xây dựng hàm vẽ vật thể DrawRobot(). void CvanDoc::DrawRobot() { glScaled(0.65, 0.65, 0.65); //ve nen + khung glPushMatrix(); m_nen.drawObject();//ve Khung m_khung.drawObject();//ve Khung glPopMatrix(); //ve khoi V glPushMatrix(); glTranslated(0, -60, 0);//de ve vi tri mat dat glTranslated(0, x1v, 0); //x1v= 60 thi o vi tri dua binh vao vi tri han, ha xuong 10mm nua khi binh quay m_v.drawObject();//ve khoi V glPopMatrix(); //ve binh glPushMatrix(); glTranslated(0, 300, 0); glTranslated(50, 0, 0);//50 la vi tri chon dat ban dau glTranslated(0, -60, 0); //vi tri binh khi moi dat vao glTranslated(0, x1, 0); //x1= 60 thi o vi tri han glTranslated(-x2, 0, 0);//vi tri han x2=50 glRotated(m_thetabinh, 1, 0, 0); m_binh.drawObject(); glPopMatrix(); //ve dia quay glPushMatrix(); glTranslated(0, 300, 0); glTranslated(-232.3, 0, 0); glRotated(m_thetadia, 1, 0, 0); m_dia.drawObject(); glPopMatrix(); //ve dong co lien HGT glPushMatrix(); glTranslated(0, 300, 0); glTranslated(-302.3, 0, 0); m_h1.drawObject();//ve h1 glTranslated(-170, 0, 0); m_h2.drawObject();//ve h2 glPopMatrix(); //ve pittong glPushMatrix(); glTranslated(0, 300, 0); glTranslated(400, 0, 0);//400 la do chon dat vi tri ban dau glTranslated(-x3, 0, 0);//vi tri han khi x3=450-277,5=172,5 m_pittong1_2.drawObject();//ve pittong1_2 glRotated(m_thetapittong, 1, 0, 0); m_pittong1_1.drawObject();//ve pittong1_1 m_pittong2.drawObject();//ve pittong2 glPopMatrix(); //ve xylanh glPushMatrix(); glTranslated(0, 300, 0); glTranslated(550, 0, 0); m_xl1.drawObject();//ve xylanh1 m_xl2.drawObject();//ve xylanh2 m_xl3.drawObject();//ve xylanh3 glPopMatrix(); //ve cum mo han glPushMatrix(); glTranslated(0, -10, 0); glTranslated(0, 0, -500);//500 ga tri tu chon glTranslated(105, 0, 0); m_m1.drawObject();//ve m1 glTranslated(0, 800, 0);//700 la gia tri dat vi tri ban dau glTranslated(0, -75, 0);//Trong lan 6 thi day la x4 m_m2.drawObject();//ve m2 glTranslated(-105, 0, 0); glTranslated(0, 0, 400);//400 la gia tri dat vi tri han dau glTranslated(0, 0, 100);//Trong lan 6 thi day la x5 m_m3.drawObject();//ve m3 m_m4_1.drawObject();//ve m4_1 m_m4_2.drawObject();//ve m4_2 m_m4_3.drawObject();//ve m4_3 m_m5_1.drawObject();//ve m5_1 m_m5_2.drawObject();//ve m5_2 glPopMatrix(); //ve cum thiet bi han glPushMatrix(); glTranslated(0, -10, 0); glTranslated(0, 0, -1000);//1000 ga tri tu chon glTranslated(-700, 0, 0);//700 ga tri tu chon m_ng1.drawObject();//ve nguon 1 m_ng2.drawObject();//ve nguon 2 m_ng3.drawObject();//ve nguon 3 glTranslated(200, 0, 0);//200 ga tri tu chon m_dk1.drawObject();//ve dieu khien 1 m_dk2.drawObject();//ve dieu khien 2 m_dk3.drawObject();//ve dieu khien 3 glTranslated(200, 0, 0);//200 ga tri tu chon m_day1.drawObject();//ve bo cap day 1 m_day2.drawObject();//ve bo cap day 2 m_day3.drawObject();//ve bo cap day 3 glTranslated(900, 0, 0);//900 ga tri tu chon m_khi1.drawObject();//ve binh khi 1 m_khi2.drawObject();//ve binh khi 2 m_khi3.drawObject();//ve binh khi 3 m_khi4.drawObject();//ve binh khi 4 m_khi5.drawObject();//ve binh khi 5 glPopMatrix(); } Tạo bảng điều khiển trong lớp mới CmainFrame, tạo Dialog FORMVIEW và thiết kế bảng điều khiển mong muốn Hình 11.12: Thiết kế bảng điều khiển. Tạo ra các sự kiện khi nhấn các nút trên bảng điều khiển để thực hiện các công việc yêu cầu. void CGraphView::OnButton1() { ((CMainFrame*)GetParentFrame())->OnRun1(); } void CGraphView::OnButton2() { ((CMainFrame*)GetParentFrame())->OnRun2(); } void CGraphView::OnButton3() { ((CMainFrame*)GetParentFrame())->OnRun3(); } void CGraphView::OnButton4() { ((CMainFrame*)GetParentFrame())->OnRun4(); } void CGraphView::OnButton5() { ((CMainFrame*)GetParentFrame())->OnRun5(); } void CGraphView::OnButton6() { ((CMainFrame*)GetParentFrame())->OnRun6(); } void CGraphView::OnButton7() { ((CMainFrame*)GetParentFrame())->OnRun7(); } void CGraphView::OnButton8() { ((CMainFrame*)GetParentFrame())->OnRun8(); } void CGraphView::OnBnClickedAuto() { ((CMainFrame*)GetParentFrame())->x =0; } void CGraphView::OnBnClickedManual() { ((CMainFrame*)GetParentFrame())->x =1; } Các function liên quan, thực hiện các chuyển động của đối tượng sau khi nhấn các nút trên bảng điều khiển: void CMainFrame::OnRun1() //V+binh len { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t+=10; pDoc->x1 = m_t; pDoc->x1v = m_t; if (m_t>50) { m_t=50; } UpdateAllViews(); } else { return; } } void CMainFrame::OnRun2() //V+binh xuong { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t-=10; pDoc->x1 = m_t; pDoc->x1v = m_t; if (m_t<0) { m_t=0; } UpdateAllViews(); } else { return; } } void CMainFrame::OnRun3() //PT ep { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t2+=5; pDoc->x3 = m_t2; if (m_t2>100) { m_t2=100; } UpdateAllViews(); } else { return; } } void CMainFrame::OnRun4() //PT nha { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t2-=5; pDoc->x3 = m_t2; if (m_t2<0) { m_t2=0; } UpdateAllViews(); } else { return; } } void CMainFrame::OnRun5()//Quay trai { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t3+=5; pDoc->m_thetadia = m_t3; UpdateAllViews(); } else { return; } } void CMainFrame::OnRun6()//Quay phai { if (x==1) { CvanDoc *pDoc = GetDocument(); pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t3-=5; pDoc->m_thetadia = m_t3; UpdateAllViews(); } else { return; } } void CMainFrame::OnRun7() //START { if (x==0) { SetTimer(1, 30, NULL); } else { return; } } void CMainFrame::OnRun8() //STOP { if (x==0) { CvanDoc *pDoc = GetDocument(); //pDoc->Stopmotor(0xff); KillTimer(1); } else { return; } } void CMainFrame::OnTimer(UINT nIDEvent) { CvanDoc *pDoc = GetDocument(); switch(nIDEvent) { case 0: break; case 1: m_t4+=1; //Chuyen dong 1: Sau khi binh duoc dat vao khoi V thi V se nang len (60mm) if (pDoc->tam1 < 60) { pDoc->tam1 += 2; pDoc->x1 += 2;//cua binh pDoc->x1v += 2;//cua khoi V } else //Chuyen dong 2: pitong day binh vao dung vi tri khi han if (pDoc->tam2 < 122.5) { pDoc->tam2 += 3; pDoc->x3 += 3; } if ((pDoc->x3 > 72.5) & (pDoc->x2 <50)) pDoc->x2 += 3; //Chuyen dong 3:V dich xuong 60 mm if ((pDoc->x2 >= 50) & (pDoc->tam3 > -60)) { pDoc->tam3 -= 2 ; pDoc->x1v -= 2;//khoi V } //Chuyen dong 4:Han //Khi khoi V ha xuong khoang 10mm thi bat dau han if ((pDoc->tam3 m_thetabinh < 360)) { pDoc->m_thetabinh += 1; pDoc->m_thetadia += 1; pDoc->m_thetapittong += 1; pDoc->Calculate(); } //Chuyen dong 5: Nang khoi V len de do bình //Khi binh quay khoang 330 do ti khoi V bat dau di len if (pDoc->m_thetabinh >= 360) pDoc->m_Orbitan.clear();//xoa duong quy dao if ((pDoc->m_thetabinh > 355) & (pDoc->tam4 < 60)) { pDoc->tam4 += 2; pDoc->x1v += 2;//khoi V } //Chuyen dong 6 :Keo pittong ra if ((pDoc->tam4 == 60) & (pDoc->x3 >0)) { pDoc->x3 -= 3; pDoc->tam5 -=3; } //chuyen dong 7 :Ha V xuong--> kết thúc một lần hàn if ((pDoc->tam5 x1 > 0)) { pDoc->x1 -= 2;//binh pDoc->x1v -= 2;//khoi V } UpdateAllViews(); break; default:break; } } -Ngoài ra còn nhiều hàm liên quan, hỗ trợ khác nhưng không trình bày hết được tại đây. 11.3.4. Thiết kế các mô hình đối tượng 3D trên SolidWorks. Ở đây lựa chọn chương trình vẽ 3D SolidWork, sau khi đã vẽ xong các đối tượng cần thiết cho mô phỏng, sẽ tiến hành lưu chúng lại dưới dạng file *.STL. Dưới đây là cách tiến hành. Giả sử minh họa vẽ bình, sau khi vẽ xong bình (không trình bày cách vẽ), ta được như sau: Hình 11.13: Ví dụ mô bình 3D vẽ bằng Solidwork Save file dưới dạng file STL: chọn save as Một bảng save as hiện ra, các thông số điền và lựa chọn như sau: File name: đặt tên file. Save as type: chọn STL(*.stl). Tiếp đó nhấn Option, và hiện ra bảng Option. Chọn các thông số như dưới đây: Hình 11.14: Option khi save file dạng *.STL. Output as: chọn ASCII Một điều quan trọng là tích vào ô: “Do not translate STL output data to positive space ” để cho hệ tọa độ khi vẽ trong Solidworks và khi chuyển sang file .*STL không bị dịch chuyển. Kết quả thu được file “binh.stl” Tiến hành hoàn toàn tương tự với các khâu khác của đối tượng. Dưới đây là danh sách các file STL tạo ra sau khi vẽ tất các khâu (trong thư mục Model file). Hình 11.15: Các file dùng trong chương trình dưới dạng *.STL. 11.3.5. Chạy mô phỏng sau khi hoàn thành. Dưới đây là một số hình ảnh khi chạy chương trình.

Các file đính kèm theo tài liệu này:

  • docxopengl_261.docx
Tài liệu liên quan