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

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 20907|回复: 8
打印 上一主题 下一主题

CAA怎样实现这个命令?

[复制链接]
跳转到指定楼层
1
发表于 2005-8-30 22:05:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
各位高手:
      现在我打开了一个CATPart文件,想把这个文件中的图形投影到这个图形中的xy面上去产生一个CATDrawing文件,请问在程序中怎么实现,用的是前视图命令,如图,就是说要用程序打开一个CATDrawing文件,图纸用默认的那种.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-8-30 22:10:52 | 只看该作者
建立一个Empty Sheet(如图)
谢谢各位了
3
发表于 2005-8-30 22:12:21 | 只看该作者
就是选择这一项
4
发表于 2005-9-1 10:04:36 | 只看该作者
挺麻烦的,说说思路吧:
  
1。首先要生成一个新的Drawing, 在interactive mode的话,从session QI 得到一个CATIIniInteractiveSession, 用CATIIniInteractiveSession::New("Drawing", opMyEditor)来生成一个新Drawing。(batch的话用CATDocumentServicesew)
  
2.从这个新Drawing的Doc QI 一个CATIDftDocumentServices,用CATIDftDocumentServices::GetDrawing()莱得到CATIDrawing, CATIDrawing QI CATIDftDrawingFormats, CATIDftDrawingFormats::GetAvailableFormats()得到可用的Format先放着,以后从这里面取一个自己想用的设置上去
  
3。从3D生成Drawing要用到CATIDftViewMakeUp。先从Container QI CATIDrwFactory, 用CATIDrwFactory::CreateViewWithMakeUp()生成一个CATIDftViewMakeUp。
  
4。从CATIDftViewMakeUp::GetView()得到一个CATIView,这是才能用CATIView::SetDoc()把3D的Part的linkableObject设上去,还要用CATIView::SetViewType(FrontView)来指定前视图。
  
5。还没完,从3D生成2D视图需要指定一个投影平面,由CATIView QI 一个CATIGenerSpec,用CATIGenerSpec::SetProjPlane()设定。
  
6。最后,对Drawing的Sheet设定Format(前面得到的), 指定CATIDftViewMakeUp在Sheet中的位置(CATIDftViewMakeUp::SetPosition), 再最后,把CATIDftViewMakeUp加到Sheet上(CATISheet::AddView)
  
7。嗯,别忘了还要Save文件。
5
发表于 2005-9-1 11:39:49 | 只看该作者
我用了这段代码,想要在画好的圆心处标注一个Text,结果圆画出来了,可是圆心处没有标注,请问为什么?
  CATIEditor *poEditor=NULL;  
  CATSession *piSession=CATSession::GetPtrSession();  
  CATIIniInteractiveSession *piInteractiveSession=NULL;  
  HRESULT hr=piSession->QueryInterface(IID_CATIIniInteractiveSession,(void **)[$piInteractiveSession)]
  hr=piInteractiveSession->New("Drawing", [$poEditor)]  
    CATFrmEditor* _editor2=poEditor->GetEditor();
  CATDocument* pDoc =_editor2->GetDocument();
  CATIDrawing *piDrawing = NULL;
  CATIDftDocumentServices *piDftDocServices = NULL;
  if (SUCCEEDED(pDoc->QueryInterface(IID_CATIDftDocumentServices, (void **)&piDftDocServices)))
  {
    piDftDocServices->GetDrawing(IID_CATIDrawing, (void **)[$piDrawing)]
    piDftDocServices->Release();
  }
  
  // Gets the drawing container
  CATISpecObject_var spDrawingSpec = piDrawing;
  CATIContainer_var spDrawingCont = spDrawingSpec->GetFeatContainer();
  
  // The drawing factory is implemented ont the drawing container
  CATIDrwFactory_var spDrwFact = spDrawingCont;
  
  
  
  CATISheet_var spSheet=piDrawing->GetCurrentSheet();
  CATISheet *piNewSheet = spSheet;
  // We do create a view with Make Up
  CATIDftViewMakeUp *piNewViewMU = NULL;
  spDrwFact->CreateViewWithMakeUp(IID_CATIDftViewMakeUp, (void **)[$piNewViewMU)]
  
  
  // Get the view from the MakeUp
  CATIView  *piNewView = NULL;  
  piNewViewMU->GetView([$piNewView)]
  
  
  // The view has to be typed: FrontView for Interactive view.   
  piNewView->SetViewType(FrontView);
  piNewViewMU->SetPosition(100.0,50.0);
  
  // Let's add the view to the sheet
  piNewSheet->AddView(piNewViewMU);
  
  piNewSheet->SetCurrentView(piNewView);
  CATI2DWFFactory_var spGeomFactory(piNewView);
  
  
  // Creation of a circle:
  double center[2];
  center[0]=100.0;
  center[1]=150.0;
  double radius = 50.0;
  CATISpecObject_var Cercle = spGeomFactory->CreateCircle(center,radius);
  CATIDrwAnnotationFactory_var spDrwAnnoFact=piNewView;
  if(NULL_var!=spDrwAnnoFact)
  {
    AfxMessageBox(L"NULL_var!=spDrwAnnoFact ");
    CATUnicodeString textString("oint");  
    int titleLength = textString.GetLengthInChar();
    CATIDescendants_var spDesc = piNewView;
    CATListValCATISpecObject_var List;
    spDesc->GetDirectChildren ("CATI2DCircle",List);
    double center[2];
    double rad;
    CATI2DCircle_var my2DCir(List[1]);
    my2DCir->GetCircleData(center,[$rad)]
    CATIDrwText_var spText = spDrwAnnoFact->CreateDrwText(center[0],center[1],textString);
    // Modify the properties
    CATIDrwTextProperties_var spTextProp = spText;
    // Modification of under part of the properties of the text
    spText->SetParameterOnSubString(CATDrwUnderline, 1, titleLength, 1);
  // Modification of the properties of the text as a whole
    spTextProp->SetFontSize(12.5);
    spTextProp->SetBold(TRUE);
    spTextProp->SetFontColor(123,0,255,100);
    // Refresh the text visualization
    spTextProp->Refresh();
    
    
  }
  CATILinkableObject_var spLink=pDocument;
