用了整整一個周的時間才搞完如何在Qt中打開二維、三維的工程圖,並實現基本的移動、旋轉、放大縮小、動畫等功能。在這個過程中網上找了很多資料,主要用到Qt 中的QAxWidget類(ActiveX),下面這方法(還有其他實現方法......)是在前面人的基礎上自己親測得來的,寫出來希望對大家有所幫助吧!
1、下載eDrawings 2010(可以是其它的二維、三維查看軟件如:autoVue、MaxDraw,我都試了eDrawings 2010是最好實現的),並安裝!注意破解(將一個.dll文件拷貝到安裝目錄下即可)
2、獲取安裝的軟件的CLSID(通過註冊表查看)
第一步:進入註冊表(windows + R)(regedit)
第二步:進入HKEY_CLASSES_ROOT ———>CLSID——>右擊,查找eDrawings 2010——>得到CLSID碼
3、安裝Qt(版本不限),此處用的是4.7.0
4、新建一個Qt工程
5、在界面上拉出一個label和pushButton出來,用來顯示後面的CAD文件
6、開始寫代碼
第一步:新建對象:
.cpp中
#include < QAxWidget >
QAxWidget *object;
object = new QAxWidget(ui->widget);
object->setGeometry(0,0,791,551);
第二步:通過CLSID碼建立eDrawings 2010和QAxWidget 的關係
object->setControl(QString::fromUtf8("{3027ECC6-5665-4bdf-AEDD-DB56B931C6BC}"));
第三步:通過QAxwidget的接口函數,調用eDrawings2010中的函數
object->dynamicCall("OpenDoc( string FileName,"
"bool IsTemp,"
"bool PromptToSave,"
"bool ReadOnly,"
"string CommandString)","1.STL",0,0,0,"");
解釋:第一個爲eDrawings中的接口函數
openDoc(string FileName,
boolIsTemp,
bool PromptToSave,
bool ReadOnly,
string CommandString)
後面爲openDoc中的參數,這是dynamicCall的調用格式(Qt 中F1吧)
第四步:
object->show();
第五步:
實現二維、三維圖移動、旋轉、放大、動畫等都需要調用相應的函數(通過前面建立的pushButton,在button的點擊事件中寫入下面代碼)
void addNewProcess::on_pushButtonCancel_2_clicked()
{
//旋轉
QVariantList params;
params.append(1);
object->dynamicCall("SetViewOperator(EMVOperators)", params);
}
其它寫出主要函數.........
//放大
QVariantList params;
params.append(2);
object->dynamicCall("SetViewOperator(EMVOperators)", params);
//移動
QVariantList params;
params.append(4);
object->dynamicCall("SetViewOperator(EMVOperators)", params);
//恰當視圖
QVariantList params;
params.append(7);
object->dynamicCall("SetViewOrientation(EMVViewOrientation)", params);
//動畫
QVariantList params;
params.append(4);
object->dynamicCall("Animate(EMVAnimateAction)", params);
/*......................................分割線...............................*/
關鍵提示: (1)如何得到eDrawing 2010或其他軟件的接口函數?(這個相當重要....可以知道調用接口函數、調用方式、參數等) 在object->setControl(QString::fromUtf8("{3027ECC6-5665-4bdf-AEDD-DB56B931C6BC}")); object->generateDocumentation(); //這個函數的返回值就是eDrawings中的接口函數,把它寫入到一個文件中 如: QFile file("AutoVue.html");
if(!file.open(QIODevice::WriteOnly|QIODevice::Append)) { qDebug()<<"open txt error!"<< __FILE__ << __LINE__; return; } QTextStream out(&file); out << object->generateDocumentation(); 打開AutoVue.html
(2)關鍵提示:如果要打開三維圖,及得要用文件的絕對路徑(我也不知道爲啥),反正相對路徑就是不可以! |
總結:這次在網上問了好的人,都是石沉大海、杳無音信!所以我當時想我要是實現了這個問題,一定要把它寫出來!!!現在只是履行當時的承諾!遇到不會的問題要多查資料和周圍的同志多討論!