[chronojump] kneeAngle: validation includes blackOnlyMarkers



commit 222a9a55173bb5695757833173759cded0cb9c11
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon May 10 20:09:27 2010 +0800

    kneeAngle: validation includes blackOnlyMarkers

 src/angle/kneeAngle.cpp               |   49 ++--
 src/angle/kneeAngleFunctions.cpp      |   20 +-
 src/angle/kneeAngleGlobal.cpp         |    3 +-
 src/angle/kneeAngle_black.png         |  Bin 46137 -> 43408 bytes
 src/angle/kneeAngle_black.svg         |  161 +++++++++----
 src/angle/kneeAngle_black_contour.png |  Bin 47903 -> 45275 bytes
 src/angle/kneeAngle_black_contour.svg |  145 +++++++----
 src/angle/kneeAngle_intro.png         |  Bin 45833 -> 31642 bytes
 src/angle/kneeAngle_intro.svg         |  445 ++++++++++++++-------------------
 src/angle/kneeAngle_skin.png          |  Bin 43586 -> 43645 bytes
 src/angle/kneeAngle_skin.svg          |  110 +++++----
 11 files changed, 493 insertions(+), 440 deletions(-)
---
diff --git a/src/angle/kneeAngle.cpp b/src/angle/kneeAngle.cpp
index a632b8f..88122e5 100644
--- a/src/angle/kneeAngle.cpp
+++ b/src/angle/kneeAngle.cpp
@@ -78,6 +78,13 @@
 /*
  * COMPILATION:
  *
+ * Ubuntu 9.10, now using RInside:
+ *
+ * g++ -I/usr/include/opencv -I/usr/share/R/include -I/usr/local/lib/R/site-library/Rcpp/lib -I/usr/local/lib/R/site-library/RInside/lib  -g -O2 -Wall  -s  kneeAngle.cpp -o kneeAngle -L/usr/lib/R/lib -lR -lblas -llapack -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -L/usr/local/lib/R/site-library/RInside/lib -lRInside -Wl,-rpath,/usr/local/lib/R/site-library/RInside/lib -L/usr/lib -lhighgui -Wl,-rpath,/usr/lib
+ *
+ *
+ * OLD:
+ *
  * g++ -lcv -lcxcore -lhighgui -L(path to opencv library) kneeAngle.cpp -o kneeAngle
  *
  * for example: 
@@ -165,8 +172,8 @@ int main(int argc,char **argv)
 	if(argc < 2)
 	{
 		char *startMessage = new char[300];
-		sprintf(startMessage, "\nkneeAngle HELP.\n\nProvide file location as a first argument...\nOptional: as 2nd argument provide a fraction of video to start at that frame, or a concrete frame.\nOptional: as 3rd argument provide mode you want to execute (avoiding main menu).\n\t%d: validation (don't use this, use blackOnlyMarkers); %d: blackWithoutMarkers; %d: skinOnlyMarkers; %d: blackOnlyMarkers.\n\nEg: Start at frame 5375:\n\tkneeAngle myfile.mov 5375\nEg:start at 80 percent of video and directly as blackOnlyMarkers:\n\tkneeAngle myFile.mov .8 %d\n\nNote another param can be used to default trhesholdLargestContour on blackOnly and on validation", 
-				validation, blackWithoutMarkers, skinOnlyMarkers, blackOnlyMarkers, blackOnlyMarkers);
+		sprintf(startMessage, "\nkneeAngle HELP.\n\nProvide file location as a first argument...\nOptional: as 2nd argument provide a fraction of video to start at that frame, or a concrete frame.\nOptional: as 3rd argument provide mode you want to execute (avoiding main menu).\n\t%d: validation; %d: blackWithoutMarkers; %d: skinOnlyMarkers.\n\nEg: Start at frame 5375:\n\tkneeAngle myfile.mov 5375\nEg:start at 80 percent of video and directly as blackWithoutMarkers:\n\tkneeAngle myFile.mov .8 %d\n\nNote another param can be used to default thresholdLargestContour on validation and blackWithoutMarkers", 
+				validation, blackWithoutMarkers, skinOnlyMarkers, blackWithoutMarkers);
 		std::cout<< startMessage <<std::endl;
 		exit(1);
 	}
@@ -197,7 +204,7 @@ int main(int argc,char **argv)
 		ProgramMode = atoi(argv[3]);
 	
 	int threshold;
-	//this is currently only used on blackOnlyMarkers and validation to have a threshold to find the contour
+	//this is currently only used on validation and blackWithoutMarkers to have a threshold to find the contour
 	//(different than threshold for three points)
 	int thresholdLargestContour = -1; 
 	int thresholdMax = 255;
@@ -238,7 +245,7 @@ int main(int argc,char **argv)
 	
 	cvNamedWindow("gui",1);
 	//if ProgramMode is not defined or is invalid, ask user
-	if(ProgramMode < validation || ProgramMode > blackOnlyMarkers) {
+	if(ProgramMode < validation || ProgramMode > skinOnlyMarkers) {
 		gui = cvLoadImage("kneeAngle_intro.png");
 		cvShowImage("gui", gui);
 		ProgramMode = menu(gui, font);
@@ -248,7 +255,7 @@ int main(int argc,char **argv)
 		UsingContour = false;
 		gui = cvLoadImage("kneeAngle_skin.png");
 	}
-	else if(ProgramMode == blackOnlyMarkers || ProgramMode == validation) {
+	else if(ProgramMode == validation) {
 		UsingContour = true;
 		gui = cvLoadImage("kneeAngle_black_contour.png");
 	} 
@@ -303,15 +310,10 @@ int main(int argc,char **argv)
 	
 	// ----------------------------- create windows -----------------------------
 	
-	if(ProgramMode == validation) {
-//		cvNamedWindow("Holes_on_contour",1);
-//		cvNamedWindow("result",1);
-		cvNamedWindow("threshold",1);
-	} else if (ProgramMode == skinOnlyMarkers || ProgramMode == blackOnlyMarkers) {
-		cvNamedWindow("threshold",1);
-	}
-	else if (ProgramMode == blackWithoutMarkers)
+	if (ProgramMode == blackWithoutMarkers)
 		cvNamedWindow("result",1);
+	else 
+		cvNamedWindow("threshold",1);
 
 	// ----------------------------- define vars -------------------------------------------
 	
@@ -448,7 +450,7 @@ int main(int argc,char **argv)
 	int verticalHeight;
 
 
-	//ProgramMode == validation || ProgramMode == blackWithoutMarkers
+	//ProgramMode == validation
 	bool extensionDoIt = true;
 	bool extensionCopyDone = false;
 	CvPoint kneeMarkedAtExtension = pointToZero();
@@ -603,7 +605,7 @@ int main(int argc,char **argv)
 				cvCvtColor(frame_copy,gray,CV_BGR2GRAY);
 				threshold = calculateThresholdStart(gray, false);
 			}
-			else if(ProgramMode == blackOnlyMarkers || ProgramMode == validation) {
+			else if(ProgramMode == validation) {
 				cvCvtColor(frame_copy,gray,CV_BGR2GRAY);
 				threshold = calculateThresholdStart(gray, false);
 				if(thresholdLargestContour == -1)
@@ -652,7 +654,7 @@ int main(int argc,char **argv)
 		*/
 
 
