shithub: 3dee

Download patch

ref: d373fc68baa8fad364956bd5a1a5d9834adeb7dc
parent: 8a79bead1af83cb65ec7e0fc991332c200416373
author: rodri <rgl@antares-labs.eu>
date: Mon Jun 16 13:00:20 EDT 2025

plot3: add axis scale tenth markers. update tools/plotgen

--- a/plot3.c
+++ b/plot3.c
@@ -123,8 +123,8 @@
 void
 addpttotheplot(Point3 p)
 {
-	if(theplot.npts % 4 == 0)
-		theplot.pts = erealloc(theplot.pts, (theplot.npts + 4)*sizeof(Plotpt));
+	if(theplot.npts % 16 == 0)
+		theplot.pts = erealloc(theplot.pts, (theplot.npts + 16)*sizeof(Plotpt));
 	theplot.pts[theplot.npts++] = (Plotpt){p, brush};
 	updatebboxfromtheplot();
 }
@@ -173,7 +173,9 @@
 {
 	Model *mdl;
 	Entity *ent;
-	Primitive line;
+	Primitive line, mark;
+	Point3 stepv;
+	int i;
 
 	mdl = newmodel();
 	ent = newentity("axis scales", mdl);
@@ -181,19 +183,41 @@
 
 	line.type = PLine;
 	line.v[0].c = line.v[1].c = Pt3(0.4,0.4,0.4,1);
+	mark = line;
 
 	/* x scale */
 	line.v[0].p = Pt3(smallestbbox(x), smallestbbox(y), smallestbbox(z), 1);
 	line.v[1].p = Pt3(biggestbbox(x), smallestbbox(y), smallestbbox(z), 1);
 	mdl->addprim(mdl, line);
+	stepv = subpt3(line.v[1].p, line.v[0].p);
+	stepv = divpt3(stepv, 10);
+	for(i = 1; i <= 10; i++){
+		mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+		mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, Vec3(0,1,0), 90*DEG));
+		mdl->addprim(mdl, mark);
+	}
 
 	/* y scale */
 	line.v[1].p = Pt3(smallestbbox(x), biggestbbox(y), smallestbbox(z), 1);
 	mdl->addprim(mdl, line);
+	stepv = subpt3(line.v[1].p, line.v[0].p);
+	stepv = divpt3(stepv, 10);
+	for(i = 1; i <= 10; i++){
+		mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+		mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, normvec3(Vec3(-1,0,1)), 90*DEG));
+		mdl->addprim(mdl, mark);
+	}
 
 	/* z scale */
 	line.v[1].p = Pt3(smallestbbox(x), smallestbbox(y), biggestbbox(z), 1);
 	mdl->addprim(mdl, line);
+	stepv = subpt3(line.v[1].p, line.v[0].p);
+	stepv = divpt3(stepv, 10);
+	for(i = 1; i <= 10; i++){
+		mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+		mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, Vec3(0,1,0), -90*DEG));
+		mdl->addprim(mdl, mark);
+	}
 }
 
 void
@@ -213,7 +237,6 @@
 
 	memset(&prim, 0, sizeof prim);
 	prim.type = PPoint;
-
 	for(p = theplot.pts; p < theplot.pts + theplot.npts; p++){
 		prim.v[0].p = p->p;
 		prim.v[0].c = p->c->c;
--- a/tools/plotgen
+++ b/tools/plotgen
@@ -15,6 +15,13 @@
 	step=$step(1)
 
 hoc <<EOF
+func sign(x) {
+	if(x < 0) return -1
+	return 1
+}
+func round(x) {
+	return int(x + 0.5)
+}
 func lanczos(x) {
 	if(x == 0) return 1
 	if(x < -a || x >= a) return 0
@@ -32,10 +39,10 @@
 for(x = lo; x < hi; x += step){
 for(z = lo; z < hi; z += step){
 	y = $3
-	if(y > 0 && y < 0.1) print "co red\n"
-	if(y >= 0.1 && y < 0.5) print "co green\n"
-	if(y >= 0.5 && y < 0.75) print "co blue\n"
-	if(y >= 0.75) print "co black\n"
+#	if(y > 0 && y < 0.1) print "co red\n"
+#	if(y >= 0.1 && y < 0.5) print "co green\n"
+#	if(y >= 0.5 && y < 0.75) print "co blue\n"
+#	if(y >= 0.75) print "co black\n"
 	print x
 	print " "
 	print y
--