Commit 0a3830b6 authored by Dick Hollenbeck's avatar Dick Hollenbeck

merge from testing

parents e5dfd601 84ed5f50
...@@ -4,6 +4,30 @@ KiCad ChangeLog 2010 ...@@ -4,6 +4,30 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2011-Jan-1 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++new:
* Added the basic structure to the Sweet parser in sch_part.cpp.
* Got inheritence working off of the 'extends' keyword and PART::inherit()
* Tossed the units support out of sweet.keywords, since we agreed to go dimensionless.
++richio:
* Added the problemInputLine support to PARSE_ERROR, so UI can show the
offending line of bytes. Yes bytes, not even guaranteed to be characters.
2010-dec-31 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================
++all
* Exclude boost header include path from Doxygen files.
* Coding guide line and doxygen warning fixes.
++EESchema
* Rename OBJ_CMP_TO_LIST to SCH_REFERENCE.
* Move code related to SCH_REFERENCE into the object where it belongs in hope
that some day the object members can be made private instead of public.
* Add GetComponent method to sheet path and sheet path list objects.
* Move screen list code into screen list object.
2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com> 2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
++richio: ++richio:
......
...@@ -88,7 +88,7 @@ INPUT_ENCODING = UTF-8 ...@@ -88,7 +88,7 @@ INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \ FILE_PATTERNS = *.h \
*.cpp *.cpp
RECURSIVE = YES RECURSIVE = YES
EXCLUDE = EXCLUDE = include\boost
EXCLUDE_SYMLINKS = NO EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXCLUDE_SYMBOLS =
......
/* XPM */ /* XPM */
#ifndef XPMMAIN
extern const char *annotate_down_right_xpm[];
#else
const char *annotate_down_right_xpm[] = { const char *annotate_down_right_xpm[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"16 16 16 1", "16 16 16 1",
"@ c #89B09C", "= c #9A524C",
"O c #DB8F8F", ": c #405814",
". c #D4B7B7", "O c #932722",
"# c #85A794", ". c #BAA7A6",
"& c #72CAA2", "X c #549454",
"% c #9EB5A9", "+ c #7C210E",
"- c #59CD99", " c None",
"o c #E48080", "$ c #8C0505",
"+ c #DC9897", "- c #AE7879",
" c none", "@ c #097409",
"X c #D6A1A0", "* c #867258",
": c #E46264", "& c #308430",
"= c #64F6B4", "# c #783820",
"$ c #B4BEBC", "; c #9E3838",
"; c #69E5A9", "% c #403F04",
"* c #81B79F", "o c #7FA57F",
/* pixels */ /* pixels */
" ", " .X. oX ",
" ", "O+@#O .@@o ",
" .X o. ", "O$%$$ &@@o ",
" .O +o. ", "*$$$= &@@@o ",
" .X O.X. ", ".$$$. -#%&&@o ",
" .O X. O. ", " +$#.-;$$$+.X@o ",
" @# $%%+. #% ", " *+*O$$$$$= X@o ",
" && *=* $&&$", " o@X-=*:$$. X@o ",
"@&-# %;*@ #;-@", " o@X .@%$= $#@O;",
" @@ .O% $ #@ ", " o@X &@$$. $$%$O",
" .X O. X. ", " o@X&@&$; =$$$-",
" .O O O. ", " o@@@& -$$$ ",
" .+O. X. ", " X@@@. $$= ",
" .: O. ", " X@@o :+o ",
" $ ", " o@o X@o ",
" " " o&. "
}; };
#endif
/* XPM */ /* XPM */
#ifndef XPMMAIN
extern const char *annotate_right_down_xpm[];
#else
const char *annotate_right_down_xpm[] = { const char *annotate_right_down_xpm[] = {
/* columns rows colors const chars-per-pixel */ /* columns rows colors chars-per-pixel */
"16 16 16 1", "16 16 16 1",
"@ c #59CE99", "o c #A25451",
"% c #D79E9C", "+ c #88A887",
"$ c #DC9393", "* c #424004",
"o c #FFB4B4", "% c #308530",
"* c #74CAA2", "@ c #8B0405",
"X c #FFBDBD", "# c #7C563C",
". c #89AF9A", " c None",
" c none", "- c #B18B8C",
"- c #E46264", "O c #BAA6A6",
"# c #FFAAAC", "X c #8E1C17",
"; c #64F6B4", "$ c #549354",
"& c #84A794", "; c #74381C",
"= c #69E5A9", "& c #067205",
": c #E08280", ". c #993F3B",
"O c #9BB5A5", "= c #748157",
"+ c #81B79F", ": c #AC7474",
/* pixels */ /* pixels */
" . ", " .XoO ",
" XoooO+@Ooooo ", "+X@@@X#$$$$$$$+ ",
" #$%$&*=&%$%-X ", "%&*@@@@&&&&&&&% ",
" X& X$ ", "O#@@@X=+++$&&&O ",
" X$o ", " X@.O O&&%O ",
" $ ", " O o@O+&&% ",
" X O$o ", " @@=&&$ ",
" O+=+ ", " -@X&&= ",
" O;@X ", " o@**X@o ",
" %.OX ", " O@@@@@X- ",
" %X ", " +&@@@.- ",
" $o ", " +&&;oO X@.: ",
" $X X& ", "$&&&%%%%;@@@@;%+",
" ::%$&*=.%$%$ ", "%&&&&&&&&*@@@@&%",
" oooo.@@.oooo ", " +++++++;@@@#++ ",
" . " " .X: "
}; };
#endif
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="annotate_X.svg"
inkscape:version="0.47 r22583"
sodipodi:version="0.32"
id="svg2"
height="16.000000px"
width="16.000000px"
inkscape:export-filename="F:\kicad-launchpad\testing\bitmaps\sources\annotate_X.png"
inkscape:export-xdpi="90.000000"
inkscape:export-ydpi="90.000000"
version="1.1">
<defs
id="defs3">
<inkscape:path-effect
effect="skeletal"
id="path-effect2834"
is_visible="true"
pattern="M 0,5 10,10 10,0 z"
copytype="single_stretched"
prop_scale="1"
scale_y_rel="false"
spacing="0"
normal_offset="0"
tang_offset="0"
prop_units="false"
vertical_pattern="false"
fuse_tolerance="0" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 8 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="16 : 8 : 1"
inkscape:persp3d-origin="8 : 5.3333333 : 1"
id="perspective29" />
<linearGradient
id="linearGradient10731">
<stop
id="stop10733"
offset="0.00000000"
style="stop-color:#8787ff;stop-opacity:1.0000000;" />
<stop
id="stop10735"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="12.266582"
x2="6.0408001"
y1="17.050747"
x1="11.430959"
gradientTransform="scale(1.224745,0.816497)"
id="linearGradient10737"
xlink:href="#linearGradient10731"
inkscape:collect="always" />
<linearGradient
id="linearGradient2606">
<stop
style="stop-color:#ff7800;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop2608" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2610" />
</linearGradient>
<inkscape:perspective
id="perspective4268"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
inkscape:window-y="-4"
inkscape:window-x="-4"
inkscape:window-height="968"
inkscape:window-width="1280"
inkscape:guide-bbox="true"
showguides="true"
inkscape:guide-points="true"
gridtolerance="0.50000000px"
inkscape:grid-points="true"
inkscape:grid-bbox="true"
showgrid="true"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="8"
inkscape:cx="2.8854733"
inkscape:zoom="28.9375"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:window-maximized="1">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0px"
originy="0px"
spacingx="0.50000000px"
spacingy="0.50000000px"
color="#0000ff"
empcolor="#0000ff"
opacity="0.2"
empopacity="0.4"
empspacing="2" />
</sodipodi:namedview>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:none;stroke:#007100;stroke-width:1.97381759;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 2.6013377,1.2661359 2.5385809,14.170523 13.426862,1.3402729 l 0,13.8264601"
id="path2838" />
<path
style="fill:none;stroke:#8c0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 5.0524871,6.8017199 9.9672796,5.3380844 7.9002122,10.258565"
id="path4254" />
<path
style="fill:none;stroke:#8f0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 1.0314127,1.894766 2.4361783,6 4.2263917,1.970748"
id="path4256" />
<path
style="fill:none;stroke:#8f0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 11.92745,8.924017 13.332216,13.029252 15.122429,9"
id="path4256-1" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="fondo"
sodipodi:insensitive="true">
<rect
style="fill:#ffffff;fill-opacity:0.00000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0.00000000;stroke-opacity:0.48858449"
id="rect2277"
width="16.000000"
height="16.000000"
x="0.00000000"
y="0.00000000" />
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="annotate_X.svg"
inkscape:version="0.47 r22583"
sodipodi:version="0.32"
id="svg2"
height="16.000000px"
width="16.000000px"
inkscape:export-filename="C:\Documents and Settings\inigo\Escritorio\iconos\Export.png"
inkscape:export-xdpi="90.000000"
inkscape:export-ydpi="90.000000"
version="1.1">
<defs
id="defs3">
<inkscape:path-effect
effect="skeletal"
id="path-effect2834"
is_visible="true"
pattern="M 0,5 10,10 10,0 z"
copytype="single_stretched"
prop_scale="1"
scale_y_rel="false"
spacing="0"
normal_offset="0"
tang_offset="0"
prop_units="false"
vertical_pattern="false"
fuse_tolerance="0" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 8 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="16 : 8 : 1"
inkscape:persp3d-origin="8 : 5.3333333 : 1"
id="perspective29" />
<linearGradient
id="linearGradient10731">
<stop
id="stop10733"
offset="0.00000000"
style="stop-color:#8787ff;stop-opacity:1.0000000;" />
<stop
id="stop10735"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="12.266582"
x2="6.0408001"
y1="17.050747"
x1="11.430959"
gradientTransform="scale(1.224745,0.816497)"
id="linearGradient10737"
xlink:href="#linearGradient10731"
inkscape:collect="always" />
<linearGradient
id="linearGradient2606">
<stop
style="stop-color:#ff7800;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop2608" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2610" />
</linearGradient>
<inkscape:perspective
id="perspective4268"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
inkscape:window-y="-4"
inkscape:window-x="-4"
inkscape:window-height="968"
inkscape:window-width="1280"
inkscape:guide-bbox="true"
showguides="true"
inkscape:guide-points="true"
gridtolerance="0.50000000px"
inkscape:grid-points="true"
inkscape:grid-bbox="true"
showgrid="true"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="8"
inkscape:cx="2.8854733"
inkscape:zoom="28.9375"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:window-maximized="1">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0px"
originy="0px"
spacingx="0.50000000px"
spacingy="0.50000000px"
color="#0000ff"
empcolor="#0000ff"
opacity="0.2"
empopacity="0.4"
empspacing="2" />
</sodipodi:namedview>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:none;stroke:#007100;stroke-width:1.97381759;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 1.0324229,2.4530527 13.93681,2.3902959 1.1065595,13.278577 l 13.8264605,0"
id="path2838" />
<path
style="fill:none;stroke:#8c0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 6.271378,5.8642645 4.8077422,10.779057 9.7282233,8.7119896"
id="path4254" />
<path
style="fill:none;stroke:#8f0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 1.9240173,1.0195985 6.0292515,2.4243641 2,4.2145775"
id="path4256" />
<path
style="fill:none;stroke:#8f0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 8.9496441,11.836293 4.1052349,1.404766 -4.0292523,1.790213"
id="path4256-1" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="fondo"
sodipodi:insensitive="true">
<rect
style="fill:#ffffff;fill-opacity:0.00000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0.00000000;stroke-opacity:0.48858449"
id="rect2277"
width="16.000000"
height="16.000000"
x="0.00000000"
y="0.00000000" />
</g>
</svg>
...@@ -680,7 +680,7 @@ bool WinEDA_App::SetLanguage( bool first_time ) ...@@ -680,7 +680,7 @@ bool WinEDA_App::SetLanguage( bool first_time )
delete m_Locale; delete m_Locale;
m_Locale = new wxLocale; m_Locale = new wxLocale;
if( !m_Locale->Init( m_LanguageId ) ) if( !m_Locale->Init( m_LanguageId, wxLOCALE_CONV_ENCODING ) )
{ {
wxLogDebug( wxT("This language is not supported by the system.") ); wxLogDebug( wxT("This language is not supported by the system.") );
......
...@@ -12,8 +12,8 @@ may choose to document this corresponding work in the CHANGELOG.txt file. ...@@ -12,8 +12,8 @@ may choose to document this corresponding work in the CHANGELOG.txt file.
/* /*
* This program source code file is part of KICAD, a free EDA CAD application. * This program source code file is part of KICAD, a free EDA CAD application.
* *
* Copyright (C) 1992-2010 <author> * Copyright (C) 1992-2011 <author>
* Copyright (C) 1992-2010 Kicad Developers, see change_log.txt for contributors. * Copyright (C) 1992-2011 Kicad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
......
EESchema-LIBRARY Version 2.3 Date: 04/12/2010 17:36:18 EESchema-LIBRARY Version 2.3 Date: 30/12/2010 18:27:52
# #
# C # C
# #
......
EESchema Schematic File Version 2 date 04/12/2010 17:36:18 EESchema Schematic File Version 2 date 30/12/2010 18:27:52
LIBS:power LIBS:power
LIBS:device LIBS:device
LIBS:valves LIBS:valves
...@@ -24,12 +24,13 @@ LIBS:display ...@@ -24,12 +24,13 @@ LIBS:display
LIBS:cypress LIBS:cypress
LIBS:siliconi LIBS:siliconi
LIBS:contrib LIBS:contrib
EELAYER 23 0 LIBS:ecc83-pp_v2-cache
EELAYER 25 0
EELAYER END EELAYER END
$Descr A4 11700 8267 $Descr A4 11700 8267
Sheet 1 1 Sheet 1 1
Title "ECC Push-Pull" Title "ECC Push-Pull"
Date "11 dec 2006" Date "30 dec 2010"
Rev "0.1" Rev "0.1"
Comp "" Comp ""
Comment1 "" Comment1 ""
...@@ -41,7 +42,6 @@ Wire Wire Line ...@@ -41,7 +42,6 @@ Wire Wire Line
6050 4450 6150 4450 6050 4450 6150 4450
Wire Wire Line Wire Wire Line
5750 3850 5750 4050 5750 3850 5750 4050
Connection ~ 4450 4500
Wire Wire Line Wire Wire Line
4450 5400 4450 4450 4450 5400 4450 4450
Wire Wire Line Wire Wire Line
...@@ -102,7 +102,7 @@ L ECC83 U1 ...@@ -102,7 +102,7 @@ L ECC83 U1
U 3 1 48B4F266 U 3 1 48B4F266
P 9950 5700 P 9950 5700
F 0 "U1" H 10080 6010 50 0000 C CNN F 0 "U1" H 10080 6010 50 0000 C CNN
F 1 "ECC81_83" H 10300 5400 50 0000 C CNN F 1 "ECC83" H 10300 5400 50 0000 C CNN
F 2 "VALVE-NOVAL_P" H 10220 5300 50 0001 C CNN F 2 "VALVE-NOVAL_P" H 10220 5300 50 0001 C CNN
3 9950 5700 3 9950 5700
1 0 0 -1 1 0 0 -1
......
...@@ -21,6 +21,7 @@ set(EESCHEMA_SRCS ...@@ -21,6 +21,7 @@ set(EESCHEMA_SRCS
cleanup.cpp cleanup.cpp
cmp_library_keywords.cpp cmp_library_keywords.cpp
cmp_library_lexer.cpp cmp_library_lexer.cpp
component_references_lister.cpp
controle.cpp controle.cpp
cross-probing.cpp cross-probing.cpp
dangling_ends.cpp dangling_ends.cpp
......
This diff is collapsed.
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: build_BOM.cpp // Name: build_BOM.cpp
// Purpose:
// Author: jean-pierre Charras // Author: jean-pierre Charras
// License: GPL license // License: GPL license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
...@@ -14,70 +13,18 @@ ...@@ -14,70 +13,18 @@
#include "kicad_string.h" #include "kicad_string.h"
#include "general.h" #include "general.h"
#include "netlist.h"
#include "protos.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_component.h" #include "sch_component.h"
#include "template_fieldnames.h" #include "template_fieldnames.h"
#include "netlist.h"
/* Fill aList with labels
/**
* @bug - Every instance of fprintf() and fputs() in this file fails to check
* the return value for an error.
*/
/**
* Function BuildComponentsListFromSchematic
* creates the list of components found in the whole schematic.
*
* Goes through the 'sheets', not the screens, so that we account for
* multiple instances of a given screen.
*/
void BuildComponentsListFromSchematic( std::vector <OBJ_CMP_TO_LIST>& aList )
{
// Build the sheet list (which is not screen a screen list)
SCH_SHEET_LIST sheetList; // uses a global
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext() )
{
for( EDA_ITEM* schItem = path->LastDrawList(); schItem; schItem = schItem->Next() )
{
if( schItem->Type() != SCH_COMPONENT_T )
continue;
SCH_COMPONENT* comp = (SCH_COMPONENT*) schItem;
comp->SetParent( path->LastScreen() );
OBJ_CMP_TO_LIST item;
item.m_RootCmp = comp;
item.m_SheetPath = *path;
item.m_Unit = comp->GetUnitSelection( path );
item.SetRef( comp->GetRef( path ) );
// skip pseudo components, which have a reference starting
// with #, mainly power symbols
if( item.GetRefStr()[0] == '#' )
continue;
// Real component found, keep it
aList.push_back( item );
}
}
}
/* Fill aList with Glabel info
*/ */
void GenListeGLabels( std::vector <LABEL_OBJECT>& aList ) void GenListeGLabels( LABEL_OBJECT_LIST& aList )
{ {
// Build the sheet list // Build the sheet list
SCH_SHEET_LIST sheetList; SCH_SHEET_LIST sheetList;
LABEL_OBJECT label;
LABEL_OBJECT lable;
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext() ) for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext() )
{ {
...@@ -89,22 +36,22 @@ void GenListeGLabels( std::vector <LABEL_OBJECT>& aList ) ...@@ -89,22 +36,22 @@ void GenListeGLabels( std::vector <LABEL_OBJECT>& aList )
{ {
case SCH_HIERARCHICAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T:
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
lable.m_LabelType = schItem->Type(); label.m_LabelType = schItem->Type();
lable.m_SheetPath = *path; label.m_SheetPath = *path;
lable.m_Label = schItem; label.m_Label = schItem;
aList.push_back( lable ); aList.push_back( label );
break; break;
case SCH_SHEET_T: case SCH_SHEET_T:
{ {
SCH_SHEET* sheet = (SCH_SHEET*) schItem; SCH_SHEET* sheet = (SCH_SHEET*) schItem;
BOOST_FOREACH( SCH_SHEET_PIN sheetLabel, sheet->GetSheetPins() ) BOOST_FOREACH( SCH_SHEET_PIN& sheetLabel, sheet->GetSheetPins() )
{ {
lable.m_LabelType = SCH_SHEET_LABEL_T; label.m_LabelType = SCH_SHEET_LABEL_T;
lable.m_SheetPath = *path; label.m_SheetPath = *path;
lable.m_Label = &sheetLabel; label.m_Label = &sheetLabel;
aList.push_back( lable ); aList.push_back( label );
} }
} }
break; break;
...@@ -118,65 +65,6 @@ void GenListeGLabels( std::vector <LABEL_OBJECT>& aList ) ...@@ -118,65 +65,6 @@ void GenListeGLabels( std::vector <LABEL_OBJECT>& aList )
} }
} }
/* Compare function for sort()
* components are sorted
* by value
* if same value: by reference
* if same reference: by unit number
*/
bool SortComponentsByValue( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 )
{
int ii;
const wxString* Text1, * Text2;
Text1 = &( obj1.m_RootCmp->GetField( VALUE )->m_Text );
Text2 = &( obj2.m_RootCmp->GetField( VALUE )->m_Text );
ii = Text1->CmpNoCase( *Text2 );
if( ii == 0 )
{
ii = RefDesStringCompare( obj1.GetRef(), obj2.GetRef() );
}
if( ii == 0 )
{
ii = obj1.m_Unit - obj2.m_Unit;
}
return ii < 0;
}
/* compare function for sorting
* components are sorted
* by reference
* if same reference: by value
* if same value: by unit number
*/
bool SortComponentsByReference( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 )
{
int ii;
const wxString* Text1, * Text2;
ii = RefDesStringCompare( obj1.GetRef(), obj2.GetRef() );
if( ii == 0 )
{
Text1 = &( obj1.m_RootCmp->GetField( VALUE )->m_Text );
Text2 = &( obj2.m_RootCmp->GetField( VALUE )->m_Text );
ii = Text1->CmpNoCase( *Text2 );
}
if( ii == 0 )
{
ii = obj1.m_Unit - obj2.m_Unit;
}
return ii < 0;
}
/* compare function for sorting labels /* compare function for sorting labels
* sort by * sort by
* value * value
...@@ -238,43 +126,10 @@ bool SortLabelsBySheet( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 ) ...@@ -238,43 +126,10 @@ bool SortLabelsBySheet( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 )
} }
/* Remove sub components from the list, when multiples parts per package are int PrintListeGLabel( FILE* f, LABEL_OBJECT_LIST& aList )
* found in this list
* The component list **MUST** be sorted by reference and by unit number
*/
void DeleteSubCmp( std::vector <OBJ_CMP_TO_LIST>& aList )
{
SCH_COMPONENT* libItem;
wxString oldName;
wxString currName;
for( unsigned ii = 0; ii < aList.size(); ii++ )
{
libItem = aList[ii].m_RootCmp;
if( libItem == NULL )
continue;
currName = aList[ii].GetRef();
if( !oldName.IsEmpty() )
{
if( oldName == currName ) // currName is a subpart of oldName:
// remove it
{
aList.erase( aList.begin() + ii );
ii--;
}
}
oldName = currName;
}
}
int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList )
{ {
SCH_LABEL* DrawTextItem; SCH_LABEL* label;
SCH_SHEET_PIN* DrawSheetLabel; SCH_SHEET_PIN* pinsheet;
wxString msg, sheetpath; wxString msg, sheetpath;
wxString labeltype; wxString labeltype;
...@@ -284,7 +139,7 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList ) ...@@ -284,7 +139,7 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList )
{ {
case SCH_HIERARCHICAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T:
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
DrawTextItem = (SCH_LABEL*)(aList[ii].m_Label); label = (SCH_LABEL*)(aList[ii].m_Label);
if( aList[ii].m_LabelType == SCH_HIERARCHICAL_LABEL_T ) if( aList[ii].m_LabelType == SCH_HIERARCHICAL_LABEL_T )
labeltype = wxT( "Hierarchical" ); labeltype = wxT( "Hierarchical" );
...@@ -293,19 +148,19 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList ) ...@@ -293,19 +148,19 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList )
sheetpath = aList[ii].m_SheetPath.PathHumanReadable(); sheetpath = aList[ii].m_SheetPath.PathHumanReadable();
msg.Printf( _( "> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f\n" ), msg.Printf( _( "> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f\n" ),
GetChars( DrawTextItem->m_Text ), GetChars( label->m_Text ),
GetChars( labeltype ), GetChars( labeltype ),
GetChars( sheetpath ), GetChars( sheetpath ),
(float) DrawTextItem->m_Pos.x / 1000, (float) label->m_Pos.x / 1000,
(float) DrawTextItem->m_Pos.y / 1000 ); (float) label->m_Pos.y / 1000 );
fputs( CONV_TO_UTF8( msg ), f ); fputs( CONV_TO_UTF8( msg ), f );
break; break;
case SCH_SHEET_LABEL_T: case SCH_SHEET_LABEL_T:
{ {
DrawSheetLabel = (SCH_SHEET_PIN*) aList[ii].m_Label; pinsheet = (SCH_SHEET_PIN*) aList[ii].m_Label;
int jj = DrawSheetLabel->m_Shape; int jj = pinsheet->m_Shape;
if( jj < 0 ) if( jj < 0 )
jj = NET_TMAX; jj = NET_TMAX;
...@@ -316,11 +171,11 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList ) ...@@ -316,11 +171,11 @@ int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList )
wxString labtype = CONV_FROM_UTF8( SheetLabelType[jj] ); wxString labtype = CONV_FROM_UTF8( SheetLabelType[jj] );
msg.Printf( _( "> %-28.28s PinSheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f\n" ), msg.Printf( _( "> %-28.28s PinSheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f\n" ),
GetChars( DrawSheetLabel->m_Text ), GetChars( pinsheet->m_Text ),
GetChars( labtype ), GetChars( labtype ),
GetChars( aList[ii].m_SheetPath.PathHumanReadable() ), GetChars( aList[ii].m_SheetPath.PathHumanReadable() ),
(float) DrawSheetLabel->m_Pos.x / 1000, (float) pinsheet->m_Pos.x / 1000,
(float) DrawSheetLabel->m_Pos.y / 1000 ); (float) pinsheet->m_Pos.y / 1000 );
fputs( CONV_TO_UTF8( msg ), f ); fputs( CONV_TO_UTF8( msg ), f );
} }
......
...@@ -253,7 +253,7 @@ wxString LIB_COMPONENT::GetLibraryName() ...@@ -253,7 +253,7 @@ wxString LIB_COMPONENT::GetLibraryName()
/** /**
* Function IsMulti * Function ReturnSubReference
* @return the sub reference for component having multiple parts per package. * @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit) * The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to 26) * @param aUnit = the part identifier ( 1 to 26)
......
...@@ -545,7 +545,7 @@ public: ...@@ -545,7 +545,7 @@ public:
bool IsMulti() { return m_unitCount > 1; } bool IsMulti() { return m_unitCount > 1; }
/** /**
* Function IsMulti * Function ReturnSubReference
* @return the sub reference for component having multiple parts per package. * @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit) * The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to max count) * @param aUnit = the part identifier ( 1 to max count)
......
...@@ -123,4 +123,8 @@ public: ...@@ -123,4 +123,8 @@ public:
} }
}; };
// Buffer to build the list of items used in netlist and erc calculations
typedef std::vector <NETLIST_OBJECT*> NETLIST_OBJECT_LIST;
#endif // _CLASS_NETLIST_OBJECT_H_ #endif // _CLASS_NETLIST_OBJECT_H_
/*
* component_references_lister.cpp: creates a flat list of components.
* Needed for annotation and BOM.
*/
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2011 jean-pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
* Copyright (C) 1992-2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 Kicad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <algorithm> // to use sort vector
#include <vector>
#include "fctsys.h"
#include "common.h"
#include "kicad_string.h"
#include "wxEeschemaStruct.h"
#include "wxstruct.h"
#include "netlist.h"
#include "class_sch_screen.h"
#include "sch_component.h"
/* sort function to annotate items from their position.
* Components are sorted
* by reference
* if same reference: by sheet
* if same sheet, by X pos
* if same X pos, by Y pos
* if same Y pos, by time stamp
*/
bool SCH_REFERENCE_LIST::sortBy_X_Position( const SCH_REFERENCE& item1,
const SCH_REFERENCE& item2 )
{
int ii = item1.CompareRef( item2 );
if( ii == 0 )
ii = item1.m_SheetNum - item2.m_SheetNum;
if( ii == 0 )
ii = item1.m_CmpPos.x - item2.m_CmpPos.x;
if( ii == 0 )
ii = item1.m_CmpPos.y - item2.m_CmpPos.y;
if( ii == 0 )
ii = item1.m_TimeStamp - item2.m_TimeStamp;
return ii < 0;
}
/* sort function to annotate items by their position.
* Components are sorted
* by reference
* if same reference: by sheet
* if same sheet, by Y pos
* if same Y pos, by X pos
* if same X pos, by time stamp
*/
bool SCH_REFERENCE_LIST::sortBy_Y_Position( const SCH_REFERENCE& item1,
const SCH_REFERENCE& item2 )
{
int ii = item1.CompareRef( item2 );
if( ii == 0 )
ii = item1.m_SheetNum - item2.m_SheetNum;
if( ii == 0 )
ii = item1.m_CmpPos.y - item2.m_CmpPos.y;
if( ii == 0 )
ii = item1.m_CmpPos.x - item2.m_CmpPos.x;
if( ii == 0 )
ii = item1.m_TimeStamp - item2.m_TimeStamp;
return ii < 0;
}
/*
* sort function to annotate items by value
* Components are sorted
* by reference
* if same reference: by value
* if same value: by unit number
* if same unit number, by sheet
* if same sheet, by position X, and Y
*/
bool SCH_REFERENCE_LIST::sortByRefAndValue( const SCH_REFERENCE& item1, const SCH_REFERENCE& item2 )
{
int ii = item1.CompareRef( item2 );
if( ii == 0 )
ii = item1.CompareValue( item2 );
if( ii == 0 )
ii = item1.m_Unit - item2.m_Unit;
if( ii == 0 )
ii = item1.m_SheetNum - item2.m_SheetNum;
if( ii == 0 )
ii = item1.m_CmpPos.x - item2.m_CmpPos.x;
if( ii == 0 )
ii = item1.m_CmpPos.y - item2.m_CmpPos.y;
if( ii == 0 )
ii = item1.m_TimeStamp - item2.m_TimeStamp;
return ii < 0;
}
/* sort function for for list by values
* components are sorted
* by value
* if same value: by reference
* if same reference: by unit number
*/
bool SCH_REFERENCE_LIST::sortComponentsByValueOnly( const SCH_REFERENCE& item1, const SCH_REFERENCE& item2 )
{
int ii;
const wxString* Text1, * Text2;
Text1 = &( item1.m_RootCmp->GetField( VALUE )->m_Text );
Text2 = &( item2.m_RootCmp->GetField( VALUE )->m_Text );
ii = Text1->CmpNoCase( *Text2 );
if( ii == 0 )
{
ii = RefDesStringCompare( item1.GetRef(), item2.GetRef() );
}
if( ii == 0 )
{
ii = item1.m_Unit - item2.m_Unit;
}
return ii < 0;
}
/**
* Function sortComponentsByReferenceOnly
* compare function for sorting in BOM creation.
* components are sorted
* by reference
* if same reference: by value
* if same value: by unit number
*/
bool SCH_REFERENCE_LIST::sortComponentsByReferenceOnly( const SCH_REFERENCE& item1,
const SCH_REFERENCE& item2 )
{
int ii;
const wxString* Text1, * Text2;
ii = RefDesStringCompare( item1.GetRef(), item2.GetRef() );
if( ii == 0 )
{
Text1 = &( item1.m_RootCmp->GetField( VALUE )->m_Text );
Text2 = &( item2.m_RootCmp->GetField( VALUE )->m_Text );
ii = Text1->CmpNoCase( *Text2 );
}
if( ii == 0 )
{
ii = item1.m_Unit - item2.m_Unit;
}
return ii < 0;
}
/*****************************************************************************
* qsort function to annotate items by value
* Components are sorted by time stamp
*****************************************************************************/
bool SCH_REFERENCE_LIST::sortByTimeStamp( const SCH_REFERENCE& item1,
const SCH_REFERENCE& item2 )
{
int ii = item1.m_SheetPath.Cmp( item2.m_SheetPath );
if( ii == 0 )
ii = item1.m_TimeStamp - item2.m_TimeStamp;
return ii < 0;
}
/* Remove sub components from the list, when multiples parts per package are
* found in this list
*/
void SCH_REFERENCE_LIST::RemoveSubComponentsFromList( )
{
SCH_COMPONENT* libItem;
wxString oldName;
wxString currName;
// The component list **MUST** be sorted by reference and by unit number
// in order to find all parts of a component
SortComponentsByReferenceOnly();
for( unsigned ii = 0; ii < componentFlatList.size(); ii++ )
{
libItem = componentFlatList[ii].m_RootCmp;
if( libItem == NULL )
continue;
currName = componentFlatList[ii].GetRef();
if( !oldName.IsEmpty() )
{
if( oldName == currName ) // currName is a subpart of oldName:
// remove it
{
componentFlatList.erase( componentFlatList.begin() + ii );
ii--;
}
}
oldName = currName;
}
}
SCH_REFERENCE::SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_COMPONENT* aLibComponent,
SCH_SHEET_PATH& aSheetPath )
{
wxASSERT( aComponent != NULL && aLibComponent != NULL );
m_RootCmp = aComponent;
m_Entry = aLibComponent;
m_Unit = aComponent->GetUnitSelection( &aSheetPath );
m_SheetPath = aSheetPath;
m_IsNew = false;
m_Flag = 0;
m_TimeStamp = aComponent->m_TimeStamp;
m_CmpPos = aComponent->m_Pos;
m_SheetNum = 0;
if( aComponent->GetRef( &aSheetPath ).IsEmpty() )
aComponent->SetRef( &aSheetPath, wxT( "DefRef?" ) );
SetRef( aComponent->GetRef( &aSheetPath ) );
m_NumRef = -1;
if( aComponent->GetField( VALUE )->GetText().IsEmpty() )
aComponent->GetField( VALUE )->SetText( wxT( "~" ) );
m_Value = &aComponent->GetField( VALUE )->m_Text;
}
void SCH_REFERENCE::Annotate()
{
if( m_NumRef < 0 )
m_Ref += wxChar( '?' );
else
m_Ref = CONV_TO_UTF8( GetRef() << m_NumRef );
m_RootCmp->SetRef( &m_SheetPath, CONV_FROM_UTF8( m_Ref.c_str() ) );
m_RootCmp->SetUnit( m_Unit );
m_RootCmp->SetUnitSelection( &m_SheetPath, m_Unit );
}
void SCH_REFERENCE::Split()
{
std::string refText = GetRefStr();
m_NumRef = -1;
int ll = refText.length() - 1;
if( refText[ll] == '?' )
{
m_IsNew = true;
if( !IsPartsLocked() )
m_Unit = 0x7FFFFFFF;
refText.erase( ll ); // delete last char
SetRefStr( refText );
}
else if( isdigit( refText[ll] ) == 0 )
{
m_IsNew = true;
if( !IsPartsLocked() )
m_Unit = 0x7FFFFFFF;
}
else
{
while( ll >= 0 )
{
if( (refText[ll] <= ' ' ) || isdigit( refText[ll] ) )
ll--;
else
{
if( isdigit( refText[ll + 1] ) )
{
// null terminated C string into cp
const char* cp = refText.c_str() + ll + 1;
m_NumRef = atoi( cp );
}
refText.erase( ll+1 ); // delete from ll+1 to end
break;
}
}
SetRefStr( refText );
}
}
...@@ -9,17 +9,12 @@ ...@@ -9,17 +9,12 @@
#include "bitmaps.h" #include "bitmaps.h"
#include "common.h" #include "common.h"
#include "wxEeschemaStruct.h" #include "wxEeschemaStruct.h"
#include "class_drawpanel.h"
#include "annotate_dialog.h" #include "annotate_dialog.h"
#define KEY_ANNOTATE_SORT_OPTION wxT("AnnotateSortOption") #define KEY_ANNOTATE_SORT_OPTION wxT("AnnotateSortOption")
extern void AnnotateComponents( SCH_EDIT_FRAME* parent,
bool annotateSchematic,
int sortOption,
bool resetAnnotation,
bool repairsTimestamps );
DIALOG_ANNOTATE::DIALOG_ANNOTATE( SCH_EDIT_FRAME* parent ) DIALOG_ANNOTATE::DIALOG_ANNOTATE( SCH_EDIT_FRAME* parent )
: DIALOG_ANNOTATE_BASE( parent ) : DIALOG_ANNOTATE_BASE( parent )
...@@ -44,29 +39,35 @@ void DIALOG_ANNOTATE::InitValues() ...@@ -44,29 +39,35 @@ void DIALOG_ANNOTATE::InitValues()
m_Config->Read(KEY_ANNOTATE_SORT_OPTION, &option, 0l); m_Config->Read(KEY_ANNOTATE_SORT_OPTION, &option, 0l);
switch( option ) switch( option )
{ {
default:
case 0: case 0:
m_rbSortBy_X_Position->SetValue(1); m_rbSortBy_X_Position->SetValue(1);
break; break;
case 1: case 1:
m_rbSortBy_Y_Position->SetValue(1); m_rbSortBy_X_Position_and_useSheet->SetValue(1);
break; break;
case 2: case 2:
rbSortByValue->SetValue(1); m_rbSortBy_Y_Position->SetValue(1);
break; break;
default: case 3:
m_rbSortBy_Y_Position_and_useSheet->SetValue(1);
break;
case 4:
rbSortByValue->SetValue(1);
break; break;
} }
} }
wxBitmap bitmap0(annotate_down_right_xpm); wxBitmap bitmap0(annotate_down_right_xpm);
annotate_down_right_bitmap->SetBitmap(bitmap0); annotate_down_right_bitmap->SetBitmap(bitmap0);
annotate_down_right_bitmap1->SetBitmap(bitmap0);
wxBitmap bitmap1(annotate_right_down_xpm); wxBitmap bitmap1(annotate_right_down_xpm);
annotate_right_down_bitmap->SetBitmap(bitmap1); annotate_right_down_bitmap->SetBitmap(bitmap1);
annotate_right_down_bitmap1->SetBitmap(bitmap1);
wxBitmap bitmap2(add_text_xpm); wxBitmap bitmap2(add_text_xpm);
annotate_by_value_bitmap->SetBitmap(bitmap2); annotate_by_value_bitmap->SetBitmap(bitmap2);
...@@ -97,7 +98,9 @@ void DIALOG_ANNOTATE::OnApplyClick( wxCommandEvent& event ) ...@@ -97,7 +98,9 @@ void DIALOG_ANNOTATE::OnApplyClick( wxCommandEvent& event )
response = wxMessageBox( message, wxT( "" ), wxICON_EXCLAMATION | wxOK | wxCANCEL ); response = wxMessageBox( message, wxT( "" ), wxICON_EXCLAMATION | wxOK | wxCANCEL );
if (response == wxCANCEL) if (response == wxCANCEL)
return; return;
AnnotateComponents( m_Parent, GetLevel(), GetSortOrder(), GetResetItems() , true ); m_Parent->AnnotateComponents( GetLevel(), GetSortOrder(), GetResetItems() , true );
m_Parent->DrawPanel->Refresh();
m_btnClear->Enable(); m_btnClear->Enable();
} }
...@@ -119,7 +122,9 @@ void DIALOG_ANNOTATE::OnClearAnnotationCmpClick( wxCommandEvent& event ) ...@@ -119,7 +122,9 @@ void DIALOG_ANNOTATE::OnClearAnnotationCmpClick( wxCommandEvent& event )
wxICON_EXCLAMATION | wxOK | wxCANCEL ); wxICON_EXCLAMATION | wxOK | wxCANCEL );
if (response == wxCANCEL) if (response == wxCANCEL)
return; return;
m_Parent->DeleteAnnotation( GetLevel() ? false : true, true ); m_Parent->DeleteAnnotation( GetLevel() ? false : true );
m_Parent->DrawPanel->Refresh();
m_btnClear->Enable(false); m_btnClear->Enable(false);
} }
...@@ -157,14 +162,20 @@ int DIALOG_ANNOTATE::GetSortOrder( void ) ...@@ -157,14 +162,20 @@ int DIALOG_ANNOTATE::GetSortOrder( void )
/****************************************/ /****************************************/
/** /**
* @return 0 if annotation by X position, * @return 0 if annotation by X position,
* 1 if annotation by Y position * 1 if annotation by X position and use sheet number,
* 2 if annotation by value * 2 if annotation by Y position,
* 3 if annotation by Y position and use sheet number,
* 4 if annotation by value
*/ */
{ {
if ( m_rbSortBy_X_Position->GetValue() ) if ( m_rbSortBy_X_Position->GetValue() )
return 0; return 0;
if ( m_rbSortBy_Y_Position->GetValue() ) if ( m_rbSortBy_X_Position_and_useSheet->GetValue() )
return 1; return 1;
if ( m_rbSortBy_Y_Position->GetValue() )
return 2; return 2;
if ( m_rbSortBy_Y_Position_and_useSheet->GetValue() )
return 3;
return 4;
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 21 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
...@@ -60,7 +60,7 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con ...@@ -60,7 +60,7 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con
wxBoxSizer* bSizerXpos; wxBoxSizer* bSizerXpos;
bSizerXpos = new wxBoxSizer( wxHORIZONTAL ); bSizerXpos = new wxBoxSizer( wxHORIZONTAL );
m_rbSortBy_X_Position = new wxRadioButton( this, ID_SORT_BY_X_POSITION, _("Sort Components by &X Position"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_rbSortBy_X_Position = new wxRadioButton( this, ID_SORT_BY_X_POSITION, _("Sort components by &X position"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
bSizerXpos->Add( m_rbSortBy_X_Position, 0, wxALL, 3 ); bSizerXpos->Add( m_rbSortBy_X_Position, 0, wxALL, 3 );
...@@ -71,10 +71,24 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con ...@@ -71,10 +71,24 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con
b_orderOptSizer->Add( bSizerXpos, 0, wxEXPAND|wxRIGHT, 5 ); b_orderOptSizer->Add( bSizerXpos, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bSizerXpos_and_use_sheet;
bSizerXpos_and_use_sheet = new wxBoxSizer( wxHORIZONTAL );
m_rbSortBy_X_Position_and_useSheet = new wxRadioButton( this, wxID_ANY, _("Sort components by X position and use sheet &number"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerXpos_and_use_sheet->Add( m_rbSortBy_X_Position_and_useSheet, 0, wxALL, 3 );
bSizerXpos_and_use_sheet->Add( 0, 0, 1, wxEXPAND, 5 );
annotate_down_right_bitmap1 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
bSizerXpos_and_use_sheet->Add( annotate_down_right_bitmap1, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 12 );
b_orderOptSizer->Add( bSizerXpos_and_use_sheet, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bSizerYpos; wxBoxSizer* bSizerYpos;
bSizerYpos = new wxBoxSizer( wxHORIZONTAL ); bSizerYpos = new wxBoxSizer( wxHORIZONTAL );
m_rbSortBy_Y_Position = new wxRadioButton( this, ID_SORT_BY_Y_POSITION, _("Sort Components by &Y Position"), wxDefaultPosition, wxDefaultSize, 0 ); m_rbSortBy_Y_Position = new wxRadioButton( this, ID_SORT_BY_Y_POSITION, _("Sort components by &Y position"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerYpos->Add( m_rbSortBy_Y_Position, 0, wxALL, 3 ); bSizerYpos->Add( m_rbSortBy_Y_Position, 0, wxALL, 3 );
...@@ -85,10 +99,24 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con ...@@ -85,10 +99,24 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con
b_orderOptSizer->Add( bSizerYpos, 0, wxEXPAND|wxRIGHT, 5 ); b_orderOptSizer->Add( bSizerYpos, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bSizerYpos_and_useSheet;
bSizerYpos_and_useSheet = new wxBoxSizer( wxHORIZONTAL );
m_rbSortBy_Y_Position_and_useSheet = new wxRadioButton( this, wxID_ANY, _("Sort components by Y position and use &sheet number"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerYpos_and_useSheet->Add( m_rbSortBy_Y_Position_and_useSheet, 0, wxALL, 3 );
bSizerYpos_and_useSheet->Add( 0, 0, 1, wxEXPAND, 5 );
annotate_right_down_bitmap1 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
bSizerYpos_and_useSheet->Add( annotate_right_down_bitmap1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 12 );
b_orderOptSizer->Add( bSizerYpos_and_useSheet, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bSizerValuepos; wxBoxSizer* bSizerValuepos;
bSizerValuepos = new wxBoxSizer( wxHORIZONTAL ); bSizerValuepos = new wxBoxSizer( wxHORIZONTAL );
rbSortByValue = new wxRadioButton( this, ID_SORT_BY_VALUE, _("Sort Components by &Value"), wxDefaultPosition, wxDefaultSize, 0 ); rbSortByValue = new wxRadioButton( this, ID_SORT_BY_VALUE, _("Sort components by &value"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerValuepos->Add( rbSortByValue, 0, wxALL, 3 ); bSizerValuepos->Add( rbSortByValue, 0, wxALL, 3 );
...@@ -122,7 +150,6 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con ...@@ -122,7 +150,6 @@ DIALOG_ANNOTATE_BASE::DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id, con
this->SetSizer( bmainSizer ); this->SetSizer( bmainSizer );
this->Layout(); this->Layout();
bmainSizer->Fit( this );
// Connect Events // Connect Events
m_btnClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnCancelClick ), NULL, this ); m_btnClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnCancelClick ), NULL, this );
...@@ -136,4 +163,5 @@ DIALOG_ANNOTATE_BASE::~DIALOG_ANNOTATE_BASE() ...@@ -136,4 +163,5 @@ DIALOG_ANNOTATE_BASE::~DIALOG_ANNOTATE_BASE()
m_btnClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnCancelClick ), NULL, this ); m_btnClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnCancelClick ), NULL, this );
m_btnClear->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnClearAnnotationCmpClick ), NULL, this ); m_btnClear->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnClearAnnotationCmpClick ), NULL, this );
m_btnApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnApplyClick ), NULL, this ); m_btnApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ANNOTATE_BASE::OnApplyClick ), NULL, this );
} }
This diff is collapsed.
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 21 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
...@@ -56,9 +56,15 @@ class DIALOG_ANNOTATE_BASE : public wxDialog ...@@ -56,9 +56,15 @@ class DIALOG_ANNOTATE_BASE : public wxDialog
wxRadioButton* m_rbSortBy_X_Position; wxRadioButton* m_rbSortBy_X_Position;
wxStaticBitmap* annotate_down_right_bitmap; wxStaticBitmap* annotate_down_right_bitmap;
wxRadioButton* m_rbSortBy_X_Position_and_useSheet;
wxStaticBitmap* annotate_down_right_bitmap1;
wxRadioButton* m_rbSortBy_Y_Position; wxRadioButton* m_rbSortBy_Y_Position;
wxStaticBitmap* annotate_right_down_bitmap; wxStaticBitmap* annotate_right_down_bitmap;
wxRadioButton* m_rbSortBy_Y_Position_and_useSheet;
wxStaticBitmap* annotate_right_down_bitmap1;
wxRadioButton* rbSortByValue; wxRadioButton* rbSortByValue;
wxStaticBitmap* annotate_by_value_bitmap; wxStaticBitmap* annotate_by_value_bitmap;
...@@ -68,13 +74,14 @@ class DIALOG_ANNOTATE_BASE : public wxDialog ...@@ -68,13 +74,14 @@ class DIALOG_ANNOTATE_BASE : public wxDialog
wxButton* m_btnApply; wxButton* m_btnApply;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnClearAnnotationCmpClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnClearAnnotationCmpClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnApplyClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnApplyClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Annotate Schematic"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
DIALOG_ANNOTATE_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Annotate Schematic"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 432,376 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_ANNOTATE_BASE(); ~DIALOG_ANNOTATE_BASE();
}; };
......
This diff is collapsed.
...@@ -46,13 +46,13 @@ private: ...@@ -46,13 +46,13 @@ private:
*/ */
void CreatePartsList( const wxString& aFullFileName, bool aIncludeSubComponents ); void CreatePartsList( const wxString& aFullFileName, bool aIncludeSubComponents );
int PrintComponentsListByRef( FILE* f, std::vector <OBJ_CMP_TO_LIST>& aList, int PrintComponentsListByRef( FILE* f, SCH_REFERENCE_LIST& aList,
bool CompactForm, bool aIncludeSubComponents ); bool CompactForm, bool aIncludeSubComponents );
int PrintComponentsListByVal( FILE* f, std::vector <OBJ_CMP_TO_LIST>& aList, int PrintComponentsListByVal( FILE* f, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents ); bool aIncludeSubComponents );
int PrintComponentsListByPart( FILE* f, std::vector <OBJ_CMP_TO_LIST>& aList, int PrintComponentsListByPart( FILE* f, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents ); bool aIncludeSubComponents );
void PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem, bool CompactForm = FALSE ); void PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem, bool CompactForm = FALSE );
......
...@@ -412,7 +412,9 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList ) ...@@ -412,7 +412,9 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
m_writeErcFile = m_WriteResultOpt->GetValue(); m_writeErcFile = m_WriteResultOpt->GetValue();
ReAnnotatePowerSymbolsOnly(); /* Build the whole sheet list in hierarchy (sheet, not screen) */
SCH_SHEET_LIST sheets;
sheets.AnnotatePowerSymbols();
if( m_Parent->CheckAnnotate( aMessagesList, false ) ) if( m_Parent->CheckAnnotate( aMessagesList, false ) )
{ {
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "eeschema_id.h" #include "eeschema_id.h"
#include "general.h" #include "general.h"
#include "netlist.h" #include "netlist_control.h"
#include "protos.h" #include "protos.h"
#include "libeditframe.h" #include "libeditframe.h"
#include "eeschema_config.h" #include "eeschema_config.h"
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <wx/gdicmn.h> #include <wx/gdicmn.h>
#include "block_commande.h" #include "block_commande.h"
#include "class_netlist_object.h"
class SCH_ITEM; class SCH_ITEM;
...@@ -203,4 +204,12 @@ extern int g_ItemSelectetColor; ...@@ -203,4 +204,12 @@ extern int g_ItemSelectetColor;
// eeschema // eeschema
extern int g_InvisibleItemColor; extern int g_InvisibleItemColor;
/* Global Variables */
extern NETLIST_OBJECT_LIST g_NetObjectslist;
extern bool g_OptNetListUseNames; /* TRUE to use names rather than
* net numbers. SPICE netlist only
*/
#endif // _GENERAL_H_ #endif // _GENERAL_H_
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "general.h" #include "general.h"
#include "netlist.h" #include "netlist.h"
#include "netlist_control.h"
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "lib_pin.h" #include "lib_pin.h"
...@@ -143,7 +144,7 @@ class EXPORT_HELP ...@@ -143,7 +144,7 @@ class EXPORT_HELP
/** /**
* Function eraseDuplicatePins * Function eraseDuplicatePins
* removes duplicate Pins fromt the pin list, m_SortedComponentPinList. * removes duplicate Pins from the pin list, m_SortedComponentPinList.
* (This is a list of pins found in the whole schematic, for a single * (This is a list of pins found in the whole schematic, for a single
* component.) These duplicate pins were put in list because some pins (powers... ) * component.) These duplicate pins were put in list because some pins (powers... )
* are found more than one time when we have a multiple parts per package * are found more than one time when we have a multiple parts per package
...@@ -725,7 +726,7 @@ XNODE* EXPORT_HELP::makeGenericLibParts() ...@@ -725,7 +726,7 @@ XNODE* EXPORT_HELP::makeGenericLibParts()
LIB_COMPONENT* lcomp = (LIB_COMPONENT*) *it; LIB_COMPONENT* lcomp = (LIB_COMPONENT*) *it;
CMP_LIBRARY* library = lcomp->GetLibrary(); CMP_LIBRARY* library = lcomp->GetLibrary();
m_Libraries.insert( library ); // inserts component's library iff unique m_Libraries.insert( library ); // inserts component's library if unique
XNODE* xlibpart; XNODE* xlibpart;
xlibparts->AddChild( xlibpart = node( sLibpart ) ); xlibparts->AddChild( xlibpart = node( sLibpart ) );
...@@ -958,7 +959,7 @@ XNODE* EXPORT_HELP::makeGenericComponents() ...@@ -958,7 +959,7 @@ XNODE* EXPORT_HELP::makeGenericComponents()
XNODE* xcomp; // current component being constructed XNODE* xcomp; // current component being constructed
// Output the component's elments in order of expected access frequency. // Output the component's elements in order of expected access frequency.
// This may not always look best, but it will allow faster execution // This may not always look best, but it will allow faster execution
// under XSL processing systems which do sequential searching within // under XSL processing systems which do sequential searching within
// an element. // an element.
...@@ -1015,8 +1016,8 @@ XNODE* EXPORT_HELP::makeGenericComponents() ...@@ -1015,8 +1016,8 @@ XNODE* EXPORT_HELP::makeGenericComponents()
timeStamp.Printf( sTSFmt, comp->m_TimeStamp ); timeStamp.Printf( sTSFmt, comp->m_TimeStamp );
xcomp->AddChild( node( sTStamp, timeStamp ) ); xcomp->AddChild( node( sTStamp, timeStamp ) );
// Add pins list for this cmponent. // Add pins list for this component.
// Usedful to build netlist which have pads connection inside the footprint description // Useful to build netlist which have pads connection inside the footprint description
// (Spice, OrcadPCB2 ...) // (Spice, OrcadPCB2 ...)
XNODE* xpinslist; XNODE* xpinslist;
xcomp->AddChild( xpinslist = node( sPins ) ); xcomp->AddChild( xpinslist = node( sPins ) );
...@@ -1086,7 +1087,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO ...@@ -1086,7 +1087,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO
return xdoc.Save( aOutFileName, 2 /* indent bug, today was ignored by wxXml lib */ ); return xdoc.Save( aOutFileName, 2 /* indent bug, today was ignored by wxXml lib */ );
#else // ouput the well established/old generic net list format which was not XML. #else // output the well established/old generic net list format which was not XML.
wxString field; wxString field;
wxString footprint; wxString footprint;
...@@ -1341,7 +1342,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_ ...@@ -1341,7 +1342,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_
int ret = 0; // zero now, OR in the sign bit on error int ret = 0; // zero now, OR in the sign bit on error
wxString netName; wxString netName;
std::vector<OBJ_CMP_TO_LIST> cmpList; std::vector< SCH_REFERENCE > cmpList;
DateAndTime( dateBuf ); DateAndTime( dateBuf );
...@@ -1361,6 +1362,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_ ...@@ -1361,6 +1362,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_
for( EDA_ITEM* item = path->LastDrawList(); item; item = item->Next() ) for( EDA_ITEM* item = path->LastDrawList(); item; item = item->Next() )
{ {
SCH_COMPONENT* comp = findNextComponentAndCreatPinList( item, path ); SCH_COMPONENT* comp = findNextComponentAndCreatPinList( item, path );
if( !comp ) if( !comp )
break; break;
...@@ -1375,8 +1377,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_ ...@@ -1375,8 +1377,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_
{ {
if( entry->GetFootPrints().GetCount() != 0 ) // Put in list if( entry->GetFootPrints().GetCount() != 0 ) // Put in list
{ {
cmpList.push_back( OBJ_CMP_TO_LIST() ); cmpList.push_back( SCH_REFERENCE() );
cmpList.back().m_RootCmp = comp; cmpList.back().m_RootCmp = comp;
cmpList.back().SetRef( comp->GetRef( path ) ); cmpList.back().SetRef( comp->GetRef( path ) );
} }
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "sch_no_connect.h" #include "sch_no_connect.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "algorithm" #include "algorithm"
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
...@@ -369,8 +368,8 @@ void FindBestNetNameForEachNet( NETLIST_OBJECT_LIST& aNetItemBuffer ) ...@@ -369,8 +368,8 @@ void FindBestNetNameForEachNet( NETLIST_OBJECT_LIST& aNetItemBuffer )
* @param aLabelItemBuffer = list of NETLIST_OBJECT type labels candidates. * @param aLabelItemBuffer = list of NETLIST_OBJECT type labels candidates.
* labels are local labels, hierarchical labels or pin labels * labels are local labels, hierarchical labels or pin labels
* labels in included sheets have a lower priority than labels in the current sheet. * labels in included sheets have a lower priority than labels in the current sheet.
* so labels inside the root sheet have the highter priority. * so labels inside the root sheet have the higher priority.
* pin labels are global labels and have the highter priority * pin labels are global labels and have the higher priority
* local labels have the lower priority * local labels have the lower priority
* labels having the same priority are sorted by alphabetic order. * labels having the same priority are sorted by alphabetic order.
* *
...@@ -434,7 +433,7 @@ static NETLIST_OBJECT* FindBestNetName( NETLIST_OBJECT_LIST& aLabelItemBuffer ) ...@@ -434,7 +433,7 @@ static NETLIST_OBJECT* FindBestNetName( NETLIST_OBJECT_LIST& aLabelItemBuffer )
} }
else // not global: names are prefixed by their sheetpath else // not global: names are prefixed by their sheetpath
{ {
// use name defined in highter hierarchical sheet // use name defined in higher hierarchical sheet
// (i.e. shorter path because paths are /<timestamp1>/<timestamp2>/... // (i.e. shorter path because paths are /<timestamp1>/<timestamp2>/...
// and timestamp = 8 letters. // and timestamp = 8 letters.
if( candidate->m_SheetList.Path().Length() < item->m_SheetList.Path().Length() ) if( candidate->m_SheetList.Path().Length() < item->m_SheetList.Path().Length() )
......
This diff is collapsed.
...@@ -517,7 +517,8 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event ) ...@@ -517,7 +517,8 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event )
bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName, bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName,
bool aUse_netnames ) bool aUse_netnames )
{ {
ReAnnotatePowerSymbolsOnly(); SCH_SHEET_LIST sheets;
sheets.AnnotatePowerSymbols();
// Performs some controls: // Performs some controls:
if( CheckAnnotate( NULL, 0 ) ) if( CheckAnnotate( NULL, 0 ) )
...@@ -534,19 +535,8 @@ bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName, ...@@ -534,19 +535,8 @@ bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName,
} }
/* Cleanup the entire hierarchy */ /* Cleanup the entire hierarchy */
SCH_SCREENS ScreenList; SCH_SCREENS screens;
for( SCH_SCREEN* screen = ScreenList.GetFirst(); screens.SchematicCleanUp();
screen != NULL;
screen = ScreenList.GetNext() )
{
bool ModifyWires;
ModifyWires = screen->SchematicCleanUp( NULL );
// if wire list has changed, delete the Undo Redo list to avoid
// pointer problems with deleted data
if( ModifyWires )
screen->ClearUndoRedoList();
}
BuildNetListBase(); BuildNetListBase();
bool success = WriteNetListFile( aFormat, aFullFileName, g_OptNetListUseNames ); bool success = WriteNetListFile( aFormat, aFullFileName, g_OptNetListUseNames );
...@@ -555,23 +545,18 @@ bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName, ...@@ -555,23 +545,18 @@ bool SCH_EDIT_FRAME::CreateNetlist( int aFormat, const wxString& aFullFileName,
} }
/***********************************************************/
void WinEDA_NetlistFrame::OnCancelClick( wxCommandEvent& event ) void WinEDA_NetlistFrame::OnCancelClick( wxCommandEvent& event )
/***********************************************************/
{ {
EndModal( NET_ABORT ); EndModal( NET_ABORT );
} }
/***********************************************************/
void WinEDA_NetlistFrame::RunSimulator( wxCommandEvent& event ) void WinEDA_NetlistFrame::RunSimulator( wxCommandEvent& event )
/***********************************************************/
{ {
wxFileName fn; wxFileName fn;
wxString ExecFile, CommandLine; wxString ExecFile, CommandLine;
g_SimulatorCommandLine = g_SimulatorCommandLine = m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue();
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue();
g_SimulatorCommandLine.Trim( FALSE ); g_SimulatorCommandLine.Trim( FALSE );
g_SimulatorCommandLine.Trim( TRUE ); g_SimulatorCommandLine.Trim( TRUE );
ExecFile = g_SimulatorCommandLine.BeforeFirst( ' ' ); ExecFile = g_SimulatorCommandLine.BeforeFirst( ' ' );
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
#ifndef _NETLIST_CONTROL_H_ #ifndef _NETLIST_CONTROL_H_
#define _NETLIST_CONTROL_H_ #define _NETLIST_CONTROL_H_
class WinEDA_EnterText;
/* Event id for notebook page buttons: */ /* Event id for notebook page buttons: */
enum id_netlist { enum id_netlist {
ID_CREATE_NETLIST = 1550, ID_CREATE_NETLIST = 1550,
...@@ -67,6 +70,24 @@ public: ...@@ -67,6 +70,24 @@ public:
}; };
#define CUSTOMPANEL_COUNTMAX 8 // Max number of netlist plugins
/* Id to select netlist type */
enum TypeNetForm {
NET_TYPE_UNINIT = 0,
NET_TYPE_PCBNEW,
NET_TYPE_ORCADPCB2,
NET_TYPE_CADSTAR,
NET_TYPE_SPICE,
NET_TYPE_CUSTOM1, /* NET_TYPE_CUSTOM1
* is the first id for user netlist format
* NET_TYPE_CUSTOM1+CUSTOMPANEL_COUNTMAX-1
* is the last id for user netlist format
*/
NET_TYPE_CUSTOM_MAX = NET_TYPE_CUSTOM1 + CUSTOMPANEL_COUNTMAX - 1
};
/* Dialog frame for creating netlists */ /* Dialog frame for creating netlists */
class WinEDA_NetlistFrame : public wxDialog class WinEDA_NetlistFrame : public wxDialog
{ {
......
...@@ -25,7 +25,7 @@ class PLOTTER; ...@@ -25,7 +25,7 @@ class PLOTTER;
class SCH_SHEET; class SCH_SHEET;
class LIB_PIN; class LIB_PIN;
class LABEL_OBJECT; class LABEL_OBJECT;
class OBJ_CMP_TO_LIST; class NETLIST_OBJECT;
wxString ReturnDefaultFieldName( int aFieldNdx ); wxString ReturnDefaultFieldName( int aFieldNdx );
...@@ -65,43 +65,11 @@ bool LibItemInBox( int x1, int y1, int x2, int y2, SCH_COMPONENT* Draw ...@@ -65,43 +65,11 @@ bool LibItemInBox( int x1, int y1, int x2, int y2, SCH_COMPONENT* Draw
void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM* DrawStruct ); void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM* DrawStruct );
// build_BOM.cpp
/**
* Class LABEL_OBJECT
* is used in build BOM to handle the list of labels in schematic
* because in a complex hierarchy, a label is used more than once,
* and had more than one sheet path, so we must create a flat list of labels
*/
class LABEL_OBJECT
{
public:
int m_LabelType;
SCH_ITEM* m_Label;
//have to store it here since the object references will be duplicated.
SCH_SHEET_PATH m_SheetPath; //composed of UIDs
public: LABEL_OBJECT()
{
m_Label = NULL;
m_LabelType = 0;
}
};
void BuildComponentsListFromSchematic( std::vector <OBJ_CMP_TO_LIST>& aList );
void GenListeGLabels( std::vector <LABEL_OBJECT>& aList );
bool SortComponentsByReference( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 );
bool SortComponentsByValue( const OBJ_CMP_TO_LIST& obj1, const OBJ_CMP_TO_LIST& obj2 );
bool SortLabelsByValue( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 );
bool SortLabelsBySheet( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 );
void DeleteSubCmp( std::vector <OBJ_CMP_TO_LIST>& aList );
int PrintListeGLabel( FILE* f, std::vector <LABEL_OBJECT>& aList );
// operations_on_item_lists.cpp // operations_on_item_lists.cpp
/** /**
* Function DuplicateStruct * Function DuplicateStruct
* Routine to create a new copy of given struct. * creates a new copy of given struct.
* @param aDrawStruct = the SCH_ITEM to duplicate * @param aDrawStruct = the SCH_ITEM to duplicate
* @param aClone (defualt = true) * @param aClone (defualt = true)
* if true duplicate also some parameters that must be unique * if true duplicate also some parameters that must be unique
...@@ -194,12 +162,6 @@ EDA_Colors ReturnLayerColor( int Layer ); ...@@ -194,12 +162,6 @@ EDA_Colors ReturnLayerColor( int Layer );
/**************/ /**************/
int IsBusLabel( const wxString& LabelDrawList ); int IsBusLabel( const wxString& LabelDrawList );
/***************/
/* ANNOTATE.CPP */
/***************/
void ReAnnotatePowerSymbolsOnly();
/************/ /************/
/* PLOT.CPP */ /* PLOT.CPP */
/************/ /************/
...@@ -312,4 +274,19 @@ void DisplayOptionFrame( SCH_EDIT_FRAME* parent, const wxPoint& framepos ); ...@@ -312,4 +274,19 @@ void DisplayOptionFrame( SCH_EDIT_FRAME* parent, const wxPoint& framepos );
/****************/ /****************/
void RemoteCommand( const char* cmdline ); void RemoteCommand( const char* cmdline );
/* Prototypes in netlist_control.cpp */
void FreeNetObjectsList( std::vector <NETLIST_OBJECT*>& aNetObjectslist );
/**
* Function ReturnUserNetlistTypeName
* to retrieve user netlist type names
* @param first_item = true: return first name of the list, false = return next
* @return a wxString : name of the type netlist or empty string
* this function must be called first with "first_item" = true
* and after with "first_item" = false to get all the other existing netlist
* names
*/
wxString ReturnUserNetlistTypeName( bool first_item );
#endif /* __PROTOS_H__ */ #endif /* __PROTOS_H__ */
...@@ -622,7 +622,7 @@ void SCH_COMPONENT::Place( SCH_EDIT_FRAME* frame, wxDC* DC ) ...@@ -622,7 +622,7 @@ void SCH_COMPONENT::Place( SCH_EDIT_FRAME* frame, wxDC* DC )
} }
void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheet ) void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheetPath )
{ {
wxString defRef = m_prefix; wxString defRef = m_prefix;
bool KeepMulti = false; bool KeepMulti = false;
...@@ -648,15 +648,15 @@ void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheet ) ...@@ -648,15 +648,15 @@ void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheet )
wxString NewHref; wxString NewHref;
wxString path; wxString path;
if( aSheet ) if( aSheetPath )
path = GetPath( aSheet ); path = GetPath( aSheetPath );
for( unsigned int ii = 0; ii < m_PathsAndReferences.GetCount(); ii++ ) for( unsigned int ii = 0; ii < m_PathsAndReferences.GetCount(); ii++ )
{ {
// Break hierarchical reference in path, ref and multi selection: // Break hierarchical reference in path, ref and multi selection:
reference_fields = wxStringTokenize( m_PathsAndReferences[ii], separators ); reference_fields = wxStringTokenize( m_PathsAndReferences[ii], separators );
if( aSheet == NULL || reference_fields[0].Cmp( path ) == 0 ) if( aSheetPath == NULL || reference_fields[0].Cmp( path ) == 0 )
{ {
if( KeepMulti ) // Get and keep part selection if( KeepMulti ) // Get and keep part selection
multi = reference_fields[2]; multi = reference_fields[2];
...@@ -680,6 +680,8 @@ void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheet ) ...@@ -680,6 +680,8 @@ void SCH_COMPONENT::ClearAnnotation( SCH_SHEET_PATH* aSheet )
// UpdateAllScreenReferences for the active sheet. // UpdateAllScreenReferences for the active sheet.
// But this call cannot made here. // But this call cannot made here.
m_Fields[REFERENCE].m_Text = defRef; //for drawing. m_Fields[REFERENCE].m_Text = defRef; //for drawing.
SetModified();
} }
......
...@@ -44,8 +44,8 @@ class SCH_COMPONENT : public SCH_ITEM ...@@ -44,8 +44,8 @@ class SCH_COMPONENT : public SCH_ITEM
/** /**
* Defines the hierarchical path and reference of the component. This allowa support * Defines the hierarchical path and reference of the component. This allowa support
* for hierarchical sheets that reference the same schematic. The foramt for the path * for hierarchical sheets that reference the same schematic. The foramt for the path
* is /&ltsheet time stamp&gt/&ltsheet time stamp&gt/... A single / denotes the root * is /&ltsheet time stamp&gt/&ltsheet time stamp&gt/.../&lscomponent time stamp&gt.
* sheet. * A single / denotes the root sheet.
*/ */
wxArrayString m_PathsAndReferences; wxArrayString m_PathsAndReferences;
...@@ -168,10 +168,10 @@ public: ...@@ -168,10 +168,10 @@ public:
/** /**
* Function ClearAnnotation * Function ClearAnnotation
* clears exiting component annotation ( i.i IC23 changed to IC? and part reset to 1) * clears exiting component annotation ( i.i IC23 changed to IC? and part reset to 1)
* @param aSheet: SCH_SHEET_PATH value: if NULL remove all annotations, * @param aSheetPath: SCH_SHEET_PATH value: if NULL remove all annotations,
* else remove annotation relative to this sheetpath * else remove annotation relative to this sheetpath
*/ */
void ClearAnnotation( SCH_SHEET_PATH* aSheet ); void ClearAnnotation( SCH_SHEET_PATH* aSheetPath );
/** /**
* Function SetTimeStamp * Function SetTimeStamp
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "netlist.h"
#include "class_library.h" #include "class_library.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h" #include "sch_line.h"
...@@ -418,10 +419,57 @@ int SCH_SCREEN::CountConnectedItems( const wxPoint& aPos, bool aTestJunctions ) ...@@ -418,10 +419,57 @@ int SCH_SCREEN::CountConnectedItems( const wxPoint& aPos, bool aTestJunctions )
} }
void SCH_SCREEN::ClearAnnotation( SCH_SHEET_PATH* aSheetPath )
{
for( SCH_ITEM* item = GetDrawItems(); item != NULL; item = item->Next() )
{
if( item->Type() == SCH_COMPONENT_T )
{
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
component->ClearAnnotation( aSheetPath );
}
}
}
void SCH_SCREEN::GetHierarchicalItems( std::vector <SCH_ITEM*> aItems )
{
SCH_ITEM* item = GetDrawItems();
while( item )
{
if( ( item->Type() == SCH_SHEET_T ) || ( item->Type() == SCH_COMPONENT_T ) )
aItems.push_back( item );
item = item->Next();
}
}
/******************************************************************/ /******************************************************************/
/* Class SCH_SCREENS to handle the list of screens in a hierarchy */ /* Class SCH_SCREENS to handle the list of screens in a hierarchy */
/******************************************************************/ /******************************************************************/
/**
* Function SortByTimeStamp
* sorts a list of schematic items by time stamp and type.
*/
static bool SortByTimeStamp( const SCH_ITEM* item1, const SCH_ITEM* item2 )
{
int ii = item1->m_TimeStamp - item2->m_TimeStamp;
/* If the time stamps are the same, compare type in order to have component objects
* before sheet object. This is done because the changing the sheet time stamp
* before the component time stamp could cause the current annotation to be lost.
*/
if( ( ii == 0 && ( item1->Type() != item2->Type() ) ) && ( item1->Type() == SCH_SHEET_T ) )
ii = -1;
return ii < 0;
}
SCH_SCREENS::SCH_SCREENS() SCH_SCREENS::SCH_SCREENS()
{ {
m_index = 0; m_index = 0;
...@@ -503,3 +551,72 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem ) ...@@ -503,3 +551,72 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem )
} }
} }
} }
void SCH_SCREENS::ClearAnnotation()
{
for( size_t i = 0; i < m_screens.size(); i++ )
m_screens[i]->ClearAnnotation( NULL );
}
void SCH_SCREENS::SchematicCleanUp()
{
for( size_t i = 0; i < m_screens.size(); i++ )
{
// if wire list has changed, delete the undo/redo list to avoid
// pointer problems with deleted data.
if( m_screens[i]->SchematicCleanUp( NULL ) )
m_screens[i]->ClearUndoRedoList();
}
}
int SCH_SCREENS::ReplaceDuplicateTimeStamps()
{
std::vector <SCH_ITEM*> items;
SCH_ITEM* item;
for( size_t i = 0; i < m_screens.size(); i++ )
m_screens[i]->GetHierarchicalItems( items );
if( items.size() < 2 )
return 0;
sort( items.begin(), items.end(), SortByTimeStamp );
int count = 0;
for( size_t ii = 0; ii < items.size() - 1; ii++ )
{
item = items[ii];
SCH_ITEM* nextItem = items[ii + 1];
if( item->m_TimeStamp == nextItem->m_TimeStamp )
{
count++;
// for a component, update its Time stamp and its paths
// (m_PathsAndReferences field)
if( item->Type() == SCH_COMPONENT_T )
( (SCH_COMPONENT*) item )->SetTimeStamp( GetTimeStamp() );
// for a sheet, update only its time stamp (annotation of its
// components will be lost)
// @todo: see how to change sheet paths for its cmp list (can
// be possible in most cases)
else
item->m_TimeStamp = GetTimeStamp();
}
}
return count;
}
void SCH_SCREENS::SetDate( const wxString& aDate )
{
for( size_t i = 0; i < m_screens.size(); i++ )
m_screens[i]->m_Date = aDate;
}
...@@ -861,6 +861,11 @@ void SCH_SHEET::DisplayInfo( WinEDA_DrawFrame* frame ) ...@@ -861,6 +861,11 @@ void SCH_SHEET::DisplayInfo( WinEDA_DrawFrame* frame )
frame->ClearMsgPanel(); frame->ClearMsgPanel();
frame->AppendMsgPanel( _( "Sheet name" ), m_SheetName, CYAN ); frame->AppendMsgPanel( _( "Sheet name" ), m_SheetName, CYAN );
frame->AppendMsgPanel( _( "File name" ), m_FileName, BROWN ); frame->AppendMsgPanel( _( "File name" ), m_FileName, BROWN );
#if 0 // Set to 1 to display the sheet time stamp (mainly for test)
wxString msg;
msg.Printf(wxT("%.8X"), m_TimeStamp );
frame->AppendMsgPanel( _( "Time Stamp" ), msg, BLUE );
#endif
} }
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include "class_sch_screen.h" #include "class_sch_screen.h"
#include "sch_item_struct.h" #include "sch_item_struct.h"
#include "netlist.h"
#include "class_library.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_sheet_path.h" #include "sch_sheet_path.h"
#include "sch_component.h" #include "sch_component.h"
...@@ -55,16 +57,20 @@ bool SCH_SHEET_PATH::BuildSheetPathInfoFromSheetPathValue( const wxString& aPath ...@@ -55,16 +57,20 @@ bool SCH_SHEET_PATH::BuildSheetPathInfoFromSheetPathValue( const wxString& aPath
return true; return true;
SCH_ITEM* schitem = LastDrawList(); SCH_ITEM* schitem = LastDrawList();
while( schitem && GetSheetsCount() < NB_MAX_SHEET ) while( schitem && GetSheetsCount() < NB_MAX_SHEET )
{ {
if( schitem->Type() == SCH_SHEET_T ) if( schitem->Type() == SCH_SHEET_T )
{ {
SCH_SHEET* sheet = (SCH_SHEET*) schitem; SCH_SHEET* sheet = (SCH_SHEET*) schitem;
Push( sheet ); Push( sheet );
if( aPath == Path() ) if( aPath == Path() )
return true; return true;
if( BuildSheetPathInfoFromSheetPathValue( aPath ) ) if( BuildSheetPathInfoFromSheetPathValue( aPath ) )
return true; return true;
Pop(); Pop();
} }
schitem = schitem->Next(); schitem = schitem->Next();
...@@ -84,17 +90,17 @@ int SCH_SHEET_PATH::Cmp( const SCH_SHEET_PATH& aSheetPathToTest ) const ...@@ -84,17 +90,17 @@ int SCH_SHEET_PATH::Cmp( const SCH_SHEET_PATH& aSheetPathToTest ) const
{ {
if( m_numSheets > aSheetPathToTest.m_numSheets ) if( m_numSheets > aSheetPathToTest.m_numSheets )
return 1; return 1;
if( m_numSheets < aSheetPathToTest.m_numSheets ) if( m_numSheets < aSheetPathToTest.m_numSheets )
return -1; return -1;
//otherwise, same number of sheets. //otherwise, same number of sheets.
for( unsigned i = 0; i<m_numSheets; i++ ) for( unsigned i = 0; i<m_numSheets; i++ )
{ {
if( m_sheets[i]->m_TimeStamp > if( m_sheets[i]->m_TimeStamp > aSheetPathToTest.m_sheets[i]->m_TimeStamp )
aSheetPathToTest.m_sheets[i]->m_TimeStamp )
return 1; return 1;
if( m_sheets[i]->m_TimeStamp <
aSheetPathToTest.m_sheets[i]->m_TimeStamp ) if( m_sheets[i]->m_TimeStamp < aSheetPathToTest.m_sheets[i]->m_TimeStamp )
return -1; return -1;
} }
...@@ -111,6 +117,7 @@ SCH_SHEET* SCH_SHEET_PATH::Last() ...@@ -111,6 +117,7 @@ SCH_SHEET* SCH_SHEET_PATH::Last()
{ {
if( m_numSheets ) if( m_numSheets )
return m_sheets[m_numSheets - 1]; return m_sheets[m_numSheets - 1];
return NULL; return NULL;
} }
...@@ -122,8 +129,10 @@ SCH_SHEET* SCH_SHEET_PATH::Last() ...@@ -122,8 +129,10 @@ SCH_SHEET* SCH_SHEET_PATH::Last()
SCH_SCREEN* SCH_SHEET_PATH::LastScreen() SCH_SCREEN* SCH_SHEET_PATH::LastScreen()
{ {
SCH_SHEET* lastSheet = Last(); SCH_SHEET* lastSheet = Last();
if( lastSheet ) if( lastSheet )
return lastSheet->m_AssociatedScreen; return lastSheet->m_AssociatedScreen;
return NULL; return NULL;
} }
...@@ -196,6 +205,7 @@ SCH_SHEET* SCH_SHEET_PATH::Pop() ...@@ -196,6 +205,7 @@ SCH_SHEET* SCH_SHEET_PATH::Pop()
m_numSheets--; m_numSheets--;
return m_sheets[m_numSheets]; return m_sheets[m_numSheets];
} }
return NULL; return NULL;
} }
...@@ -266,6 +276,78 @@ void SCH_SHEET_PATH::UpdateAllScreenReferences() ...@@ -266,6 +276,78 @@ void SCH_SHEET_PATH::UpdateAllScreenReferences()
} }
void SCH_SHEET_PATH::AnnotatePowerSymbols( int* aReference )
{
int ref = 1;
if( aReference != NULL )
ref = *aReference;
for( EDA_ITEM* item = LastDrawList(); item != NULL; item = item->Next() )
{
if( item->Type() != SCH_COMPONENT_T )
continue;
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
LIB_COMPONENT* entry = CMP_LIBRARY::FindLibraryComponent( component->GetLibName() );
if( ( entry == NULL ) || !entry->IsPower() )
continue;
wxString refstr = component->GetPrefix();
//str will be "C?" or so after the ClearAnnotation call.
while( refstr.Last() == '?' )
refstr.RemoveLast();
if( !refstr.StartsWith( wxT( "#" ) ) )
refstr = wxT( "#" ) + refstr;
refstr << wxT( "0" ) << ref;
component->SetRef( this, refstr );
ref++;
}
if( aReference != NULL )
*aReference = ref;
}
void SCH_SHEET_PATH::GetComponents( SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols )
{
// Search to sheet path number:
int sheetnumber = 1; // 1 = root
SCH_SHEET_LIST sheetList;
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path != NULL;
path = sheetList.GetNext(), sheetnumber++ )
if( Cmp(*path) == 0 )
break;
for( SCH_ITEM* item = LastDrawList(); item != NULL; item = item->Next() )
{
if( item->Type() == SCH_COMPONENT_T )
{
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
// Skip pseudo components, which have a reference starting with #. This mainly
// effects power symbols.
if( !aIncludePowerSymbols && component->GetRef( this )[0] == wxT( '#' ) )
continue;
LIB_COMPONENT* entry = CMP_LIBRARY::FindLibraryComponent( component->GetLibName() );
if( entry == NULL )
continue;
SCH_REFERENCE reference = SCH_REFERENCE( component, entry, *this );
reference.m_SheetNum = sheetnumber;
aReferences.AddItem( reference );
}
}
}
SCH_ITEM* SCH_SHEET_PATH::FindNextItem( KICAD_T aType, SCH_ITEM* aLastItem, bool aWrap ) SCH_ITEM* SCH_SHEET_PATH::FindNextItem( KICAD_T aType, SCH_ITEM* aLastItem, bool aWrap )
{ {
bool hasWrapped = false; bool hasWrapped = false;
...@@ -371,6 +453,7 @@ bool SCH_SHEET_PATH::operator=( const SCH_SHEET_PATH& d1 ) ...@@ -371,6 +453,7 @@ bool SCH_SHEET_PATH::operator=( const SCH_SHEET_PATH& d1 )
m_numSheets = d1.m_numSheets; m_numSheets = d1.m_numSheets;
unsigned i; unsigned i;
for( i = 0; i < m_numSheets; i++ ) for( i = 0; i < m_numSheets; i++ )
{ {
m_sheets[i] = d1.m_sheets[i]; m_sheets[i] = d1.m_sheets[i];
...@@ -437,8 +520,10 @@ SCH_SHEET_LIST::SCH_SHEET_LIST( SCH_SHEET* aSheet ) ...@@ -437,8 +520,10 @@ SCH_SHEET_LIST::SCH_SHEET_LIST( SCH_SHEET* aSheet )
m_index = 0; m_index = 0;
m_count = 0; m_count = 0;
m_List = NULL; m_List = NULL;
if( aSheet == NULL ) if( aSheet == NULL )
aSheet = g_RootSheet; aSheet = g_RootSheet;
BuildSheetList( aSheet ); BuildSheetList( aSheet );
} }
...@@ -450,8 +535,10 @@ SCH_SHEET_LIST::SCH_SHEET_LIST( SCH_SHEET* aSheet ) ...@@ -450,8 +535,10 @@ SCH_SHEET_LIST::SCH_SHEET_LIST( SCH_SHEET* aSheet )
SCH_SHEET_PATH* SCH_SHEET_LIST::GetFirst() SCH_SHEET_PATH* SCH_SHEET_LIST::GetFirst()
{ {
m_index = 0; m_index = 0;
if( GetCount() > 0 ) if( GetCount() > 0 )
return &( m_List[0] ); return &( m_List[0] );
return NULL; return NULL;
} }
...@@ -465,6 +552,7 @@ SCH_SHEET_PATH* SCH_SHEET_LIST::GetNext() ...@@ -465,6 +552,7 @@ SCH_SHEET_PATH* SCH_SHEET_LIST::GetNext()
{ {
if( m_index < GetCount() ) if( m_index < GetCount() )
m_index++; m_index++;
return GetSheet( m_index ); return GetSheet( m_index );
} }
...@@ -501,6 +589,7 @@ SCH_SHEET_PATH* SCH_SHEET_LIST::GetSheet( int aIndex ) ...@@ -501,6 +589,7 @@ SCH_SHEET_PATH* SCH_SHEET_LIST::GetSheet( int aIndex )
{ {
if( aIndex < GetCount() ) if( aIndex < GetCount() )
return &( m_List[aIndex] ); return &( m_List[aIndex] );
return NULL; return NULL;
} }
...@@ -546,6 +635,23 @@ void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet ) ...@@ -546,6 +635,23 @@ void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet )
} }
void SCH_SHEET_LIST::AnnotatePowerSymbols()
{
int ref = 1;
for( SCH_SHEET_PATH* path = GetFirst(); path != NULL; path = GetNext() )
path->AnnotatePowerSymbols( &ref );
}
void SCH_SHEET_LIST::GetComponents( SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols )
{
for( SCH_SHEET_PATH* path = GetFirst(); path != NULL; path = GetNext() )
path->GetComponents( aReferences, aIncludePowerSymbols );
}
SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFoundIn, SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFoundIn,
SCH_ITEM* aLastItem, bool aWrap ) SCH_ITEM* aLastItem, bool aWrap )
{ {
...@@ -566,6 +672,7 @@ SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFo ...@@ -566,6 +672,7 @@ SCH_ITEM* SCH_SHEET_LIST::FindNextItem( KICAD_T aType, SCH_SHEET_PATH** aSheetFo
{ {
if( aSheetFoundIn ) if( aSheetFoundIn )
*aSheetFoundIn = sheet; *aSheetFoundIn = sheet;
return drawItem; return drawItem;
} }
else if( !firstItemFound && drawItem == aLastItem ) else if( !firstItemFound && drawItem == aLastItem )
...@@ -610,6 +717,7 @@ SCH_ITEM* SCH_SHEET_LIST::FindPreviousItem( KICAD_T aType, SCH_SHEET_PATH** aShe ...@@ -610,6 +717,7 @@ SCH_ITEM* SCH_SHEET_LIST::FindPreviousItem( KICAD_T aType, SCH_SHEET_PATH** aShe
{ {
if( aSheetFoundIn ) if( aSheetFoundIn )
*aSheetFoundIn = sheet; *aSheetFoundIn = sheet;
return drawItem; return drawItem;
} }
else if( !firstItemFound && drawItem == aLastItem ) else if( !firstItemFound && drawItem == aLastItem )
...@@ -661,6 +769,7 @@ SCH_ITEM* SCH_SHEET_LIST::MatchNextItem( wxFindReplaceData& aSearchData, ...@@ -661,6 +769,7 @@ SCH_ITEM* SCH_SHEET_LIST::MatchNextItem( wxFindReplaceData& aSearchData,
{ {
if( aSheetFoundIn ) if( aSheetFoundIn )
*aSheetFoundIn = sheet; *aSheetFoundIn = sheet;
return drawItem; return drawItem;
} }
} }
......
...@@ -55,6 +55,7 @@ class SCH_SCREEN; ...@@ -55,6 +55,7 @@ class SCH_SCREEN;
class SCH_MARKER; class SCH_MARKER;
class SCH_SHEET; class SCH_SHEET;
class SCH_ITEM; class SCH_ITEM;
class SCH_REFERENCE_LIST;
/** /**
...@@ -185,6 +186,25 @@ public: ...@@ -185,6 +186,25 @@ public:
*/ */
void UpdateAllScreenReferences(); void UpdateAllScreenReferences();
/**
* Function AnnotatePowerSymbols
* annotates the power symbols only starting at \a aReference in the sheet path.
* @param aReference A pointer to the number for the reference designator of the
* first power symbol to be annotated. If the pointer is NULL
* the annotation starts at 1. The number is incremented for
* each power symbol annotated.
*/
void AnnotatePowerSymbols( int* aReference );
/**
* Function GetComponents
* adds a SCH_REFERENCE() object to \a aReferences for each component in the sheet.
* @param aReferences List of references to populate.
* @param aIncludePowerSymbols Set to false to only get normal components.
*/
void GetComponents( SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols = true );
/** /**
* Find the next schematic item in this sheet ojbect. * Find the next schematic item in this sheet ojbect.
* *
...@@ -230,7 +250,7 @@ public: ...@@ -230,7 +250,7 @@ public:
/** /**
* Class SCH_SHEET_LIST * Class SCH_SHEET_LIST
* handles the list of Sheets in a hiearchy. * handles the list of Sheets in a hierarchy.
* Sheets are not unique, there can be many sheets with the same * Sheets are not unique, there can be many sheets with the same
* filename and the same SCH_SCREEN reference. * filename and the same SCH_SCREEN reference.
* The schematic (SCH_SCREEN) is shared between these sheets, * The schematic (SCH_SCREEN) is shared between these sheets,
...@@ -316,6 +336,22 @@ public: ...@@ -316,6 +336,22 @@ public:
*/ */
SCH_SHEET_PATH* GetSheet( int aIndex ); SCH_SHEET_PATH* GetSheet( int aIndex );
/**
* Function AnnotatePowerSymbols
* clear and annotates the entire hierarchy of the sheet path list.
*/
void AnnotatePowerSymbols();
/**
* Function GetComponents
* adds a SCH_REFERENCE() object to \a aReferences for each component in the list
* of sheets.
* @param aReferences List of references to populate.
* @param aIncludePowerSymbols Set to false to only get normal components.
*/
void GetComponents( SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols = true );
/** /**
* Function FindNextItem * Function FindNextItem
* searches the entire schematic for the next schematic object. * searches the entire schematic for the next schematic object.
...@@ -370,7 +406,7 @@ private: ...@@ -370,7 +406,7 @@ private:
* @param aSheet is the starting sheet from which the list is built, * @param aSheet is the starting sheet from which the list is built,
* or NULL indicating that g_RootSheet should be used. * or NULL indicating that g_RootSheet should be used.
*/ */
void BuildSheetList( SCH_SHEET* sheet ); void BuildSheetList( SCH_SHEET* aSheet );
}; };
#endif // CLASS_DRAWSHEET_PATH_H #endif // CLASS_DRAWSHEET_PATH_H
...@@ -287,8 +287,10 @@ void SCH_EDIT_FRAME::SetSheetNumberAndCount() ...@@ -287,8 +287,10 @@ void SCH_EDIT_FRAME::SetSheetNumberAndCount()
for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() ) for( sheet = SheetList.GetFirst(); sheet != NULL; sheet = SheetList.GetNext() )
{ {
wxString sheetpath = sheet->Path(); wxString sheetpath = sheet->Path();
if( sheetpath == current_sheetpath ) // Current sheet path found if( sheetpath == current_sheetpath ) // Current sheet path found
break; break;
SheetNumber++; /* Not found, increment sheet SheetNumber++; /* Not found, increment sheet
* number before this current * number before this current
* path */ * path */
...@@ -323,11 +325,13 @@ void SCH_EDIT_FRAME::CreateScreens() ...@@ -323,11 +325,13 @@ void SCH_EDIT_FRAME::CreateScreens()
{ {
g_RootSheet = new SCH_SHEET(); g_RootSheet = new SCH_SHEET();
} }
if( g_RootSheet->m_AssociatedScreen == NULL ) if( g_RootSheet->m_AssociatedScreen == NULL )
{ {
g_RootSheet->m_AssociatedScreen = new SCH_SCREEN(); g_RootSheet->m_AssociatedScreen = new SCH_SCREEN();
g_RootSheet->m_AssociatedScreen->m_RefCount++; g_RootSheet->m_AssociatedScreen->m_RefCount++;
} }
g_RootSheet->m_AssociatedScreen->m_FileName = m_DefaultSchematicFileName; g_RootSheet->m_AssociatedScreen->m_FileName = m_DefaultSchematicFileName;
g_RootSheet->m_AssociatedScreen->m_Date = GenDate(); g_RootSheet->m_AssociatedScreen->m_Date = GenDate();
m_CurrentSheet->Clear(); m_CurrentSheet->Clear();
...@@ -335,6 +339,7 @@ void SCH_EDIT_FRAME::CreateScreens() ...@@ -335,6 +339,7 @@ void SCH_EDIT_FRAME::CreateScreens()
if( GetBaseScreen() == NULL ) if( GetBaseScreen() == NULL )
SetBaseScreen( new SCH_SCREEN() ); SetBaseScreen( new SCH_SCREEN() );
GetBaseScreen()->SetZoom( 4 * GetBaseScreen()->m_ZoomScalar ); GetBaseScreen()->SetZoom( 4 * GetBaseScreen()->m_ZoomScalar );
GetBaseScreen()->m_UndoRedoCountMax = 10; GetBaseScreen()->m_UndoRedoCountMax = 10;
} }
......
...@@ -757,6 +757,10 @@ public: ...@@ -757,6 +757,10 @@ public:
* @return a wwString withe the style name( Normal, Italic, Bold, Bold+Italic) * @return a wwString withe the style name( Normal, Italic, Bold, Bold+Italic)
*/ */
wxString GetTextStyleName(); wxString GetTextStyleName();
void SetText( const wxString& aText ) { m_Text = aText; }
wxString GetText() const { return m_Text; }
}; };
#endif /* BASE_STRUCT_H */ #endif /* BASE_STRUCT_H */
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
class LIB_PIN; class LIB_PIN;
class SCH_COMPONENT; class SCH_COMPONENT;
class SCH_SHEET_PATH;
/* Max number of sheets in a hierarchy project: */ /* Max number of sheets in a hierarchy project: */
#define NB_MAX_SHEET 500 #define NB_MAX_SHEET 500
...@@ -118,6 +118,21 @@ public: ...@@ -118,6 +118,21 @@ public:
LIB_PIN* GetPin( const wxPoint& aPosition, SCH_COMPONENT** aComponent = NULL ); LIB_PIN* GetPin( const wxPoint& aPosition, SCH_COMPONENT** aComponent = NULL );
/**
* Function ClearAnnotation
* clears the annotation for the components in \a aSheetPath on the screen.
* @param aSheetPath The sheet path of the component annotation to clear. If NULL then
* the entire heirarchy is cleared.
*/
void ClearAnnotation( SCH_SHEET_PATH* aSheetPath );
/**
* Function GetHierarchicalItems
* adds all schematica sheet and component object in the screen to \a aItems.
* @param aItems Hierarchical item list.
*/
void GetHierarchicalItems( std::vector <SCH_ITEM*> aItems );
virtual void AddItem( SCH_ITEM* aItem ) { BASE_SCREEN::AddItem( (EDA_ITEM*) aItem ); } virtual void AddItem( SCH_ITEM* aItem ) { BASE_SCREEN::AddItem( (EDA_ITEM*) aItem ); }
virtual void InsertItem( EDA_ITEMS::iterator aIter, SCH_ITEM* aItem ) virtual void InsertItem( EDA_ITEMS::iterator aIter, SCH_ITEM* aItem )
{ {
...@@ -145,6 +160,35 @@ public: ...@@ -145,6 +160,35 @@ public:
SCH_SCREEN* GetNext(); SCH_SCREEN* GetNext();
SCH_SCREEN* GetScreen( unsigned int aIndex ); SCH_SCREEN* GetScreen( unsigned int aIndex );
/**
* Function ClearAnnotation
* clears the annotation for all components in the hierarchy.
*/
void ClearAnnotation();
/**
* Function SchematicCleanUp
* merges and breaks wire segments in the entire schematic hierarchy.
*/
void SchematicCleanUp();
/**
* Function ReplaceDuplicateTimeStamps
* test all sheet and component objects in the schematic for duplicate time stamps
* an replaces them as neccessary. Time stamps must be unique in order for complex
* hierarcies know which components go to which sheets.
* @return The number of duplicate time stamps replaced.
*/
int ReplaceDuplicateTimeStamps();
/**
* Function SetDate
* sets the date string for every screen to \a aDate.
* @see GetDate()
* @param aDate The date string to set for each screen.
*/
void SetDate( const wxString& aDate );
private: private:
void AddScreenToList( SCH_SCREEN* aScreen ); void AddScreenToList( SCH_SCREEN* aScreen );
void BuildScreenList( EDA_ITEM* aItem ); void BuildScreenList( EDA_ITEM* aItem );
......
...@@ -22,15 +22,15 @@ public: ...@@ -22,15 +22,15 @@ public:
/** /**
* Function ListSet * Function ListSet
* Add a list of items. * Add a list of items.
* @param list = a string containing items. Items are separated by '\n' * @param aList = a string containing items. Items are separated by '\n'
*/ */
void ListSet(const wxString &list); void ListSet(const wxString &aList);
/** /**
* Function ListSet * Function ListSet
* Add a list of items. * Add a list of items.
* @param list = a wxArrayString containing items. * @param aList = a wxArrayString containing items.
*/ */
void ListSet(const wxArrayString &list); void ListSet(const wxArrayString &aList);
void ListClear(); void ListClear();
/** /**
......
...@@ -274,10 +274,37 @@ public: ...@@ -274,10 +274,37 @@ public:
* @param aCurrentSheetOnly : if false: remove all annotations, else * @param aCurrentSheetOnly : if false: remove all annotations, else
* remove annotation relative to the current * remove annotation relative to the current
* sheet only * sheet only
* @param aRedraw : true to refresh display
*/ */
void DeleteAnnotation( bool aCurrentSheetOnly, bool aRedraw ); void DeleteAnnotation( bool aCurrentSheetOnly );
/**
* Function AnnotateComponents:
*
* Compute the annotation of the components for the whole project, or the
* current sheet only. All the components or the new ones only will be
* annotated.
* @param annotateSchematic : true = entire schematic annotation,
* false = current sheet only
* @param sortOption : 0 = annotate by sorting X position,
* 1 = annotate by sorting X position,
* and use sheet number to calculate annotation
* 2 = annotate by sorting Y position,
* 3 = annotate by sorting Y position,
* and use sheet number to calculate annotation
* 4 = annotate by sorting value
* @param resetAnnotation : true = remove previous annotation
* false = annotate new components only
* @param repairsTimestamps : true = test for duplicate times stamps and
* replace duplicated
* Note: this option could change previous annotation, because time
* stamps are used to handle annotation mainly in complex
* hierarchies.
* When the sheet number is used in annotation,
* for each sheet annotation starts from sheet number * 100
* ( the first sheet uses 100 to 199, the second 200 to 299 ... )
*/
void AnnotateComponents(bool annotateSchematic, int sortOption,
bool resetAnnotation, bool repairsTimestamps );
// Functions used for hierarchy handling // Functions used for hierarchy handling
void InstallPreviousSheet(); void InstallPreviousSheet();
void InstallNextScreen( SCH_SHEET* Sheet ); void InstallNextScreen( SCH_SHEET* Sheet );
...@@ -471,13 +498,6 @@ private: ...@@ -471,13 +498,6 @@ private:
public: public:
bool EditSheet( SCH_SHEET* Sheet, wxDC* DC ); bool EditSheet( SCH_SHEET* Sheet, wxDC* DC );
/**
* Function UpdateSheetNumberAndDate
* Set a sheet number, the sheet count for sheets in the whole schematic
* and update the date in all screens
*/
void UpdateSheetNumberAndDate();
private: private:
void StartMoveSheet( SCH_SHEET* sheet, wxDC* DC ); void StartMoveSheet( SCH_SHEET* sheet, wxDC* DC );
SCH_SHEET_PIN* Create_PinSheet( SCH_SHEET* Sheet, wxDC* DC ); SCH_SHEET_PIN* Create_PinSheet( SCH_SHEET* Sheet, wxDC* DC );
......
...@@ -45,7 +45,7 @@ CPolyLine::~CPolyLine() ...@@ -45,7 +45,7 @@ CPolyLine::~CPolyLine()
* if more than one outside contour are found, extra CPolyLines will be created * if more than one outside contour are found, extra CPolyLines will be created
* because copper areas have only one outside contour * because copper areas have only one outside contour
* Therefore, if this results in new CPolyLines, return them as std::vector pa * Therefore, if this results in new CPolyLines, return them as std::vector pa
* @param aExtraPolys: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param aExtraPolyList: pointer on a std::vector<CPolyLine*> to store extra CPolyLines
* @param bRetainArcs == TRUE, try to retain arcs in polys * @param bRetainArcs == TRUE, try to retain arcs in polys
* @return number of external contours, or -1 if error * @return number of external contours, or -1 if error
*/ */
......
...@@ -224,7 +224,7 @@ public: ...@@ -224,7 +224,7 @@ public:
* if more than one outside contour are found, extra CPolyLines will be created * if more than one outside contour are found, extra CPolyLines will be created
* because copper areas have only one outside contour * because copper areas have only one outside contour
* Therefore, if this results in new CPolyLines, return them as std::vector pa * Therefore, if this results in new CPolyLines, return them as std::vector pa
* @param aExtraPolys: pointer on a std::vector<CPolyLine*> to store extra CPolyLines * @param aExtraPolyList: pointer on a std::vector<CPolyLine*> to store extra CPolyLines
* @param bRetainArcs == false, try to retain arcs in polys * @param bRetainArcs == false, try to retain arcs in polys
* @return number of external contours, or -1 if error * @return number of external contours, or -1 if error
*/ */
......
/*! \file kbool/_dl_itr.cpp /*! \file _dl_itr.cpp
\brief Double Linked list with Iterators on list \brief Double Linked list with Iterators on list
\author Probably Klaas Holwerda \author Probably Klaas Holwerda
......
/*! \file kbool/include/kbool/_dl_itr.h /*! \file _dl_itr.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file kbool/_lnk_itr.cpp /*! \file _lnk_itr.cpp
\author Probably Klaas Holwerda \author Probably Klaas Holwerda
Copyright: 2001-2004 (C) Probably Klaas Holwerda Copyright: 2001-2004 (C) Probably Klaas Holwerda
......
/*! \file kbool/include/kbool/_lnk_itr.h /*! \file _lnk_itr.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/booleng.h /*! \file booleng.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/graph.h /*! \file graph.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/graphlst.h /*! \file graphlst.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/line.h /*! \file line.h
\brief Mainy used for calculating crossings \brief Mainy used for calculating crossings
\author Klaas Holwerda \author Klaas Holwerda
......
/*! \file include/link.h /*! \file link.h
\brief Part of a graph, connection between nodes (Header) \brief Part of a graph, connection between nodes (Header)
\author Klaas Holwerda or Julian Smart \author Klaas Holwerda or Julian Smart
......
/*! \file include/lpoint.h /*! \file lpoint.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/node.h /*! \file node.h
\brief Holds a GDSII node structure (Header) \brief Holds a GDSII node structure (Header)
\author Klaas Holwerda \author Klaas Holwerda
......
/*! \file include/record.h /*! \file record.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file include/scanbeam.h /*! \file scanbeam.h
\author Klaas Holwerda \author Klaas Holwerda
Copyright: 2001-2004 (C) Klaas Holwerda Copyright: 2001-2004 (C) Klaas Holwerda
......
/*! \file kbool/include/kbool/statusb.h /*! \file statusb.h
\author Probably Klaas Holwerda \author Probably Klaas Holwerda
Copyright: 2001-2004 (C) Probably Klaas Holwerda Copyright: 2001-2004 (C) Probably Klaas Holwerda
......
/*! \file kbool/include/kbool/valuesvc.h /*! \file valuesvc.h
\author Probably Klaas Holwerda \author Probably Klaas Holwerda
Copyright: 2001-2004 (C) Probably Klaas Holwerda Copyright: 2001-2004 (C) Probably Klaas Holwerda
......
...@@ -17,7 +17,7 @@ using namespace std; ...@@ -17,7 +17,7 @@ using namespace std;
* Function TestLineHit * Function TestLineHit
* test for hit on line segment i.e. a point within a given distance from segment * test for hit on line segment i.e. a point within a given distance from segment
* @param x, y = cursor coords * @param x, y = cursor coords
* @param xi,yi and xf,yf = the end-points of the line segment * @param xi,yi,xf,yf = the end-points of the line segment
* @param dist = maximum distance for hit * @param dist = maximum distance for hit
* return true if dist < distance between the point and the segment * return true if dist < distance between the point and the segment
*/ */
...@@ -484,7 +484,7 @@ int FindLineSegmentIntersection( double a, double b, int xi, int yi, int xf, int ...@@ -484,7 +484,7 @@ int FindLineSegmentIntersection( double a, double b, int xi, int yi, int xf, int
return 1; return 1;
} }
/** /*
* Function TestForIntersectionOfStraightLineSegments * Function TestForIntersectionOfStraightLineSegments
* Test for intersection of line segments * Test for intersection of line segments
* If lines are parallel, returns false * If lines are parallel, returns false
......
...@@ -64,7 +64,7 @@ int GetClearanceBetweenSegments( int x1i, int y1i, int x1f, int y1f, int style1, ...@@ -64,7 +64,7 @@ int GetClearanceBetweenSegments( int x1i, int y1i, int x1f, int y1f, int style1,
* Function GetPointToLineSegmentDistance * Function GetPointToLineSegmentDistance
* Get distance between line segment and point * Get distance between line segment and point
* @param x,y = point * @param x,y = point
* @param xi,yi and xf,yf = the end-points of the line segment * @param xi,yi, xf,yf = the end-points of the line segment
* @return the distance * @return the distance
*/ */
double GetPointToLineSegmentDistance( int x, int y, int xi, int yi, int xf, int yf ); double GetPointToLineSegmentDistance( int x, int y, int xi, int yi, int xf, int yf );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment