Machining |
NC Review |
Cutting a Tool Path by a PointManipulating a tool path |
| Use Case | ||
AbstractThis article discusses the CAAMfgTPEOnePointSelectionUserCom use case. |
This use case is intended to help you manipulate the tool path structure. This involves the following:
[Top]
CAAMfgTPEOnePointSelectionUserCom is a use case of the CAAToolPathEditorItf.edu framework that illustrates ToolPathEditor framework capabilities.
[Top]
CAAMfgTPEOnePointSelectionUserCom runs with the document CAAMfgToolPath.CATPart shown on Fig.1
![]() |
[Top]
# Decomment this line to run CAAMfgTPEOnePointSelectionUserCom Sample #CAAMfgTPEM3xAddin CATISmgProgramAddin libCAAMfgTPEAddToolBar #CATM3xAreaModificationAlgoDriver CATIMfgTPECutAreasEditor libCAAMfgTPEAddCmdInCutAreaToolBar #CATM3xAreaModificationAlgoDriver CATIMfgTPECutAreasUserHeader libCAAMfgTPEAddCmdInCutAreaToolBar
| Windows | InstallRootDirectory\CAADoc\CAAToolPathEditorItf.edu\CNext\resources\graphic |
| Unix | InstallRootDirectory/CAADoc/CAAToolPathEditorItf.edu/CNext/resources/graphic |






