Your message dated Mon, 11 Feb 2019 20:05:06 +0100
with message-id <[email protected]>
and subject line Fixed some time ago in upstream and in Debian
has caused the Debian Bug report #711760,
regarding rotate([something]) of 3D object appears to read undefined values
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
711760: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=711760
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: openscad
Version: 2011.12-3

The attached test file has what is arguably a bug.  On line 197 it
says
    rotate([90 + led_angle])
where it should say
    rotate([90 + led_angle, 0, 0])

However, when fed to openscad the results are unpredictable.  Amongst
the outcomes I have seen:
  - the hole (which is the cylinder cut out near the top of the
    object) appears with various unpredictable alignments
  - assertion failures from openscad
       CGAL error: assertion violation!
       Expression : is_finite(d)
       File       : /usr/include/CGAL/GMP/Gmpq_type.h
       Line       : 132
       Explanation: 
       Refer to the bug-reporting instructions at 
http://www.cgal.org/bug_report.html
       Aborted
  - the behavour I intended when I wrote the file

IMO the following would be acceptable behaviours:
  - reject the input file
  - treat the missing elements as 0
  - if documented, interpret the input in some entirely different way

I conjecture that the part of openscad code which interprets the array
argument to the rotate() command fails to check that the array has 3
elements before reading all 3 of them - and as a result gets
unpredictable values from whatever happens to be next in memory.

Ian.

// -*- C -*-

led_dia = 5 + 0.6;
led_depth = 5;

led_tip_height_above_crossbar = 70;
led_angle = -60;
crossbar_dia = 25; // fixme

vert_space_inside = 8;
backfront_space_inside = 12;
width_space_inside = 10;

backfront_mate_size = 25;
tower_frontheight = 10;
tower_base_height = 20;
tower_slot_width = 3;

cableclamp_ctie_width = 4.0 + 1.0;
cableclamp_ctie_thick = 2.5 + 0.5;

lidclamp_ctie_width = 4.0 + 1.0;
lidclamp_ctie_thick = 2.5 + 0.5;

base_ctie_width = 4.0 + 1.0;
base_ctie_thick = 2.5 + 0.5;

tube_ctie_width = 4.0 + 1.0;
tube_ctie_thick = 2.5 + 0.5;

// tuning

tower_over_angle = 45;
tower_wall_thick = 1.6;
tower_forehead_angle = 30;
lid_wall_thick = 1.6;
lid_slop = 0.75;
//cableclamp_ctie_anchor = 5;
lidclamp_cableclamp_ctie_between = 0;
base_ctie_anchor = 5;
tube_ctie_anchor = 5;
protrusion_size = 2;
protrusion_none_frontback = 10;
protrusion_slop = 0.25;
cableclamp_ctie_z = tower_frontheight/2;

towerleg_backfront = 5;
towerleg_width = 3;
towerleg_foot_gap = 2;
towerleg_foot_backfront = 20;
towerleg_foot_width = 40;
towerleg_foot_height = 10;
towerleg_yslope = 0.7;
towerleg_xslope = 0.3;
echo(sqrt(towerleg_yslope*towerleg_yslope+towerleg_xslope*towerleg_xslope));

//--- tests ---

test_width = 24;
test_height = 24;

test_thicks = [9,14,21];

module Tests(){ ////toplevel
  for (thicki=[0:len(test_thicks)-1]) {
    translate([thicki*test_width-0.5, 0, 0]) {
      difference(){
        cube([test_width,
              test_thicks[thicki] + led_depth,
              test_height]);
        translate([test_width/2, -1, test_height/2])
          rotate([-90,0,0])
          cylinder(r=led_dia/2, h=led_depth+1, $fn=30);
      }
    }
  }
}

//Tests();

//--- real thing ---

// calculated

tower_overhang = led_dia * 2.5;
tower_width = width_space_inside + tower_wall_thick*2;

tower_over_max_y = tower_overhang * sin(tower_over_angle);
tower_over_max_z = tower_frontheight + tower_overhang * cos(tower_over_angle);
tower_total_max_z = tower_over_max_z + vert_space_inside + led_depth;
tower_rearwall_y = -(backfront_space_inside + tower_wall_thick);
led_head_y = tower_over_max_y/2;
led_head_z = tower_frontheight + tower_overhang*sin(tower_over_angle)/2;
backfront_mate_extra = (backfront_mate_size - (-tower_rearwall_y));

