¿Cómo evitar que las etiquetas 3D en Asíntota se llenen automáticamente de color?

¿Cómo evitar que las etiquetas 3D en Asíntota se llenen automáticamente de color?

Estoy intentando incluir etiquetas después de vectores 3D en Asíntota, que están dibujados con diferentes colores. Quiero tener todas las etiquetas en negro, pero incluso declarando el color.despuésla etiqueta no hace ninguna diferencia. Así es como se ve el resultado:

ingrese la descripción de la imagen aquí

¿Cómo puedo solucionar esto? ¡Gracias!

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);

Editar:Intenté poner la etiqueta en un segmento minúsculo con

draw(0.99*(Y+Z) -- Y+Z, L=Label("null", position=EndPoint));

y acaba de producir una caja de etiqueta completamente negra. Entonces el problema no son los colores.

Respuesta1

Gracias por informar de este error. En el futuro, informe errores enhttps://github.com/vectorgraphics/asymptote/issues

Ahora se incluye una solución en git y se incluirá en la próxima versión 2.84.

Tenga cuidado al usar settings.render=0; Con este enfoque, solo se dispone de soporte limitado para la eliminación de superficies ocultas, la iluminación y la transparencia. Ver https://asymptote.sourceforge.io/doc/tres.html

Mientras tanto, si usteden realidadSi desea continuar usando la opción experimental settings.render=0, puede eliminar las siguientes líneas marcadas - de su copia de three.asy:

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");

Respuesta2

Usaría el integrado unitconecon algunas transformaciones geométricas. Sobre el color: solo usa blackel interior Labelpara colorear su cuerda. Espero que el código sea simple ahora.

ingrese la descripción de la imagen aquí

// 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);

información relacionada