//pDocument为三维的CATPart的指针,非空。
  if(NULL_var!=spLink)
  {
    AfxMessageBox(L"NULL_var!=spLink");
  }  
  piNewView->SetDoc(spLink);
//  spDrwFact->CreateProjectionCallout();
  
  //spPlane为Part文件中的一个已知平面。
  CATPlane_var spPla=spPlane;  
  CATMathPlane mathPlane;
  
  if(NULL_var!=spPla)
  {
    AfxMessageBox(L"NULL_var!=spPla");
    spPla->GetAxis(mathPlane);
    
  }
  CATIGenerSpec_var spGener=piNewView->GetGenerSpec();
  if(NULL_var!=spGener)
  {
    AfxMessageBox(L"NULL_var!=spGener");
    spGener->SetProjPlane(mathPlane);  
  }
  
  // Memory cleaning
  piDrawing->Release();
  piNewSheet->Release();
  piNewViewMU->Release();
  piNewView->Release();
  
  piInteractiveSession->Save(NULL);
我想实现把CATPart投影到CATDrawing里面,投到spPlane上面,结果是没有投影,我自己在CATDrawing里面画了个圆,想给圆心加批注,也没有成功,结果如图:
6
发表于 2005-9-1 13:51:58 | 只看该作者
>>可是圆心处没有标注
可能是你画歪了,哈哈。
好了,不开玩笑,我想可能是你API调用的顺序错了。
请试试下面的code, 我胡乱调了一下,就出来了。 :)
>>结果是没有投影
怕是你没有给正确的CATILinkableObject,
你用的是
  CATILinkableObject_var spLink=pDocument;  
  piNewView->SetDoc(spLink);  
这样得到的CATILinkableObject是不对的。
必须这样得到:
  CATFrmEditor *pCurrFrmEditor = GetEditor();
    CATPathElement oUIActPathElem = pCurrFrmEditor->GetUIActiveObject();
    CATBaseUnknown* pCurrElemBase = oUIActPathElem.CurrentElement();
    CATILinkableObject_var spLink(pCurrElemBase);
  
好了,试试我调过的code吧,在我这里是都出来了:
  
  //Have to use this way to get the right CATILinkableObject
  CATFrmEditor *pCurrFrmEditor = GetEditor();
    CATPathElement oUIActPathElem = pCurrFrmEditor->GetUIActiveObject();
    CATBaseUnknown* pCurrElemBase = oUIActPathElem.CurrentElement();
    CATILinkableObject_var spLink(pCurrElemBase);
  //
  
  CATIEditor *poEditor=NULL;   
  CATSession *piSession=CATSession::GetPtrSession();   
  CATIIniInteractiveSession *piInteractiveSession=NULL;   
  HRESULT hr=piSession->QueryInterface(IID_CATIIniInteractiveSession,(void **)[$piInteractiveSession)]  
  hr=piInteractiveSession->New("Drawing", [$poEditor)]  
    CATFrmEditor* _editor2=poEditor->GetEditor();  
  CATDocument* pDoc =_editor2->GetDocument();  
  CATIDrawing *piDrawing = NULL;  
  CATIDftDocumentServices *piDftDocServices = NULL;  
  if (SUCCEEDED(pDoc->QueryInterface(IID_CATIDftDocumentServices, (void **)&piDftDocServices)))  
  {  
    piDftDocServices->GetDrawing(IID_CATIDrawing, (void **)[$piDrawing)]  
    piDftDocServices->Release();  
  }  
  
  // Gets the drawing container  
  CATISpecObject_var spDrawingSpec = piDrawing;  
  CATIContainer_var spDrawingCont = spDrawingSpec->GetFeatContainer();  
   
  // The drawing factory is implemented ont the drawing container  
  CATIDrwFactory_var spDrwFact = spDrawingCont;  
  
   
   
  
  // We do create a view with Make Up  
  CATIDftViewMakeUp *piNewViewMU = NULL;  
  spDrwFact->CreateViewWithMakeUp(IID_CATIDftViewMakeUp, (void **)[$piNewViewMU)]  
   
   
  // Get the view from the MakeUp  
  CATIView *piNewView = NULL;  
  piNewViewMU->GetView([$piNewView)]  
   
   
  // The view has to be typed: FrontView for Interactive view.  
//  CATILinkableObject_var spLink=pDocument;  
//pDocument?三?的CATPart的指?,非空。  
  if(NULL_var==spLink)  
  {  
    cout << "spLink is NULL!" << endl;
  }  
  piNewView->SetDoc(spLink);  
  
  piNewView->SetViewType(FrontView);  
  
//  spDrwFact->CreateProjectionCallout();  
   
  //spPlane?Part文件中的一个已知平面。  
  //CATPlane_var spPla=spPlane;   
  //CATMathPlane mathPlane;  
  CATMathPoint pt1(0,0,0), pt2(1,0,0), pt3(0,0,1);
  CATMathPlane mathPlane(pt1,pt2,pt3);
  
/*
  if(NULL_var!=spPla)  
  {  
    AfxMessageBox(L"NULL_var!=spPla");  
    spPla->GetAxis(mathPlane);  
     
  }  
  */
  
  CATIGenerSpec_var spGener(piNewView);    //=piNewView->GetGenerSpec();  
  if(NULL_var!=spGener)  
  {  
   //AfxMessageBox(L"NULL_var!=spGener");  
   spGener->SetProjPlane(mathPlane);   
  } else{
  cout << "spGener is NULL!" << endl;  
  }
  
  CATISheet_var spSheet=piDrawing->GetCurrentSheet();  
  CATISheet *piNewSheet = spSheet;  //Why???
  piNewSheet->AddRef();        //So Addref is needed
  
  piNewViewMU->SetPosition(100.0,50.0);  
  
  // Let's add the view to the sheet  
  piNewSheet->AddView(piNewViewMU);  
   
  
  piNewSheet->SetCurrentView(piNewView);  
  CATI2DWFFactory_var spGeomFactory(piNewView);  
  
   
  // Creation of a circle:  
  double center[2];  
  center[0]=100.0;  
  center[1]=150.0;  
  double radius = 50.0;  
  CATISpecObject_var Cercle = spGeomFactory->CreateCircle(center,radius);  
  CATIDrwAnnotationFactory_var spDrwAnnoFact=piNewView;  
  if(NULL_var!=spDrwAnnoFact)  
  {  
    //AfxMessageBox(L"NULL_var!=spDrwAnnoFact ");  
    CATUnicodeString textString("oint");   
    int titleLength = textString.GetLengthInChar();  
    CATIDescendants_var spDesc = piNewView;  
    CATListValCATISpecObject_var List;  
    spDesc->GetDirectChildren ("CATI2DCircle",List);  
    double center[2];  
    double rad;  
    CATI2DCircle_var my2DCir(List[1]);  
    my2DCir->GetCircleData(center,[$rad)]  
    CATIDrwText_var spText = spDrwAnnoFact->CreateDrwText(center[0],center[1],textString);  
    // Modify the properties  
    CATIDrwTextProperties_var spTextProp = spText;  
    // Modification of under part of the properties of the text  
    spText->SetParameterOnSubString(CATDrwUnderline, 1, titleLength, 1);  
  // Modification of the properties of the text as a whole  
    spTextProp->SetFontSize(12.5);  
    spTextProp->SetBold(TRUE);  
    spTextProp->SetFontColor(123,0,255,100);  
    // Refresh the text visualization  
    spTextProp->Refresh();  
     
     
  }  
  
  piNewView->Update(NULL_var);
  
  // Memory cleaning  
  piDrawing->Release();  
  piNewSheet->Release();  
  piNewViewMU->Release();  
  piNewView->Release();  
   
  piInteractiveSession->Save(NULL);
7
发表于 2005-9-1 16:21:15 | 只看该作者
太感谢saeba兄了,问题解决得差不多了
:)
8
发表于 2005-9-1 17:30:57 | 只看该作者
请问在2楼弹出的对话框能否让程序去完成用户单击Ok的操作?
9
发表于 2005-9-3 09:53:42 | 只看该作者
高手看看有什么办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-24 02:13 , Processed in 0.026479 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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