找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
123
返回列表 发新帖
打印 上一主题 下一主题

CAA问题

[复制链接]
21
发表于 2006-2-22 08:44:59 | 只看该作者
ExecuteScript 的用法:

public static HRESULT __stdcall ExecuteScript( const CATUnicodeString&  iLibraryName,
                                                                                  CatScriptLibraryType  iType,
                                                                           const CATUnicodeString&  iProgramName,
                                                                                               CATVariant&  oResult,
                                                                           const CATUnicodeString&  iFunctionName = "CATMain",
                                                                                                CATVariant*  iParams = NULL,
                                                                                                 unsigned int  iParamCount = 0,
                                                                                                 CATBoolean  iAutomaticReplay = TRUE)  

A short-cut method which runs a function written in a scripting language synchronously. ExecuteScript will return only once the scripted function has finished running.
Note:If the script uses one of the following methods:
         Selection.SelectElement2         *************我在VBA中的就是用的这个方法!
         Document.Indicate2D
         Document.Indicate3D
the current method must be ran on idle, using CATApplication.Subscribe with the CATSubscribeIdle value for the first parameter.
Parameters:
iLibraryName
                            The library in which the script is contained
iLibraryType
                           The type of the library
iProgramName
                           The name of the program in the library
oResult
                           The value returned by the function (if any)
iFunctionName
                           The name of the function to invoke
iParameters
                           An C++ array of parameters for the function
iParamCount
                           The size of the parameter array.
iAutomaticReplay
                           Specifies whether the replay is automatic or if it is explicitly done from a user interaction
22
发表于 2006-2-22 11:20:41 | 只看该作者
>the current method must be ran on idle, using CATApplication.Subscribe with the CATSubscribeIdle value for the first parameter.

Ok this is the point.

"the current method must be ran on idle", what is "the current method"?
I guess it could be the Active method of your command, or any method in your command which called ExecuteScript().
So how can I make it "be ran on idle"?
Use CATApplication.Subscribe() to subscribe this method (the above method) run in type of  CATSubscribeIdle. I guess you should do this in the constructor of your command.
You may code like this:
CATApplication::Subscribe(CATSubscribeIdle, this, NULL, MyCommand::MyMethod);
(understand why "this"? )

Note, you misunderstood " the first parameter", here it means the first parameter of the method CATApplication.Subscribe(), NOT CATUtilities::executescript()!!!

I don't guarantee this work, it's all based on my understanding/guessing.
23
发表于 2006-2-23 15:26:39 | 只看该作者
To saeba:
        Thank you for your help! I always think that " the first parameter" is the first parameter of the method CATUtilities::executescript().Now I try it again! If I still meet some difficult progrem,I hope you can help me,Thank you !!!
24
发表于 2006-2-28 14:14:00 | 只看该作者
第一个参数"C:\\Documents and Settings\\liguangyi\\Local Settings\\Temp\\VBAProject1.catvba"和第三个参数 "模块1"怎么定义的呀?
为什么不是"C:\\Documents and Settings\\liguangyi\\Local Settings\\Temp“和”VBAProject1.catvba"?
“模块1”是哪里来的?
谢谢!
25
发表于 2006-2-28 15:04:24 | 只看该作者
第一个参数指的是Catvba文件的全路径
第三个参数指的是catvba文件中你所要运行的模块的名称(因为一个catvba文件可以包含多个模块,程序并不知道你要执行哪个,需要你去指定)
joetwo,有不明白的尽管说,没关系的!另外saeba兄,听说你终于装了中文输入法了,可喜可贺啊!!!还有就是你说的参数 MyCommand::MyMethod这块怎么添啊?
是这样?          
CATApplication::Subscribe(CATSubscribeIdle,this,NULL,this);
CATScriptUtilities::ExecuteScript("D:\\WORK\\CATIA-VC++\\Program1.catvba", catScriptLibraryTypeVBAProj e ct, "bb", var2, "CATMain", NULL, 0,TRUE);
还是:
CATApplication::Subscribe(CATSubscribeIdle,this,NULL,CATScriptUtilities::ExecuteScript());
CATScriptUtilities::ExecuteScript("D:\\WORK\\CATIA-VC++\\Program1.catvba", catScriptLibraryTypeVBAProj e ct, "bb", var2, "CATMain", NULL, 0,TRUE);

我用的前者,报错如下
D:\WORK\CATIA-VC++\workspace2\.\ASSET\CmdModule.m\src\Test2Cmd.cpp(36) : error C2664: 'Subscribe' : cannot convert parameter 4 from 'class Test2Cmd *const ' to 'void (__cdecl *)(void)'
There is no context in which this conversion is possible

还是用别的啊?
26
发表于 2006-2-28 16:10:45 | 只看该作者
谢谢xinghesnak !
我是初学者,问的问题比较低级,呵呵!
请教:
  
我在CATIA中Assembly Design 平台用MS VBScript录制了宏,(宏录制了导入几个零件)。


Language="VBSCRIPT"

Sub CATMain()

Set productDocument1 = CATIA.ActiveDocument

Set product1 = productDocument1.Product

Set products1 = product1.Products

Dim arrayOfVariantOfBSTR1(0)
arrayOfVariantOfBSTR1(0) = "E:\CATIA\A.CATPart"
products1.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All"

Dim arrayOfVariantOfBSTR2(0)
arrayOfVariantOfBSTR2(0) = "E:\CATIA\B.CATPart"
products1.AddComponentsFromFiles arrayOfVariantOfBSTR2, "All"

Dim arrayOfVariantOfBSTR3(0)
arrayOfVariantOfBSTR3(0) = "E:\CATIA\X.CATPart"
products1.AddComponentsFromFiles arrayOfVariantOfBSTR3, "All"

End Sub


我想通过VC++创建一个按钮,实现运行这个宏,(类似CATIA中,宏的运行功能)
我的程序是
CATVariant  oResult;
CATScriptUtilities::ExecuteScript("E:\\",catScriptLibraryTypeDirectory, "Macro7.catvbs", oResult, "CATMain", NULL, 0, TRUE);   (我把录制的宏保存在E盘)
这样编译没有出错,但运行没有结果

请问像我这种方式可行不?
要是我把第一个参数改为"E:\\Macro7.catvbs"的话,第三个参数不知道改怎么处理。
谢谢了!
27
发表于 2006-2-28 16:13:29 | 只看该作者
上传我的catvba文件
28
发表于 2006-2-28 16:27:56 | 只看该作者
saeba兄,我的catvba文件也传上来,望高手指导一下吧
29
发表于 2006-3-1 14:14:28 | 只看该作者
>参数 MyCommand::MyMethod这块怎么添啊?
真是。。。够菜的。。。>_<
这个函数是要你自己写的呀!
MyCommand是你的命令的class
MyMethod是你的命令的一个方法,在这个方法里调用ExecuteScript()。

你真的(仔细)看懂了我上次写的那一段了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-25 01:47 , Processed in 0.023556 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表