Commit 462f16d3 authored by Erik Strand's avatar Erik Strand

Go more OO

parent 1bb43333
#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.write("node_board_traces.png");
board.save("node_board_traces.png");
return 0;
}
......@@ -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;
//}
}
//..................................................................................................
......
......@@ -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);
......
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