Add `fill` option to `Angle` in Mechanics.asy.
authorW. Trevor King <wking@drexel.edu>
Wed, 4 Apr 2012 18:44:36 +0000 (14:44 -0400)
committerW. Trevor King <wking@drexel.edu>
Wed, 4 Apr 2012 18:44:36 +0000 (14:44 -0400)
asymptote/Mechanics-test.asy
asymptote/Mechanics.asy

index a63e7d015d4806766f6d4ca4366babef6530a2c0..efd2cd5690d1cfb8ac1217a6008391b2c9e7e0b7 100644 (file)
@@ -28,8 +28,10 @@ Mass ms[] = {a,b, c};
 Distance dab = Distance(a.center, b.center, scale=u, L="$r_{ab}$");
 Distance dac = Distance(a.center, c.center, scale=u, L="$r_{ac}$");
 Distance ds[] = {dab, dac};
-Angle bac = Angle(b.center, a.center, c.center, radius=-.5u, L="$\theta_T$");
-Angle as[] = {bac};
+Angle bac1 = Angle(
+    b.center, a.center, c.center, radius=.7u, fill=red, L="$\theta_T'$");
+Angle bac2 = Angle(b.center, a.center, c.center, radius=-.5u, L="$\theta_T$");
+Angle as[] = {bac1, bac2};
 
 Vector vs[];
 
@@ -40,12 +42,12 @@ vs.push(Vector(center=(-1u,-4u), phi=90, "Out"));
 vs.push(Vector(center=(-1u,-5.5u), phi=-90, "In"));
 vs.push(Vector(center=(0, -4u), mag=1.5u, dir=-90, phi=60, "60dg OOP"));
 
+for (int i=0; i<as.length; i+=1)
+  as[i].draw();
 for (int i=0; i<ms.length; i+=1)
   ms[i].draw();
 for (int i=0; i<ds.length; i+=1)
   ds[i].draw();
-for (int i=0; i<as.length; i+=1)
-  as[i].draw();
 for (int i=0; i<vs.length; i+=1)
   vs[i].draw();
 
index 2836784fe6d466f377cc145460ac4004b2c68372..6a634f4540f295a3df2b7e13374fc8a72e18a4c5 100644 (file)
@@ -303,14 +303,16 @@ struct Angle {
   pair C;
   real radius; // radius < 0 for exterior angles.
   pen outline;
+  pen fill;
   Label L;
 
-  void operator init(pair B, pair A, pair C, real radius=5mm, pen outline=currentpen, Label L="") {
+  void operator init(pair B, pair A, pair C, real radius=5mm, pen outline=currentpen, pen fill=invisible, Label L="") {
     this.B = B;
     this.A = A;
     this.C = C;
     this.radius = radius;
     this.outline = outline;
+    this.fill = fill;
     this.L = L;
   }
   
@@ -339,7 +341,11 @@ struct Angle {
     if (rotateLabel == false)
       label_rotate = (1,0);
     
-    draw(picF, p, outline);    
+    if (this.fill != invisible) {
+      path pcycle = (0,0) -- p -- cycle;
+      fill(picF, pcycle, this.fill);
+    }
+    draw(picF, p, this.outline);
     label(pic = picF,
           L = rotate(degrees(label_rotate)) * L,
           position = P + unit(P) * (pLabelSize.y / 2 + labelOffsetAdjustment));