From 32b62f0256c2d8e91da7c541ea3be5726eda3062 Mon Sep 17 00:00:00 2001 From: equilet <2237372+equilet@users.noreply.github.com> Date: Thu, 22 Jun 2023 21:48:50 -0700 Subject: [PATCH] fixed offset issues with file writer and cleaned up code in ShapeWriter area to be more clear, some errant comments, updated default dims of output doc --- .../UserInterfaceState.xcuserstate | Bin 44323 -> 44577 bytes source/morphograph.cpp | 170 +++++++----------- 2 files changed, 64 insertions(+), 106 deletions(-) diff --git a/morphograph.xcodeproj/project.xcworkspace/xcuserdata/jml.xcuserdatad/UserInterfaceState.xcuserstate b/morphograph.xcodeproj/project.xcworkspace/xcuserdata/jml.xcuserdatad/UserInterfaceState.xcuserstate index 8b146e02a3a6e0bea8254592355ca8e9df7c61b4..4d57494f7956c58adf5b6d43e1e5afc64e04e49a 100644 GIT binary patch delta 22825 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 Q(Pqswr}e*|%`}$x2k7jTbN~PV delta 22789 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 HW})X7I{a@! diff --git a/source/morphograph.cpp b/source/morphograph.cpp index 1a41899..2637250 100644 --- a/source/morphograph.cpp +++ b/source/morphograph.cpp @@ -108,13 +108,11 @@ class ShapeWriter { t_morphograph *obj; //obj instead of x here Document *doc; Parameters *params; - float size; - float width, height, y, xdev, linewidth, trilen, yoffset; - //unsigned idx, vecsize, bright; - unsigned x, vecsize, bright, rotation; //make x a double??? - double rv; - short drawstyle; - std::string linestr, bs, shape, xs, ys, ws, hs; + int vecsize; + float elem_width, elem_height, x, y, xdev, linewidth, trilen, yoffset, size; + unsigned int bright, rotation; //make x a double??? + unsigned short drawstyle; + std::string linestr, bs, shape, xs, ys, ws, hs, xos, yos, ls; private: @@ -132,8 +130,8 @@ public: //defaults size = 1.0; rotation = 0.; - width = 1.0; - height = 1.0; + elem_width = 8.0; //min width - should be attribute??? + elem_height = 8.0; //min height - should be attribute??? y = 0.5; xdev = 0.; bright = 0; @@ -149,18 +147,25 @@ public: } void draw(){ - //MAKE DRAW HAVE A GROUP DEFINITION FOR STROKE / STROKE-WIDTH - // etc + float baseline_scalar = 5; //default strings for filewriter - float tx = (x / float(vecsize)) * float(params->width); - float default_size = 8.; + float ty = y * params->height; + + float aw = elem_width + (baseline_scalar * size); //actual width + float hwn = -1. * (aw / 2.); //half width negative + float ah = elem_height + (baseline_scalar * size); //actual height + float hhn = -1. * (ah / 2.); //half height negative + ws = std::to_string(aw); + std::string offset_x = std::to_string(hwn); + hs = std::to_string(ah); + std::string offset_y = std::to_string(hhn); xs = std::to_string(tx); - ys = std::to_string(y * params->height); - ws = std::to_string(width * default_size); - hs = std::to_string(height * default_size); + ys = std::to_string(ty); + + ls = std::to_string(linewidth); bs = std::to_string(bright); // begin shape ------------------------------------------------ @@ -183,55 +188,70 @@ public: draw_triangle(); } + //this should be part of a group soon <>... switch(drawstyle){ case 0: //stroke; consider stroke width + linestr.append("stroke=\"rgb(0,0,0)\" stroke-width=\"" + ls + "\" "); linestr.append("fill=\"transparent\" "); - linestr.append("stroke=\"rgb(0,0,0)\" stroke-width=\"0.2\" "); break; case 1: //fill - linestr.append("fill=\"rgb("); - linestr.append(bs + "," + bs + "," + bs); - linestr.append(")\" "); + linestr.append("fill=\"rgb(" + bs + "," + bs + "," + bs + ")\" "); break; case 2: //both - linestr.append("stroke=\"rgb(0,0,0)\" stroke-width=\"0.2\" "); - linestr.append("fill=\"rgb("); - linestr.append(bs + "," + bs + "," + bs); - linestr.append(")\" "); + linestr.append("stroke=\"rgb(0,0,0)\" stroke-width=\"0.2\" "); //should be [linewidth] + linestr.append("fill=\"rgb(" + bs + "," + bs + "," + bs + ")\" "); break; } //transform characteristics std::string rstr = std::to_string(rotation); - std::string sc = std::to_string(size * 8.); + //std::string sc = std::to_string(size * 8.); linestr.append("transform=\""); //-------------------------- - linestr.append("translate(" + xs + "," + ys + ") "); - linestr.append("rotate(" + rstr + ", 50, 50) "); //2nd and 3rd args are in percentage - linestr.append("scale(" + sc + ")"); + linestr.append("translate(" + xs + " " + ys + ") "); + //linestr.append("rotate(" + rstr + ", 50, 50) "); //2nd and 3rd args are in percentage + linestr.append("rotate(" + rstr + ") "); + linestr.append("translate(" + offset_x + " " + offset_y + ")"); linestr.append("\""); //------------------------------------- // append linestring text to doc append_svg_txt(obj, linestr); // end shape ------------------------------------------------ - append_svg_txt(obj, " />\n"); //close + append_svg_txt(obj, "/>\n"); //close + + //lines should be brought back in via a max attribute + /* + // test lines ------------------------------------------------- + std::string tempwidth = std::to_string(params->width); + std::string tempheight = std::to_string(params->height); + + linestr = "\n"); + append_svg_txt(obj, linestr); + */ + } void set_params(Parameters *_params){ params = _params; } void set_rotation(float _rot){ - rotation = uint(_rot) % 360; + rotation = unsigned(_rot) % 360; } void set_vecsize(long _vsize){ vecsize = _vsize; } void set_width(float _wid){ - width = _wid; + elem_width = _wid; } void set_height(float _height){ - height = _height; + elem_height = _height; } void set_size(float _size){ size = _size; @@ -264,80 +284,13 @@ public: drawstyle = 2; } } + void set_drawlines(bool _t){ + + } private: void draw_triangle(){ - - switch(drawstyle){ - case 0: { //stroke - //initial pos - double tx = x / vecsize * params->width; - double ty = (y * params->height) - 10.; - Polygon pg = Polygon(Fill(), Stroke(linewidth, Color(0,0,0))); - pg << pPoint(tx, ty); - double p2x = (tx + (size * 20)) * width; - pPoint p2 = pPoint(p2x, ty + 0); - pg << p2; - double p2y = (ty + (size * 20)) * height; - pPoint p3 = pPoint(tx, p2y); - pg << p3; - - (*doc) << pg; - } - break; - case 1: { //fill - //initial pos - double tx = x / vecsize * params->width; - double ty = (y * params->height) - 10.; - Polygon pg = Polygon(Fill(Color(bright, bright, bright))); - pg << pPoint(tx, ty); - double p2x = (tx + (size * 20)) * width; - pPoint p2 = pPoint(p2x, ty + 0); - pg << p2; - double p2y = (ty + (size * 20)) * height; - pPoint p3 = pPoint(tx, p2y); - pg << p3; - - (*doc) << pg; - } - break; - - case 2: { //both - //initial pos - double tx = x / vecsize * params->width; - double ty = (y * params->height) - 10.; - Polygon pg = Polygon(Fill(Color(bright, bright, bright)), Stroke(linewidth, Color(0,0,0))); - pg << pPoint(tx, ty); - double p2x = (tx + (size * 20)) * width; - pPoint p2 = pPoint(p2x, ty + 0); - pg << p2; - double p2y = (ty + (size * 20)) * height; - pPoint p3 = pPoint(tx, p2y); - pg << p3; - - (*doc) << pg; - } - break; - - default: { - //initial pos - double tx = x / vecsize * params->width; - double ty = (y * params->height) - 10.; - Polygon pg = Polygon(Fill(Color(bright, bright, bright))); - pg << pPoint(tx, ty); - double p2x = (tx + (size * 20)) * width; - pPoint p2 = pPoint(p2x, ty + 0); - pg << p2; - double p2y = (ty + (size * 20)) * height; - pPoint p3 = pPoint(tx, p2y); - pg << p3; - - (*doc) << pg; - } - break; - } - } void draw_circle(){ @@ -479,11 +432,16 @@ public: //draw all elements after calculating relevant data for (unsigned i = 0; i < layers.size(); ++i) { + //how do we know that energy's size is the size of a vector??? + //need to look into this long vsize = layers[i].desc.energy.size(); //j represents the analysis frame - //why do we need to skip every other analysis frame ??? - for (unsigned j = 0; j < vsize; j+=2) { + //why do we need to skip analysis frames? + //this should be a parameter to thin the data out... + unsigned skip_by = 2; + + for (unsigned j = 0; j < vsize; j += skip_by) { double sc_freq = (layers[i].desc.speccentr[j] / (max_freq - min_freq)) + min_freq; double sc_nrg = (layers[i].desc.energy[j] / (max_nrg - min_nrg)) + min_nrg; @@ -1572,8 +1530,8 @@ void *morphograph_new(t_symbol *msg, short argc, t_atom *argv) { x->l_params.sr = 44100.0; x->l_params.fft_size = 4096; x->l_params.hop_size = 512; - x->l_params.width = 600; - x->l_params.height = 600; + x->l_params.width = 100; + x->l_params.height = 100; x->l_params.zoom = 3; //globals -- 2.34.1