Qt中打開二維、三維的工程圖

用了整整一個周的時間才搞完如何在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)關鍵提示:如果要打開三維圖,及得要用文件的絕對路徑(我也不知道爲啥),反正相對路徑就是不可以!

 


總結:這次在網上問了好的人,都是石沉大海、杳無音信!所以我當時想我要是實現了這個問題,一定要把它寫出來!!!現在只是履行當時的承諾!遇到不會的問題要多查資料和周圍的同志多討論!

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章