tower_height_contribution = led_head_z + tower_base_height;

base_ctie_anchor_eff = base_ctie_anchor+base_ctie_thick/2;
tube_ctie_anchor_eff = tube_ctie_anchor+tube_ctie_thick/2;

base_width = 0.7 * crossbar_dia;
base_backfront = backfront_mate_extra - tower_rearwall_y;
base_height = led_tip_height_above_crossbar - tower_height_contribution;

protrusion_frontback = base_backfront - protrusion_none_frontback;

echo(tower_height_contribution, base_height);

module TowerWallCrossSection(){
  // generates a 2D shape - a polygon
  // x is what is going to be -y
  // y is what is going to be z
  polygon([[0,                  0],
           [0,                  tower_frontheight],
           [-tower_over_max_y,  tower_over_max_z],
           [-tower_over_max_y
            + tan(tower_forehead_angle) * (vert_space_inside + led_depth),
            tower_total_max_z],
           [-tower_rearwall_y,  tower_total_max_z],
           [-tower_rearwall_y,  0],
           [-tower_rearwall_y, -tower_base_height],
           [-backfront_mate_extra, -tower_base_height]],
          convexity=5);
}

module TowerWallSomeEdge(front){
  minkowski(){
    difference(){
      TowerWallCrossSection();
      translate([front ? 0.10 : -0.10, 0])
        TowerWallCrossSection();
    }
    circle(r=tower_wall_thick, $fn=8);
  }
}

module TowerBulkCrossSection(){
  intersection(){
    TowerWallCrossSection();
    union(){
      translate([-led_head_y, led_head_z])
        circle(r = led_depth);
      TowerWallSomeEdge(true);
      translate([-50, -50])
        square([100, 50]);
    }
  }
}

module TowerRearWallCrossSection(){
  intersection(){
    TowerWallCrossSection();
    union(){
      intersection(){
        translate([0,-10]) square([100, 10+led_head_z]);
        TowerWallSomeEdge(false);
      }
      TowerBulkCrossSection();
    }
  }
}


module TowerCrossSectionDemo(){
  %TowerWallCrossSection();
  //TowerBulkCrossSection();
  TowerRearWallCrossSection();
}

module TowerMain(){
  for (mir=[0,1])
    mirror([mir,0,0]) rotate([90,0,-90]) {
      translate([0,0, tower_width/2-tower_wall_thick])
        linear_extrude(height=tower_wall_thick) {
        TowerWallCrossSection();
      }
      translate([0,0,-1])
        linear_extrude(height=tower_width/2+0.9)
        union(){
          TowerBulkCrossSection();
          hull(){
            intersection(){
              TowerWallCrossSection();
              translate([-30, -30])
                square([30 + 0.1, 30 + tower_frontheight]);
            }
          }
        }
      translate([0,0, tower_slot_width/2])
        linear_extrude(height=(tower_width - tower_slot_width)/2 - 0.2)
        TowerRearWallCrossSection();
    }
}

module LedHole(){
  translate([0, led_head_y, led_head_z])
    rotate([90 + led_angle])
    translate([0,0,-10])
    cylinder(r=led_dia/2, h=led_depth+1+10, $fn=26, $fa=10);
}

