Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
strandstring
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Erik Strand
strandstring
Commits
882fb2a2
Commit
882fb2a2
authored
May 09, 2019
by
Erik Strand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Go more OO
parent
e227dbac
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
93 additions
and
36 deletions
+93
-36
node_board/main.cpp
node_board/main.cpp
+79
-30
node_board/png_writer.cpp
node_board/png_writer.cpp
+13
-6
node_board/png_writer.h
node_board/png_writer.h
+1
-0
No files found.
node_board/main.cpp
View file @
882fb2a2
#include "png_writer.h"
#include <iostream>
//--------------------------------------------------------------------------------------------------
struct
Rectangle
{
uint32_t
x_min
;
uint32_t
x_max
;
uint32_t
y_min
;
uint32_t
y_max
;
};
//--------------------------------------------------------------------------------------------------
class
Board
{
public:
Board
(
double
width
,
double
height
,
double
pix_per_mm
,
double
min_cut_thickness
)
:
width_
(
width
),
height_
(
height
),
pix_per_mm_
(
pix_per_mm
),
min_cut_thickness_
(
min_cut_thickness
),
width_px_
(
to_px
(
width_
)),
height_px_
(
to_px
(
height_
)),
min_cut_thickness_px_
(
to_px
(
min_cut_thickness_
))
{
png_writer_
.
allocate
(
width_px_
,
height_px_
);
png_writer_
.
set_all_pixels
(
255
);
}
uint32_t
to_px
(
double
x
)
{
return
static_cast
<
uint32_t
>
(
pix_per_mm_
*
x
);
}
void
set_pixel
(
uint32_t
x
,
uint32_t
y
,
uint8_t
value
=
255
)
{
png_writer_
.
set_pixel
(
x
,
height_px_
-
y
-
1
,
value
);
}
void
draw_rectangle
(
uint32_t
x_min
,
uint32_t
x_max
,
uint32_t
y_min
,
uint32_t
y_max
,
uint8_t
value
=
255
)
{
for
(
uint32_t
x
=
x_min
;
x
<=
x_max
;
++
x
)
{
for
(
uint32_t
y
=
y_min
;
y
<=
y_max
;
++
y
)
{
set_pixel
(
x
,
y
,
value
);
}
}
}
void
draw_rectangle
(
double
x_min
,
double
x_max
,
double
y_min
,
double
y_max
,
uint8_t
value
=
255
)
{
draw_rectangle
(
to_px
(
x_min
),
to_px
(
x_max
),
to_px
(
y_min
),
to_px
(
y_max
),
value
);
}
void
draw_rectangle
(
Rectangle
const
&
r
,
uint8_t
value
=
255
)
{
draw_rectangle
(
r
.
x_min
,
r
.
x_max
,
r
.
y_min
,
r
.
y_max
,
value
);
}
void
draw_pad
(
double
x_min
,
double
x_max
,
double
y_min
,
double
y_max
)
{
draw_rectangle
(
x_min
-
min_cut_thickness_
,
x_max
+
min_cut_thickness_
,
y_min
-
min_cut_thickness_
,
y_max
+
min_cut_thickness_
,
0
);
draw_rectangle
(
x_min
,
x_max
,
y_min
,
y_max
,
255
);
}
void
save
(
char
const
*
filename
)
{
png_writer_
.
write
(
filename
);
}
public:
PngWriter
png_writer_
;
double
width_
;
double
height_
;
double
pix_per_mm_
;
double
min_cut_thickness_
;
uint32_t
width_px_
;
uint32_t
height_px_
;
uint32_t
min_cut_thickness_px_
;
};
//--------------------------------------------------------------------------------------------------
// All length measurements are in mm.
int
main
()
{
...
...
@@ -10,24 +80,12 @@ int main() {
double
pad_y_min
;
double
pad_y_max
;
double
ppmm
=
50
;
auto
const
to_px
=
[
ppmm
](
double
x
)
{
return
static_cast
<
uint32_t
>
(
ppmm
*
x
);
};
// overall board dims
// board params
double
const
width
=
6
;
double
const
height
=
14
;
uint32_t
const
width_px
=
to_px
(
width
);
uint32_t
const
height_px
=
to_px
(
height
);
PngWriter
png_writer
;
png_writer
.
allocate
(
width_px
,
height_px
);
png_writer
.
set_all_pixels_black
();
auto
const
set_pixel
=
[
&
png_writer
,
height_px
](
uint32_t
x
,
uint32_t
y
)
{
png_writer
.
set_pixel
(
x
,
height_px
-
y
-
1
,
255
);
};
double
const
ppmm
=
50
;
double
const
min_cut_thickness
=
0.4
;
Board
board
(
width
,
height
,
ppmm
,
min_cut_thickness
);
// SOIC dims
double
const
pad_width
=
0.5
;
...
...
@@ -42,26 +100,16 @@ int main() {
for
(
uint32_t
i
=
0
;
i
<
4
;
++
i
)
{
pad_x_min
=
soic_pos_x
+
i
*
soic_pitch
;
pad_x_max
=
pad_x_min
+
pad_width
;
pad_y_min
=
soic_pos_y
;
pad_y_max
=
pad_y_min
+
pad_height
;
for
(
uint32_t
x
=
to_px
(
pad_x_min
);
x
<
to_px
(
pad_x_max
);
++
x
)
{
for
(
uint32_t
y
=
to_px
(
pad_y_min
);
y
<
to_px
(
pad_y_max
);
++
y
)
{
set_pixel
(
x
,
y
);
}
}
board
.
draw_pad
(
pad_x_min
,
pad_x_max
,
pad_y_min
,
pad_y_max
);
pad_y_min
=
height
-
pad_y_max
;
pad_y_max
=
pad_y_min
+
pad_height
;
for
(
uint32_t
x
=
to_px
(
pad_x_min
);
x
<
to_px
(
pad_x_max
);
++
x
)
{
for
(
uint32_t
y
=
to_px
(
pad_y_min
);
y
<
to_px
(
pad_y_max
);
++
y
)
{
set_pixel
(
x
,
y
);
}
}
board
.
draw_pad
(
pad_x_min
,
pad_x_max
,
pad_y_min
,
pad_y_max
);
}
// Cable attachment dims
double
const
min_cut_thickness
=
0.4
;
/*
double const cable_pad_height = 2.4;
pad_x_min = (width - 2 * min_cut_thickness) / 3;
pad_x_max = pad_x_min + min_cut_thickness;
...
...
@@ -72,8 +120,9 @@ int main() {
set_pixel(x, y);
}
}
*/
png_writer
.
writ
e
(
"node_board_traces.png"
);
board
.
sav
e
(
"node_board_traces.png"
);
return
0
;
}
node_board/png_writer.cpp
View file @
882fb2a2
...
...
@@ -47,17 +47,24 @@ void PngWriter::set_pixel(int32_t x, int32_t y, uint8_t value) {
px
[
2
]
=
value
;
}
//..................................................................................................
void
PngWriter
::
set_all_pixels
(
uint8_t
value
)
{
for
(
int
y
=
0
;
y
<
height_
;
y
++
)
{
png_bytep
row
=
row_pointers_
[
y
];
for
(
int
x
=
0
;
x
<
width_
;
x
++
)
{
png_bytep
px
=
&
(
row
[
x
*
3
]);
px
[
0
]
=
value
;
px
[
1
]
=
value
;
px
[
2
]
=
value
;
}
}
}
//..................................................................................................
void
PngWriter
::
set_all_pixels_black
()
{
for
(
int
y
=
0
;
y
<
height_
;
y
++
)
{
std
::
memset
(
row_pointers_
[
y
],
0
,
row_size
());
}
//for(int x = 0; x < width; x++) {
// png_bytep px = &(row[x * 3]);
// px[0] = 0;
// px[1] = 0;
// px[2] = 0;
//}
}
//..................................................................................................
...
...
node_board/png_writer.h
View file @
882fb2a2
...
...
@@ -13,6 +13,7 @@ public:
void
allocate
(
int32_t
width
,
int32_t
height
);
png_bytep
*
row_pointers
()
{
return
row_pointers_
;
}
void
set_pixel
(
int32_t
x
,
int32_t
y
,
uint8_t
value
=
255
);
void
set_all_pixels
(
uint8_t
value
);
void
set_all_pixels_black
();
void
write
(
char
const
*
filename
);
...
...
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