iCAx开思工具箱

标题: 请问如何将鼠标点选的多个面放进一个CATLIST呢? [打印本页]

作者: ayanamist    时间: 2012-11-30 10:11
标题: 请问如何将鼠标点选的多个面放进一个CATLIST呢?
我想将鼠标点选的多个面放进一个CATLISTV(CATISpecObject_var),在百科全书里找到一个CATCSO好像是类似的功能,但是也没找到怎么转变成CATLISTV的方法。。
第一次用CAA,问的问题有些初级,希望大大们不吝赐教
作者: linlily0925    时间: 2012-11-30 11:18
新建一个CATListValCATISpecObject_var类型的列表,然后Append你选择的各面
CATISpecObject_var spSpecSur1  = ...;//你选择的面,如果面元素为体上面或者结构树上不存在,则需通过CATBody转换
CATISpecObject_var spSpecSur2  = ...;
CATISpecObject_var spSpecSur3  = ...;
......

CATListValCATISpecObject_var spListSurs;
spListSurs.RemoveAll();
spListSurs.Append(spSpecSur1 );
spListSurs.Append(spSpecSur2 );
spListSurs.Append(spSpecSur3 );
.......
作者: ayanamist    时间: 2012-11-30 11:40
linlily0925 发表于 2012-11-30 11:18
新建一个CATListValCATISpecObject_var类型的列表,然后Append你选择的各面
CATISpecObject_var spSpecSur ...

谢谢,问题是如何获取我选择的面呢?
作者: linlily0925    时间: 2012-11-30 12:05
Agent,百科全书里面User Interface - Commands-Managing Selection,里面写的很详细
作者: ayanamist    时间: 2012-11-30 12:08
linlily0925 发表于 2012-11-30 12:05
Agent,百科全书里面User Interface - Commands-Managing Selection,里面写的很详细

谢谢!
作者: ayanamist    时间: 2012-12-1 18:20
linlily0925 发表于 2012-11-30 11:18
新建一个CATListValCATISpecObject_var类型的列表,然后Append你选择的各面
CATISpecObject_var spSpecSur ...

你好,请问“需通过CATBody转换”,这步应该怎么转换呢?我直接将 CATISurface* 赋给 CATISpecObject_var,就变成NULL了
作者: beeler    时间: 2012-12-2 03:11
ayanamist 发表于 2012-12-1 18:20
你好,请问“需通过CATBody转换”,这步应该怎么转换呢?我直接将 CATISurface* 赋给 CATISpecObject_var ...

听得不明白
作者: ayanamist    时间: 2012-12-3 09:27

beeler 发表于 2012-12-2 03:11
听得不明白

我想用CATIPrtFactory中的CreateThickness为鼠标点选的面创建厚度特征,函数原型是
public virtual CATISpecObject_var CreateThickness   ( const CATLISTV(CATISpecObject_var)*ihObjectList,  double iOffset) = 0

我做了一个鼠标点选的CATPathElementAgent,选中的是CATSurface,我该如何将这个CATSurface 放进CATLISTV(CATISpecObject_var)里,好作为参数传递给CreateThickness呢?如果我将CATSurface*直接转换成CATISpecObject_var的话,就变成NULL了。。

刚开始做CAA,可能问题说的不太清楚,见谅……下面是代码

BuildGraph()里面:
  1.         _daPathEltSurface = new CATPathElementAgent("SelectSurface");
  2.         _daPathEltSurface->AddElementType(IID_CATSurface);
  3.         _daPathEltSurface->SetBehavior(CATDlgEngWithPSOHSO | CATDlgEngWithPrevaluation | CATDlgEngValuedFromCSO);
复制代码
响应函数ActionOne()里面:
  1.     CATSurface * piSurface = NULL;
  2.     CATBaseUnknown *obj = NULL ;

  3.     CATPathElement * pathmodel = _daPathEltSurface->GetValue();
  4.     if ( ( NULL != pathmodel) && (pathmodel->GetSize()> 0) )
  5.         obj = (*pathmodel)[pathmodel->GetSize()-1];
  6.     else
  7.         return FALSE;
  8.    
  9.     if ( NULL != obj )
  10.     {
  11.         cout<<"obj != NULL"<<endl;
  12.         HRESULT hr = obj->QueryInterface(IID_CATSurface, (void**)&piSurface);
  13.         if (SUCCEEDED(hr) && NULL != piSurface)
  14.             cout<<"piSurface != NULL!"<<endl;
  15.         else
  16.             return FALSE;
  17.     }
  18.     else
  19.         return FALSE;

  20.     CATICGMUnknown* piCGMUnkonwn = piSurface;
  21.     if (piCGMUnkonwn->IsATypeOf(CATSurfaceType))
  22.         cout<<"piSurface is CATSurface!"<<endl;
  23.     else
  24.         return FALSE;

  25.     CATISpecObject_var spSpecSur = (CATISpecObject_var)piSurface;
  26.     if (NULL_var==spSpecSur)
  27.         cout<<"spSpecSur == NULL_var!"<<endl;

  28.      CATLISTV(CATISpecObject_var) pSurfaceList;
  29.     pSurfaceList.RemoveAll();
  30.      pSurfaceList.Append(spSpecSur);

  31.     if (NULL_var==pSurfaceList[1])
  32.         cout<<"pSurfaceList[1] == NULL_var!"<<endl;
复制代码
输出
  1. obj != NULL
  2. piSurface != NULL!
  3. piSurface is CATSurface!
  4. spSpecSur == NULL_var!
  5. pSurfaceList[1] == NULL_var!
复制代码

作者: linlily0925    时间: 2012-12-3 10:43
CATIBRepAccess,看看以前的帖子吧~~~写的很清楚
作者: ayanamist    时间: 2012-12-4 08:32
linlily0925 发表于 2012-12-3 10:43
CATIBRepAccess,看看以前的帖子吧~~~写的很清楚

谢谢谢谢,正在看~




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3