module TowerProper(){
  difference(){
    TowerMain();
    LedHole();
    // passages for cable ties
    translate([0,
               tower_rearwall_y/2,
               cableclamp_ctie_z
               + cableclamp_ctie_width/2 + lidclamp_ctie_thick/2
               + lidclamp_cableclamp_ctie_between])
      cube([50, lidclamp_ctie_width, lidclamp_ctie_thick], center=true);
    translate([0,
                (backfront_mate_extra+tower_rearwall_y)/2,
                -tower_base_height
               + max(protrusion_size + protrusion_slop + 0.1,
                     base_ctie_anchor_eff)])
      cube([50, base_ctie_width, base_ctie_thick], center=true);
//    for (extra_y=[0, -(cableclamp_ctie_thick + cableclamp_ctie_anchor)]) {
//      translate([-tower_width/2,
//               -cableclamp_ctie_thick/2 - tower_wall_thick + extra_y,
//               cableclamp_ctie_z])
//      cube([tower_wall_thick+2,
//            cableclamp_ctie_thick,
//            cableclamp_ctie_width], center=true);
//    }
    for (mir=[0,1])
     mirror([mir,0,0]) {
        translate([tower_width/4, 20, cableclamp_ctie_z])
          cube([cableclamp_ctie_thick,
                tower_wall_thick*2+1+40,
                cableclamp_ctie_width],
               center=true);
      }
    translate([0, tower_rearwall_y, -tower_base_height])
      BaseRegistrationProtrusion(protrusion_slop);
  }
}

module Tower(){ ////toplevel
  TowerProper();
  for (mir=[0,1]) {
    mirror([mir,0,0]){
      translate([0,
                 tower_rearwall_y + 0.1,
                 -1])
        mirror([0,0,1])
        multmatrix([[1,0, towerleg_xslope,0],
                    [0,1,-towerleg_yslope,0],
                    [0,0,1,0],
                    [0,0,0,1]])
        cube([towerleg_width, towerleg_backfront, tower_base_height-2]);
    }
  }
  translate([-towerleg_foot_width/2,
             tower_rearwall_y - towerleg_foot_gap,
             -tower_base_height])
    mirror([0,1,0])
    cube([towerleg_foot_width, towerleg_foot_backfront, towerleg_foot_height]);
}

module TowerMainHull(){
  hull(){ TowerMain(); }
}

module Lid(){
  intersection(){
    difference(){
      minkowski(){
        TowerMainHull();
        sphere(r=lid_wall_thick+lid_slop, $fn=8);
      }
      minkowski(){
        TowerMainHull();
        sphere(r=lid_slop, $fn=6);
      }
    }
    translate([-50,-50,led_head_z]) cube([100,100,100]);
  }
}

module LidT(){ ////toplevel
  rotate([180,0,0]) Lid();
}

module BaseRegistrationProtrusion(extra){
  size = protrusion_size + extra;
  translate([0, base_backfront/2, 0]){
    hull(){
      translate([0,0, -0.5])
        cube([protrusion_size*2, protrusion_frontback, 1.0], center=true);
      translate([0, 0, protrusion_size-0.5])
        cube([0.05, protrusion_frontback-protrusion_size*2, 1.0], center=true);
    }
  }
}

module Base(){
  difference(){
    mirror([0,0,1]){
      hull(){
        translate([-tower_width/2, 0, 0])
          cube([tower_width, base_backfront, 0.1]);
        translate([-base_width/2, 0, base_height])
          cube([base_width, base_backfront, crossbar_dia/2]);
      }
    }
    translate([0, base_backfront/2, -base_ctie_anchor_eff])
      cube([100, base_ctie_width, base_ctie_thick], center=true);
    translate([0, base_backfront/2, -base_height + tube_ctie_anchor_eff])
      cube([100, tube_ctie_width, tube_ctie_thick], center=true);
    translate([0, -1, -(base_height + crossbar_dia/2)])
      rotate([-90,0,0])
      cylinder(r=crossbar_dia/2, h=101);
  }
  BaseRegistrationProtrusion(0.0);
}

module BaseT(){ ////toplevel
  rotate([90,0,0]) Base();
}

module Demo(){
  Tower();
  %Lid();
  translate([0,0, 25]) Lid();
  translate([0, tower_rearwall_y, -(tower_base_height+5)]) Base();
}

//TowerCrossSectionDemo();
//TowerWallSomeEdge(false);
//TowerWallFrontEdge();
//TowerMainHull();
//LidT();
Tower();
//Lid();
//BaseRegistrationProtrusion();
//Base();
//BaseT();
//Demo();

--- End Message ---
--- Begin Message ---
Version: 2013.01+dfsg-2

Fixed by upstream: https://github.com/openscad/openscad/issues/152
Fix is in Debian since 2013.01+dfsg-2

--- End Message ---

Reply via email to