Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
43f75cda
Commit
43f75cda
authored
Nov 23, 2008
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
code cleaning
parent
b3b9c121
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
86 additions
and
65 deletions
+86
-65
class_zone.h
pcbnew/class_zone.h
+16
-1
zones_convert_brd_items_to_polygons.cpp
pcbnew/zones_convert_brd_items_to_polygons.cpp
+66
-63
PolyLine.cpp
polygon/PolyLine.cpp
+4
-1
No files found.
pcbnew/class_zone.h
View file @
43f75cda
...
...
@@ -194,7 +194,22 @@ public:
*/
void
AddClearanceAreasPolygonsToPolysList
(
BOARD
*
aPcb
);
/**
/** Function CopyPolygonsFromBoolengineToFilledPolysList
* Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
* @param aBoolengine = the kbool engine used in Do_Operation
* @return the corner count
*/
int
CopyPolygonsFromBoolengineToFilledPolysList
(
Bool_Engine
*
aBoolengine
);
/** Function CopyPolygonsFromFilledPolysListToBoolengine
* Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
* @param aBoolengine = kbool engine
* @param aGroup = group in kbool engine (GROUP_A or GROUP_B only)
* @return the corner count
*/
int
CopyPolygonsFromFilledPolysListToBoolengine
(
Bool_Engine
*
aBoolengine
,
GroupType
aGroup
=
GROUP_A
);
/**
* Function HitTestForCorner
* tests if the given wxPoint near a corner, or near the segment define by 2 corners.
* @return -1 if none, corner index in .corner <vector>
...
...
pcbnew/zones_convert_brd_items_to_polygons.cpp
View file @
43f75cda
...
...
@@ -65,7 +65,7 @@ double s_Correction; /* mult coeff used to enlarge rounded and oval pads (an
* this means the created polygons have no holes (hole are linked to outer outline by double overlapped segments
* and are therefore compatible with draw functions (DC draw polygons and Gerber or PS outputs)
* 2 - Add the main outline (zone outline) in group A
* 3 - Creates a correction using BOOL_CORRECTION operation to
inflate
the resulting area
* 3 - Creates a correction using BOOL_CORRECTION operation to
shrink
the resulting area
* with m_ZoneMinThickness/2 value.
* The result is areas with a margin of m_ZoneMinThickness/2
* When drawing outline with segments having a thickness of m_ZoneMinThickness, the outlines wilm
...
...
@@ -109,41 +109,13 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
* m_ZoneMinThickness
* so m_ZoneMinThickness is the min thickness of the filled zones areas
*/
unsigned
corners_count
=
m_FilledPolysList
.
size
();
unsigned
ic
=
0
;
if
(
booleng
->
StartPolygonAdd
(
GROUP_A
)
)
{
for
(
;
ic
<
corners_count
;
ic
++
)
{
CPolyPt
*
corner
=
&
m_FilledPolysList
[
ic
];
booleng
->
AddPoint
(
corner
->
x
,
corner
->
y
);
if
(
corner
->
end_contour
)
break
;
}
booleng
->
EndPolygonAdd
();
}
CopyPolygonsFromFilledPolysListToBoolengine
(
booleng
,
GROUP_A
);
booleng
->
SetCorrectionFactor
(
(
double
)
-
m_ZoneMinThickness
/
2
);
booleng
->
Do_Operation
(
BOOL_CORRECTION
);
/* No copy the new outline in m_FilledPolysList */
m_FilledPolysList
.
clear
();
while
(
booleng
->
StartPolygonGet
()
)
{
CPolyPt
corner
(
0
,
0
,
false
);
while
(
booleng
->
PolygonHasMorePoints
()
)
{
corner
.
x
=
(
int
)
booleng
->
GetPolygonXPoint
();
corner
.
y
=
(
int
)
booleng
->
GetPolygonYPoint
();
corner
.
end_contour
=
false
;
m_FilledPolysList
.
push_back
(
corner
);
}
corner
.
end_contour
=
true
;
m_FilledPolysList
.
pop_back
();
m_FilledPolysList
.
push_back
(
corner
);
booleng
->
EndPolygonGet
();
}
CopyPolygonsFromBoolengineToFilledPolysList
(
booleng
);
delete
booleng
;
/* Second, Add the main (corrected) polygon (i.e. the filled area using only one outline)
...
...
@@ -156,21 +128,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
/* Add the main corrected polygon (i.e. the filled area using only one outline)
* in GroupA in Bool_Engine
*/
corners_count
=
m_FilledPolysList
.
size
();
ic
=
0
;
if
(
booleng
->
StartPolygonAdd
(
GROUP_A
)
)
{
for
(
;
ic
<
corners_count
;
ic
++
)
{
CPolyPt
*
corner
=
&
m_FilledPolysList
[
ic
];
booleng
->
AddPoint
(
corner
->
x
,
corner
->
y
);
if
(
corner
->
end_contour
)
break
;
}
booleng
->
EndPolygonAdd
();
}
CopyPolygonsFromFilledPolysListToBoolengine
(
booleng
,
GROUP_A
);
// Calculates the clearance value that meet DRC requirements
int
clearance
=
max
(
m_ZoneClearance
,
g_DesignSettings
.
m_TrackClearence
);
...
...
@@ -274,23 +232,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
/* put these areas in m_FilledPolysList */
m_FilledPolysList
.
clear
();
while
(
booleng
->
StartPolygonGet
()
)
{
CPolyPt
corner
(
0
,
0
,
false
);
while
(
booleng
->
PolygonHasMorePoints
()
)
{
corner
.
x
=
(
int
)
booleng
->
GetPolygonXPoint
();
corner
.
y
=
(
int
)
booleng
->
GetPolygonYPoint
();
corner
.
end_contour
=
false
;
m_FilledPolysList
.
push_back
(
corner
);
}
corner
.
end_contour
=
true
;
m_FilledPolysList
.
pop_back
();
m_FilledPolysList
.
push_back
(
corner
);
booleng
->
EndPolygonGet
();
}
CopyPolygonsFromBoolengineToFilledPolysList
(
booleng
);
delete
booleng
;
// Remove insulated islands:
...
...
@@ -946,3 +888,64 @@ void AddTextBoxWithClearancePolygon( Bool_Engine* aBooleng,
aBooleng
->
EndPolygonAdd
();
}
}
/***********************************************************************************************************/
int
ZONE_CONTAINER
::
CopyPolygonsFromFilledPolysListToBoolengine
(
Bool_Engine
*
aBoolengine
,
GroupType
aGroup
)
/************************************************************************************************************/
/** Function CopyPolygonsFromFilledPolysListToBoolengine
* Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
* @param aBoolengine = kbool engine
* @param aGroup = group in kbool engine (GROUP_A or GROUP_B only)
* @return the corner count
*/
{
unsigned
corners_count
=
m_FilledPolysList
.
size
();
int
count
=
0
;
unsigned
ic
=
0
;
if
(
aBoolengine
->
StartPolygonAdd
(
aGroup
)
)
{
for
(
;
ic
<
corners_count
;
ic
++
)
{
CPolyPt
*
corner
=
&
m_FilledPolysList
[
ic
];
aBoolengine
->
AddPoint
(
corner
->
x
,
corner
->
y
);
count
++
;
if
(
corner
->
end_contour
)
break
;
}
aBoolengine
->
EndPolygonAdd
();
}
return
count
;
}
/*****************************************************************************************/
int
ZONE_CONTAINER
::
CopyPolygonsFromBoolengineToFilledPolysList
(
Bool_Engine
*
aBoolengine
)
/*****************************************************************************************/
/** Function CopyPolygonsFromBoolengineToFilledPolysList
* Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
* @param aBoolengine = kbool engine
* @return the corner count
*/
{
int
count
=
0
;
while
(
aBoolengine
->
StartPolygonGet
()
)
{
CPolyPt
corner
(
0
,
0
,
false
);
while
(
aBoolengine
->
PolygonHasMorePoints
()
)
{
corner
.
x
=
(
int
)
aBoolengine
->
GetPolygonXPoint
();
corner
.
y
=
(
int
)
aBoolengine
->
GetPolygonYPoint
();
corner
.
end_contour
=
false
;
m_FilledPolysList
.
push_back
(
corner
);
count
++
;
}
corner
.
end_contour
=
true
;
m_FilledPolysList
.
pop_back
();
m_FilledPolysList
.
push_back
(
corner
);
aBoolengine
->
EndPolygonGet
();
}
return
count
;
}
polygon/PolyLine.cpp
View file @
43f75cda
...
...
@@ -545,7 +545,10 @@ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles )
// should always be > DGRID a MARGE >= 10*DGRID is ok
// this is also used to remove small segments and to decide when
// two segments are in line. ( initial value = 0.001 )
double
CORRECTIONFACTOR
=
500.0
;
// correct the polygons by this number
double
CORRECTIONFACTOR
=
0.0
;
// correct the polygons by this number: used in BOOL_CORRECTION operation
// this operation shrinks a polygon if CORRECTIONFACTOR < 0
// or stretch it if CORRECTIONFACTOR > 0
// the size change is CORRECTIONFACTOR (holes are correctly handled)
double
CORRECTIONABER
=
1.0
;
// the accuracy for the rounded shapes used in correction
double
ROUNDFACTOR
=
1.5
;
// when will we round the correction shape to a circle
double
SMOOTHABER
=
10.0
;
// accuracy when smoothing a polygon
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment