Tải bản đầy đủ (.docx) (27 trang)

mô phỏng opengl chương 11 trình bày về giới thiệu chung về opengl, giới thiệu ngôn ngữ lập trình visual c và ứng dụng mfc,

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.01 MB, 27 trang )

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 < -10) & (pDoc->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 < 0) & (pDoc->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).

×