本文整理汇总了C++中D_PAD::Clone方法的典型用法代码示例。如果您正苦于以下问题:C++ D_PAD::Clone方法的具体用法?C++ D_PAD::Clone怎么用?C++ D_PAD::Clone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类D_PAD
的用法示例。
在下文中一共展示了D_PAD::Clone方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PasteItems
int MODULE_TOOLS::PasteItems( const TOOL_EVENT& aEvent )
{
// Parse clipboard
PCB_IO io( CTL_FOR_CLIPBOARD );
MODULE* pastedModule = NULL;
try
{
BOARD_ITEM* item = io.Parse( wxString( m_toolMgr->GetClipboard().c_str(), wxConvUTF8 ) );
assert( item->Type() == PCB_MODULE_T );
pastedModule = dyn_cast<MODULE*>( item );
}
catch( ... )
{
m_frame->DisplayToolMsg( _( "Invalid clipboard contents" ) );
return 0;
}
// Placement tool part
VECTOR2I cursorPos = m_controls->GetCursorPosition();
// Add a VIEW_GROUP that serves as a preview for the new item
KIGFX::VIEW_GROUP preview( m_view );
pastedModule->SetParent( m_board );
pastedModule->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
pastedModule->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add,
std::ref( preview ), _1 ) );
preview.Add( pastedModule );
m_view->Add( &preview );
m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear, true );
m_controls->ShowCursor( true );
m_controls->SetSnapping( true );
m_controls->SetAutoPan( true );
Activate();
// Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() )
{
cursorPos = m_controls->GetCursorPosition();
if( evt->IsMotion() )
{
pastedModule->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
m_view->Update( &preview );
}
else if( evt->Category() == TC_COMMAND )
{
if( evt->IsAction( &COMMON_ACTIONS::rotate ) )
{
pastedModule->Rotate( pastedModule->GetPosition(), m_frame->GetRotationAngle() );
m_view->Update( &preview );
}
else if( evt->IsAction( &COMMON_ACTIONS::flip ) )
{
pastedModule->Flip( pastedModule->GetPosition() );
m_view->Update( &preview );
}
else if( evt->IsCancel() || evt->IsActivate() )
{
preview.Clear();
break;
}
}
else if( evt->IsClick( BUT_LEFT ) )
{
BOARD_COMMIT commit( m_frame );
m_board->m_Status_Pcb = 0; // I have no clue why, but it is done in the legacy view
// MODULE::RunOnChildren is infeasible here: we need to create copies of items, do not
// directly modify them
for( D_PAD* pad = pastedModule->Pads(); pad; pad = pad->Next() )
{
D_PAD* clone = static_cast<D_PAD*>( pad->Clone() );
commit.Add( clone );
}
for( BOARD_ITEM* drawing = pastedModule->GraphicalItems();
drawing; drawing = drawing->Next() )
{
BOARD_ITEM* clone = static_cast<BOARD_ITEM*>( drawing->Clone() );
if( TEXTE_MODULE* text = dyn_cast<TEXTE_MODULE*>( clone ) )
{
// Do not add reference/value - convert them to the common type
text->SetType( TEXTE_MODULE::TEXT_is_DIVERS );
// Whyyyyyyyyyyyyyyyyyyyyyy?! All other items conform to rotation performed
// on its parent module, but texts are so independent..
text->Rotate( text->GetPosition(), pastedModule->GetOrientation() );
commit.Add( text );
}
commit.Add( clone );
}
//.........这里部分代码省略.........