
Ich versuche, Beschriftungen nach 3D-Vektoren in Asymptote einzufügen, die mit unterschiedlichen Farben gezeichnet werden. Ich möchte alle Beschriftungen schwarz haben, aber selbst die Angabe der Farbenachdas Label spielt keine Rolle. So sieht die Ausgabe aus:
Wie behebe ich das? Danke!
import math;
settings.outformat="pdf";
settings.prc=true;
settings.embed=true;
settings.render=0;
size(5cm,0);
import graph3;
triple F(pair uv) {
real r = uv.x;
real t = uv.y;
return (r*cos(t),r*sin(t), r);}
surface coneup = surface(F, (0,0), (1,2pi), Spline);
draw(coneup, surfacepen=material(paleyellow, emissivepen=0.2 paleyellow), light=Viewport);
triple F2(pair uv) {
real r = uv.x;
real t = uv.y;
return (r*cos(t),r*sin(t), -r);}
surface conedown = surface(F2, (0,0), (1,2pi), Spline);
draw(conedown, surfacepen=material(paleyellow, emissivepen=0.2 paleyellow), light=Viewport);
draw(O--X, Arrow3);
draw(O--Y, Arrow3);
draw(O--Z, Arrow3);
draw(O--Y+Z, L=Label("null", position=EndPoint), yellow, Arrow3);
draw(O--.5*X+1.5*Z, L=Label("timelike", position=EndPoint), green, Arrow3);
draw(O--1.5*X+0.5*Z, L=Label("spacelike", position=EndPoint), red, Arrow3);
Bearbeiten:Ich habe versucht, das Etikett in ein winziges Segment zu setzen mit
draw(0.99*(Y+Z) -- Y+Z, L=Label("null", position=EndPoint));
und es entstand nur eine komplett schwarze Etikettenbox. Das Problem sind also nicht die Farben.
Antwort1
Vielen Dank für die Meldung dieses Fehlers. Bitte melden Sie Fehler in Zukunft unterhttps://github.com/vectorgraphics/asymptote/issues
In Git ist jetzt ein Fix enthalten, der in der kommenden Version 2.84 enthalten sein wird.
Seien Sie vorsichtig bei der Verwendung von settings.render=0; bei diesem Ansatz ist nur eine begrenzte Unterstützung für die Entfernung versteckter Oberflächen, Beleuchtung und Transparenz verfügbar. Siehe https://asymptote.sourceforge.io/doc/three.html
Wenn Sie in der ZwischenzeitWirklichWenn Sie weiterhin die experimentelle Option „settings.render=0“ verwenden möchten, können Sie die folgenden mit „-“ markierten Zeilen aus Ihrer Kopie von three.asy löschen:
diff --git a/base/three.asy b/base/three.asy
index c208f59d..9dfad6ce 100644
--- a/base/three.asy
+++ b/base/three.asy
@@ -2907,11 +2907,6 @@ object embed(string prefix=outprefix(), string label=prefix,
if((preview || (prc && settings.render == 0)) && settings.embed) {
image=prefix;
if(settings.inlinetex) image += "_0";
- if(!preview && !S.pic2.empty2()) {
- transform T=S.pic2.scaling(S.width,S.height);
- _shipout(image,S.pic2.fit(T),newframe,nativeformat(),false,false);
- }
-
image += "."+nativeformat();
if(!settings.inlinetex) file3.push(image);
image=graphic(image,"hiresbb");
Antwort2
Ich würde das integrierte Feature unitcone
mit einigen geometrischen Transformationen verwenden. Was die Farbe betrifft: Verwenden Sie einfach black
inside Label
, um die Zeichenfolge einzufärben. Ich hoffe, dass der Code jetzt einfach ist.
// http://asymptote.ualberta.ca/
size(6cm,0);
import three;
currentprojection=orthographic(3,2,1,zoom=.9,center=true);
surface conedown=shift(0,0,-1)*unitcone;
surface coneup=scale(1,1,-1)*conedown;
material p=material(paleyellow,emissivepen=0.2 paleyellow);
draw(coneup,surfacepen=p,light=Viewport);
draw(conedown,surfacepen=p,light=Viewport);
draw(O--X, Arrow3);
draw(O--Y, Arrow3);
draw(O--Z, Arrow3);
draw(Label("null",EndPoint,align=E,black),O--Y+Z,yellow,Arrow3);
draw(Label("time-like",EndPoint,black),O--.5*X+1.5*Z,green,Arrow3);
draw(Label("space-like",EndPoint,black),O--1.5*X+0.5*Z,red,Arrow3);