Qt中使用QAxObject的dynamicCall和querySubObject函数操作SolidWorks的方法

来源:互联网 发布:网络攻防实验 编辑:程序博客网 时间:2024/05/15 14:44

  大部分函数可以直接从VB语言“翻译”过去成为Qt中的C++语言,如

    Set Part = swApp.OpenDoc6(strFilePath & "\" & partName & ".SLDPRT", 1, 0, "", longstatus, longwarnings) '打开指定文件,这里是SLDPRT格式三维模型        Set Part = swApp.ActivateDoc2(partName & ".SLDPRT", False, longstatus) '设置文件处于激活状态

   翻译到Qt就是

        Part = swApp->querySubObject("OpenDoc(QString,int)",path,1);        Part = swApp->querySubObject("ActivateDoc(QString)",this->partName);


  这里不用OpenDoc6是为了简便。这里的数据类型都是string, int 这样子的常规类型

  但是有一种问题,就是这样的VB语言,比如SelectByID2

boolstatus = Part.Extension.SelectByID2("MainRad@草图1@DR7.313.234.SLDPRT", "DIMENSION", 1.52752972114265E-02, -1.13202148822171E-03, 2.30092248393811E-02, False, 0, Nothing, 0)


   根据SolidWorks的api说明文档,点击打开链接

Visual Basic (Usage) 

Dim instance As IModelDocExtensionDim Name As StringDim Type As StringDim X As DoubleDim Y As DoubleDim Z As DoubleDim Append As BooleanDim Mark As IntegerDim Callout As CalloutDim SelectOption As IntegerDim value As Boolean value = instance.SelectByID2(Name, Type, X, Y, Z, Append, Mark, Callout, SelectOption)

C++/CLI 

bool SelectByID2( &   String^ Name,&   String^ Type,&   double X,&   double Y,&   double Z,&   bool Append,&   int Mark,&   Callout^ Callout,&   int SelectOption) 

  这里面有一个Callout的指针,在Qt里面用

        myExtension->dynamicCall(                    "SelectByID2(QString,QString,double,double,"                    "double,bool,int,Callout *,int)",list);


  会提醒参数不匹配,这里要用QAxObject的asVariant()方法来解决,就是说,list里面对应append一个QAxObject*类型的参数

list.append(myExtension->asVariant());


  然后dynamicCall里面把Callout * 改成QAxObject *类型,就可以了

        myExtension->dynamicCall(                    "SelectByID2(QString,QString,double,double,"                    "double,bool,int,QAxObject *,int)",list);
  接下来就是EditDimensionProperties2函数,这个直接翻译就可以了

        Part->dynamicCall("EditDimensionProperties2(int,double,double,"                          "QString,QString,bool,int,int,bool,int,int,"                          "QString,QString,bool,QString,QString,bool)",list1);

参考内容:点击打开链接


原创粉丝点击