void WinEDA_LibeditFrame::RepeatPinItem(wxDC * DC, LibDrawPin * SourcePin) /************************************************************************/ /* Creation d'une nouvelle pin par copie de la précédente ( fct REPEAT) */ { LibDrawPin * Pin; wxString msg; int ox = 0, oy = 0; if(CurrentLibEntry == NULL ) return; if(SourcePin == NULL ) return; if(SourcePin->m_StructType != COMPONENT_PIN_DRAW_TYPE ) return; Pin = SourcePin->GenCopy(); Pin->Pnext = CurrentLibEntry->m_Drawings; CurrentLibEntry->m_Drawings = Pin; Pin->m_Flags = IS_NEW; Pin->m_Pos.x += g_RepeatStep.x; ox = Pin->m_Pos.x; Pin->m_Pos.y += - g_RepeatStep.y; oy = Pin->m_Pos.y; // ici axe Y comme en math /*** Increment du numero de label ***/ IncrementLabelMember(Pin->m_PinName); Pin->ReturnPinStringNum(msg); IncrementLabelMember(msg); Pin->SetPinNumFromString(msg); CurrentDrawItem = Pin; /* Marquage des pins a traiter */ if( g_EditPinByPinIsOn == FALSE ) Pin->m_Flags |= IS_LINKED; wxPoint savepos = GetScreen()->m_Curseur; GetScreen()->CursorOff(DrawPanel, DC); GetScreen()->m_Curseur.x = Pin->m_Pos.x; GetScreen()->m_Curseur.y = -Pin->m_Pos.y; PlacePin(DC); GetScreen()->m_Curseur = savepos; // DrawPanel->MouseToCursorSchema(); GetScreen()->CursorOn(DrawPanel, DC); Pin->Display_Infos_DrawEntry(this); GetScreen()->SetModify(); }
// Create a new pin based on the previous pin with an incremented pin number. void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin ) { wxString msg; LIB_PART* part = GetCurPart(); if( !part || !SourcePin || SourcePin->Type() != LIB_PIN_T ) return; LIB_PIN* pin = (LIB_PIN*) SourcePin->Clone(); pin->ClearFlags(); pin->SetFlags( IS_NEW ); wxPoint step; switch( pin->GetOrientation() ) { case PIN_UP: step.x = GetRepeatPinStep(); break; case PIN_DOWN: step.x = GetRepeatPinStep(); break; case PIN_LEFT: step.y = - GetRepeatPinStep(); break; case PIN_RIGHT: step.y = - GetRepeatPinStep(); break; } pin->Move( pin->GetPosition() + step ); wxString nextName = pin->GetName(); IncrementLabelMember( nextName, GetRepeatDeltaLabel() ); pin->SetName( nextName ); pin->PinStringNum( msg ); IncrementLabelMember( msg, GetRepeatDeltaLabel() ); pin->SetPinNumFromString( msg ); m_drawItem = pin; if( SynchronizePins() ) pin->SetFlags( IS_LINKED ); wxPoint savepos = GetCrossHairPosition(); m_canvas->CrossHairOff( DC ); SetCrossHairPosition( wxPoint( pin->GetPosition().x, -pin->GetPosition().y ) ); // Add this new pin in list, and creates pins for others parts if needed m_drawItem = pin; ClearTempCopyComponent(); PlacePin(); m_lastDrawItem = pin; SetCrossHairPosition( savepos ); m_canvas->CrossHairOn( DC ); MSG_PANEL_ITEMS items; pin->GetMsgPanelInfo( items ); SetMsgPanel( items ); OnModify( ); }
void WinEDA_SchematicFrame::RepeatDrawItem(wxDC *DC) /***************************************************/ /* Routine de recopie du dernier element dessine Les elements duplicables sont fils, bus, traits, textes, labels Les labels termines par un nombre seront incrementes */ { char Line[256]; int ox = 0, oy = 0; if( g_ItemToRepeat == NULL ) return; switch( g_ItemToRepeat->m_StructType ) { case DRAW_JUNCTION_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawJunctionStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; break; case DRAW_NOCONNECT_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawNoConnectStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; break; case DRAW_TEXT_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawTextStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; /*** Increment du numero de label ***/ strcpy(Line,STRUCT->GetText()); IncrementLabelMember(Line); STRUCT->m_Text = Line; break; case DRAW_LABEL_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawLabelStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; /*** Increment du numero de label ***/ strcpy(Line,STRUCT->GetText()); IncrementLabelMember(Line); STRUCT->m_Text = Line; break; case DRAW_GLOBAL_LABEL_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawGlobalLabelStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; /*** Increment du numero de label ***/ strcpy(Line,STRUCT->GetText()); IncrementLabelMember(Line); STRUCT->m_Text = Line; break; case DRAW_SEGMENT_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawSegmentStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Start.x += g_RepeatStep.x; ox = STRUCT->m_Start.x; STRUCT->m_Start.y += g_RepeatStep.y; oy = STRUCT->m_Start.y; STRUCT->m_End.x += g_RepeatStep.x; STRUCT->m_End.y += g_RepeatStep.y; break; case DRAW_RACCORD_STRUCT_TYPE: #undef STRUCT #define STRUCT ((DrawRaccordStruct*) g_ItemToRepeat) g_ItemToRepeat = STRUCT->GenCopy(); STRUCT->m_Pos.x += g_RepeatStep.x; ox = STRUCT->m_Pos.x; STRUCT->m_Pos.y += g_RepeatStep.y; oy = STRUCT->m_Pos.y; break; default: g_ItemToRepeat = NULL; DisplayError(this, "Repeat Type Error", 10); break; } if ( g_ItemToRepeat ) { g_ItemToRepeat->Pnext = GetScreen()->EEDrawList; GetScreen()->EEDrawList = g_ItemToRepeat; TestDanglingEnds(GetScreen()->EEDrawList, NULL); RedrawOneStruct(DrawPanel,DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE); // GetScreen()->Curseur.x = ox; GetScreen()->Curseur.x = oy; // GRMouseWarp(DrawPanel, DrawPanel->CursorScreenPosition() ); } }
void SCH_TEXT::IncrementLabel( int aIncrement ) { IncrementLabelMember( m_Text, aIncrement ); }
void SCH_TEXT::IncrementLabel() { IncrementLabelMember( m_Text ); }