@@ -44,6 +44,9 @@ struct Svg { | |||||
/** Loads SVG data from a string. */ | /** Loads SVG data from a string. */ | ||||
void loadString(const std::string& str); | void loadString(const std::string& str); | ||||
void draw(NVGcontext* vg); | void draw(NVGcontext* vg); | ||||
int getNumShapes(); | |||||
int getNumPaths(); | |||||
int getNumPoints(); | |||||
/** Loads Svg from a cache. */ | /** Loads Svg from a cache. */ | ||||
static std::shared_ptr<Svg> load(const std::string& filename); | static std::shared_ptr<Svg> load(const std::string& filename); | ||||
@@ -11,6 +11,7 @@ namespace app { | |||||
RackRail::RackRail() { | RackRail::RackRail() { | ||||
busBoardSvg = Svg::load(asset::system("res/ComponentLibrary/RackBusboard.svg")); | busBoardSvg = Svg::load(asset::system("res/ComponentLibrary/RackBusboard.svg")); | ||||
railsSvg = Svg::load(asset::system("res/ComponentLibrary/RackRails.svg")); | railsSvg = Svg::load(asset::system("res/ComponentLibrary/RackRails.svg")); | ||||
// DEBUG("%d %d %d", railsSvg->getNumShapes(), railsSvg->getNumPaths(), railsSvg->getNumPoints()); | |||||
} | } | ||||
@@ -40,7 +41,7 @@ void RackRail::draw(const DrawArgs& args) { | |||||
for (float x = 0; x < box.size.x; x += busBoardWidth) { | for (float x = 0; x < box.size.x; x += busBoardWidth) { | ||||
nvgSave(args.vg); | nvgSave(args.vg); | ||||
nvgTranslate(args.vg, x, busBoardY); | nvgTranslate(args.vg, x, busBoardY); | ||||
svgDraw(args.vg, busBoardSvg->handle); | |||||
busBoardSvg->draw(args.vg); | |||||
nvgRestore(args.vg); | nvgRestore(args.vg); | ||||
} | } | ||||
@@ -56,7 +57,7 @@ void RackRail::draw(const DrawArgs& args) { | |||||
for (float x = 0; x < box.size.x; x += RACK_GRID_WIDTH) { | for (float x = 0; x < box.size.x; x += RACK_GRID_WIDTH) { | ||||
nvgSave(args.vg); | nvgSave(args.vg); | ||||
nvgTranslate(args.vg, x, y ); | nvgTranslate(args.vg, x, y ); | ||||
svgDraw(args.vg, railsSvg->handle); | |||||
railsSvg->draw(args.vg); | |||||
nvgRestore(args.vg); | nvgRestore(args.vg); | ||||
} | } | ||||
} | } | ||||
@@ -41,6 +41,42 @@ void Svg::draw(NVGcontext* vg) { | |||||
} | } | ||||
int Svg::getNumShapes() { | |||||
if (!handle) | |||||
return 0; | |||||
int count = 0; | |||||
for (NSVGshape* shape = handle->shapes; shape; shape = shape->next) { | |||||
count++; | |||||
} | |||||
return count; | |||||
} | |||||
int Svg::getNumPaths() { | |||||
if (!handle) | |||||
return 0; | |||||
int count = 0; | |||||
for (NSVGshape* shape = handle->shapes; shape; shape = shape->next) { | |||||
for (NSVGpath* path = shape->paths; path; path = path->next) { | |||||
count++; | |||||
} | |||||
} | |||||
return count; | |||||
} | |||||
int Svg::getNumPoints() { | |||||
if (!handle) | |||||
return 0; | |||||
int count = 0; | |||||
for (NSVGshape* shape = handle->shapes; shape; shape = shape->next) { | |||||
for (NSVGpath* path = shape->paths; path; path = path->next) { | |||||
count += (path->npts / 3); | |||||
} | |||||
} | |||||
return count; | |||||
} | |||||
static std::map<std::string, std::shared_ptr<Svg>> svgCache; | static std::map<std::string, std::shared_ptr<Svg>> svgCache; | ||||