iCAx开思工具箱

标题: 【求助】(未解决)二次开发的交互问题 [打印本页]

作者: 断线风筝    时间: 2004-10-5 19:59
标题: 【求助】(未解决)二次开发的交互问题
请教各位大侠:二次开发中要与窗口交互选择物体时怎么限定选择物体为曲面特征啊?
  
我按下面的写法只能选择曲面的子物体(如Join.face)
ReDim InputObjectType(0) : InputObjectType(0)="Face"  
Status=Selection.SelectElement2(InputObjectType,"Select a face",true)
  
如果我要选择的是整个曲面,而不是其中一块子物体应该怎么限定类型啊?
  
PS:用AnyObject可以这么做,但就是不能限定选择类型(如限定为曲线或曲面)
作者: 断线风筝    时间: 2004-10-6 23:05
没有人做二次开发的啊?
  
还是我描述得不够清楚
  
各位大侠指点指点吧
作者: vontony    时间: 2004-10-13 10:47
if anyobject.type=="face" then gotoheaver else gotohell
作者: vontony    时间: 2004-10-13 10:54
montab(0)="HybridBody"
str=selection.SelectElement(montab,"请选择检验点集(仅可选OPEN_BODY类型)",true)
  
   if str = "Normal" then   
作者: 断线风筝    时间: 2004-11-13 23:17
这招的确是可以,但好像是事后诸葛亮啊 :p
CATIA里很多命令都可以限定选择范围,而不是后来作判断的。
  
(好像trim是后来作判断的)
作者: acoka    时间: 2004-11-14 22:27
[quote][b]断线风筝 wrote:[/b]
这招的确是可以,但好像是事后诸葛亮啊 :p  
  CATIA里很多命令都可以限定选择范围,而不是后来作判断的。  
  
  (好像trim是后来作判断的) [/quote]
  
CATIA的命令是C++写的,实现方法是靠建立CATAcquisitionFilter
比如平面的例子
先建个agent
  
_pSupportPlaneInputAgent = new CATFeatureImportAgent( "AgentPathPlane" , NULL, NULL, MfNoDuplicateFeature);
    {
      CATListOfCATString orderedTypeList;
      orderedTypeList.Append( CATIMfPlane::ClassName() );
      orderedTypeList.Append( CATPlane::ClassName() );
      _pSupportPlaneInputAgent->SetOrderedTypeList( orderedTypeList );
      _pSupportPlaneInputAgent->SetBehavior(
          CATDlgEngWithPrevaluation
        | CATDlgEngWithPSO
        | CATDlgEngOneShot
        | CATDlgEngValuedFromCSO  
      );
      _pSupportPlaneInputAgent->SetAgentBehavior(
          MfNoDuplicateFeature
        | MfPermanentBody
        | MfLastFeatureSupport
        | MfRelimitedFeaturization
      );
    }
  
在CATIMfPlane和CATPlane是可以激发agient的对象,
在catia的原有命令里,常会出现通行禁止的标记,那是靠
CATAcquisitionFilter* pFilter = Filter( (FilterMethod) [$YourCmdClass::PlaneFilter,(void *)NULL )]
在你自己写的函数YourCmdClass::PlaneFilter()里,可以对选到的面进行2次筛选
  
你好像是要pick1块曲面得到整体相连的多曲面,这要自己写程序求
作者: 断线风筝    时间: 2004-11-16 21:30
汗,不用那么复杂吧?(俺只会VB~_~)
我只想判断我选择的是线或是面,仅此而已。
  
下面的代码勉强能解决问题,只是split;trim;invert;能作过操作的元素选不中了。
  1. ReDim InputObjectType(0):InputObjectType(0) = "[color=red]HybridShapeCurveExplicit[/color]"
  2. Status = Selection.SelectElement2(InputObjectType, "请选择一条曲线", True)
  3.   
  4. ReDim InputObjectType(0):InputObjectType(0) = "[color=red]HybridShapeSurfaceExplicit[/color]"
  5. Status = Selection.SelectElement2(InputObjectType, "请选择一个基面", True)
复制代码





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