ADDED: Plotting of sheet objects with go to page hyperlinks (pdf for now)
This commit is contained in:
parent
9b007ca4bf
commit
a78cefc7d4
|
@ -908,6 +908,48 @@ void SCH_SHEET::renumberPins()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SCH_SHEET::guessPageFromParentScreen() const
|
||||||
|
{
|
||||||
|
SCH_SCREEN* parentScreen = static_cast<SCH_SCREEN*>( m_parent );
|
||||||
|
int vPageNumParent = parentScreen->GetVirtualPageNumber();
|
||||||
|
SCH_SHEET_LIST sheets = parentScreen->Schematic()->GetSheets();
|
||||||
|
|
||||||
|
wxCHECK( sheets.size() >= vPageNumParent && vPageNumParent > 0, m_screen->GetVirtualPageNumber() );
|
||||||
|
|
||||||
|
// We can use the virtual page number as an index to find the instance
|
||||||
|
SCH_SHEET_PATH parentSheetPath = sheets.at( vPageNumParent - 1 );
|
||||||
|
|
||||||
|
// Make sure our asumption about the virtual page number being the index-1 is correct
|
||||||
|
wxCHECK( parentSheetPath.LastScreen()->GetFileName() == parentScreen->GetFileName(),
|
||||||
|
m_screen->GetVirtualPageNumber() );
|
||||||
|
|
||||||
|
KIID_PATH parentSheetKIIDPath = parentSheetPath.PathWithoutRootUuid();
|
||||||
|
|
||||||
|
for( const SCH_SHEET_INSTANCE& instance : m_instances )
|
||||||
|
{
|
||||||
|
KIID_PATH instancePath = instance.m_Path;
|
||||||
|
|
||||||
|
if( instancePath.MakeRelativeTo( parentSheetKIIDPath ) && instancePath.size() == 1 )
|
||||||
|
{
|
||||||
|
// find the virtual page number of this path
|
||||||
|
auto isThePath = [&]( const SCH_SHEET_PATH& aPath ) -> bool
|
||||||
|
{
|
||||||
|
return aPath.PathWithoutRootUuid() == instance.m_Path;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto result = std::find_if( sheets.begin(), sheets.end(), isThePath );
|
||||||
|
|
||||||
|
wxCHECK( result != sheets.end(), m_screen->GetVirtualPageNumber() );
|
||||||
|
|
||||||
|
return result - sheets.begin() + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFAIL_MSG( "Couldn't find a valid path?" );
|
||||||
|
return m_screen->GetVirtualPageNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_SHEET::GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList )
|
void SCH_SHEET::GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList )
|
||||||
{
|
{
|
||||||
for( SCH_SHEET_PIN* sheetPin : m_pins )
|
for( SCH_SHEET_PIN* sheetPin : m_pins )
|
||||||
|
@ -1056,6 +1098,15 @@ void SCH_SHEET::Plot( PLOTTER* aPlotter, bool aBackground ) const
|
||||||
aPlotter->Rect( m_pos, m_pos + m_size, FILL_T::NO_FILL, penWidth );
|
aPlotter->Rect( m_pos, m_pos + m_size, FILL_T::NO_FILL, penWidth );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make the sheet object a clickable hyperlink (e.g. for PDF plotter)
|
||||||
|
if( !aBackground )
|
||||||
|
{
|
||||||
|
BOX2I rect( m_pos, m_size );
|
||||||
|
int virtualPage = guessPageFromParentScreen();
|
||||||
|
wxString hyperlinkDestination = EDA_TEXT::GotoPageHyperlinkString( virtualPage );
|
||||||
|
aPlotter->HyperlinkBox( rect, hyperlinkDestination );
|
||||||
|
}
|
||||||
|
|
||||||
// Plot sheet pins
|
// Plot sheet pins
|
||||||
for( SCH_SHEET_PIN* sheetPin : m_pins )
|
for( SCH_SHEET_PIN* sheetPin : m_pins )
|
||||||
sheetPin->Plot( aPlotter, aBackground );
|
sheetPin->Plot( aPlotter, aBackground );
|
||||||
|
|
|
@ -450,6 +450,14 @@ protected:
|
||||||
*/
|
*/
|
||||||
void renumberPins();
|
void renumberPins();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guess the virtual page number of this sheet based on the virtual page number currently set
|
||||||
|
* on the parent screen. (Useful helper function for plotting)
|
||||||
|
*
|
||||||
|
* @return the instance corresponding to this sheet
|
||||||
|
*/
|
||||||
|
int guessPageFromParentScreen() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool doIsConnected( const VECTOR2I& aPosition ) const override;
|
bool doIsConnected( const VECTOR2I& aPosition ) const override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue