MF
mike.fraser.1945+osc@gmail.com
Fri, Dec 6, 2024 12:30 AM
Please excuse a possibly/probably dumb question from a newbe.
I recently designed a 2D ruler for export to a CNC Router and & a Laser Engraver. Worked well.
I then decided to emboss the pattern into a surface but get the following on render:
Parsing design (AST generation)...
Compiling design (CSG Tree generation)...
Rendering Polygon Mesh using Manifold...
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
// Ruler-printable
include <BOSL2/std.scad>
Length = 4 ; //Overall length in Inches
Thick = 3 ;
len = Length*INCH ;
mk1 = 1.0*INCH ;
mk2 = mk1/2 ;
mk4 = mk1/4 ;
mk8 = mk1/8 ;
mk16 = mk1/16 ;
mk_width = 0.5 ;
t1 = mk1/2 ; // length of tic marks
t2 = t1/2 ;
t4 = t1/3 ;
t8 = t1/4 ;
t16 = t1/5 ;
spot = [mk1,mk2,mk4,mk8,mk16] ;
tic = [t1,t2,t4,t8,t16] ;
module mark(x) {
square([mk_width, x]) ;
}
sp = [0,0,0] ;
difference() {
translate([-mk2/2,-6,-(Thick-1+0.01)]) cube([len+mk2,mk1,Thick]) ;
linear_extrude(height=1) union() {
fwd(3) square(\[len,3\]) ;
for (idx=\[0:1:Length\]) {
xcopies(spot\[idx\], l=len, sp=sp) mark(tic\[idx\]) ;
}
xcopies(mk4,l=len-4, sp=\[0,-6,0\]) square(3) ;
for (idx=\[0:1:Length\]) {
translate(\[idx\*mk1-1,14,0\]) text(str(Length-idx), size=5 ) ;
}
}
}
Preview gives no errors and shows:
Please excuse a possibly/probably dumb question from a newbe.
I recently designed a 2D ruler for export to a CNC Router and & a Laser Engraver. Worked well.
I then decided to emboss the pattern into a surface but get the following on render:
> *Parsing design (AST generation)...*
> *Compiling design (CSG Tree generation)...*
>
> *Rendering Polygon Mesh using Manifold...*
>
> *WARNING: PolySet -> Manifold conversion failed: NotManifold*
>
> *Trying to repair and reconstruct mesh..*
>
> *Rendering cancelled on first warning.*
>
> *WARNING: No top level geometry to render*
How does one go about locating the cause of such? The code follows:
// Ruler-printable
include <BOSL2/std.scad>
Length = 4 ; //Overall length in Inches
Thick = 3 ;
len = Length\*INCH ;
mk1 = 1.0\*INCH ;
mk2 = mk1/2 ;
mk4 = mk1/4 ;
mk8 = mk1/8 ;
mk16 = mk1/16 ;
mk_width = 0.5 ;
t1 = mk1/2 ; // length of tic marks
t2 = t1/2 ;
t4 = t1/3 ;
t8 = t1/4 ;
t16 = t1/5 ;
spot = \[mk1,mk2,mk4,mk8,mk16\] ;
tic = \[t1,t2,t4,t8,t16\] ;
module mark(x) {
square(\[mk_width, x\]) ;
}
sp = \[0,0,0\] ;
difference() {
translate(\[-mk2/2,-6,-(Thick-1+0.01)\]) cube(\[len+mk2,mk1,Thick\]) ;
linear_extrude(height=1) union() {
fwd(3) square(\[len,3\]) ;
for (idx=\[0:1:Length\]) {
xcopies(spot\[idx\], l=len, sp=sp) mark(tic\[idx\]) ;
}
xcopies(mk4,l=len-4, sp=\[0,-6,0\]) square(3) ;
for (idx=\[0:1:Length\]) {
translate(\[idx\*mk1-1,14,0\]) text(str(Length-idx), size=5 ) ;
}
}
}
Preview gives no errors and shows:
![](data:image/png;base64,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)
JB
Jordan Brown
Fri, Dec 6, 2024 3:42 AM
I noticed a couple of Z-fighting-related preview artifacts related to
the larger tic marks at the front of the ruler. (There was
straightforward Z-fighting at the very front, and a strange artifact
along their back end, where they meet the large recessed block.) There
was also usual convexity issues associated with extruding a concave shape.
I fixed that by pulling them -Y by 1 and lengthening them by 2 to avoid
any coincident faces, and set convexity to 5, and that seems to have
fixed both the preview and the render. My changes marked with //HERE...
// Ruler-printable
include <BOSL2/std.scad>
Length = 4 ; //Overall length in Inches
Thick = 3 ;
len = LengthINCH ;
mk1 = 1.0INCH ;
mk2 = mk1/2 ;
mk4 = mk1/4 ;
mk8 = mk1/8 ;
mk16 = mk1/16 ;
mk_width = 0.5 ;
t1 = mk1/2 ; // length of tic marks
t2 = t1/2 ;
t4 = t1/3 ;
t8 = t1/4 ;
t16 = t1/5 ;
spot = [mk1,mk2,mk4,mk8,mk16] ;
tic = [t1,t2,t4,t8,t16] ;
module mark(x) {
square([mk_width, x]) ;
}
sp = [0,0,0] ;
difference() {
translate([-mk2/2,-6,-(Thick-1+0.01)]) cube([len+mk2,mk1,Thick]) ;
linear_extrude(height=1, convexity=5) union() { // HERE
fwd(3) square([len,3]) ;
for (idx=[0:1:Length]) {
xcopies(spot[idx], l=len, sp=sp) mark(tic[idx]) ;
}
xcopies(mk4,l=len-4, sp=[0,-6,0]) fwd(1) square([3,1+3+1]) ; // HERE
for (idx=[0:1:Length]) {
translate([idx*mk1-1,14,0]) text(str(Length-idx), size=5 ) ;
}
}
}
I noticed a couple of Z-fighting-related preview artifacts related to
the larger tic marks at the front of the ruler. (There was
straightforward Z-fighting at the very front, and a strange artifact
along their back end, where they meet the large recessed block.) There
was also usual convexity issues associated with extruding a concave shape.
I fixed that by pulling them -Y by 1 and lengthening them by 2 to avoid
any coincident faces, and set convexity to 5, and that seems to have
fixed both the preview and the render. My changes marked with //HERE...
// Ruler-printable
include <BOSL2/std.scad>
Length = 4 ; //Overall length in Inches
Thick = 3 ;
len = Length*INCH ;
mk1 = 1.0*INCH ;
mk2 = mk1/2 ;
mk4 = mk1/4 ;
mk8 = mk1/8 ;
mk16 = mk1/16 ;
mk_width = 0.5 ;
t1 = mk1/2 ; // length of tic marks
t2 = t1/2 ;
t4 = t1/3 ;
t8 = t1/4 ;
t16 = t1/5 ;
spot = [mk1,mk2,mk4,mk8,mk16] ;
tic = [t1,t2,t4,t8,t16] ;
module mark(x) {
square([mk_width, x]) ;
}
sp = [0,0,0] ;
difference() {
translate([-mk2/2,-6,-(Thick-1+0.01)]) cube([len+mk2,mk1,Thick]) ;
linear_extrude(height=1, convexity=5) union() { // HERE
fwd(3) square([len,3]) ;
for (idx=[0:1:Length]) {
xcopies(spot[idx], l=len, sp=sp) mark(tic[idx]) ;
}
xcopies(mk4,l=len-4, sp=[0,-6,0]) fwd(1) square([3,1+3+1]) ; // HERE
for (idx=[0:1:Length]) {
translate([idx*mk1-1,14,0]) text(str(Length-idx), size=5 ) ;
}
}
}
AM
Adrian Mariano
Fri, Dec 6, 2024 3:55 AM
I don't think issue 5135, at least as it pertains to BOSL2, is relevant.
The code example only uses BOSL2 for the INCH definition and the xcopies()
module, which just makes copies of the children. It doesn't create any
polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <
discuss@lists.openscad.org> wrote:
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <
discuss@lists.openscad.org> wrote:
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
For now:
- Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on
first warning
- Follow https://github.com/openscad/openscad/issues/5135
-Marius
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
I don't think issue 5135, at least as it pertains to BOSL2, is relevant.
The code example only uses BOSL2 for the INCH definition and the xcopies()
module, which just makes copies of the children. It doesn't create any
polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <
discuss@lists.openscad.org> wrote:
> On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <
> discuss@lists.openscad.org> wrote:
>
>
> *WARNING: PolySet -> Manifold conversion failed: NotManifold*
>
> *Trying to repair and reconstruct mesh..*
>
> *Rendering cancelled on first warning.*
>
> *WARNING: No top level geometry to render*
>
> How does one go about locating the cause of such? The code follows:
>
>
> For now:
> 1. Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on
> first warning
> 2. Follow https://github.com/openscad/openscad/issues/5135
>
> -Marius
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
MK
Marius Kintel
Fri, Dec 6, 2024 5:30 AM
I don't think issue 5135, at least as it pertains to BOSL2, is relevant. The code example only uses BOSL2 for the INCH definition and the xcopies() module, which just makes copies of the children. It doesn't create any polyhedra with duplicate points.
Oh, interesting. Then it’s probably a different issue indeed. I’ll take a closer look.
-Marius
On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss <discuss@lists.openscad.org> wrote:
>
> I don't think issue 5135, at least as it pertains to BOSL2, is relevant. The code example only uses BOSL2 for the INCH definition and the xcopies() module, which just makes copies of the children. It doesn't create any polyhedra with duplicate points.
>
Oh, interesting. Then it’s probably a different issue indeed. I’ll take a closer look.
-Marius
MK
Marius Kintel
Fri, Dec 6, 2024 5:58 AM
This might actually be a bug.
The symptom is that the result of linear_extrude() becomes non-manifold at some point, and any operation combined with that one fails.
If anyone is able to slim down this design to something non-BOSL and as small as possible, that would be immensely helpful.
-Marius
On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss discuss@lists.openscad.org wrote:
I don't think issue 5135, at least as it pertains to BOSL2, is relevant. The code example only uses BOSL2 for the INCH definition and the xcopies() module, which just makes copies of the children. It doesn't create any polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <discuss@lists.openscad.org mailto:discuss@lists.openscad.org> wrote:
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <discuss@lists.openscad.org mailto:discuss@lists.openscad.org> wrote:
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
This might actually be a bug.
The symptom is that the result of linear_extrude() becomes non-manifold at some point, and any operation combined with that one fails.
If anyone is able to slim down this design to something non-BOSL and as small as possible, that would be immensely helpful.
-Marius
> On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss <discuss@lists.openscad.org> wrote:
>
> I don't think issue 5135, at least as it pertains to BOSL2, is relevant. The code example only uses BOSL2 for the INCH definition and the xcopies() module, which just makes copies of the children. It doesn't create any polyhedra with duplicate points.
>
> On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <discuss@lists.openscad.org <mailto:discuss@lists.openscad.org>> wrote:
>>> On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <discuss@lists.openscad.org <mailto:discuss@lists.openscad.org>> wrote:
>>>
>>> WARNING: PolySet -> Manifold conversion failed: NotManifold
>>>
>>> Trying to repair and reconstruct mesh..
>>>
>>> Rendering cancelled on first warning.
>>>
>>> WARNING: No top level geometry to render
>>>
>>> How does one go about locating the cause of such? The code follows:
>>>
>>
>> For now:
>> 1. Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on first warning
>> 2. Follow https://github.com/openscad/openscad/issues/5135
>>
>> -Marius
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> To unsubscribe send an email to discuss-leave@lists.openscad.org <mailto:discuss-leave@lists.openscad.org>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
JD
John David
Fri, Dec 6, 2024 6:33 AM
My forest idea of paring it down is to start at both ends and remove/diff
everything up to a point and check. Once you find that it creates a proper
closed manifold, back up one step, and do the same from the other end.
This should leave you with a section of a part that is creating a
non-manifold. Either that, or modify the original code to only make a
section (say 0-0.5, ... 3.75-4.0) and then you will only be dealing with
the generative portion of the code.
Hope that helps,
EBo --
On Fri, Dec 6, 2024 at 12:59 AM Marius Kintel via Discuss <
discuss@lists.openscad.org> wrote:
This might actually be a bug.
The symptom is that the result of linear_extrude() becomes non-manifold at
some point, and any operation combined with that one fails.
If anyone is able to slim down this design to something non-BOSL and as
small as possible, that would be immensely helpful.
-Marius
On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss <
discuss@lists.openscad.org> wrote:
I don't think issue 5135, at least as it pertains to BOSL2, is relevant.
The code example only uses BOSL2 for the INCH definition and the xcopies()
module, which just makes copies of the children. It doesn't create any
polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <
discuss@lists.openscad.org> wrote:
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <
discuss@lists.openscad.org> wrote:
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
For now:
- Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on
first warning
- Follow https://github.com/openscad/openscad/issues/5135
-Marius
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
My forest idea of paring it down is to start at both ends and remove/diff
everything up to a point and check. Once you find that it creates a proper
closed manifold, back up one step, and do the same from the other end.
This should leave you with a section of a part that is creating a
non-manifold. Either that, or modify the original code to only make a
section (say 0-0.5, ... 3.75-4.0) and then you will only be dealing with
the generative portion of the code.
Hope that helps,
EBo --
On Fri, Dec 6, 2024 at 12:59 AM Marius Kintel via Discuss <
discuss@lists.openscad.org> wrote:
> This might actually be a bug.
> The symptom is that the result of linear_extrude() becomes non-manifold at
> some point, and any operation combined with that one fails.
>
> If anyone is able to slim down this design to something non-BOSL and as
> small as possible, that would be immensely helpful.
>
> -Marius
>
> On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss <
> discuss@lists.openscad.org> wrote:
>
> I don't think issue 5135, at least as it pertains to BOSL2, is relevant.
> The code example only uses BOSL2 for the INCH definition and the xcopies()
> module, which just makes copies of the children. It doesn't create any
> polyhedra with duplicate points.
>
> On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <
> discuss@lists.openscad.org> wrote:
>
>> On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <
>> discuss@lists.openscad.org> wrote:
>>
>>
>> *WARNING: PolySet -> Manifold conversion failed: NotManifold*
>>
>> *Trying to repair and reconstruct mesh..*
>>
>> *Rendering cancelled on first warning.*
>>
>> *WARNING: No top level geometry to render*
>>
>> How does one go about locating the cause of such? The code follows:
>>
>>
>> For now:
>> 1. Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on
>> first warning
>> 2. Follow https://github.com/openscad/openscad/issues/5135
>>
>> -Marius
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> To unsubscribe send an email to discuss-leave@lists.openscad.org
>>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
RW
Raymond West
Fri, Dec 6, 2024 11:02 AM
If I remove the bos2l include, there are two references to that library.
if I comment those out, ('fwd' and 'xcopies') then afaik it runs OK
(but not the same object is produced). I do not use bos2l, but if you
wish, I could probably replicate the object in raw openscad script. Not
sure what that would prove.
On 06/12/2024 05:58, Marius Kintel via Discuss wrote:
This might actually be a bug.
The symptom is that the result of linear_extrude() becomes
non-manifold at some point, and any operation combined with that one
fails.
If anyone is able to slim down this design to something non-BOSL and
as small as possible, that would be immensely helpful.
-Marius
On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss
discuss@lists.openscad.org wrote:
I don't think issue 5135, at least as it pertains to BOSL2, is
relevant. The code example only uses BOSL2 for the INCH definition
and the xcopies() module, which just makes copies of the children.
It doesn't create any polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss
discuss@lists.openscad.org wrote:
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss
<discuss@lists.openscad.org> wrote:
/
WARNING: PolySet -> Manifold conversion failed: NotManifold/
/Trying to repair and reconstruct mesh../
/Rendering cancelled on first warning./
/WARNING: No top level geometry to render/
How does one go about locating the cause of such? The code follows:
For now:
1. Turn off Preferences ->Advanced->OpenSCAD Language
Features->Stop on first warning
2. Follow https://github.com/openscad/openscad/issues/5135
-Marius
_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
If I remove the bos2l include, there are two references to that library.
if I comment those out, ('fwd' and 'xcopies') then afaik it runs OK
(but not the same object is produced). I do not use bos2l, but if you
wish, I could probably replicate the object in raw openscad script. Not
sure what that would prove.
On 06/12/2024 05:58, Marius Kintel via Discuss wrote:
> This might actually be a bug.
> The symptom is that the result of linear_extrude() becomes
> non-manifold at some point, and any operation combined with that one
> fails.
>
> If anyone is able to slim down this design to something non-BOSL and
> as small as possible, that would be immensely helpful.
>
> -Marius
>
>> On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss
>> <discuss@lists.openscad.org> wrote:
>>
>> I don't think issue 5135, at least as it pertains to BOSL2, is
>> relevant. The code example only uses BOSL2 for the INCH definition
>> and the xcopies() module, which just makes copies of the children.
>> It doesn't create any polyhedra with duplicate points.
>>
>> On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss
>> <discuss@lists.openscad.org> wrote:
>>
>>> On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss
>>> <discuss@lists.openscad.org> wrote:
>>>
>>> /
>>> WARNING: PolySet -> Manifold conversion failed: NotManifold/
>>>
>>> /Trying to repair and reconstruct mesh../
>>>
>>> /Rendering cancelled on first warning./
>>>
>>> /WARNING: No top level geometry to render/
>>>
>>> How does one go about locating the cause of such? The code follows:
>>>
>>
>> For now:
>> 1. Turn off Preferences ->Advanced->OpenSCAD Language
>> Features->Stop on first warning
>> 2. Follow https://github.com/openscad/openscad/issues/5135
>>
>> -Marius
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> To unsubscribe send an email to discuss-leave@lists.openscad.org
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email todiscuss-leave@lists.openscad.org
MK
Marius Kintel
Fri, Dec 6, 2024 3:44 PM
We just need an as small example as possible. If this turns out to be an internal geometry processing issue, or a manifold library issue, the solution is often to graph or inspect all vertices to isolate the problem, so if the total number of vertices is small that makes the job significantly easier.
On Dec 6, 2024, at 06:02, Raymond West via Discuss <discuss@lists.openscad.org> wrote:
If I remove the bos2l include, there are two references to that library. if I comment those out, ('fwd' and 'xcopies') then afaik it runs OK (but not the same object is produced). I do not use bos2l, but if you wish, I could probably replicate the object in raw openscad script. Not sure what that would prove.
On 06/12/2024 05:58, Marius Kintel via Discuss wrote:
This might actually be a bug. The symptom is that the result of linear_extrude() becomes non-manifold at some point, and any operation combined with that one fails.
If anyone is able to slim down this design to something non-BOSL and as small as possible, that would be immensely helpful.
-Marius
On Dec 5, 2024, at 22:55, Adrian Mariano via Discuss <discuss@lists.openscad.org> wrote:
I don't think issue 5135, at least as it pertains to BOSL2, is relevant. The code example only uses BOSL2 for the INCH definition and the xcopies() module, which just makes copies of the children. It doesn't create any polyhedra with duplicate points.
On Thu, Dec 5, 2024 at 8:19 PM Marius Kintel via Discuss <discuss@lists.openscad.org> wrote:
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <discuss@lists.openscad.org> wrote:
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
For now: 1. Turn off Preferences ->Advanced->OpenSCAD Language Features->Stop on first warning
- Follow https://github.com/openscad/openscad/issues/5135
-Marius
_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
<pre class="moz-quote-pre" wrap="">_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to <a class="moz-txt-link-abbreviated" href="mailto:discuss-leave@lists.openscad.org">discuss-leave@lists.openscad.org</a>
_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
MK
Marius Kintel
Sun, Dec 8, 2024 2:54 AM
On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss discuss@lists.openscad.org wrote:
Please excuse a possibly/probably dumb question from a newbe.
I recently designed a 2D ruler for export to a CNC Router and & a Laser Engraver. Worked well.
I then decided to emboss the pattern into a surface but get the following on render:
Parsing design (AST generation)...
Compiling design (CSG Tree generation)...
Rendering Polygon Mesh using Manifold...
WARNING: PolySet -> Manifold conversion failed: NotManifold
Trying to repair and reconstruct mesh..
Rendering cancelled on first warning.
WARNING: No top level geometry to render
How does one go about locating the cause of such? The code follows:
// Ruler-printable
include <BOSL2/std.scad>
Length = 4 ; //Overall length in Inches
Thick = 3 ;
len = Length*INCH ;
mk1 = 1.0*INCH ;
mk2 = mk1/2 ;
mk4 = mk1/4 ;
mk8 = mk1/8 ;
mk16 = mk1/16 ;
mk_width = 0.5 ;
t1 = mk1/2 ; // length of tic marks
t2 = t1/2 ;
t4 = t1/3 ;
t8 = t1/4 ;
t16 = t1/5 ;
spot = [mk1,mk2,mk4,mk8,mk16] ;
tic = [t1,t2,t4,t8,t16] ;
module mark(x) {
square([mk_width, x]) ;
}
sp = [0,0,0] ;
difference() {
translate([-mk2/2,-6,-(Thick-1+0.01)]) cube([len+mk2,mk1,Thick]) ;
linear_extrude(height=1) union() {
fwd(3) square([len,3]) ;
for (idx=[0:1:Length]) {
xcopies(spot[idx], l=len, sp=sp) mark(tic[idx]) ;
}
xcopies(mk4,l=len-4, sp=[0,-6,0]) square(3) ;
for (idx=[0:1:Length]) {
translate([idx*mk1-1,14,0]) text(str(Length-idx), size=5 ) ;
}
}
}
I’ve opened a new issue for this so we can investigate it properly:
https://github.com/openscad/openscad/issues/5482
-Marius
> On Dec 5, 2024, at 19:30, mike.fraser.1945+osc--- via Discuss <discuss@lists.openscad.org> wrote:
>
> Please excuse a possibly/probably dumb question from a newbe.
>
> I recently designed a 2D ruler for export to a CNC Router and & a Laser Engraver. Worked well.
>
> I then decided to emboss the pattern into a surface but get the following on render:
>
> Parsing design (AST generation)...
>
> Compiling design (CSG Tree generation)...
>
> Rendering Polygon Mesh using Manifold...
>
> WARNING: PolySet -> Manifold conversion failed: NotManifold
>
> Trying to repair and reconstruct mesh..
>
> Rendering cancelled on first warning.
>
> WARNING: No top level geometry to render
>
> How does one go about locating the cause of such? The code follows:
>
> // Ruler-printable
>
> include <BOSL2/std.scad>
>
> Length = 4 ; //Overall length in Inches
>
> Thick = 3 ;
>
> len = Length*INCH ;
>
> mk1 = 1.0*INCH ;
>
> mk2 = mk1/2 ;
>
> mk4 = mk1/4 ;
>
> mk8 = mk1/8 ;
>
> mk16 = mk1/16 ;
>
> mk_width = 0.5 ;
>
> t1 = mk1/2 ; // length of tic marks
>
> t2 = t1/2 ;
>
> t4 = t1/3 ;
>
> t8 = t1/4 ;
>
> t16 = t1/5 ;
>
> spot = [mk1,mk2,mk4,mk8,mk16] ;
>
> tic = [t1,t2,t4,t8,t16] ;
>
> module mark(x) {
>
> square([mk_width, x]) ;
>
> }
>
> sp = [0,0,0] ;
>
> difference() {
>
> translate([-mk2/2,-6,-(Thick-1+0.01)]) cube([len+mk2,mk1,Thick]) ;
>
> linear_extrude(height=1) union() {
>
> fwd(3) square([len,3]) ;
>
> for (idx=[0:1:Length]) {
>
> xcopies(spot[idx], l=len, sp=sp) mark(tic[idx]) ;
>
> }
>
> xcopies(mk4,l=len-4, sp=[0,-6,0]) square(3) ;
>
> for (idx=[0:1:Length]) {
>
> translate([idx*mk1-1,14,0]) text(str(Length-idx), size=5 ) ;
>
> }
>
> }
>
> }
>
>