Radial dimensions.
ADDED radial type dimensions. Fixes https://gitlab.com/kicad/code/kicad/issues/2056
|
@ -623,6 +623,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
addShapeWithClearance( static_cast<PCB_DIMENSION_BASE*>( item ),
|
||||
|
@ -929,6 +930,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
addShapeWithClearance( static_cast<PCB_DIMENSION_BASE*>( item ), layerContainer,
|
||||
|
|
|
@ -152,6 +152,7 @@ set( BMAPS_MID
|
|||
add_orthogonal_dimension
|
||||
add_pcb_target
|
||||
add_power
|
||||
add_radial_dimension
|
||||
add_rectangle
|
||||
add_symbol_to_schematic
|
||||
add_tracks
|
||||
|
|
Before Width: | Height: | Size: 293 B After Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 307 B After Width: | Height: | Size: 217 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 314 B |
|
@ -12,7 +12,7 @@
|
|||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
sodipodi:docname="add_center_dimension.svg"
|
||||
inkscape:version="1.0.1 (c497b03c, 2020-09-10)">
|
||||
inkscape:version="1.0.2 (e86c8708, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
|
@ -22,8 +22,8 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1609"
|
||||
inkscape:window-height="1035"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="800"
|
||||
id="namedview30"
|
||||
showgrid="true"
|
||||
inkscape:zoom="33.649424"
|
||||
|
@ -91,8 +91,4 @@
|
|||
class="cls-2"
|
||||
d="m 14.5,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27898" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 23,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27900" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Слой_1"
|
||||
data-name="Слой 1"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
sodipodi:docname="add_radial_dimension.svg"
|
||||
inkscape:version="1.0.2 (e86c8708, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="800"
|
||||
id="namedview30"
|
||||
showgrid="true"
|
||||
inkscape:zoom="33.649424"
|
||||
inkscape:cx="13.5214"
|
||||
inkscape:cy="3.5379729"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="Слой_1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid_kicad"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5"
|
||||
color="#9999ff"
|
||||
opacity="0.13"
|
||||
empspacing="2" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata43">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>add_arc</dc:title>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs27890">
|
||||
<style
|
||||
id="style27888">.cls-1{fill:#DED3DD;}.cls-2{fill:#42B8EB;}</style>
|
||||
</defs>
|
||||
<title
|
||||
id="title27892">add_center_dimension</title>
|
||||
<path
|
||||
style="fill:none;stroke:#DED3DD;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 11.5,1.5 v 20"
|
||||
id="path844" />
|
||||
<path
|
||||
style="fill:none;stroke:#DED3DD;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 1.5,11.5 H 21"
|
||||
id="path846" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 14.5,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27898" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 21.666667,4 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27900" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -12,7 +12,7 @@
|
|||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
sodipodi:docname="add_center_dimension.svg"
|
||||
inkscape:version="1.0.1 (c497b03c, 2020-09-10)">
|
||||
inkscape:version="1.0.2 (e86c8708, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
|
@ -22,8 +22,8 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1609"
|
||||
inkscape:window-height="1035"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="800"
|
||||
id="namedview30"
|
||||
showgrid="true"
|
||||
inkscape:zoom="33.649424"
|
||||
|
@ -91,8 +91,4 @@
|
|||
class="cls-2"
|
||||
d="m 14.5,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27898" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 23,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27900" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Слой_1"
|
||||
data-name="Слой 1"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
sodipodi:docname="add_radial_dimension.svg"
|
||||
inkscape:version="1.0.2 (e86c8708, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="800"
|
||||
id="namedview30"
|
||||
showgrid="true"
|
||||
inkscape:zoom="33.649424"
|
||||
inkscape:cx="14.383227"
|
||||
inkscape:cy="8.6197835"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="Слой_1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid_kicad"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5"
|
||||
color="#9999ff"
|
||||
opacity="0.13"
|
||||
empspacing="2" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata43">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>add_arc</dc:title>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs27890">
|
||||
<style
|
||||
id="style27888">.cls-1{fill:#545454;}.cls-2{fill:#1a81c4;}</style>
|
||||
</defs>
|
||||
<title
|
||||
id="title27892">add_center_dimension</title>
|
||||
<path
|
||||
style="fill:none;stroke:#545454;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 11.5,1.5 v 20"
|
||||
id="path844" />
|
||||
<path
|
||||
style="fill:none;stroke:#545454;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 1.5,11.5 H 21"
|
||||
id="path846" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 14.5,11.5 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27898" />
|
||||
<path
|
||||
class="cls-2"
|
||||
d="m 21.666667,4 a 3,3 0 1 1 -3,-3 3,3 0 0 1 3,3 z"
|
||||
id="path27900" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -325,6 +325,7 @@ static struct EDA_ITEM_DESC
|
|||
.Map( PCB_DIM_ALIGNED_T, _HKI( "Dimension" ) )
|
||||
.Map( PCB_DIM_ORTHOGONAL_T, _HKI( "Dimension" ) )
|
||||
.Map( PCB_DIM_CENTER_T, _HKI( "Dimension" ) )
|
||||
.Map( PCB_DIM_RADIAL_T, _HKI( "Dimension" ) )
|
||||
.Map( PCB_DIM_LEADER_T, _HKI( "Leader" ) )
|
||||
.Map( PCB_TARGET_T, _HKI( "Target" ) )
|
||||
.Map( PCB_ZONE_T, _HKI( "Zone" ) )
|
||||
|
|
|
@ -157,6 +157,7 @@ last_trace_width
|
|||
layer
|
||||
layers
|
||||
leader
|
||||
leader_length
|
||||
left
|
||||
linear
|
||||
links
|
||||
|
@ -225,6 +226,7 @@ prefix
|
|||
primitives
|
||||
priority
|
||||
pts
|
||||
radial
|
||||
radius
|
||||
rev
|
||||
rect
|
||||
|
|
|
@ -169,6 +169,7 @@ const std::vector<BITMAP_INFO> g_BitmapInfo = {
|
|||
{ BITMAPS::add_orthogonal_dimension, wxT( "add_orthogonal_dimension_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_pcb_target, wxT( "add_pcb_target_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_power, wxT( "add_power_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_radial_dimension, wxT( "add_radial_dimension_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_rectangle, wxT( "add_rectangle_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_symbol_to_schematic, wxT( "add_symbol_to_schematic_24.png" ), 24, wxT( "light" ) },
|
||||
{ BITMAPS::add_tracks, wxT( "add_tracks_24.png" ), 24, wxT( "light" ) },
|
||||
|
@ -535,6 +536,7 @@ const std::vector<BITMAP_INFO> g_BitmapInfo = {
|
|||
{ BITMAPS::add_orthogonal_dimension, wxT( "add_orthogonal_dimension_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_pcb_target, wxT( "add_pcb_target_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_power, wxT( "add_power_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_radial_dimension, wxT( "add_radial_dimension_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_rectangle, wxT( "add_rectangle_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_symbol_to_schematic, wxT( "add_symbol_to_schematic_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
{ BITMAPS::add_tracks, wxT( "add_tracks_dark_24.png" ), 24, wxT( "dark" ) },
|
||||
|
|
|
@ -68,6 +68,7 @@ enum class BITMAPS : unsigned int
|
|||
add_orthogonal_dimension,
|
||||
add_pcb_target,
|
||||
add_power,
|
||||
add_radial_dimension,
|
||||
add_rectangle,
|
||||
add_symbol_to_schematic,
|
||||
add_tracks,
|
||||
|
|
|
@ -100,6 +100,7 @@ enum KICAD_T
|
|||
PCB_DIM_ALIGNED_T, ///< class PCB_DIM_ALIGNED, a linear dimension (graphic item)
|
||||
PCB_DIM_LEADER_T, ///< class PCB_DIM_LEADER, a leader dimension (graphic item)
|
||||
PCB_DIM_CENTER_T, ///< class PCB_DIM_CENTER, a center point marking (graphic item)
|
||||
PCB_DIM_RADIAL_T, ///< class PCB_DIM_RADIAL, a radius or diameter dimension
|
||||
PCB_DIM_ORTHOGONAL_T, ///< class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
|
||||
PCB_TARGET_T, ///< class PCB_TARGET, a target (graphic item)
|
||||
PCB_ZONE_T, ///< class ZONE, a copper pour area
|
||||
|
@ -257,6 +258,7 @@ constexpr KICAD_T BaseType( const KICAD_T aType )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
return PCB_DIMENSION_T;
|
||||
|
|
|
@ -118,6 +118,7 @@ void ARRAY_CREATOR::Invoke()
|
|||
case PCB_VIA_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_TARGET_T:
|
||||
|
|
|
@ -275,6 +275,7 @@ void BOARD::Move( const wxPoint& aMoveVector ) // overload
|
|||
PCB_DIM_ALIGNED_T,
|
||||
PCB_DIM_ORTHOGONAL_T,
|
||||
PCB_DIM_CENTER_T,
|
||||
PCB_DIM_RADIAL_T,
|
||||
PCB_DIM_LEADER_T,
|
||||
PCB_TARGET_T,
|
||||
PCB_VIA_T,
|
||||
|
@ -662,6 +663,7 @@ void BOARD::Add( BOARD_ITEM* aBoardItem, ADD_MODE aMode )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_SHAPE_T:
|
||||
|
@ -768,6 +770,7 @@ void BOARD::Remove( BOARD_ITEM* aBoardItem, REMOVE_MODE aRemoveMode )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_SHAPE_T:
|
||||
|
@ -1241,6 +1244,7 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR inspector, void* testData, const KICAD_T s
|
|||
case PCB_TEXT_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_TARGET_T:
|
||||
|
@ -1255,6 +1259,7 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR inspector, void* testData, const KICAD_T s
|
|||
case PCB_TEXT_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_TARGET_T:
|
||||
|
|
|
@ -248,6 +248,7 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry, bool a
|
|||
case PCB_VIA_T: // a via (like track segment on a copper layer)
|
||||
case PCB_DIM_ALIGNED_T: // a dimension (graphic item)
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T: // a leader dimension
|
||||
case PCB_TARGET_T: // a target (graphic item)
|
||||
|
|
|
@ -52,6 +52,7 @@ const KICAD_T GENERAL_COLLECTOR::AllBoardItems[] = {
|
|||
PCB_SHAPE_T, // in m_drawings
|
||||
PCB_DIM_ALIGNED_T, // in m_drawings
|
||||
PCB_DIM_CENTER_T, // in m_drawings
|
||||
PCB_DIM_RADIAL_T, // in m_drawings
|
||||
PCB_DIM_ORTHOGONAL_T, // in m_drawings
|
||||
PCB_DIM_LEADER_T, // in m_drawings
|
||||
PCB_TARGET_T, // in m_drawings
|
||||
|
@ -74,6 +75,7 @@ const KICAD_T GENERAL_COLLECTOR::BoardLevelItems[] = {
|
|||
PCB_DIM_ALIGNED_T,
|
||||
PCB_DIM_ORTHOGONAL_T,
|
||||
PCB_DIM_CENTER_T,
|
||||
PCB_DIM_RADIAL_T,
|
||||
PCB_DIM_LEADER_T,
|
||||
PCB_TARGET_T,
|
||||
PCB_VIA_T,
|
||||
|
@ -141,6 +143,7 @@ const KICAD_T GENERAL_COLLECTOR::Dimensions[] = {
|
|||
PCB_DIM_LEADER_T,
|
||||
PCB_DIM_ORTHOGONAL_T,
|
||||
PCB_DIM_CENTER_T,
|
||||
PCB_DIM_RADIAL_T,
|
||||
EOT
|
||||
};
|
||||
|
||||
|
@ -286,6 +289,7 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* testItem, void* testData )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
dimension = static_cast<PCB_DIMENSION_BASE*>( item );
|
||||
|
|
|
@ -196,8 +196,8 @@ bool DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow()
|
|||
|
||||
if( m_cbLayerActual->SetLayerSelection( m_dimension->GetLayer() ) < 0 )
|
||||
{
|
||||
wxMessageBox( _( "This item was on a non-existing or forbidden layer.\n"
|
||||
"It has been moved to the first allowed layer." ) );
|
||||
wxMessageBox( _( "This item was on a non-existing layer.\n"
|
||||
"It has been moved to the first defined layer." ) );
|
||||
m_cbLayerActual->SetSelection( 0 );
|
||||
}
|
||||
|
||||
|
@ -223,6 +223,8 @@ bool DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow()
|
|||
m_cbKeepAligned->SetValue( m_dimension->GetKeepTextAligned() );
|
||||
m_cbTextOrientation->Enable( !m_dimension->GetKeepTextAligned() );
|
||||
|
||||
m_orientValidator.TransferToWindow();
|
||||
|
||||
m_cbItalic->SetValue( text.IsItalic() );
|
||||
m_cbMirrored->SetValue( text.IsMirrored() );
|
||||
EDA_TEXT_HJUSTIFY_T hJustify = text.GetHorizJustify();
|
||||
|
@ -243,12 +245,10 @@ bool DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow()
|
|||
m_txtValueActual->SetValue( m_dimension->GetValueText() );
|
||||
}
|
||||
|
||||
m_orientValidator.TransferToWindow();
|
||||
|
||||
if( m_dimension->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
PCB_DIM_LEADER* leader = static_cast<PCB_DIM_LEADER*>( m_dimension );
|
||||
m_cbTextFrame->SetSelection( static_cast<int>( leader->GetTextFrame() ) );
|
||||
m_cbTextFrame->SetSelection( static_cast<int>( leader->GetTextBorder() ) );
|
||||
}
|
||||
|
||||
return DIALOG_DIMENSION_PROPERTIES_BASE::TransferDataToWindow();
|
||||
|
@ -303,22 +303,22 @@ void DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog( PCB_DIMENSION_BASE*
|
|||
|
||||
switch( m_cbUnits->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::INCHES );
|
||||
break;
|
||||
case 0:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::INCHES );
|
||||
break;
|
||||
|
||||
case 1:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::MILS );
|
||||
break;
|
||||
case 1:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::MILS );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::MILLIMETRES );
|
||||
break;
|
||||
case 2:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::MILLIMETRES );
|
||||
break;
|
||||
|
||||
case 3:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::AUTOMATIC );
|
||||
aTarget->SetUnits( m_frame->GetUserUnits() );
|
||||
break;
|
||||
case 3:
|
||||
aTarget->SetUnitsMode( DIM_UNITS_MODE::AUTOMATIC );
|
||||
aTarget->SetUnits( m_frame->GetUserUnits() );
|
||||
break;
|
||||
}
|
||||
|
||||
aTarget->SetUnitsFormat( static_cast<DIM_UNITS_FORMAT>( m_cbUnitsFormat->GetSelection() ) );
|
||||
|
@ -354,7 +354,7 @@ void DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog( PCB_DIMENSION_BASE*
|
|||
if( aTarget->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
PCB_DIM_LEADER* leader = static_cast<PCB_DIM_LEADER*>( aTarget );
|
||||
leader->SetTextFrame( static_cast<DIM_TEXT_FRAME>( m_cbTextFrame->GetSelection() ) );
|
||||
leader->SetTextBorder( static_cast<DIM_TEXT_BORDER>( m_cbTextFrame->GetSelection()));
|
||||
}
|
||||
|
||||
aTarget->Update();
|
||||
|
|
|
@ -195,7 +195,7 @@ bool DRC_TEST_PROVIDER_COPPER_CLEARANCE::Run()
|
|||
static const std::vector<KICAD_T> itemTypes = {
|
||||
PCB_TRACE_T, PCB_ARC_T, PCB_VIA_T, PCB_PAD_T, PCB_SHAPE_T, PCB_FP_SHAPE_T,
|
||||
PCB_TEXT_T, PCB_FP_TEXT_T, PCB_DIMENSION_T, PCB_DIM_ALIGNED_T, PCB_DIM_LEADER_T,
|
||||
PCB_DIM_CENTER_T, PCB_DIM_ORTHOGONAL_T
|
||||
PCB_DIM_CENTER_T, PCB_DIM_RADIAL_T, PCB_DIM_ORTHOGONAL_T
|
||||
};
|
||||
|
||||
forEachGeometryItem( itemTypes, LSET::AllCuMask(), countItems );
|
||||
|
|
|
@ -106,6 +106,7 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run()
|
|||
case PCB_TEXT_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
|
|
|
@ -137,6 +137,7 @@ void PCB_EDIT_FRAME::OnEditItemRequest( BOARD_ITEM* aItem )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
ShowDimensionPropertiesDialog( static_cast<PCB_DIMENSION_BASE*>( aItem ) );
|
||||
|
|
|
@ -211,6 +211,7 @@ bool GENDRILL_WRITER_BASE::genDrillMapFile( const wxString& aFullFileName, PLOT_
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
case PCB_TARGET_T:
|
||||
|
|
|
@ -327,6 +327,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
|
|||
placeMenu->Add( PCB_ACTIONS::drawAlignedDimension );
|
||||
placeMenu->Add( PCB_ACTIONS::drawOrthogonalDimension );
|
||||
placeMenu->Add( PCB_ACTIONS::drawCenterDimension );
|
||||
placeMenu->Add( PCB_ACTIONS::drawRadialDimension );
|
||||
placeMenu->Add( PCB_ACTIONS::drawLeader );
|
||||
|
||||
placeMenu->AppendSeparator();
|
||||
|
|
|
@ -952,11 +952,13 @@ void PCB_DIM_ORTHOGONAL::Rotate( const wxPoint& aRotCentre, double aAngle )
|
|||
|
||||
PCB_DIM_LEADER::PCB_DIM_LEADER( BOARD_ITEM* aParent ) :
|
||||
PCB_DIMENSION_BASE( aParent, PCB_DIM_LEADER_T ),
|
||||
m_textFrame( DIM_TEXT_FRAME::NONE )
|
||||
m_textBorder( DIM_TEXT_BORDER::NONE )
|
||||
{
|
||||
m_unitsFormat = DIM_UNITS_FORMAT::NO_SUFFIX;
|
||||
m_overrideTextEnabled = true;
|
||||
m_keepTextAligned = false;
|
||||
|
||||
SetText( _( "Leader" ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -970,7 +972,12 @@ void PCB_DIM_LEADER::SwapData( BOARD_ITEM* aImage )
|
|||
{
|
||||
assert( aImage->Type() == PCB_DIM_LEADER_T );
|
||||
|
||||
m_shapes.clear();
|
||||
static_cast<PCB_DIM_LEADER*>( aImage )->m_shapes.clear();
|
||||
|
||||
std::swap( *static_cast<PCB_DIM_LEADER*>( this ), *static_cast<PCB_DIM_LEADER*>( aImage ) );
|
||||
|
||||
Update();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1008,7 +1015,7 @@ void PCB_DIM_LEADER::updateGeometry()
|
|||
OPT_VECTOR2I arrowSegEnd = boost::make_optional( false, VECTOR2I() );;
|
||||
OPT_VECTOR2I textSegEnd = boost::make_optional( false, VECTOR2I() );
|
||||
|
||||
if( m_textFrame == DIM_TEXT_FRAME::CIRCLE )
|
||||
if( m_textBorder == DIM_TEXT_BORDER::CIRCLE )
|
||||
{
|
||||
double penWidth = m_text.GetEffectiveTextPenWidth() / 2.0;
|
||||
double radius = ( textBox.GetWidth() / 2.0 ) - penWidth;
|
||||
|
@ -1035,16 +1042,16 @@ void PCB_DIM_LEADER::updateGeometry()
|
|||
double arrowRotNeg = firstLine.Angle() - DEG2RAD( s_arrowAngle );
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( start,
|
||||
start + wxPoint( arrowEnd.Rotate( arrowRotPos ) ) ) );
|
||||
start + (wxPoint) arrowEnd.Rotate( arrowRotPos ) ) );
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( start,
|
||||
start + wxPoint( arrowEnd.Rotate( arrowRotNeg ) ) ) );
|
||||
start + (wxPoint) arrowEnd.Rotate( arrowRotNeg ) ) );
|
||||
|
||||
|
||||
if( !GetText().IsEmpty() )
|
||||
{
|
||||
switch( m_textFrame )
|
||||
switch( m_textBorder )
|
||||
{
|
||||
case DIM_TEXT_FRAME::RECTANGLE:
|
||||
case DIM_TEXT_BORDER::RECTANGLE:
|
||||
{
|
||||
for( SHAPE_POLY_SET::SEGMENT_ITERATOR seg = polyBox.IterateSegments(); seg; seg++ )
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( *seg ) );
|
||||
|
@ -1052,7 +1059,7 @@ void PCB_DIM_LEADER::updateGeometry()
|
|||
break;
|
||||
}
|
||||
|
||||
case DIM_TEXT_FRAME::CIRCLE:
|
||||
case DIM_TEXT_BORDER::CIRCLE:
|
||||
{
|
||||
double penWidth = m_text.GetEffectiveTextPenWidth() / 2.0;
|
||||
double radius = ( textBox.GetWidth() / 2.0 ) - penWidth;
|
||||
|
@ -1091,6 +1098,138 @@ void PCB_DIM_LEADER::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PA
|
|||
}
|
||||
|
||||
|
||||
PCB_DIM_RADIAL::PCB_DIM_RADIAL( BOARD_ITEM* aParent ) :
|
||||
PCB_DIMENSION_BASE( aParent, PCB_DIM_RADIAL_T )
|
||||
{
|
||||
m_unitsFormat = DIM_UNITS_FORMAT::NO_SUFFIX;
|
||||
m_overrideTextEnabled = false;
|
||||
m_keepTextAligned = true;
|
||||
m_isDiameter = false;
|
||||
m_prefix = "R ";
|
||||
m_leaderLength = m_arrowLength * 3;
|
||||
}
|
||||
|
||||
|
||||
EDA_ITEM* PCB_DIM_RADIAL::Clone() const
|
||||
{
|
||||
return new PCB_DIM_RADIAL( *this );
|
||||
}
|
||||
|
||||
|
||||
void PCB_DIM_RADIAL::SwapData( BOARD_ITEM* aImage )
|
||||
{
|
||||
assert( aImage->Type() == PCB_DIM_RADIAL_T );
|
||||
|
||||
m_shapes.clear();
|
||||
static_cast<PCB_DIM_RADIAL*>( aImage )->m_shapes.clear();
|
||||
|
||||
std::swap( *static_cast<PCB_DIM_RADIAL*>( this ), *static_cast<PCB_DIM_RADIAL*>( aImage ) );
|
||||
|
||||
Update();
|
||||
}
|
||||
|
||||
|
||||
BITMAPS PCB_DIM_RADIAL::GetMenuImage() const
|
||||
{
|
||||
return BITMAPS::add_radial_dimension;
|
||||
}
|
||||
|
||||
|
||||
wxPoint PCB_DIM_RADIAL::GetKnee() const
|
||||
{
|
||||
VECTOR2I radial( m_end - m_start );
|
||||
|
||||
return m_end + (wxPoint) radial.Resize( m_leaderLength );
|
||||
}
|
||||
|
||||
|
||||
void PCB_DIM_RADIAL::updateText()
|
||||
{
|
||||
if( m_keepTextAligned )
|
||||
{
|
||||
VECTOR2I textLine( Text().GetPosition() - GetKnee() );
|
||||
double textAngle = 3600 - RAD2DECIDEG( textLine.Angle() );
|
||||
|
||||
NORMALIZE_ANGLE_POS( textAngle );
|
||||
|
||||
if( textAngle > 900 && textAngle <= 2700 )
|
||||
textAngle -= 1800;
|
||||
|
||||
// Round to nearest degree
|
||||
m_text.SetTextAngle( KiROUND( textAngle / 10 ) * 10 );
|
||||
}
|
||||
|
||||
PCB_DIMENSION_BASE::updateText();
|
||||
}
|
||||
|
||||
|
||||
void PCB_DIM_RADIAL::updateGeometry()
|
||||
{
|
||||
m_shapes.clear();
|
||||
|
||||
VECTOR2I center( m_start );
|
||||
VECTOR2I centerArm( 0, m_arrowLength );
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( center - centerArm, center + centerArm ) );
|
||||
|
||||
centerArm = centerArm.Rotate( DEG2RAD( 90 ) );
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( center - centerArm, center + centerArm ) );
|
||||
|
||||
VECTOR2I radius( m_end - m_start );
|
||||
|
||||
if( m_isDiameter )
|
||||
m_measuredValue = KiROUND( radius.EuclideanNorm() * 2 );
|
||||
else
|
||||
m_measuredValue = KiROUND( radius.EuclideanNorm() );
|
||||
|
||||
updateText();
|
||||
|
||||
// Now that we have the text updated, we can determine how to draw the second line
|
||||
// First we need to create an appropriate bounding polygon to collide with
|
||||
EDA_RECT textBox = m_text.GetTextBox().Inflate( m_text.GetTextWidth() / 2,
|
||||
m_text.GetEffectiveTextPenWidth() );
|
||||
|
||||
SHAPE_POLY_SET polyBox;
|
||||
polyBox.NewOutline();
|
||||
polyBox.Append( textBox.GetOrigin() );
|
||||
polyBox.Append( textBox.GetOrigin().x, textBox.GetEnd().y );
|
||||
polyBox.Append( textBox.GetEnd() );
|
||||
polyBox.Append( textBox.GetEnd().x, textBox.GetOrigin().y );
|
||||
polyBox.Rotate( -m_text.GetTextAngleRadians(), textBox.GetCenter() );
|
||||
|
||||
VECTOR2I radial( m_end - m_start );
|
||||
radial = radial.Resize( m_leaderLength );
|
||||
|
||||
SEG arrowSeg( m_end, m_end + (wxPoint) radial );
|
||||
SEG textSeg( arrowSeg.B, m_text.GetPosition() );
|
||||
|
||||
OPT_VECTOR2I arrowSegEnd = segPolyIntersection( polyBox, arrowSeg );
|
||||
OPT_VECTOR2I textSegEnd = segPolyIntersection( polyBox, textSeg );
|
||||
|
||||
if( arrowSegEnd )
|
||||
arrowSeg.B = arrowSegEnd.get();
|
||||
|
||||
if( textSegEnd )
|
||||
textSeg.B = textSegEnd.get();
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( arrowSeg ) );
|
||||
|
||||
// Add arrows
|
||||
VECTOR2I arrowEnd( m_arrowLength, 0 );
|
||||
|
||||
double arrowRotPos = radial.Angle() + DEG2RAD( s_arrowAngle );
|
||||
double arrowRotNeg = radial.Angle() - DEG2RAD( s_arrowAngle );
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( m_end,
|
||||
m_end + (wxPoint) arrowEnd.Rotate( arrowRotPos ) ) );
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( m_end,
|
||||
m_end + (wxPoint) arrowEnd.Rotate( arrowRotNeg ) ) );
|
||||
|
||||
m_shapes.emplace_back( new SHAPE_SEGMENT( textSeg ) );
|
||||
}
|
||||
|
||||
|
||||
PCB_DIM_CENTER::PCB_DIM_CENTER( BOARD_ITEM* aParent ) :
|
||||
PCB_DIMENSION_BASE( aParent, PCB_DIM_CENTER_T )
|
||||
{
|
||||
|
|
|
@ -65,7 +65,7 @@ enum class DIM_UNITS_MODE
|
|||
/**
|
||||
* Frame to show around dimension text
|
||||
*/
|
||||
enum class DIM_TEXT_FRAME
|
||||
enum class DIM_TEXT_BORDER
|
||||
{
|
||||
NONE,
|
||||
RECTANGLE,
|
||||
|
@ -472,16 +472,72 @@ private:
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* A radial dimension indicates either the radius or diameter of an arc or circle.
|
||||
*
|
||||
* A guide to the geometry of a circle dimension:
|
||||
*
|
||||
* |
|
||||
* --a--
|
||||
* |
|
||||
*
|
||||
*
|
||||
* b_
|
||||
* |\
|
||||
* \
|
||||
* c---d TEXT
|
||||
*
|
||||
* Point a (the center of the arc or circle) is m_start, point b (a point on the arc or circle)
|
||||
* is m_end, point c is m_leaderLength away from b on the a-b vector, and point d is the end of
|
||||
* the "text line". The c-d line is drawn from c to the text center, and clipped on the text
|
||||
* bounding box.
|
||||
*/
|
||||
class PCB_DIM_RADIAL : public PCB_DIMENSION_BASE
|
||||
{
|
||||
public:
|
||||
PCB_DIM_RADIAL( BOARD_ITEM* aParent );
|
||||
|
||||
static inline bool ClassOf( const EDA_ITEM* aItem )
|
||||
{
|
||||
return aItem && PCB_DIM_RADIAL_T == aItem->Type();
|
||||
}
|
||||
|
||||
EDA_ITEM* Clone() const override;
|
||||
|
||||
virtual void SwapData( BOARD_ITEM* aImage ) override;
|
||||
|
||||
void SetLeaderLength( int aLength ) { m_leaderLength = aLength; }
|
||||
int GetLeaderLength() const { return m_leaderLength; }
|
||||
|
||||
// Returns the point (c).
|
||||
wxPoint GetKnee() const;
|
||||
|
||||
BITMAPS GetMenuImage() const override;
|
||||
|
||||
wxString GetClass() const override
|
||||
{
|
||||
return wxT( "PCB_DIM_RADIAL" );
|
||||
}
|
||||
|
||||
protected:
|
||||
void updateText() override;
|
||||
void updateGeometry() override;
|
||||
|
||||
private:
|
||||
bool m_isDiameter;
|
||||
int m_leaderLength;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* A leader is a dimension-like object pointing to a specific point.
|
||||
*
|
||||
* A guide to the geometry of a leader:
|
||||
*
|
||||
* a
|
||||
* _
|
||||
* |\
|
||||
* \
|
||||
* b---c TEXT
|
||||
* a_
|
||||
* |\
|
||||
* \
|
||||
* b---c TEXT
|
||||
*
|
||||
* Point (a) is m_start, point (b) is m_end, point (c) is the end of the "text line"
|
||||
* The b-c line is drawn from b to the text center, and clipped on the text bounding box.
|
||||
|
@ -507,8 +563,8 @@ public:
|
|||
return wxT( "PCB_DIM_LEADER" );
|
||||
}
|
||||
|
||||
void SetTextFrame( DIM_TEXT_FRAME aFrame ) { m_textFrame = aFrame; }
|
||||
DIM_TEXT_FRAME GetTextFrame() const { return m_textFrame; }
|
||||
void SetTextBorder( DIM_TEXT_BORDER aFrame ) { m_textBorder = aFrame; }
|
||||
DIM_TEXT_BORDER GetTextBorder() const { return m_textBorder; }
|
||||
|
||||
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
||||
|
||||
|
@ -516,7 +572,7 @@ protected:
|
|||
void updateGeometry() override;
|
||||
|
||||
private:
|
||||
DIM_TEXT_FRAME m_textFrame;
|
||||
DIM_TEXT_BORDER m_textBorder;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -773,6 +773,7 @@ void PCB_EDIT_FRAME::setupUIConditions()
|
|||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawAlignedDimension );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawOrthogonalDimension );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawCenterDimension );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawRadialDimension );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawLeader );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::placeTarget );
|
||||
CURRENT_EDIT_TOOL( PCB_ACTIONS::drillOrigin );
|
||||
|
|
|
@ -528,6 +528,7 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
draw( static_cast<const PCB_DIMENSION_BASE*>( item ), aLayer );
|
||||
|
|
|
@ -356,6 +356,7 @@ void BRDITEMS_PLOTTER::PlotBoardGraphicItems()
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
PlotDimension( (PCB_DIMENSION_BASE*) item );
|
||||
|
|
|
@ -2847,6 +2847,10 @@ PCB_DIMENSION_BASE* PCB_PARSER::parseDIMENSION()
|
|||
dimension = std::make_unique<PCB_DIM_CENTER>( nullptr );
|
||||
break;
|
||||
|
||||
case T_radial:
|
||||
dimension = std::make_unique<PCB_DIM_RADIAL>( nullptr );
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( wxT( "Cannot parse unknown dimension type %s" ) +
|
||||
GetTokenString( CurTok() ) );
|
||||
|
@ -2922,6 +2926,16 @@ PCB_DIMENSION_BASE* PCB_PARSER::parseDIMENSION()
|
|||
break;
|
||||
}
|
||||
|
||||
case T_leader_length:
|
||||
{
|
||||
wxCHECK_MSG( dimension->Type() == PCB_DIM_RADIAL_T, nullptr,
|
||||
wxT( "Invalid leader_length token" ) );
|
||||
PCB_DIM_RADIAL* radial = static_cast<PCB_DIM_RADIAL*>( dimension.get() );
|
||||
radial->SetLeaderLength( parseBoardUnits( "dimension leader length value" ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
}
|
||||
|
||||
case T_orientation:
|
||||
{
|
||||
wxCHECK_MSG( dimension->Type() == PCB_DIM_ORTHOGONAL_T, nullptr,
|
||||
|
@ -3055,7 +3069,7 @@ PCB_DIMENSION_BASE* PCB_PARSER::parseDIMENSION()
|
|||
|
||||
int textFrame = parseInt( "dimension text frame mode" );
|
||||
textFrame = std::max( 0, std::min( 3, textFrame ) );
|
||||
leader->SetTextFrame( static_cast<DIM_TEXT_FRAME>( textFrame ) );
|
||||
leader->SetTextBorder( static_cast<DIM_TEXT_BORDER>( textFrame ));
|
||||
NeedRIGHT();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -409,6 +409,7 @@ void PCB_PLUGIN::Format( const BOARD_ITEM* aItem, int aNestLevel ) const
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
format( static_cast<const PCB_DIMENSION_BASE*>( aItem ), aNestLevel );
|
||||
|
@ -709,6 +710,7 @@ void PCB_PLUGIN::format( const PCB_DIMENSION_BASE* aDimension, int aNestLevel )
|
|||
const PCB_DIM_ALIGNED* aligned = dynamic_cast<const PCB_DIM_ALIGNED*>( aDimension );
|
||||
const PCB_DIM_ORTHOGONAL* ortho = dynamic_cast<const PCB_DIM_ORTHOGONAL*>( aDimension );
|
||||
const PCB_DIM_CENTER* center = dynamic_cast<const PCB_DIM_CENTER*>( aDimension );
|
||||
const PCB_DIM_RADIAL* radial = dynamic_cast<const PCB_DIM_RADIAL*>( aDimension );
|
||||
const PCB_DIM_LEADER* leader = dynamic_cast<const PCB_DIM_LEADER*>( aDimension );
|
||||
|
||||
m_out->Print( aNestLevel, "(dimension" );
|
||||
|
@ -722,6 +724,8 @@ void PCB_PLUGIN::format( const PCB_DIMENSION_BASE* aDimension, int aNestLevel )
|
|||
m_out->Print( 0, " (type leader)" );
|
||||
else if( aDimension->Type() == PCB_DIM_CENTER_T )
|
||||
m_out->Print( 0, " (type center)" );
|
||||
else if (aDimension->Type() == PCB_DIM_RADIAL_T )
|
||||
m_out->Print( 0, " (type radial)" );
|
||||
else if( aDimension->Type() == PCB_DIM_ORTHOGONAL_T )
|
||||
m_out->Print( 0, " (type orthogonal)" );
|
||||
else
|
||||
|
@ -745,6 +749,12 @@ void PCB_PLUGIN::format( const PCB_DIMENSION_BASE* aDimension, int aNestLevel )
|
|||
FormatInternalUnits( aligned->GetHeight() ).c_str() );
|
||||
}
|
||||
|
||||
if( radial )
|
||||
{
|
||||
m_out->Print( aNestLevel+1, "(leader_length %s)\n",
|
||||
FormatInternalUnits( radial->GetLeaderLength() ).c_str() );
|
||||
}
|
||||
|
||||
if( ortho )
|
||||
{
|
||||
m_out->Print( aNestLevel+1, "(orientation %d)\n",
|
||||
|
@ -789,7 +799,7 @@ void PCB_PLUGIN::format( const PCB_DIMENSION_BASE* aDimension, int aNestLevel )
|
|||
}
|
||||
|
||||
if( leader )
|
||||
m_out->Print( 0, " (text_frame %d)", static_cast<int>( leader->GetTextFrame() ) );
|
||||
m_out->Print( 0, " (text_frame %d)", static_cast<int>( leader->GetTextBorder() ) );
|
||||
|
||||
m_out->Print( 0, " (extension_offset %s)",
|
||||
FormatInternalUnits( aDimension->GetExtensionOffset() ).c_str() );
|
||||
|
|
|
@ -102,7 +102,8 @@ class PCB_TEXT;
|
|||
//#define SEXPR_BOARD_FILE_VERSION 20210722 // Reading/writing group locked flags
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20210824 // Opacity in 3D colors
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20210925 // Locked flag for fp_text
|
||||
#define SEXPR_BOARD_FILE_VERSION 20211014 // Arc formatting
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20211014 // Arc formatting
|
||||
#define SEXPR_BOARD_FILE_VERSION 20211226 // Add radial dimension
|
||||
|
||||
#define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag
|
||||
#define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting
|
||||
|
|
|
@ -409,6 +409,7 @@ void PCB_EDIT_FRAME::ReCreateVToolbar()
|
|||
{ &PCB_ACTIONS::drawAlignedDimension,
|
||||
&PCB_ACTIONS::drawOrthogonalDimension,
|
||||
&PCB_ACTIONS::drawCenterDimension,
|
||||
&PCB_ACTIONS::drawRadialDimension,
|
||||
&PCB_ACTIONS::drawLeader } );
|
||||
}
|
||||
|
||||
|
|
|
@ -894,6 +894,11 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
dimension = new PCB_DIM_CENTER( m_board );
|
||||
}
|
||||
else if( originalEvent.IsAction( &PCB_ACTIONS::drawRadialDimension ) )
|
||||
{
|
||||
dimension = new PCB_DIM_RADIAL( m_board );
|
||||
setMeasurementAttributes( dimension );
|
||||
}
|
||||
else if( originalEvent.IsAction( &PCB_ACTIONS::drawLeader ) )
|
||||
{
|
||||
dimension = new PCB_DIM_LEADER( m_board );
|
||||
|
@ -930,22 +935,18 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
}
|
||||
|
||||
case SET_END:
|
||||
{
|
||||
dimension->SetEnd( (wxPoint) cursorPos );
|
||||
dimension->Update();
|
||||
|
||||
if( Is45Limited() || dimension->Type() == PCB_DIM_CENTER_T )
|
||||
constrainDimension( dimension );
|
||||
|
||||
// Dimensions that have origin and end in the same spot are not valid
|
||||
if( dimension->GetStart() == dimension->GetEnd() )
|
||||
--step;
|
||||
else if( dimension->Type() == PCB_DIM_LEADER_T )
|
||||
dimension->SetText( wxT( "?" ) );
|
||||
|
||||
if( dimension->Type() == PCB_DIM_CENTER_T )
|
||||
{
|
||||
// No separate height/text step
|
||||
--step;
|
||||
break;
|
||||
}
|
||||
|
||||
if( dimension->Type() == PCB_DIM_CENTER_T
|
||||
|| dimension->Type() == PCB_DIM_RADIAL_T
|
||||
|| dimension->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
// No separate height step
|
||||
++step;
|
||||
KI_FALLTHROUGH;
|
||||
}
|
||||
|
@ -953,34 +954,23 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case SET_HEIGHT:
|
||||
assert( dimension->GetStart() != dimension->GetEnd() );
|
||||
assert( dimension->GetLineThickness() > 0 );
|
||||
|
||||
preview.Remove( dimension );
|
||||
|
||||
commit.Add( dimension );
|
||||
commit.Push( _( "Draw a dimension" ) );
|
||||
|
||||
if( dimension->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
assert( dimension->GetStart() != dimension->GetEnd() );
|
||||
assert( dimension->GetLineThickness() > 0 );
|
||||
|
||||
preview.Remove( dimension );
|
||||
|
||||
commit.Add( dimension );
|
||||
commit.Push( _( "Draw a leader" ) );
|
||||
|
||||
// Run the edit immediately to set the leader text
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::properties, true, dimension );
|
||||
}
|
||||
else if( (wxPoint) cursorPos != dimension->GetPosition() )
|
||||
{
|
||||
assert( dimension->GetStart() != dimension->GetEnd() );
|
||||
assert( dimension->GetLineThickness() > 0 );
|
||||
|
||||
preview.Remove( dimension );
|
||||
|
||||
commit.Add( dimension );
|
||||
commit.Push( _( "Draw a dimension" ) );
|
||||
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::selectItem, true, dimension );
|
||||
}
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::selectItem, true, dimension );
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -999,6 +989,9 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
case SET_END:
|
||||
dimension->SetEnd( (wxPoint) cursorPos );
|
||||
|
||||
if( Is45Limited() || dimension->Type() == PCB_DIM_CENTER_T )
|
||||
constrainDimension( dimension );
|
||||
|
||||
if( dimension->Type() == PCB_DIM_ORTHOGONAL_T )
|
||||
{
|
||||
PCB_DIM_ORTHOGONAL* ortho = static_cast<PCB_DIM_ORTHOGONAL*>( dimension );
|
||||
|
@ -1012,16 +1005,31 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
ortho->SetOrientation( vert ? PCB_DIM_ORTHOGONAL::DIR::VERTICAL
|
||||
: PCB_DIM_ORTHOGONAL::DIR::HORIZONTAL );
|
||||
}
|
||||
else if( dimension->Type() == PCB_DIM_RADIAL_T )
|
||||
{
|
||||
PCB_DIM_RADIAL* radialDim = static_cast<PCB_DIM_RADIAL*>( dimension );
|
||||
wxPoint textOffset( radialDim->GetArrowLength() * 10, 0 );
|
||||
|
||||
dimension->Update();
|
||||
if( radialDim->GetEnd().x < radialDim->GetStart().x )
|
||||
textOffset = -textOffset;
|
||||
|
||||
if( Is45Limited() || dimension->Type() == PCB_DIM_CENTER_T )
|
||||
constrainDimension( dimension );
|
||||
radialDim->Text().SetPosition( radialDim->GetKnee() + textOffset );
|
||||
radialDim->Update();
|
||||
}
|
||||
else if( dimension->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
wxPoint textOffset( dimension->GetArrowLength() * 10, 0 );
|
||||
|
||||
if( dimension->GetEnd().x < dimension->GetStart().x )
|
||||
textOffset = -textOffset;
|
||||
|
||||
dimension->Text().SetPosition( dimension->GetEnd() + textOffset );
|
||||
dimension->Update();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SET_HEIGHT:
|
||||
{
|
||||
if( dimension->Type() == PCB_DIM_ALIGNED_T )
|
||||
{
|
||||
PCB_DIM_ALIGNED* aligned = static_cast<PCB_DIM_ALIGNED*>( dimension );
|
||||
|
@ -1038,36 +1046,27 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
PCB_DIM_ORTHOGONAL* ortho = static_cast<PCB_DIM_ORTHOGONAL*>( dimension );
|
||||
|
||||
BOX2I bounds( dimension->GetStart(),
|
||||
dimension->GetEnd() - dimension->GetStart() );
|
||||
VECTOR2I direction( cursorPos - bounds.Centre() );
|
||||
BOX2I bbox( dimension->GetStart(),
|
||||
dimension->GetEnd() - dimension->GetStart() );
|
||||
VECTOR2I direction( cursorPos - bbox.Centre() );
|
||||
bool vert;
|
||||
|
||||
// Only change the orientation when we move outside the bounds
|
||||
if( !bounds.Contains( cursorPos ) )
|
||||
// Only change the orientation when we move outside the bbox
|
||||
if( !bbox.Contains( cursorPos ) )
|
||||
{
|
||||
// If the dimension is horizontal or vertical, set correct orientation
|
||||
// otherwise, test if we're left/right of the bounding box or above/below it
|
||||
if( bounds.GetWidth() == 0 )
|
||||
{
|
||||
if( bbox.GetWidth() == 0 )
|
||||
vert = true;
|
||||
}
|
||||
else if( bounds.GetHeight() == 0 )
|
||||
{
|
||||
else if( bbox.GetHeight() == 0 )
|
||||
vert = false;
|
||||
}
|
||||
else if( cursorPos.x > bounds.GetLeft() && cursorPos.x < bounds.GetRight() )
|
||||
{
|
||||
else if( cursorPos.x > bbox.GetLeft() && cursorPos.x < bbox.GetRight() )
|
||||
vert = false;
|
||||
}
|
||||
else if( cursorPos.y > bounds.GetTop() && cursorPos.y < bounds.GetBottom() )
|
||||
{
|
||||
else if( cursorPos.y > bbox.GetTop() && cursorPos.y < bbox.GetBottom() )
|
||||
vert = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
vert = std::abs( direction.y ) < std::abs( direction.x );
|
||||
}
|
||||
|
||||
ortho->SetOrientation( vert ? PCB_DIM_ORTHOGONAL::DIR::VERTICAL
|
||||
: PCB_DIM_ORTHOGONAL::DIR::HORIZONTAL );
|
||||
}
|
||||
|
@ -1080,16 +1079,8 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||
ortho->SetHeight( vert ? heightVector.x : heightVector.y );
|
||||
ortho->Update();
|
||||
}
|
||||
else if( dimension->Type() == PCB_DIM_LEADER_T )
|
||||
{
|
||||
// Leader: SET_HEIGHT actually sets the text position directly
|
||||
VECTOR2I lineVector( cursorPos - dimension->GetEnd() );
|
||||
dimension->Text().SetPosition( wxPoint( VECTOR2I( dimension->GetEnd() ) +
|
||||
GetVectorSnapped45( lineVector ) ) );
|
||||
dimension->Update();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Show a preview of the item
|
||||
|
@ -2732,6 +2723,7 @@ void DRAWING_TOOL::setTransitions()
|
|||
Go( &DRAWING_TOOL::DrawDimension, PCB_ACTIONS::drawAlignedDimension.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawDimension, PCB_ACTIONS::drawOrthogonalDimension.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawDimension, PCB_ACTIONS::drawCenterDimension.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawDimension, PCB_ACTIONS::drawRadialDimension.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawDimension, PCB_ACTIONS::drawLeader.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawZone, PCB_ACTIONS::drawZone.MakeEvent() );
|
||||
Go( &DRAWING_TOOL::DrawZone, PCB_ACTIONS::drawRuleArea.MakeEvent() );
|
||||
|
|
|
@ -2124,6 +2124,7 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
|
|||
case PCB_TARGET_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
dupe_item = orig_item->Duplicate();
|
||||
|
|
|
@ -134,6 +134,11 @@ TOOL_ACTION PCB_ACTIONS::drawCenterDimension( "pcbnew.InteractiveDrawing.centerD
|
|||
_( "Add Center Dimension" ), _( "Add a center dimension" ),
|
||||
BITMAPS::add_center_dimension, AF_ACTIVATE );
|
||||
|
||||
TOOL_ACTION PCB_ACTIONS::drawRadialDimension( "pcbnew.InteractiveDrawing.radialDimension",
|
||||
AS_GLOBAL, 0, "",
|
||||
_( "Add Radial Dimension" ), _( "Add a radial dimension" ),
|
||||
BITMAPS::add_radial_dimension, AF_ACTIVATE );
|
||||
|
||||
TOOL_ACTION PCB_ACTIONS::drawOrthogonalDimension( "pcbnew.InteractiveDrawing.orthogonalDimension",
|
||||
AS_GLOBAL, 0, "",
|
||||
_( "Add Orthogonal Dimension" ), _( "Add an orthogonal dimension" ),
|
||||
|
|
|
@ -144,6 +144,7 @@ public:
|
|||
static TOOL_ACTION placeText;
|
||||
static TOOL_ACTION drawAlignedDimension;
|
||||
static TOOL_ACTION drawCenterDimension;
|
||||
static TOOL_ACTION drawRadialDimension;
|
||||
static TOOL_ACTION drawOrthogonalDimension;
|
||||
static TOOL_ACTION drawLeader;
|
||||
static TOOL_ACTION drawZone;
|
||||
|
|
|
@ -997,6 +997,7 @@ int PCB_CONTROL::placeBoardItems( std::vector<BOARD_ITEM*>& aItems, bool aIsNew,
|
|||
case PCB_DIMENSION_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
|
|
|
@ -679,6 +679,16 @@ void PCB_GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos
|
|||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_RADIAL_T:
|
||||
{
|
||||
const PCB_DIM_RADIAL* radialDim = static_cast<const PCB_DIM_RADIAL*>( aItem );
|
||||
addAnchor( radialDim->GetStart(), CORNER | SNAPPABLE, aItem );
|
||||
addAnchor( radialDim->GetEnd(), CORNER | SNAPPABLE, aItem );
|
||||
addAnchor( radialDim->GetKnee(), CORNER | SNAPPABLE, aItem );
|
||||
addAnchor( radialDim->Text().GetPosition(), CORNER | SNAPPABLE, aItem );
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
const PCB_DIM_LEADER* leader = static_cast<const PCB_DIM_LEADER*>( aItem );
|
||||
|
|
|
@ -95,6 +95,7 @@ enum DIMENSION_POINTS
|
|||
DIM_TEXT,
|
||||
DIM_CROSSBARSTART,
|
||||
DIM_CROSSBAREND,
|
||||
DIM_KNEE = DIM_CROSSBARSTART
|
||||
};
|
||||
|
||||
|
||||
|
@ -334,6 +335,25 @@ std::shared_ptr<EDIT_POINTS> PCB_POINT_EDITOR::makePoints( EDA_ITEM* aItem )
|
|||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_RADIAL_T:
|
||||
{
|
||||
const PCB_DIM_RADIAL* dimension = static_cast<const PCB_DIM_RADIAL*>( aItem );
|
||||
|
||||
points->AddPoint( dimension->GetStart() );
|
||||
points->AddPoint( dimension->GetEnd() );
|
||||
points->AddPoint( dimension->Text().GetPosition() );
|
||||
points->AddPoint( dimension->GetKnee() );
|
||||
|
||||
points->Point( DIM_KNEE ).SetConstraint( new EC_LINE( points->Point( DIM_START ),
|
||||
points->Point( DIM_END ) ) );
|
||||
|
||||
points->Point( DIM_TEXT ).SetConstraint( new EC_45DEGREE( points->Point( DIM_TEXT ),
|
||||
points->Point( DIM_KNEE ) ) );
|
||||
points->Point( DIM_TEXT ).SetGridConstraint( IGNORE_GRID );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
const PCB_DIM_LEADER* dimension = static_cast<const PCB_DIM_LEADER*>( aItem );
|
||||
|
@ -344,6 +364,7 @@ std::shared_ptr<EDIT_POINTS> PCB_POINT_EDITOR::makePoints( EDA_ITEM* aItem )
|
|||
|
||||
points->Point( DIM_TEXT ).SetConstraint( new EC_45DEGREE( points->Point( DIM_TEXT ),
|
||||
points->Point( DIM_END ) ) );
|
||||
points->Point( DIM_TEXT ).SetGridConstraint( IGNORE_GRID );
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -1461,6 +1482,54 @@ void PCB_POINT_EDITOR::updateItem() const
|
|||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_RADIAL_T:
|
||||
{
|
||||
PCB_DIM_RADIAL* dimension = static_cast<PCB_DIM_RADIAL*>( item );
|
||||
|
||||
if( isModified( m_editPoints->Point( DIM_START ) ) )
|
||||
{
|
||||
dimension->SetStart( (wxPoint) m_editedPoint->GetPosition() );
|
||||
dimension->Update();
|
||||
|
||||
m_editPoints->Point( DIM_KNEE ).SetConstraint( new EC_LINE( m_editPoints->Point( DIM_START ),
|
||||
m_editPoints->Point( DIM_END ) ) );
|
||||
}
|
||||
else if( isModified( m_editPoints->Point( DIM_END ) ) )
|
||||
{
|
||||
wxPoint oldKnee = dimension->GetKnee();
|
||||
|
||||
dimension->SetEnd( (wxPoint) m_editedPoint->GetPosition() );
|
||||
dimension->Update();
|
||||
|
||||
wxPoint kneeDelta = dimension->GetKnee() - oldKnee;
|
||||
dimension->Text().SetPosition( dimension->Text().GetPosition() + kneeDelta );
|
||||
dimension->Update();
|
||||
|
||||
m_editPoints->Point( DIM_KNEE ).SetConstraint( new EC_LINE( m_editPoints->Point( DIM_START ),
|
||||
m_editPoints->Point( DIM_END ) ) );
|
||||
}
|
||||
else if( isModified( m_editPoints->Point( DIM_KNEE ) ) )
|
||||
{
|
||||
wxPoint oldKnee = dimension->GetKnee();
|
||||
VECTOR2I arrowVec = m_editPoints->Point( DIM_KNEE ).GetPosition()
|
||||
- m_editPoints->Point( DIM_END ).GetPosition();
|
||||
|
||||
dimension->SetLeaderLength( arrowVec.EuclideanNorm() );
|
||||
dimension->Update();
|
||||
|
||||
wxPoint kneeDelta = dimension->GetKnee() - oldKnee;
|
||||
dimension->Text().SetPosition( dimension->Text().GetPosition() + kneeDelta );
|
||||
dimension->Update();
|
||||
}
|
||||
else if( isModified( m_editPoints->Point( DIM_TEXT ) ) )
|
||||
{
|
||||
dimension->Text().SetPosition( (wxPoint) m_editedPoint->GetPosition() );
|
||||
dimension->Update();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
PCB_DIM_LEADER* dimension = static_cast<PCB_DIM_LEADER*>( item );
|
||||
|
@ -1731,6 +1800,17 @@ void PCB_POINT_EDITOR::updatePoints()
|
|||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_RADIAL_T:
|
||||
{
|
||||
const PCB_DIM_RADIAL* dimension = static_cast<const PCB_DIM_RADIAL*>( item );
|
||||
|
||||
m_editPoints->Point( DIM_START ).SetPosition( dimension->GetStart() );
|
||||
m_editPoints->Point( DIM_END ).SetPosition( dimension->GetEnd() );
|
||||
m_editPoints->Point( DIM_TEXT ).SetPosition( dimension->Text().GetPosition() );
|
||||
m_editPoints->Point( DIM_KNEE ).SetPosition( dimension->GetKnee() );
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_LEADER_T:
|
||||
{
|
||||
const PCB_DIM_LEADER* dimension = static_cast<const PCB_DIM_LEADER*>( item );
|
||||
|
@ -1861,6 +1941,14 @@ EDIT_POINT PCB_POINT_EDITOR::get45DegConstrainer() const
|
|||
break;
|
||||
}
|
||||
|
||||
case PCB_DIM_RADIAL_T:
|
||||
{
|
||||
if( isModified( m_editPoints->Point( DIM_TEXT ) ) )
|
||||
return m_editPoints->Point( DIM_KNEE );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1593,6 +1593,7 @@ static bool itemIsIncludedByFilter( const BOARD_ITEM& aItem, const BOARD& aBoard
|
|||
case PCB_TARGET_T:
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
if( layer == Edge_Cuts )
|
||||
|
@ -1744,6 +1745,7 @@ bool PCB_SELECTION_TOOL::itemPassesFilter( BOARD_ITEM* aItem, bool aMultiSelect
|
|||
|
||||
case PCB_DIM_ALIGNED_T:
|
||||
case PCB_DIM_CENTER_T:
|
||||
case PCB_DIM_RADIAL_T:
|
||||
case PCB_DIM_ORTHOGONAL_T:
|
||||
case PCB_DIM_LEADER_T:
|
||||
if( !m_filter.dimensions )
|
||||
|
|