// File: carlos-urena[P]svg-gen/svgobjects.cpp
// Function: Figure::drawSVG(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void Figure::drawSVG( const std::string & nombre_arch )
{
   using namespace std ;
   std::fstream fout( nombre_arch, ios_base::out) ;

   if ( ! objetos.projected )
      objetos.project( cam ) ;

   SVGContext ctx ;
   ctx.os = &fout ;

   constexpr real fmrg = 0.01 ; // width del margen en X y en Y, expresado en porcentaje del width en X
   //cout << "objetos.min == " << objetos.max << ", objetos.max == " << objetos.min << endl ;

   const real ax       = objetos.max[0]-objetos.min[0] ;
   const vec2 vmargen  = vec2( fmrg*ax, fmrg*ax );
   const vec2 ptos_min = objetos.min,
              ptos_w   = objetos.max-objetos.min,
              box_min  = ptos_min-vmargen,
              box_w    = ptos_w+real(2.0)*vmargen ;

   assert( 0 < box_w[0] && 0 < box_w[1] );
   real ratio = box_w[1]/box_w[0] ;

   const real wx = width_cm,      // width en centimetros
              wy = wx*ratio ;

   // cabecera svg
   fout << "<svg xmlns='http://www.w3.org/2000/svg' " << endl
        << "     width='" << wx << "cm' height='" << wy << "cm' " << endl
        << "     viewBox='" << box_min[0] << " " << box_min[1] << " " << box_w[0] << " " << box_w[1] << "'" << endl
        << ">" << endl ;


   //write_radial_gradient_def( fout, "hemisphereGradFill" );

   fout << "<defs>" << endl ;
   write_radial_gradient_def( fout, "hemisphereGradFill" );
   write_radial_gradient_def_blue( fout, "spherecapGradFill" );
   fout << "</defs>" << endl ;

   fout << "<g transform='translate(0.0 " << real(2.0)*box_min[1]+box_w[1] << ") scale(1.0 -1.0)'> <!-- transf global (inv y) -->"<< endl ;



   // objetos svg
   objetos.drawSVG( ctx );

   // pie svg
   fout << "</g>" << endl ;
   fout << "</svg>" << endl ;

   fout.close();

   //cout << "end svg " << nombre_arch << endl ;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4c0, %rsp            # imm = 0x4C0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x2f8(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x220(%rbp), %rdi
movl $0x10, %edx
callq 0x3270
movq -0x2f8(%rbp), %rax
testb $0x1, 0x38(%rax)
jne 0x10b2e
movq -0x2f8(%rbp), %rsi
movq %rsi, %rdi
addq $0x30, %rdi
callq 0xb6a0
jmp 0x10b15
jmp 0x10b2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x228(%rbp)
movl %eax, -0x22c(%rbp)
jmp 0x113e0
leaq -0x238(%rbp), %rdi
callq 0xa960
jmp 0x10b3c
xorl %eax, %eax
leaq -0x220(%rbp), %rcx
cmpq $0x0, %rcx
movq %rax, -0x300(%rbp)
je 0x10b64
leaq -0x220(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x300(%rbp)
movq -0x2f8(%rbp), %rdi
movq -0x300(%rbp), %rax
movq %rax, -0x238(%rbp)
movl $0x3c23d70a, -0x23c(%rbp) # imm = 0x3C23D70A
addq $0x44, %rdi
callq 0x13470
movq %rax, -0x308(%rbp)
jmp 0x10b95
movq -0x2f8(%rbp), %rdi
movq -0x308(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x314(%rbp)
addq $0x3c, %rdi
callq 0x13470
movq %rax, -0x310(%rbp)
jmp 0x10bc1
movss -0x314(%rbp), %xmm0
movq -0x310(%rbp), %rax
movss (%rax), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x240(%rbp)
movss -0x240(%rbp), %xmm0
movss 0x6418(%rip), %xmm1     # 0x17008
mulss %xmm1, %xmm0
movss %xmm0, -0x24c(%rbp)
movss -0x240(%rbp), %xmm0
mulss %xmm1, %xmm0
movss %xmm0, -0x250(%rbp)
leaq -0x248(%rbp), %rdi
leaq -0x24c(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x133b0
jmp 0x10c2c
movq -0x2f8(%rbp), %rdi
movq %rdi, %rsi
addq $0x3c, %rsi
movq 0x3c(%rdi), %rax
movq %rax, -0x258(%rbp)
addq $0x44, %rdi
callq 0x139d0
movaps %xmm0, -0x330(%rbp)
jmp 0x10c57
movaps -0x330(%rbp), %xmm0
movlpd %xmm0, -0x268(%rbp)
leaq -0x260(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x13d70
jmp 0x10c7b
leaq -0x258(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x139d0
movaps %xmm0, -0x340(%rbp)
jmp 0x10c97
movaps -0x340(%rbp), %xmm0
movlpd %xmm0, -0x278(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x13d70
jmp 0x10cbb
movss 0x656d(%rip), %xmm0     # 0x17230
leaq -0x248(%rbp), %rdi
callq 0x13df0
movaps %xmm0, -0x350(%rbp)
jmp 0x10cd8
movaps -0x350(%rbp), %xmm0
movlpd %xmm0, -0x290(%rbp)
leaq -0x260(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x13ad0
movaps %xmm0, -0x360(%rbp)
jmp 0x10d03
movaps -0x360(%rbp), %xmm0
movlpd %xmm0, -0x288(%rbp)
leaq -0x280(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x13d70
jmp 0x10d27
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x368(%rbp)
jmp 0x10d3c
movq -0x368(%rbp), %rax
movss (%rax), %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
movb %al, -0x369(%rbp)
jbe 0x10d87
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x378(%rbp)
jmp 0x10d6c
movq -0x378(%rbp), %rax
movss 0x4(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
seta %al
movb %al, -0x369(%rbp)
movb -0x369(%rbp), %al
testb $0x1, %al
jne 0x10d93
jmp 0x10d95
jmp 0x10db4
leaq 0x6b73(%rip), %rdi      # 0x1790f
leaq 0x66cd(%rip), %rsi      # 0x17470
movl $0x3ac, %edx            # imm = 0x3AC
leaq 0x6b7d(%rip), %rcx      # 0x1792c
callq 0x3100
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x380(%rbp)
jmp 0x10dc9
movq -0x380(%rbp), %rax
movss 0x4(%rax), %xmm0
movss %xmm0, -0x38c(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x388(%rbp)
jmp 0x10df2
movq -0x2f8(%rbp), %rax
movss -0x38c(%rbp), %xmm0
movq -0x388(%rbp), %rcx
movss (%rcx), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x294(%rbp)
movss 0x68(%rax), %xmm0
movss %xmm0, -0x298(%rbp)
movss -0x298(%rbp), %xmm0
movss -0x294(%rbp), %xmm1
mulss %xmm1, %xmm0
movss %xmm0, -0x29c(%rbp)
leaq -0x210(%rbp), %rdi
leaq 0x6b07(%rip), %rsi      # 0x17956
callq 0x31a0
movq %rax, -0x398(%rbp)
jmp 0x10e5d
movq -0x398(%rbp), %rdi
movq 0xd13d(%rip), %rsi      # 0x1dfa8
callq 0x31c0
movq %rax, -0x3a0(%rbp)
jmp 0x10e79
movq -0x3a0(%rbp), %rdi
leaq 0x6af8(%rip), %rsi      # 0x1797f
callq 0x31a0
movq %rax, -0x3a8(%rbp)
jmp 0x10e95
movq -0x3a8(%rbp), %rdi
movss -0x298(%rbp), %xmm0
callq 0x3120
movq %rax, -0x3b0(%rbp)
jmp 0x10eb2
movq -0x3b0(%rbp), %rdi
leaq 0x6acc(%rip), %rsi      # 0x1798c
callq 0x31a0
movq %rax, -0x3b8(%rbp)
jmp 0x10ece
movq -0x3b8(%rbp), %rdi
movss -0x29c(%rbp), %xmm0
callq 0x3120
movq %rax, -0x3c0(%rbp)
jmp 0x10eeb
movq -0x3c0(%rbp), %rdi
leaq 0x6aa0(%rip), %rsi      # 0x17999
callq 0x31a0
movq %rax, -0x3c8(%rbp)
jmp 0x10f07
movq -0x3c8(%rbp), %rdi
movq 0xd093(%rip), %rsi      # 0x1dfa8
callq 0x31c0
movq %rax, -0x3d0(%rbp)
jmp 0x10f23
movq -0x3d0(%rbp), %rdi
leaq 0x6a6d(%rip), %rsi      # 0x1799e
callq 0x31a0
movq %rax, -0x3d8(%rbp)
jmp 0x10f3f
leaq -0x270(%rbp), %rdi
callq 0x13300
movq %rax, -0x3e0(%rbp)
jmp 0x10f54
movq -0x3d8(%rbp), %rdi
movq -0x3e0(%rbp), %rax
movss (%rax), %xmm0
callq 0x3120
movq %rax, -0x3e8(%rbp)
jmp 0x10f74
movq -0x3e8(%rbp), %rdi
leaq 0x6480(%rip), %rsi      # 0x17402
callq 0x31a0
movq %rax, -0x3f0(%rbp)
jmp 0x10f90
leaq -0x270(%rbp), %rdi
callq 0x13300
movq %rax, -0x3f8(%rbp)
jmp 0x10fa5
movq -0x3f0(%rbp), %rdi
movq -0x3f8(%rbp), %rax
movss 0x4(%rax), %xmm0
callq 0x3120
movq %rax, -0x400(%rbp)
jmp 0x10fc6
movq -0x400(%rbp), %rdi
leaq 0x642e(%rip), %rsi      # 0x17402
callq 0x31a0
movq %rax, -0x408(%rbp)
jmp 0x10fe2
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x410(%rbp)
jmp 0x10ff7
movq -0x408(%rbp), %rdi
movq -0x410(%rbp), %rax
movss (%rax), %xmm0
callq 0x3120
movq %rax, -0x418(%rbp)
jmp 0x11017
movq -0x418(%rbp), %rdi
leaq 0x63dd(%rip), %rsi      # 0x17402
callq 0x31a0
movq %rax, -0x420(%rbp)
jmp 0x11033
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x428(%rbp)
jmp 0x11048
movq -0x420(%rbp), %rdi
movq -0x428(%rbp), %rax
movss 0x4(%rax), %xmm0
callq 0x3120
movq %rax, -0x430(%rbp)
jmp 0x11069
movq -0x430(%rbp), %rdi
leaq 0x6785(%rip), %rsi      # 0x177fc
callq 0x31a0
movq %rax, -0x438(%rbp)
jmp 0x11085
movq -0x438(%rbp), %rdi
movq 0xcf15(%rip), %rsi      # 0x1dfa8
callq 0x31c0
movq %rax, -0x440(%rbp)
jmp 0x110a1
movq -0x440(%rbp), %rdi
leaq 0x62ea(%rip), %rsi      # 0x17399
callq 0x31a0
movq %rax, -0x448(%rbp)
jmp 0x110bd
movq -0x448(%rbp), %rdi
movq 0xcedd(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x110d2
leaq -0x210(%rbp), %rdi
leaq 0x68cd(%rip), %rsi      # 0x179ad
callq 0x31a0
movq %rax, -0x450(%rbp)
jmp 0x110ee
movq -0x450(%rbp), %rdi
movq 0xceac(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x11103
leaq -0x210(%rbp), %rax
movq %rax, -0x460(%rbp)
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x3290
movq -0x458(%rbp), %rdx
leaq 0x66d4(%rip), %rsi      # 0x17806
leaq -0x2c0(%rbp), %rdi
callq 0x3200
jmp 0x11140
movq -0x460(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x9ed0
jmp 0x11155
leaq -0x2c0(%rbp), %rdi
callq 0x30f0
leaq -0x2c1(%rbp), %rdi
callq 0x31d0
leaq -0x210(%rbp), %rax
movq %rax, -0x470(%rbp)
leaq -0x2e9(%rbp), %rdi
movq %rdi, -0x468(%rbp)
callq 0x3290
movq -0x468(%rbp), %rdx
leaq 0x5ede(%rip), %rsi      # 0x1707a
leaq -0x2e8(%rbp), %rdi
callq 0x3200
jmp 0x111aa
movq -0x470(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x9f80
jmp 0x111bf
leaq -0x2e8(%rbp), %rdi
callq 0x30f0
leaq -0x2e9(%rbp), %rdi
callq 0x31d0
leaq -0x210(%rbp), %rdi
leaq 0x67cf(%rip), %rsi      # 0x179b4
callq 0x31a0
movq %rax, -0x478(%rbp)
jmp 0x111f3
movq -0x478(%rbp), %rdi
movq 0xcda7(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x11208
leaq -0x210(%rbp), %rdi
leaq 0x67a6(%rip), %rsi      # 0x179bc
callq 0x31a0
movq %rax, -0x480(%rbp)
jmp 0x11224
leaq -0x270(%rbp), %rdi
callq 0x13300
movq %rax, -0x488(%rbp)
jmp 0x11239
movq -0x488(%rbp), %rax
movss 0x4(%rax), %xmm0
movss %xmm0, -0x494(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x13300
movq %rax, -0x490(%rbp)
jmp 0x11262
movq -0x480(%rbp), %rdi
movss -0x494(%rbp), %xmm0
movq -0x490(%rbp), %rax
movss 0x4(%rax), %xmm1
addss %xmm0, %xmm0
addss %xmm1, %xmm0
callq 0x3120
movq %rax, -0x4a0(%rbp)
jmp 0x11293
movq -0x4a0(%rbp), %rdi
leaq 0x6738(%rip), %rsi      # 0x179d9
callq 0x31a0
movq %rax, -0x4a8(%rbp)
jmp 0x112af
movq -0x4a8(%rbp), %rdi
movq 0xcceb(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x112c4
movq -0x2f8(%rbp), %rdi
addq $0x30, %rdi
leaq -0x238(%rbp), %rsi
callq 0xb8c0
jmp 0x112dd
leaq -0x210(%rbp), %rdi
leaq 0x6721(%rip), %rsi      # 0x17a0c
callq 0x31a0
movq %rax, -0x4b0(%rbp)
jmp 0x112f9
movq -0x4b0(%rbp), %rdi
movq 0xcca1(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x1130e
leaq -0x210(%rbp), %rdi
leaq 0x66f5(%rip), %rsi      # 0x17a11
callq 0x31a0
movq %rax, -0x4b8(%rbp)
jmp 0x1132a
movq -0x4b8(%rbp), %rdi
movq 0xcc70(%rip), %rsi      # 0x1dfa8
callq 0x31c0
jmp 0x1133f
leaq -0x220(%rbp), %rdi
callq 0x3050
jmp 0x1134d
leaq -0x220(%rbp), %rdi
callq 0x3070
addq $0x4c0, %rsp            # imm = 0x4C0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x228(%rbp)
movl %eax, -0x22c(%rbp)
jmp 0x11394
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x228(%rbp)
movl %eax, -0x22c(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x30f0
leaq -0x2c1(%rbp), %rdi
callq 0x31d0
jmp 0x113e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x228(%rbp)
movl %eax, -0x22c(%rbp)
jmp 0x113d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x228(%rbp)
movl %eax, -0x22c(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x30f0
leaq -0x2e9(%rbp), %rdi
callq 0x31d0
leaq -0x220(%rbp), %rdi
callq 0x3070
movq -0x228(%rbp), %rdi
callq 0x3280
nopl (%rax,%rax)