[Top]
The CAAMfgTPEOnePointSelectionUserCom use case is made of a class named CAAMfgTPEOnePointSelectionUserCom located in the CAAMfgTPEAddCmdInCutAreaToolBar.m module of the CAAToolPathEditorItf.edu framework:
| Windows | InstallRootDirectory\CAADoc\CAAToolPathEditorItf.edu\CAAMfgTPEAddCmdInCutAreaToolBar.m |
| Unix | InstallRootDirectory/CAADoc/CAAToolPathEditorItf.edu/CAAMfgTPEAddCmdInCutAreaToolBar.m |
where InstallRootDirectory is the directory where the CAA CD-ROM
is installed.
[Top]
There are four logical steps in CAAMfgTPEOnePointSelectionUserCom:
We now comment each of those sections by looking at the code.
[Top]
The class that will implement the command is named CAAMfgTPEOnePointSelectionUserCom.
Create the CAAMfgTPEOnePointSelectionUserCom class header file:
class ExportedByCAAMfgTPEAddCmdInCutAreaToolBar CAAMfgTPEOnePointSelectionUserCom : public CATStateCommand
{
public:
DeclareResource(CAAMfgTPEOnePointSelectionUserCom,CATStateCommand)
CAAMfgTPEOnePointSelectionUserCom (void* ipCutAreasEditor);
virtual ~CAAMfgTPEOnePointSelectionUserCom ();
void BuildGraph();
CATStatusChangeRC Activate (CATCommand*, CATNotification*);
CATStatusChangeRC Cancel (CATCommand*, CATNotification*);
CATStatusChangeRC Desactivate (CATCommand*, CATNotification*);
void PreActivate (CATCommand* c1, CATNotification* c2, CATCommandClientData c3);
void Move (CATCommand* c1, CATNotification* c2, CATCommandClientData c3);
void EndPreActivate (CATCommand*, CATNotification*, CATCommandClientData);
CATBoolean SelectPoint (void*);
CATBoolean HasPoint (void*);
private:
CATIMfgTPECutAreasEditor* _pCutAreasEditor;
CATDialogAgent* _PointAgent;
CATSelector* _Selector;
CATMathPoint _CurrentPoint;
CAT3DViewer* _Viewer;
CATCallback _PreactivateCB;
CATCallback _MoveCB;
CATCallback _EndPreactivateCB;
CATBoolean _HasPoint;
};
|
The CAAMfgTPEOnePointSelectionUserCom class C++-derives from CATStateCommand.
The DeclareResource macro declares that the ressource file is CAAMfgTPEOnePointSelectionUserCom.CATNls.
The class has a constructor, a destructor, a SelectPoint method to
give the selected point to the tool path editor, several methods to manage the
user's interaction and the representation of the tool path, and a copy
constructor.
This command will communicate with the tool path editor by the interface CATIMfgTPECutAreasEditor.
[Top]
First you have to create a selector which must work with the representation
of the tool path. This last one can be retrieved by a call to the method GetToolPathRep
of the interface CATIMfgTPECutAreasEditor. The first argument of
the constructor is used to get the interface CATIMfgTPECutAreasEditor.
This is done in the constructor.
CAAMfgTPEOnePointSelectionUserCom::CAAMfgTPEOnePointSelectionUserCom (void* ipCutAreasEditor)
: CATStateCommand("TPESelectionUserOnePoint", NULL, CATCommandModeShared),
_Selector(NULL), _Viewer(NULL),
_pCutAreasEditor((CATIMfgTPECutAreasEditor*) ipCutAreasEditor),
_HasPoint(CATFalse), _PointAgent(NULL),
_PreactivateCB(NULL),
_MoveCB(NULL),
_EndPreactivateCB(NULL)
{
CAT3DViewer* viewer3D = NULL;
CATFrmLayout* ptrFrmLayout = CATFrmLayout::GetCurrentLayout();
if ( ptrFrmLayout) {
const CATFrmWindow * ptrFrmWindow = ptrFrmLayout->GetCurrentWindow () ;
if (ptrFrmWindow && ptrFrmWindow->IsAKindOf(CATFrmGraphAnd3DWindow::ClassName()) ) {
CATFrmGraphAnd3DWindow* ptr3DWindow = (CATFrmGraphAnd3DWindow*)ptrFrmWindow;
CATViewer * viewer = ptr3DWindow->GetGraphicViewer();
if( viewer && viewer->IsAKindOf(CAT3DViewer::ClassName()) )
_Viewer = (CAT3DViewer*)viewer;
}
}
//Creation of the selector. Tool path can be pointed.
CATRep* Rep = NULL;
if (NULL != _pCutAreasEditor)
Rep = _pCutAreasEditor->GetToolPathRep();
_Selector = new CATSelector(this,"ToolPathSelector", Rep);
_PreactivateCB = AddAnalyseNotificationCB (_Selector,
_Selector->GetCATPreactivate(),
(CATCommandMethod)&CAAMfgTPEOnePointSelectionUserCom::PreActivate,NULL);
_MoveCB = AddAnalyseNotificationCB (_Selector,
_Selector->GetCATMove(),
(CATCommandMethod)&CAAMfgTPEOnePointSelectionUserCom::Move,NULL);
_EndPreactivateCB = AddAnalyseNotificationCB (_Selector,
_Selector->GetCATEndPreactivate(),
(CATCommandMethod)&CAAMfgTPEOnePointSelectionUserCom::EndPreActivate,NULL);
}
|
Now the method BuildGraph is implemented. It gets the selected
point and the double-click to terminate the command.
void CAAMfgTPEOnePointSelectionUserCom::BuildGraph()
{
_PointAgent = new CATDialogAgent("Point");
if (NULL != _Selector)
_PointAgent->AcceptOnNotify(_Selector, _Selector->GetCATActivate());
// Dialog States
CATDialogState* InitState = GetInitialState("OnePointModification");
if (NULL != InitState)
InitState->AddDialogAgent(_PointAgent);
// Transitions
AddTransition (InitState,NULL,
AndCondition ( Condition ( (ConditionMethod) &CAAMfgTPEOnePointSelectionUserCom::HasPoint),
IsOutputSetCondition(_PointAgent)),
Action((ActionMethod)& CAAMfgTPEOnePointSelectionUserCom::SelectPoint));
SetRepeatMode(OFF);
}
|
[Top]
The method PreActivate selects the point.
void CAAMfgTPEOnePointSelectionUserCom::PreActivate (CATCommand* c1, CATNotification* c2, CATCommandClientData c3)
{
// Erase of the last preview
EndPreActivate (c1,c2,c3);
// Get the point.
CATGraphicElementIntersection* Intersection = NULL;
if (NULL != _Selector)
Intersection = (CATGraphicElementIntersection*) _Selector->SendCommandSpecificObject (CATGraphicElementIntersection::ClassName(), c2);
if ( Intersection) {
CATMathPoint aPoint;
aPoint = Intersection->point;
Intersection->Release();
_CurrentPoint = aPoint;
_HasPoint = CATTrue;
}
}
|
[Top]
The next step is to give the point to the tool path editor which will manage
the highlight of the part of the tool path. This is done by a call to the method
LoadOnePointCuttingPoint of the interface CATIMfgTPECutAreasEditor.
CATBoolean CAAMfgTPEOnePointSelectionUserCom::SelectPoint (void* Data)
{
// The point is given to the interface CATIMfgTPECutAreasEditor.
if (_pCutAreasEditor != NULL && HasPoint(NULL) )
_pCutAreasEditor->LoadOneCuttingPoint(_CurrentPoint);
return CATTrue;
}
|
Then the tool path editor manage this part of the tool path with all the actions of the cut area tool bar.
[Top]
This article provides an example on how to add and to manage in the cut area toolbar a command that cut a tool path by a point.
[Top]
| [1] | Building and Launching a CAA V5 Use Case |
| [2] | Use case CAAMfgTPECutAreasUserHeader |
| [Top] | |
| Version: 1 [Jan 2003] | Document created |
| [Top] | |
Copyright © 2000, Dassault Systèmes. All rights reserved.