-		if(ProgramMode == skinOnlyMarkers || ProgramMode == blackOnlyMarkers || ProgramMode == validation) 
+		if(ProgramMode == skinOnlyMarkers || ProgramMode == validation) 
 		{
 
 			/* kalman */
@@ -694,7 +696,7 @@ int main(int argc,char **argv)
 				seqHolesEnd = findHolesSkin(output, frame_copy, 
 						hipMarked, kneeMarked, toeMarked, hipPredicted, kneePredicted, toePredicted, font);
 			}
-			else { //if(ProgramMode == blackOnlyMarkers || ProgramMode == validation) 
+			else {
 				//this segmented is to find the contour (threshold is lot little)
 				cvThreshold(gray,segmentedValidationHoles,thresholdLargestContour,thresholdMax,CV_THRESH_BINARY_INV);
 				cvThreshold(gray,segmented,thresholdLargestContour,thresholdMax,CV_THRESH_BINARY_INV);
@@ -745,9 +747,8 @@ int main(int argc,char **argv)
 				myKnee = *CV_GET_SEQ_ELEM( CvPoint, seqHolesEnd, 1); 
 				myToe = *CV_GET_SEQ_ELEM( CvPoint, seqHolesEnd, 2 ); 
 
-				//validation uses always black contour
-				//but black only markers can change to skin related if has problems with the contour
-				if( ProgramMode == validation || (! pointIsNull(myHip) && ! pointIsNull(myKnee) && ! pointIsNull(myToe))) {
+				//can change to skin related if has problems with the contour
+				if( ! pointIsNull(myHip) && ! pointIsNull(myKnee) && ! pointIsNull(myToe) ) {
 					cvCopy(segmentedValidationHoles, output);
 					if(! UsingContour) {
 						UsingContour = true;
@@ -859,7 +860,7 @@ int main(int argc,char **argv)
 		 */
 
 
-		if(ProgramMode == skinOnlyMarkers || ProgramMode == blackOnlyMarkers || ProgramMode == validation) 
+		if(ProgramMode == skinOnlyMarkers || ProgramMode == validation) 
 		{
 			if(pointIsNull(hipMarked) || pointIsNull(kneeMarked) || pointIsNull(toeMarked))
 				thetaMarked = -1;
@@ -1837,8 +1838,7 @@ int main(int argc,char **argv)
 					MouseClicked = UNDEFINED;  
 					MouseMultiplier = false;
 		
-					//if(ProgramMode == skinOnlyMarkers || ProgramMode == blackOnlyMarkers || ProgramMode == validation) {
-					if(ProgramMode == skinOnlyMarkers || ProgramMode == blackOnlyMarkers) {
+					if(ProgramMode == skinOnlyMarkers || ProgramMode == validation) {
 						sprintf(label, "Threshold: %d (%d,%d,%d) (%d,%d,%d)", 
 								threshold, 
 								thresholdROIH, thresholdROIK, thresholdROIT, 
@@ -1859,6 +1859,7 @@ int main(int argc,char **argv)
 
 						cvShowImage("threshold", output);
 					}
+					/*
 					else {		
 						cvThreshold(gray,segmentedValidationHoles, threshold, thresholdMax,CV_THRESH_BINARY_INV);
 						//create the largest contour image (stored on temp)
@@ -1898,6 +1899,7 @@ int main(int argc,char **argv)
 						sprintf(label, "threshold: %d", threshold, thresholdROIH);
 						imageGuiResult(gui, label, font);
 					}
+					*/
 						
 					thresholdROIChanged = false;
 				}
@@ -2228,7 +2230,6 @@ int menu(IplImage * gui, CvFont font)
 			case '1': MouseClicked = validation; 		break;
 			case '2': MouseClicked = blackWithoutMarkers; 	break;
 			case '3': MouseClicked = skinOnlyMarkers; 	break;
-			case '4': MouseClicked = blackOnlyMarkers; 	break;
 		}
 	} while (MouseClicked == undefined);
 
diff --git a/src/angle/kneeAngleFunctions.cpp b/src/angle/kneeAngleFunctions.cpp
index 8304f2d..8d52c1c 100644
--- a/src/angle/kneeAngleFunctions.cpp
+++ b/src/angle/kneeAngleFunctions.cpp
@@ -1316,10 +1316,9 @@ void on_mouse_gui_menu( int event, int x, int y, int flags, void* param )
 	CvPoint clicked; 
 	clicked.x=x; clicked.y=y;
 
-	CvRect rval; rval.x=45;  rval.width=50;  rval.y=60; rval.height=210;
-	CvRect rbam; rbam.x=157; rbam.width=50; rbam.y=60; rbam.height=210;
-	CvRect rsom; rsom.x=270; rsom.width=50;  rsom.y=60; rsom.height=210;
-	CvRect rbom; rbom.x=384; rbom.width=50;  rbom.y=60; rbom.height=210;
+	CvRect rval; rval.x=45;  rval.width=70;  rval.y=60; rval.height=210;
+	CvRect rbwm; rbwm.x=200; rbwm.width=70; rbwm.y=60; rbwm.height=210;
+	CvRect rsom; rsom.x=360; rsom.width=70;  rsom.y=60; rsom.height=210;
 
 	CvRect rquit; rquit.x=450; rquit.width=40;  rquit.y=10; rquit.height=45;
 	switch( event ) {
@@ -1327,12 +1326,10 @@ void on_mouse_gui_menu( int event, int x, int y, int flags, void* param )
 			{
 				if(pointInsideRect(clicked, rval))
 					MouseClicked = validation;
-				else if(pointInsideRect(clicked, rbam))
+				else if(pointInsideRect(clicked, rbwm))
 					MouseClicked = blackWithoutMarkers;
 				else if(pointInsideRect(clicked, rsom))
 					MouseClicked = skinOnlyMarkers;
-				else if(pointInsideRect(clicked, rbom))
-					MouseClicked = blackOnlyMarkers;
 				else if(pointInsideRect(clicked, rquit))
 					MouseClicked = quit;
 			}
@@ -1421,7 +1418,7 @@ void on_mouse_gui( int event, int x, int y, int flags, void* param )
 					success = false;
 
 				//blackOnlyMarkers with contour or validation
-				if(!success && ( ProgramMode == validation || (ProgramMode == blackOnlyMarkers && UsingContour) )) {
+				if(!success && ( ProgramMode == validation && UsingContour) ) {
 					success = true;
 					if(pointInsideRect(clicked, rtglobalmore))
 						MouseClicked = TCONTOURMORE;
@@ -1433,8 +1430,7 @@ void on_mouse_gui( int event, int x, int y, int flags, void* param )
 
 				//skinOnlyMarkers || (blackOnlyMarkers without contour)
 				if(!success && (ProgramMode == skinOnlyMarkers || 
-							ProgramMode == validation ||
-							(ProgramMode == blackOnlyMarkers && !UsingContour))) {
+							(ProgramMode == validation && !UsingContour))) {
 					success = true;
 					if(pointInsideRect(clicked, rthipmore))
 						MouseClicked = THIPMORE;
@@ -1453,7 +1449,7 @@ void on_mouse_gui( int event, int x, int y, int flags, void* param )
 				}
 				
 				if(!success && (ProgramMode == skinOnlyMarkers || 
-							(ProgramMode == blackOnlyMarkers && !UsingContour))) {
+							(ProgramMode == validation && !UsingContour))) {
 					success = true;
 					if(pointInsideRect(clicked, rtglobalmore))
 						MouseClicked = TGLOBALMORE;
@@ -1477,7 +1473,7 @@ void on_mouse_gui( int event, int x, int y, int flags, void* param )
 				}
 				
 				//only for blackOnlyMarkers without contour
-				if(!success && (ProgramMode == blackOnlyMarkers && !UsingContour)) {
+				if(!success && (ProgramMode == validation && !UsingContour)) {
 					success = true;
 					if(pointInsideRect(clicked, rbackToContour)) {
 						MouseClicked = BACKTOCONTOUR;
diff --git a/src/angle/kneeAngleGlobal.cpp b/src/angle/kneeAngleGlobal.cpp
index 7e85437..bfcc8ac 100644
--- a/src/angle/kneeAngleGlobal.cpp
+++ b/src/angle/kneeAngleGlobal.cpp
@@ -57,10 +57,9 @@ enum { SMALL = 1, MID = 2, BIG = 3 };
  * blackWithoutMarkers uses only black pants and finds the place where the markers should be
  *    (when validation study for lots of people isdone)
  * skinOnlyMarkers uses markers to find three points and angle (easiest)
- * skinOnlyMarkers uses markers to find three points and angle but in pants (it uses findLargestContour and finds inside it)
  */
 //NOTE: if this changes, change also in kneeangle.cpp menu
-enum { quit = -1, undefined = 0, validation = 1, blackWithoutMarkers = 2, skinOnlyMarkers = 3, blackOnlyMarkers = 4}; 
+enum { quit = -1, undefined = 0, validation = 1, blackWithoutMarkers = 2, skinOnlyMarkers = 3}; 
 
 //used on gui
 enum { 
diff --git a/src/angle/kneeAngle_black.png b/src/angle/kneeAngle_black.png
index 74ffb68..96b145c 100644
Binary files a/src/angle/kneeAngle_black.png and b/src/angle/kneeAngle_black.png differ
diff --git a/src/angle/kneeAngle_black.svg b/src/angle/kneeAngle_black.svg
index 197f9cb..d6fb281 100644
--- a/src/angle/kneeAngle_black.svg
+++ b/src/angle/kneeAngle_black.svg
@@ -4552,6 +4552,13 @@
          offset="1"
          style="stop-color:#464744;stop-opacity:1" />
     </linearGradient>
+    <inkscape:perspective
+       id="perspective9850"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -4563,16 +4570,16 @@
      objecttolerance="10"
      inkscape:pageopacity="1"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.6392695"
+     inkscape:zoom="1.5171962"
      inkscape:cx="250.99475"
-     inkscape:cy="146.40149"
+     inkscape:cy="145.48645"
      inkscape:document-units="px"
      inkscape:current-layer="capa1"
      showgrid="false"
      showguides="true"
      inkscape:guide-bbox="true"
      inkscape:window-width="1016"
-     inkscape:window-height="711"
+     inkscape:window-height="704"
      inkscape:window-x="0"
      inkscape:window-y="25"
      inkscape:window-maximized="0">
@@ -4638,7 +4645,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -4776,51 +4783,6 @@
        x="0.61669475"
        y="220.44638"
        transform="matrix(1,0,0,0.875,0,27.255967)" />
-    <path
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 43.50129,69.963339 c -24.67163,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 C 78.47209,117.33821 63.97913,97.283885 59.73506,87.008795 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-       id="path3301"
-       sodipodi:nodetypes="ccccccccc" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3303"
-       width="5.681818"
-       height="5.681818"
-       x="46.712196"
-       y="83.916183" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3305"
-       width="5.681818"
-       height="5.681818"
-       x="61.426704"
-       y="145.61188" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3307"
-       width="5.681818"
-       height="5.681818"
-       x="54.080513"
-       y="198.13712" />
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
-       x="12.356018"
-       y="237.07036"
-       id="text15214"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan15216"
-         x="12.356018"
-         y="237.07036">FIND points</tspan><tspan
-         sodipodi:role="line"
-         x="12.356018"
-         y="249.57036"
-         id="tspan15218">on BLACK pants</tspan><tspan
-         sodipodi:role="line"
-         x="12.356018"
-         y="262.07037"
-         id="tspan15220">WITH markers</tspan></text>
     <rect
        style="opacity:0.78879311;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient7392);stroke-width:1.37848151;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
        id="rect6224"
@@ -5896,5 +5858,106 @@
            id="tspan9769-5"
            sodipodi:role="line">Return to contour mode</tspan></text>
     </g>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect3303-0"
+       width="5.681818"
+       height="5.681818"
+       x="118.54699"
+       y="120.1102" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect3305-8"
+       width="5.681818"
+       height="5.681818"
+       x="133.26151"
+       y="181.80589" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect3305-2"
+       width="5.681818"
+       height="5.681818"
+       x="125.92066"
+       y="235.18355" />
+    <g
+       id="g13491"
+       transform="translate(-0.14499969,0)">
+      <text
+         id="text3319"
+         y="237.00839"
+         x="13.116875"
+         style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+         xml:space="preserve"><tspan
+           y="237.00839"
+           x="13.116875"
+           id="tspan3321"
+           sodipodi:role="line">VALIDATE</tspan></text>
+      <g
+         transform="translate(-4,0)"
+         id="g13479">
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3303"
+           width="5.681818"
+           height="5.681818"
+           x="46.712196"
+           y="83.916183" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3305"
+           width="5.681818"
+           height="5.681818"
+           x="61.426704"
+           y="145.61188" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3307"
+           width="5.681818"
+           height="5.681818"
+           x="54.080513"
+           y="198.13712" />
+        <rect
+           style="fill:none;stroke:#ff0000;stroke-width:0.84253544;stroke-opacity:1"
+           id="rect3011"
+           width="44.286884"
+           height="139.10121"
+           x="17.726288"
+           y="69.374428" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 30.827348,69.533039 c -24.67163,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 11.657322,-61.1703 C 59.727451,115.62987 51.944209,101.96575 47.061118,86.578495 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+           id="path3325"
+           sodipodi:nodetypes="ccccccccc" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3327"
+           width="5.681818"
+           height="5.681818"
+           x="34.069637"
+           y="83.725685" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3329"
+           width="5.681818"
+           height="5.681818"
+           x="50.223427"
+           y="143.92566" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3331"
+           width="5.681818"
+           height="5.681818"
+           x="41.437973"
+           y="197.94662" />
+        <path
+           style="fill:none;stroke:#ff0000;stroke-width:0.99391675px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 70.649592,208.70921 0,-63.3408"
+           id="path3870" />
+        <path
+           style="fill:#333333;stroke:#4a2121;stroke-width:0.36500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.73, 0.365;stroke-dashoffset:0"
+           d="m 61.623949,145.54657 8.54056,0"
+           id="path3870-9" />
+      </g>
+    </g>
   </g>
 </svg>
diff --git a/src/angle/kneeAngle_black_contour.png b/src/angle/kneeAngle_black_contour.png
index 0828d8a..dacbe00 100644
Binary files a/src/angle/kneeAngle_black_contour.png and b/src/angle/kneeAngle_black_contour.png differ
diff --git a/src/angle/kneeAngle_black_contour.svg b/src/angle/kneeAngle_black_contour.svg
index 1f763a4..8ad1413 100644
--- a/src/angle/kneeAngle_black_contour.svg
+++ b/src/angle/kneeAngle_black_contour.svg
@@ -5269,6 +5269,20 @@
        inkscape:vp_y="0 : 1000 : 0"
        inkscape:vp_x="0 : 0.5 : 1"
        sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective9779"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective9801"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -5280,16 +5294,16 @@
      objecttolerance="10"
      inkscape:pageopacity="1"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.6601963"
+     inkscape:zoom="1.5520743"
      inkscape:cx="250.99475"
-     inkscape:cy="146.38995"
+     inkscape:cy="145.48645"
      inkscape:document-units="px"
      inkscape:current-layer="capa1"
      showgrid="false"
      showguides="false"
      inkscape:guide-bbox="true"
-     inkscape:window-width="1024"
-     inkscape:window-height="717"
+     inkscape:window-width="1018"
+     inkscape:window-height="714"
      inkscape:window-x="0"
      inkscape:window-y="25"
      inkscape:window-maximized="1">
@@ -5741,44 +5755,6 @@
        x="0.61669475"
        y="220.44638"
        transform="matrix(1,0,0,0.875,0,27.255967)" />
-    <path
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 43.50129,69.963339 c -24.67163,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 C 78.47209,117.33821 63.97913,97.283885 59.73506,87.008795 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-       id="path3301"
-       sodipodi:nodetypes="ccccccccc" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3303"
-       width="5.681818"
-       height="5.681818"
-       x="46.712196"
-       y="83.916183" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3305"
-       width="5.681818"
-       height="5.681818"
-       x="61.426704"
-       y="145.61188" />
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
-       x="12.356018"
-       y="237.07036"
-       id="text15214"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan15216"
-         x="12.356018"
-         y="237.07036">FIND points</tspan><tspan
-         sodipodi:role="line"
-         x="12.356018"
-         y="249.57036"
-         id="tspan15218">on BLACK pants</tspan><tspan
-         sodipodi:role="line"
-         x="12.356018"
-         y="262.07037"
-         id="tspan15220">WITH markers</tspan></text>
     <rect
        style="opacity:0.78879311;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient7392);stroke-width:1.37848151;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
        id="rect6224"
@@ -6266,13 +6242,6 @@
              id="rect4668-6" /></flowRegion><flowPara
            style="font-size:15.12978649000000075px;fill:#ffffff;stroke:#000000;stroke-width:0.09536439;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Chandas;-inkscape-font-specification:Chandas"
            id="flowPara4670-1">Fast</flowPara></flowRoot>    </g>
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none"
-       id="rect3307"
-       width="3.681818"
-       height="3.681818"
-       x="55.081001"
-       y="200.13718" />
     <g
        id="g41169"
        transform="translate(-1.9946289e-4,-7.3218317)">
@@ -6453,5 +6422,83 @@
          y="213.71568"
          style="font-size:9.50243378px;font-family:FreeMono;-inkscape-font-specification:FreeMono"
          id="tspan3769-0">1: help (unimplemented)</tspan></text>
+    <g
+       id="g14555">
+      <text
+         id="text3319"
+         y="237.00873"
+         x="13.11687"
+         style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+         xml:space="preserve"><tspan
+           y="237.00873"
+           x="13.11687"
+           id="tspan3321"
+           sodipodi:role="line">VALIDATE</tspan></text>
+      <g
+         id="g14543">
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3303"
+           width="5.681818"
+           height="5.681818"
+           x="38.457184"
+           y="83.916183" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3305"
+           width="5.681818"
+           height="5.681818"
+           x="53.171692"
+           y="145.61188" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3305-2"
+           width="5.681818"
+           height="5.681818"
+           x="45.830856"
+           y="198.98952" />
+        <rect
+           style="fill:none;stroke:#ff0000;stroke-width:0.84253544;stroke-opacity:1"
+           id="rect3011"
+           width="44.286884"
+           height="139.10121"
+           x="13.471268"
+           y="69.374763" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 26.572329,69.533379 c -24.6716304,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 11.657322,-61.1703 C 55.472432,115.63021 47.68919,101.96609 42.806099,86.578835 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+           id="path3325"
+           sodipodi:nodetypes="ccccccccc" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3327"
+           width="5.681818"
+           height="5.681818"
+           x="29.814619"
+           y="83.726021" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3329"
+           width="5.681818"
+           height="5.681818"
+           x="45.96841"
+           y="143.92599" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3331"
+           width="5.681818"
+           height="5.681818"
+           x="37.182957"
+           y="197.94696" />
+        <path
+           style="fill:none;stroke:#ff0000;stroke-width:0.99391675px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 66.394573,208.70955 0,-63.3408"
+           id="path3870" />
+        <path
+           style="fill:#333333;stroke:#4a2121;stroke-width:0.36500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.73, 0.365;stroke-dashoffset:0"
+           d="m 57.36893,145.54691 8.54056,0"
+           id="path3870-9" />
+      </g>
+    </g>
   </g>
 </svg>
diff --git a/src/angle/kneeAngle_intro.png b/src/angle/kneeAngle_intro.png
index b9a50cd..6a823f0 100644
Binary files a/src/angle/kneeAngle_intro.png and b/src/angle/kneeAngle_intro.png differ
diff --git a/src/angle/kneeAngle_intro.svg b/src/angle/kneeAngle_intro.svg
index eb7e44a..8cb44bc 100644
--- a/src/angle/kneeAngle_intro.svg
+++ b/src/angle/kneeAngle_intro.svg
@@ -453,6 +453,34 @@
        inkscape:vp_y="0 : 1000 : 0"
        inkscape:vp_x="0 : 0.5 : 1"
        sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3856"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3882"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3904"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3958"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -464,18 +492,18 @@
      objecttolerance="10"
      inkscape:pageopacity="1"
      inkscape:pageshadow="2"
-     inkscape:zoom="0.86030083"
-     inkscape:cx="232.58729"
-     inkscape:cy="178.58586"
+     inkscape:zoom="1.4970643"
+     inkscape:cx="244.26639"
+     inkscape:cy="147.41425"
      inkscape:document-units="px"
      inkscape:current-layer="capa1"
      showgrid="false"
      showguides="true"
      inkscape:guide-bbox="true"
      inkscape:window-width="1016"
-     inkscape:window-height="711"
+     inkscape:window-height="704"
      inkscape:window-x="0"
-     inkscape:window-y="18"
+     inkscape:window-y="25"
      inkscape:window-maximized="0">
     <inkscape:grid
        type="xygrid"
@@ -502,6 +530,22 @@
        orientation="0,1"
        position="67.895112,6.5201987"
        id="guide18615" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="44.659294,85.786858"
+       id="guide3872" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="230.58778,153.11758"
+       id="guide3918" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="92.338498,212.79391"
+       id="guide3920" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="131.95778,98.728705"
+       id="guide3922" />
   </sodipodi:namedview>
   <metadata
      id="metadata7">
@@ -511,6 +555,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -648,180 +693,121 @@
        x="0.61669475"
        y="220.44638"
        transform="matrix(1,0,0,0.875,0,27.255967)" />
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
-       x="42.858643"
-       y="237.43869"
-       id="text3319"><tspan
-         sodipodi:role="line"
-         id="tspan3321"
-         x="42.858643"
-         y="237.43869">VALIDATE</tspan></text>
-    <g
-       id="g15480"
-       transform="translate(6.685086,2)">
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         id="path3325"
-         d="m 53.88403,67.963339 c -24.67163,21.111456 -6.28781,31.949666 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 C 88.85483,115.33821 74.36187,95.283885 70.1178,85.008795 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         y="82.155983"
-         x="57.12632"
-         height="5.681818"
-         width="5.681818"
-         id="rect3327"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-      <rect
-         y="143.85168"
-         x="71.840828"
-         height="5.681818"
-         width="5.681818"
-         id="rect3329"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-      <rect
-         y="196.37692"
-         x="64.494652"
-         height="5.681818"
-         width="5.681818"
-         id="rect3331"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-      <path
-         sodipodi:nodetypes="cc"
-         id="path3333"
-         d="M 41.358311,88.716816 59.677904,85.285861"
-         style="fill:#6c007e;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#EmptyTriangleInM);marker-end:url(#EmptyTriangleOutM)" />
-      <path
-         sodipodi:nodetypes="cc"
-         id="path11829"
-         d="m 66.758294,147.5566 16.345739,-2.06385"
-         style="fill:#6c007e;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#EmptyTriangleInM);marker-end:url(#EmptyTriangleOutM)" />
-      <path
-         sodipodi:nodetypes="cc"
-         id="path11831"
-         d="m 60.632014,199.53359 13.65704,-0.30362"
-         style="fill:#6c007e;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#EmptyTriangleInM);marker-end:url(#EmptyTriangleOutM)" />
-      <path
-         sodipodi:nodetypes="cc"
-         id="path11833"
-         d="M 41.927157,90.023971 66.360004,146.78505"
-         style="fill:#6c007e;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#EmptyTriangleInM);marker-end:url(#EmptyTriangleOutM)" />
-      <path
-         sodipodi:nodetypes="cc"
-         id="path11837"
-         d="m 66.850422,147.86476 -6.368547,51.3532"
-         style="fill:#6c007e;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#EmptyTriangleInM);marker-end:url(#EmptyTriangleOutM)" />
-    </g>
     <g
-       id="g3313"
-       transform="translate(-119.26556,-0.161616)">
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         id="path3301"
-         d="m 405.87671,70.124955 c -24.67163,21.111456 -6.28781,31.949665 0.81169,44.642855 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 c 6.5617,-30.54721 -7.93126,-50.601539 -12.17533,-60.876629 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-         style="fill:#efa698;fill-opacity:1;fill-rule:evenodd;stroke:#efa698;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         y="84.077797"
-         x="409.08762"
-         height="5.681818"
-         width="5.681818"
-         id="rect3303"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-      <rect
-         y="145.7735"
-         x="423.80212"
-         height="5.681818"
-         width="5.681818"
-         id="rect3305"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
-      <rect
-         y="198.29874"
-         x="416.45593"
-         height="5.681818"
-         width="5.681818"
-         id="rect3307"
-         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+       id="g11702">
+      <g
+         transform="translate(-7.6293945e-6,0)"
+         id="g4019">
+        <path
+           style="fill:#efa698;fill-opacity:1;fill-rule:evenodd;stroke:#efa698;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 387.05851,69.962993 c -24.67163,21.111456 -6.28781,31.949667 0.81169,44.642857 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21182 -4.30248,38.55248 -7.3052,56.81817 l 12.98703,-0.81169 11.65732,-61.17029 c -1.42606,-29.90819 -9.2093,-43.57231 -14.09239,-58.959571 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+           id="path3325-5-6"
+           sodipodi:nodetypes="ccccccccc" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3303"
+           width="5.681818"
+           height="5.681818"
+           x="389.82205"
+           y="83.916183" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3305"
+           width="5.681818"
+           height="5.681818"
+           x="407.03201"
+           y="144.35619" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="rect3307"
+           width="5.681818"
+           height="5.681818"
+           x="397.19037"
+           y="198.13712" />
+      </g>
+      <text
+         sodipodi:linespacing="125%"
+         id="text15214"
+         y="237.07036"
+         x="395.46588"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
+         xml:space="preserve"><tspan
+           y="237.07036"
+           x="395.46588"
+           id="tspan15216"
+           sodipodi:role="line">FIND points</tspan><tspan
+           id="tspan15218"
+           y="249.57036"
+           x="395.46588"
+           sodipodi:role="line">on SKIN</tspan><tspan
+           id="tspan15220"
+           y="262.07037"
+           x="395.46588"
+           sodipodi:role="line">WITH markers</tspan></text>
     </g>
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
-       x="295.46588"
-       y="237.07036"
-       id="text15214"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan15216"
-         x="295.46588"
-         y="237.07036">FIND points</tspan><tspan
-         sodipodi:role="line"
-         x="295.46588"
-         y="249.57036"
-         id="tspan15218">on SKIN</tspan><tspan
-         sodipodi:role="line"
-         x="295.46588"
-         y="262.07037"
-         id="tspan15220">WITH markers</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
-       x="182.44485"
-       y="235.72824"
-       id="text11839"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan11841"
-         x="184.94485"
-         y="235.72824">FIND points </tspan><tspan
-         sodipodi:role="line"
-         x="182.44485"
-         y="248.22824"
-         id="tspan15202">on BLACK pants</tspan><tspan
-         sodipodi:role="line"
-         x="182.44485"
-         y="260.72824"
-         id="tspan15204">WITHOUT markers</tspan></text>
     <g
-       id="g18690"
-       transform="translate(-1.4996447,0)">
-      <path
-         sodipodi:nodetypes="ccccccccc"
-         id="path12428"
-         d="m 175.08978,69.963339 c -24.67163,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.0223 13.76709,30.27143 12.17532,36.52599 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 c 6.5617,-30.54721 -7.93126,-50.601545 -12.17533,-60.876635 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+       id="g4005"
+       transform="translate(48.757637,0)">
       <text
-         id="text18678"
-         y="92.086555"
-         x="178.08093"
-         style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+         sodipodi:linespacing="125%"
+         id="text11839"
+         y="235.72824"
+         x="182.44485"
+         style="font-size:10px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
          xml:space="preserve"><tspan
-           style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold"
+           y="235.72824"
+           x="184.94485"
+           id="tspan11841"
+           sodipodi:role="line">FIND points </tspan><tspan
+           id="tspan15202"
+           y="248.22824"
+           x="182.44485"
+           sodipodi:role="line">on BLACK pants</tspan><tspan
+           id="tspan15204"
+           y="260.72824"
+           x="182.44485"
+           sodipodi:role="line">WITHOUT markers</tspan></text>
+      <g
+         id="g3996">
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 172.86932,69.962988 c -24.67163,21.111456 -6.28781,31.949662 0.81169,44.642852 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 11.65732,-61.1703 c -1.42606,-29.90819 -9.2093,-43.57231 -14.09239,-58.959566 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+           id="path3325-5"
+           sodipodi:nodetypes="ccccccccc" />
+        <text
+           xml:space="preserve"
+           style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+           x="176.58128"
            y="92.086555"
-           x="178.08093"
-           id="tspan18680"
-           sodipodi:role="line">?</tspan></text>
-      <text
-         id="text18682"
-         y="153.72337"
-         x="192.58727"
-         style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
-         xml:space="preserve"><tspan
-           style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold"
-           y="153.72337"
-           x="192.58727"
-           id="tspan18684"
-           sodipodi:role="line">?</tspan></text>
-      <text
-         id="text18686"
-         y="205.70451"
-         x="185.35994"
-         style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
-         xml:space="preserve"><tspan
-           style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold"
+           id="text18678"><tspan
+             sodipodi:role="line"
+             id="tspan18680"
+             x="176.58128"
+             y="92.086555"
+             style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold">?</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+           x="192.04614"
+           y="152.44533"
+           id="text18682"><tspan
+             sodipodi:role="line"
+             id="tspan18684"
+             x="192.04614"
+             y="152.44533"
+             style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold">?</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:12.69473648px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+           x="183.86029"
            y="205.70451"
-           x="185.35994"
-           id="tspan18688"
-           sodipodi:role="line">?</tspan></text>
+           id="text18686"><tspan
+             sodipodi:role="line"
+             id="tspan18688"
+             x="183.86029"
+             y="205.70451"
+             style="font-weight:bold;fill:#ffffff;-inkscape-font-specification:Chandas Bold">?</tspan></text>
+      </g>
     </g>
     <g
        id="g10086"
@@ -932,102 +918,59 @@
            sodipodi:role="line">Exit</tspan></text>
     </g>
     <g
-       id="g3853"
-       transform="translate(455.40525,7.9606801)">
+       id="g3985"
+       transform="translate(4,0)">
+      <text
+         id="text3319"
+         y="237.43869"
+         x="42.858643"
+         style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas"
+         xml:space="preserve"><tspan
+           y="237.43869"
+           x="42.858643"
+           id="tspan3321"
+           sodipodi:role="line">VALIDATE</tspan></text>
+      <rect
+         y="69.804726"
+         x="47.468056"
+         height="139.10121"
+         width="44.286884"
+         id="rect3011"
+         style="fill:none;stroke:#ff0000;stroke-width:0.84253544;stroke-opacity:1" />
       <path
          sodipodi:nodetypes="ccccccccc"
-         id="path3301-8"
-         d="m -55.77308,62.002657 c -24.67163,21.111456 -6.28781,31.949665 0.81169,44.642853 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 c 6.5617,-30.54721 -7.93126,-50.601537 -12.17533,-60.876627 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+         id="path3325"
+         d="m 60.569116,69.963339 c -24.67163,21.111456 -6.28781,31.949661 0.81169,44.642851 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 11.657322,-61.1703 C 89.469219,116.06017 81.685977,102.39605 76.802886,87.008795 l 4.87013,-17.045455 -21.1039,-10e-7 z"
          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
       <rect
-         y="75.955498"
-         x="-52.562176"
+         y="84.155983"
+         x="63.811405"
          height="5.681818"
          width="5.681818"
-         id="rect3303-6"
+         id="rect3327"
          style="fill:#ffffff;fill-opacity:1;stroke:none" />
       <rect
-         y="137.6512"
-         x="-37.847668"
+         y="144.35596"
+         x="79.965195"
          height="5.681818"
          width="5.681818"
-         id="rect3305-2"
+         id="rect3329"
          style="fill:#ffffff;fill-opacity:1;stroke:none" />
       <rect
-         y="190.17644"
-         x="-45.193859"
+         y="198.37692"
+         x="71.179741"
          height="5.681818"
          width="5.681818"
-         id="rect3307-8"
+         id="rect3331"
          style="fill:#ffffff;fill-opacity:1;stroke:none" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
-       x="408.37946"
-       y="237.07036"
-       id="text15214-4"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan15216-7"
-         x="408.37946"
-         y="237.07036">FIND points</tspan><tspan
-         sodipodi:role="line"
-         x="408.37946"
-         y="249.57036"
-         id="tspan15218-2">on BLACK pants</tspan><tspan
-         sodipodi:role="line"
-         x="408.37946"
-         y="262.07037"
-         id="tspan15220-4">WITH markers</tspan></text>
-    <g
-       id="g3825"
-       transform="translate(6,-16)">
       <path
-         id="path2975"
-         d="M 28.450532,97.688578 122.58424,185.04657"
-         style="fill:none;stroke:#ff0303;stroke-width:2.06655812;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+         id="path3870"
+         d="m 100.39136,209.13951 0,-63.3408"
+         style="fill:none;stroke:#ff0000;stroke-width:0.99391675px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
       <path
-         id="path2975-6"
-         d="M 122.68438,96.86665 28.550676,184.22464"
-         style="fill:none;stroke:#ff0303;stroke-width:2.06655812;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-    </g>
-    <g
-       id="g4066">
-      <rect
-         y="174.24477"
-         x="32.877186"
-         height="46.028061"
-         width="96.165771"
-         id="rect3860"
-         style="fill:#e9afaf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995000000013;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
-      <text
-         id="text3319-5"
-         y="182.40225"
-         x="32.921394"
-         style="font-size:10px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:none;font-family:Chandas"
-         xml:space="preserve"><tspan
-           y="182.40225"
-           x="32.921394"
-           id="tspan3321-5"
-           sodipodi:role="line">Don't use,</tspan><tspan
-           id="tspan3854"
-           y="194.90225"
-           x="32.921394"
-           sodipodi:role="line">use this</tspan><tspan
-           id="tspan3856"
-           y="207.40225"
-           x="32.921394"
-           sodipodi:role="line">it manages better</tspan><tspan
-           id="tspan3858"
-           y="219.90225"
-           x="32.921394"
-           sodipodi:role="line">contour and holes</tspan></text>
+         id="path3870-9"
+         d="m 91.365717,145.97687 8.54056,0"
+         style="fill:#333333;stroke:#4a2121;stroke-width:0.36500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.73, 0.365;stroke-dashoffset:0" />
     </g>
-    <path
-       style="fill:none;stroke:#ff0000;stroke-width:2.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#EmptyTriangleOutL);stroke-miterlimit:4;stroke-dasharray:none"
-       d="M 83.836827,190.68335 387.95081,158.62809"
-       id="path3864"
-       sodipodi:nodetypes="cc" />
   </g>
 </svg>
diff --git a/src/angle/kneeAngle_skin.png b/src/angle/kneeAngle_skin.png
index 984968b..05d2d84 100644
Binary files a/src/angle/kneeAngle_skin.png and b/src/angle/kneeAngle_skin.png differ
diff --git a/src/angle/kneeAngle_skin.svg b/src/angle/kneeAngle_skin.svg
index a868350..965589d 100644
--- a/src/angle/kneeAngle_skin.svg
+++ b/src/angle/kneeAngle_skin.svg
@@ -4512,6 +4512,13 @@
        y1="158.41438"
        x2="53.499996"
        y2="142.05258" />
+    <inkscape:perspective
+       id="perspective5831"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -4523,16 +4530,16 @@
      objecttolerance="10"
      inkscape:pageopacity="1"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.1591386"
+     inkscape:zoom="1.5171962"
      inkscape:cx="250.99475"
-     inkscape:cy="146.78051"
+     inkscape:cy="145.48645"
      inkscape:document-units="px"
      inkscape:current-layer="capa1"
      showgrid="false"
      showguides="true"
      inkscape:guide-bbox="true"
      inkscape:window-width="1016"
-     inkscape:window-height="711"
+     inkscape:window-height="704"
      inkscape:window-x="0"
      inkscape:window-y="25"
      inkscape:window-maximized="0">
@@ -4737,57 +4744,54 @@
        y="220.44638"
        transform="matrix(1,0,0,0.875,0,27.255967)" />
     <g
-       id="g3683">
-      <g
-         transform="translate(-362.37542,-0.161616)"
-         id="g3313">
-        <path
-           style="fill:#efa698;fill-opacity:1;fill-rule:evenodd;stroke:#efa698;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 405.87671,70.124955 c -24.67163,21.111456 -6.28781,31.949665 0.81169,44.642855 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21183 -4.30248,38.55249 -7.3052,56.81818 l 12.98703,-0.81169 9.74026,-59.25324 c 6.5617,-30.54721 -7.93126,-50.601539 -12.17533,-60.876629 l 4.87013,-17.045455 -21.1039,-10e-7 z"
-           id="path3301"
-           sodipodi:nodetypes="ccccccccc" />
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:none"
-           id="rect3303"
-           width="5.681818"
-           height="5.681818"
-           x="409.08762"
-           y="84.077797" />
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:none"
-           id="rect3305"
-           width="5.681818"
-           height="5.681818"
-           x="423.80212"
-           y="145.7735" />
-        <rect
-           style="fill:#ffffff;fill-opacity:1;stroke:none"
-           id="rect3307"
-           width="5.681818"
-           height="5.681818"
-           x="416.45593"
-           y="198.29874" />
-      </g>
-      <text
-         sodipodi:linespacing="125%"
-         id="text15214"
-         y="237.07036"
-         x="12.356018"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
-         xml:space="preserve"><tspan
-           y="237.07036"
-           x="12.356018"
-           id="tspan15216"
-           sodipodi:role="line">FIND points</tspan><tspan
-           id="tspan15218"
-           y="249.57036"
-           x="12.356018"
-           sodipodi:role="line">on SKIN</tspan><tspan
-           id="tspan15220"
-           y="262.07037"
-           x="12.356018"
-           sodipodi:role="line">WITH markers</tspan></text>
+       id="g4019"
+       transform="translate(-361.05136,-0.246977)">
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path3325-5-6"
+         d="m 387.05851,69.962993 c -24.67163,21.111456 -6.28781,31.949667 0.81169,44.642857 6.17596,14.02229 13.76709,30.27142 12.17532,36.52598 -1.01347,28.21182 -4.30248,38.55248 -7.3052,56.81817 l 12.98703,-0.81169 11.65732,-61.17029 c -1.42606,-29.90819 -9.2093,-43.57231 -14.09239,-58.959571 l 4.87013,-17.045455 -21.1039,-10e-7 z"
+         style="fill:#efa698;fill-opacity:1;fill-rule:evenodd;stroke:#efa698;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         y="83.916183"
+         x="389.82205"
+         height="5.681818"
+         width="5.681818"
+         id="rect3303-5"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+      <rect
+         y="144.35619"
+         x="407.03201"
+         height="5.681818"
+         width="5.681818"
+         id="rect3305-3"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+      <rect
+         y="198.13712"
+         x="397.19037"
+         height="5.681818"
+         width="5.681818"
+         id="rect3307-9"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
     </g>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Chandas;-inkscape-font-specification:Chandas"
+       x="12.356018"
+       y="237.07036"
+       id="text15214"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan15216"
+         x="12.356018"
+         y="237.07036">FIND points</tspan><tspan
+         sodipodi:role="line"
+         x="12.356018"
+         y="249.57036"
+         id="tspan15218">on SKIN</tspan><tspan
+         sodipodi:role="line"
+         x="12.356018"
+         y="262.07037"
+         id="tspan15220">WITH markers</tspan></text>
     <rect
        style="opacity:0.78879311;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient7392);stroke-width:1.37848151;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
        id="rect6224"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]