bool SCH_SCREEN::BreakSegmentsOnJunctions() { bool brokenSegments = false; for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) { if( item->Type() == SCH_JUNCTION_T ) { SCH_JUNCTION* junction = ( SCH_JUNCTION* ) item; if( BreakSegment( junction->GetPosition() ) ) brokenSegments = true; } else { SCH_BUS_ENTRY_BASE* busEntry = dynamic_cast<SCH_BUS_ENTRY_BASE*>( item ); if( busEntry ) { if( BreakSegment( busEntry->GetPosition() ) || BreakSegment( busEntry->m_End() ) ) brokenSegments = true; } } } return brokenSegments; }
void BreakSegmentOnJunction( BASE_SCREEN * Screen ) /************************************************/ /* Routine creant des debuts / fin de segment (BUS ou WIRES) sur les jonctions et les raccords Si Screen = NULL: traitement de la hierarchie complete */ { BASE_SCREEN * screen = Screen; EDA_BaseStruct *DrawList; if( screen == NULL ) screen = ScreenSch; for ( ; screen != NULL; screen = (BASE_SCREEN*)screen->Pnext ) { DrawList = screen->EEDrawList; while ( DrawList ) { switch( DrawList->m_StructType ) { case DRAW_JUNCTION_STRUCT_TYPE : #undef STRUCT #define STRUCT ((DrawJunctionStruct*)DrawList) BreakSegment(screen, STRUCT->m_Pos); break; case DRAW_BUSENTRY_STRUCT_TYPE : #undef STRUCT #define STRUCT ((DrawBusEntryStruct*)DrawList) BreakSegment(screen, STRUCT->m_Pos); BreakSegment(screen, STRUCT->m_End()); break; case DRAW_SEGMENT_STRUCT_TYPE : case DRAW_NOCONNECT_STRUCT_TYPE : case DRAW_LABEL_STRUCT_TYPE : case DRAW_GLOBAL_LABEL_STRUCT_TYPE : case DRAW_LIB_ITEM_STRUCT_TYPE : case DRAW_PICK_ITEM_STRUCT_TYPE : case DRAW_POLYLINE_STRUCT_TYPE : case DRAW_MARKER_STRUCT_TYPE : case DRAW_TEXT_STRUCT_TYPE : case DRAW_SHEET_STRUCT_TYPE : case DRAW_SHEETLABEL_STRUCT_TYPE : break; default : break; } DrawList = DrawList->Pnext; } } }