I did start writing up a polyhedron checker:
http://forum.openscad.org/Mesh-Polyhedron-Test-Script-td23106.html
I'm not sure how quickly or easily you could run something like that on that
on the polyhedron you're generating, or if it would find the issue that
you're running into, but it should find holes and topologically incorrectly
oriented faces.
It won't detect if you're generating a self-intersecting extrusion profile.
I've run into issues because OpenSCAD doesn't do exact geometry or because
of floating point problems. So you can get into trouble if you have very
short line segments or wall thickness.
--
Sent from: http://forum.openscad.org/
Well I can give you a clue to the CGAL error.
I looked at arches2(16,4).
Exported a .stl, where Netfabb pointed to self-intersections at the top end.
http://forum.openscad.org/file/t359/Capture_arches2_full.jpg
I then changed arches2() to just make the end slice, ie "for (i=[103 : 1 :
105])"
STL: arch2e.stl http://forum.openscad.org/file/t359/arch2e.stl
http://forum.openscad.org/file/t359/Capture_arches2_end.jpg
Note the red edges v's orange faces.
Close-up, near the arrow above:
http://forum.openscad.org/file/t359/Capture_arches2_end_close.jpg
Those lines are what looks red edges above.
Closer:
http://forum.openscad.org/file/t359/Capture_arches2_end_close2.jpg
Closer:
http://forum.openscad.org/file/t359/Capture_arches2_end_close3.jpg
That is an overhang.
From below:
http://forum.openscad.org/file/t359/Capture_arches2_end_close_below.jpg
Above:
http://forum.openscad.org/file/t359/Capture_arches2_end_close_above.jpg
Note that is not legal triangulation I believe.
I don't know whether that is due to your input to skin() or skin().
I change it to the following so the vector can be examined.
module arches2(verticies=192, thickness = 8, solid = false) {
yxzpath = ogeepolyPath(650, 3, 600, 600, 420, 1, 10);
//echo(yxzpath);
//echo("blah");
//echo(yxzpath[10]);
skinv= [
for (i=[103 : 1 : 105])
transform( translation(yxzpath[i]) * rotation([0,0,0])
, wave(i,verticies,thickness,solid))
];
echo(skinv);
skin(skinv);
}
ECHO:
[
[
[23.7722, 0, 763.327], [22.2656, 16.6424, 763.327],
[17.5469, 33.136, 763.327], [10.6125, 48.2908, 763.327],
[1.32186, 61.5592, 763.327], [-8.0577, 47.8162, 763.327],
[-15.4296, 32.2882, 763.327], [-19.7167, 16.1361, 763.327],
[-21.041, 0, 763.327], [-20.0367, 0.474642, 763.327],
[-17.221, 21.6275, 763.327], [-10.0349, 41.2904, 763.327],
[1.32186, 58.5576, 763.327], [12.7961, 41.0483, 763.327],
[20.2811, 21.0021, 763.327], [22.7694, 0, 763.327]
],
[
[22.7821, 0, 771.996], [21.3229, 16.5331, 771.996],
[16.9285, 32.6534, 771.996], [9.94616, 47.6982, 771.996],
[0.5, 61.1888, 771.996], [-8.96845, 47.5793, 771.996],
[-16.0605, 32.4408, 771.996], [-20.3467, 16.4062, 771.996],
[-21.7601, 0, 771.996], [-20.8072, 0.118986, 771.996],
[-18.2633, 21.1468, 771.996], [-11.0469, 40.9534, 771.996],
[0.5, 58.5097, 771.996], [12.0764, 40.8928, 771.996],
[19.3677, 20.9901, 771.996], [21.8295, 0, 771.996]
],
[
[22.7258, 0, 771.996], [21.2825, 16.4966, 771.996],
[16.9966, 32.4919, 771.996], [9.99819, 47.5, 771.996],
[0.5, 61.0648, 771.996], [-8.99819, 47.5, 771.996],
[-15.9966, 32.4919, 771.996], [-20.2825, 16.4966, 771.996],
[-21.7258, 0, 771.996], [-20.79, 0, 771.996],
[-18.337, 20.986, 771.996], [-11.1105, 40.8407, 771.996],
[0.5, 58.4937, 771.996], [12.1105, 40.8407, 771.996],
[19.337, 20.986, 771.996], [21.79, 0, 771.996]
]
]
Admin - email* me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
Disregard the above. I think I introduced a side effect when formatting the
code.
Admin - email* me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
OK re-regard the above, I got confounded by a F6 before F5 artifact...
So plotting the points
module plotvv3(vv,size=2)
for(j=vv) plotv3(j,size,"red");
module plotv3(v,size=4,c="blue") { // v=[ [x,y,z], ... ]
for(i=v)
translate([i.x,i.y,i.z])
color(c)
sphere(size,$fn=12);
}
//this makes the shape I want a transtion between
//roman and ogee arches on a pathway that is half
//an ogee arch
//I'd use 6 of these to make the hallways I want
//16 verticies simplifies things
module arches2(verticies=192, thickness = 8, solid = false) {
yxzpath = ogeepolyPath(650, 3, 600, 600, 420, 1, 10);
//echo(yxzpath);
//echo("blah");
//echo(yxzpath[10]);
translate([0,0,750]) cube();
skinv=[
for (i=[103 : 1 : 105])
transform(translation(yxzpath[i]) * rotation([0,0,0]),
wave(i,verticies,thickness,solid))
];
echo(len(skinv),skinv=skinv);
plotvv3(skinv,size=0.3);
skin(skinv);
}
Shows:
http://forum.openscad.org/file/t359/arches2_plot_orig.jpg
Looking at the 103-105 points, which are black, red, blue respectively
http://forum.openscad.org/file/t359/Capture_arches2_skinv_plot_103-105.jpg
The 104 & 105 are likely the cause.
Doing,
plotv3(yxzpath);
Shows:
http://forum.openscad.org/file/t359/Capture_arches2_yxzpath.jpg
Looking into ogeepolyPath(),
// Lower Right Outer arc
lro = [ for (i = [0:1:lowerpoints-1])
Remove the '-1' fixes that gap.
Then:
http://forum.openscad.org/file/t359/arches2_plot_fixed.jpg
No more CGAL error with a cube().
STL fixed: arches2_fixed_w_cube.stl
http://forum.openscad.org/file/t359/arches2_fixed_w_cube.stl
No self-intersections.
But Thrown-together still shows purple...
http://forum.openscad.org/file/t359/arches2_fixed_purple.jpg
I suspect that may be a skin() thing...looking...
Admin - email* me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
Thanks for all your hard work. I am confused on some things though:
" But Thrown-together still shows purple...
http://forum.openscad.org/file/t359/arches2_fixed_purple.jpg "
So that is the kind of thing I have been seeing but the image shows the
facets in shades of yellow, and only the edges are purple/magenta/pink. I
have been operating under the assumption that whole faces/facets should be
purple/magenta/pink to show a problem. Another person suggested those
"edges" were really very narrow facets or gaps. But it seems hard for me
to believe that every single face / facet in my object also is bordered on
all sides by either facets with a very tiny width or holes with a tiny
width. Or does this mean I have been looking for the wrong thing in
"thrown together" and edges with purple/magenta/pink mean there is a
problem (that is still somewhat confusing because it suggests that somehow
everything is in error; I'd think it would be almost impossible to generate
something that was all bad or nearly all bad)? So I think I don't know how
to interpret "thrown together" properly
the overhang thing you found I believe is the problem, but I don't
really get how it happens. Lately I've been doing arches2(16) specifying
only 16 points per arch. The advantage of doing that is (given the other
defaults) the points should be widely enough spaced apart that floating
point vagaries don't cause two points to end up (with rounding errors) at
the same coordinate. Also I set some debug messages in the code to spit
out how many points each arch had. All the messages said "16", so with
equal number of point I don't see how an overhang should happen. You
mentioned there might be some problem with skin() (I didn't realize skin()
had known bugs) which could explain things; otherwise I don't understand
how when knitting together polygons (with roughly similar shapes, non
degenerate points, the same order of points, and the same number of
vertices) gives an overhang
That being said it did occur to me that ogeepolyPath (which is generating
the coordinate path to center the arches on) is generating 402 points,
whereas my wave() routine is generating 105 arch polygons. I could see
that it might cause a problem (if skin() has to interpolate or do something
like that to make them match). I did go back to force ogeepolyPath to
generate 105 points so it would match the number of archways being
generated. Unfortunately I still get the "ERROR: CGAL error in
CGAL_Nef_polyhedron3(): CGAL ERROR: assertion violation! Expr: e_below !=
SHalfedge_handle() File:
/opt/mxe/usr/x86_64-w64-mingw32.static.posix/include/CGAL/Nef_3/SNC_FM_decorator.h
Line: 426 " error when I try to build the hallway, subtract a solid
mirrored version, then add the mirror version
well, to be honest, your coding is a bit callenging. But having played a bit
with your code, I can say that
translate([0,0,750]) cube();
skinv=[
for (i=[0 : 1 : 104])
reverse(transform(translation(yxzpath[i]) * rotation([0,0,0]),
wave(i,verticies,thickness,solid)))
];
skin(skinv);
works well with F6. Note that I had to include a reverse() to correct the
point order. Further I count the 105 polygons from 0 to 104. Your problem
might be that a loop from 104 to 105 will return two identical polygons,
which will trigger the CGAL error, when skinned.
skinv=[
for (i=[104 : 1 : 105]) // identical polygons
--
Sent from: http://forum.openscad.org/
Thanks everyone!
I hope to print out the 1/3 of the main hallways soon. Then I'll move on
to the domes, and after that buttresses etc.
Parkinbot- how did you quickly determine that the last two polygons were
the same? Did you look for the purple in the display and then compare
points or....?
On Sat, Jul 6, 2019 at 4:47 PM Parkinbot rudolf@digitaldocument.de wrote:
well, to be honest, your coding is a bit callenging. But having played a
bit
with your code, I can say that
translate([0,0,750]) cube();
skinv=[
for (i=[0 : 1 : 104])
reverse(transform(translation(yxzpath[i]) *
rotation([0,0,0]),
wave(i,verticies,thickness,solid)))
];
skin(skinv);
works well with F6. Note that I had to include a reverse() to correct the
point order. Further I count the 105 polygons from 0 to 104. Your problem
might be that a loop from 104 to 105 will return two identical polygons,
which will trigger the CGAL error, when skinned.
skinv=[
for (i=[104 : 1 : 105]) // identical polygons
--
Sent from: http://forum.openscad.org/
OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Parkinbot wrote
Note that I had to include a reverse() to correct the
point order.
Your problem
might be that a loop from 104 to 105 will return two identical polygons,
which will trigger the CGAL error, when skinned.
skinv=[
for (i=[104 : 1 : 105]) // identical polygons
Note the 105 prolem is caused by a gap in the ogee, see ogeepolyPath(),
// Lower Right Outer arc
lro = [ for (i = [0:1:lowerpoints-1])
Remove the '-1' fixes that gap, and [0:1:105] is good geometry.
[Dan, same issue with ogeepoly()]
When I included reverse() the result is everything is inside-out.
http://forum.openscad.org/file/t359/arches2_fixed_all_purple.jpg
(note on closer examination the cube() has no purple, that is an artefact)
Without reverse(), without show-edges:
http://forum.openscad.org/file/t359/arches2_fixed_purple_close.jpg
Those purple bits behave as if there is z-fighting, when you rotate the
model.
It gets very psychedelic:
http://forum.openscad.org/file/t359/arches2_fixed_purple_side1.jpg
http://forum.openscad.org/file/t359/arches2_fixed_purple_side2.jpg
With show-edges:
http://forum.openscad.org/file/t359/arches2_fixed_purple_close_edges.jpg
I have no idea what's going on...
Admin - email* me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
DanS wrote
Parkinbot- how did you quickly determine that the last two polygons were
the same? Did you look for the purple in the display and then compare
points or....?
two identical polygons are not visualized as purple by F12, but trigger CGAL
errors due to self intersection. When playing, I wondered why the loop going
from 103 to 105 produced only a single segment and there was no difference
to a loop going from 103 to 104. Thus I suspected that 104 to 105 will
generate a flat segment, which proved to be true.
--
Sent from: http://forum.openscad.org/