summaryrefslogtreecommitdiff
path: root/graphics/asymptote/base/three_arrows.asy
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/base/three_arrows.asy')
-rw-r--r--graphics/asymptote/base/three_arrows.asy44
1 files changed, 23 insertions, 21 deletions
diff --git a/graphics/asymptote/base/three_arrows.asy b/graphics/asymptote/base/three_arrows.asy
index 87fc39c52e..b0369e6bea 100644
--- a/graphics/asymptote/base/three_arrows.asy
+++ b/graphics/asymptote/base/three_arrows.asy
@@ -105,8 +105,11 @@ struct arrowhead3
s.append(shift(-n)*t*extrude(g,width*Z));
}
if(draw)
- for(path3 g : H)
- s.append(tube(g,width).s);
+ for(path3 g : H) {
+ tube T=tube(g,width);
+ for(surface S : T.s)
+ s.append(S);
+ }
return shift(v)*s;
}
@@ -150,27 +153,26 @@ DefaultHead3.head=new surface(path3 g, position position=EndPoint,
real remainL=size;
bool first=true;
for(int i=0; i < n; ++i) {
- render(subpath(s,i,i+1),new void(path3 q, real) {
- if(remainL > 0) {
- real l=arclength(q);
- real w=remainL*aspect;
- surface segment=scale(w,w,l)*unitcylinder;
- if(first) { // add base
- first=false;
- segment.append(scale(w,w,1)*unitdisk);
- }
- for(patch p : segment.s) {
- for(int i=0; i < 4; ++i) {
- for(int j=0; j < 4; ++j) {
- real k=1-p.P[i][j].z/remainL;
- p.P[i][j]=bend((k*p.P[i][j].x,k*p.P[i][j].y,p.P[i][j].z),q,l);
- }
- }
+ path3 q=subpath(s,i,i+1);
+ if(remainL > 0) {
+ real l=arclength(q);
+ real w=remainL*aspect;
+ surface segment=scale(w,w,l)*unitcylinder;
+ if(first) { // add base
+ first=false;
+ segment.append(scale(w,w,1)*unitdisk);
+ }
+ for(patch p : segment.s) {
+ for(int i=0; i < 4; ++i) {
+ for(int j=0; j < 4; ++j) {
+ real k=1-p.P[i][j].z/remainL;
+ p.P[i][j]=bend((k*p.P[i][j].x,k*p.P[i][j].y,p.P[i][j].z),q,l);
}
- head.append(segment);
- remainL -= l;
}
- });
+ }
+ head.append(segment);
+ remainL -= l;
+ }
}
}
return head;