DXF to "3D-printable" lines with thickness

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

DXF to "3D-printable" lines with thickness

MathLover
Hello all,

I am using OpenSCAD to make a wax seal, and I want to hand draw my emblem,
digitize it into lines in with LibreCAD using a drawing tablet, and then
have something I can 3D print and cast into a real seal.

Now OpenSCAD can read lines from DXF, but treats them as an outline. I
wanted line segments to be represented by, for example, cylinders. Lines
with thickness, so I can subtract them from a disc to make a simple wax
seal.

I wrote a little python program to do this. It reads a DXF file through
stdin, and outputs function calls with the endpoints of each line segment
found. You can supply a layer name to include only lines on that layer.
Optionally, you can also provide another function name that will be called
with the endpoints themselves, to provide better corners.

For example, the command:


Would read all lines on layer "CORPUS" and  produce something like:



Which you can include in an OpenSCAD script.

Examples for the modules called are:



I hope this is a useful addition to the OpenSCAD tool set.

You can download the tool from:
http://www.w-p.dds.nl/dxflines2scad_py.txt
(after download, rename it to "dxflines2scad.py")






--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: DXF to "3D-printable" lines with thickness

MathLover
Huh? What happened to all the "raw" texts that were perfectly visible in the
preview screen?

Let's post his message again:

I am using OpenSCAD to make a wax seal, and I want to hand draw my emblem,
digitize it into lines in with LibreCAD using a drawing tablet, and then
have something I can 3D print and cast into a real seal.

Now OpenSCAD can read lines from DXF, but treats them as an outline. I
wanted line segments to be represented by, for example, cylinders. Lines
with thickness, so I can subtract them from a disc to make a simple wax
seal.

I wrote a little python program to do this. It reads a DXF file through
stdin, and outputs function calls with the endpoints of each line segment
found. You can supply a layer name to include only lines on that layer.
Optionally, you can also provide another function name that will be called
with the endpoints themselves, to provide better corners.

For example, the command:

./dxflines2scad.py -l CORPUS -n draw_point -c 'Warning! Generated file. Do
not edit.' < ../deksels.dxf

Would read all lines on layer "CORPUS" and  produce something like:
//  Warning! Generated file. Do not edit.
line_segment([19.0, 13.0, 0], [16.75, 13.0, 0]); // DXF handle "C9"
line_segment([16.75, 4.0, 0], [16.75, 6.0, 0]); // DXF handle "CB"
line_segment([16.75, 4.0, 0], [3.0, 4.0, 0]); // DXF handle "CC"
...
draw_point([19.0, 13.0, 0]);
draw_point([16.75, 13.0, 0]);
draw_point([16.75, 4.0, 0]);
draw_point([16.75, 6.0, 0]);
...


Which you can include in an OpenSCAD script.

Examples for the modules called are:

module line_segment(vecFrom, vecTo)
      {fltLength = norm(vecTo - vecFrom);
       translate(vecFrom)
                {rotate([0, 0, atan2(vecTo[1]-vecFrom[1],
vecTo[0]-vecFrom[0])])
                       {rotate([0, 90, 0])
                              {cylinder(h=fltLength, r=0.5);}
                       }
                }
      }
module draw_point(node)
      {translate(node)
                {sphere(0.75, center=true);}
      }


I hope this is a useful addition to the OpenSCAD tool set.

You can download the tool from:
http://www.w-p.dds.nl/dxflines2scad_py.txt
(after download, rename it to "dxflines2scad.py")



--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: DXF to "3D-printable" lines with thickness

codifies
wouldn't it be easier just to use surface

https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Surface 


I made some great paper embossing stamps with this method (niece and
nephews seemed to like them!) ...

On 08/09/17 16:02, MathLover wrote:

> Huh? What happened to all the "raw" texts that were perfectly visible in the
> preview screen?
>
> Let's post his message again:
>
> I am using OpenSCAD to make a wax seal, and I want to hand draw my emblem,
> digitize it into lines in with LibreCAD using a drawing tablet, and then
> have something I can 3D print and cast into a real seal.
>
> Now OpenSCAD can read lines from DXF, but treats them as an outline. I
> wanted line segments to be represented by, for example, cylinders. Lines
> with thickness, so I can subtract them from a disc to make a simple wax
> seal.
>
> I wrote a little python program to do this. It reads a DXF file through
> stdin, and outputs function calls with the endpoints of each line segment
> found. You can supply a layer name to include only lines on that layer.
> Optionally, you can also provide another function name that will be called
> with the endpoints themselves, to provide better corners.
>
> For example, the command:
>
> ./dxflines2scad.py -l CORPUS -n draw_point -c 'Warning! Generated file. Do
> not edit.' < ../deksels.dxf
>
> Would read all lines on layer "CORPUS" and  produce something like:
> //  Warning! Generated file. Do not edit.
> line_segment([19.0, 13.0, 0], [16.75, 13.0, 0]); // DXF handle "C9"
> line_segment([16.75, 4.0, 0], [16.75, 6.0, 0]); // DXF handle "CB"
> line_segment([16.75, 4.0, 0], [3.0, 4.0, 0]); // DXF handle "CC"
> ...
> draw_point([19.0, 13.0, 0]);
> draw_point([16.75, 13.0, 0]);
> draw_point([16.75, 4.0, 0]);
> draw_point([16.75, 6.0, 0]);
> ...
>
>
> Which you can include in an OpenSCAD script.
>
> Examples for the modules called are:
>
> module line_segment(vecFrom, vecTo)
>        {fltLength = norm(vecTo - vecFrom);
>         translate(vecFrom)
>                  {rotate([0, 0, atan2(vecTo[1]-vecFrom[1],
> vecTo[0]-vecFrom[0])])
>                         {rotate([0, 90, 0])
>                                {cylinder(h=fltLength, r=0.5);}
>                         }
>                  }
>        }
> module draw_point(node)
>        {translate(node)
>                  {sphere(0.75, center=true);}
>        }
>
>
> I hope this is a useful addition to the OpenSCAD tool set.
>
> You can download the tool from:
> http://www.w-p.dds.nl/dxflines2scad_py.txt
> (after download, rename it to "dxflines2scad.py")
>
>
>
> --
> Sent from: http://forum.openscad.org/
>
> _______________________________________________
> OpenSCAD mailing list
> [hidden email]
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: DXF to "3D-printable" lines with thickness

Neon22
nice script. Also consider the inkscape extension that exports as openscad:

- https://www.thingiverse.com/thing:1065500

Inkscape has a raster to vector tool called "Trace Bitmap" under Path
menu item


On 9/9/2017 3:32 AM, Mr C Camacho wrote:

> wouldn't it be easier just to use surface
>
> https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Surface 
>
>
> I made some great paper embossing stamps with this method (niece and
> nephews seemed to like them!) ...
>
> On 08/09/17 16:02, MathLover wrote:
>> Huh? What happened to all the "raw" texts that were perfectly visible
>> in the
>> preview screen?
>>
>> Let's post his message again:
>>
>> I am using OpenSCAD to make a wax seal, and I want to hand draw my
>> emblem,
>> digitize it into lines in with LibreCAD using a drawing tablet, and then
>> have something I can 3D print and cast into a real seal.
>>
>> Now OpenSCAD can read lines from DXF, but treats them as an outline. I
>> wanted line segments to be represented by, for example, cylinders. Lines
>> with thickness, so I can subtract them from a disc to make a simple wax
>> seal.
>>
>> I wrote a little python program to do this. It reads a DXF file through
>> stdin, and outputs function calls with the endpoints of each line
>> segment
>> found. You can supply a layer name to include only lines on that layer.
>> Optionally, you can also provide another function name that will be
>> called
>> with the endpoints themselves, to provide better corners.
>>
>> For example, the command:
>>
>> ./dxflines2scad.py -l CORPUS -n draw_point -c 'Warning! Generated
>> file. Do
>> not edit.' < ../deksels.dxf
>>
>> Would read all lines on layer "CORPUS" and  produce something like:
>> //  Warning! Generated file. Do not edit.
>> line_segment([19.0, 13.0, 0], [16.75, 13.0, 0]); // DXF handle "C9"
>> line_segment([16.75, 4.0, 0], [16.75, 6.0, 0]); // DXF handle "CB"
>> line_segment([16.75, 4.0, 0], [3.0, 4.0, 0]); // DXF handle "CC"
>> ...
>> draw_point([19.0, 13.0, 0]);
>> draw_point([16.75, 13.0, 0]);
>> draw_point([16.75, 4.0, 0]);
>> draw_point([16.75, 6.0, 0]);
>> ...
>>
>>
>> Which you can include in an OpenSCAD script.
>>
>> Examples for the modules called are:
>>
>> module line_segment(vecFrom, vecTo)
>>        {fltLength = norm(vecTo - vecFrom);
>>         translate(vecFrom)
>>                  {rotate([0, 0, atan2(vecTo[1]-vecFrom[1],
>> vecTo[0]-vecFrom[0])])
>>                         {rotate([0, 90, 0])
>>                                {cylinder(h=fltLength, r=0.5);}
>>                         }
>>                  }
>>        }
>> module draw_point(node)
>>        {translate(node)
>>                  {sphere(0.75, center=true);}
>>        }
>>
>>
>> I hope this is a useful addition to the OpenSCAD tool set.
>>
>> You can download the tool from:
>> http://www.w-p.dds.nl/dxflines2scad_py.txt
>> (after download, rename it to "dxflines2scad.py")
>>
>>
>>
>> --
>> Sent from: http://forum.openscad.org/
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> [hidden email]
>> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
>
>
> _______________________________________________
> OpenSCAD mailing list
> [hidden email]
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
>
> ---
> This email has been checked for viruses by AVG.
> http://www.avg.com
>
>


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: DXF to "3D-printable" lines with thickness

nophead
You can also convert 2D shapes to their outline by subtracting an offset version of themselves. E.g.

module outline(width) difference() {
    offset(width / 2) children();
    offset(-width / 2) children();
}

outline(1) import("shape.dxf");

On 8 September 2017 at 23:45, Mark Schafer <[hidden email]> wrote:
nice script. Also consider the inkscape extension that exports as openscad:

- https://www.thingiverse.com/thing:1065500

Inkscape has a raster to vector tool called "Trace Bitmap" under Path menu item



On 9/9/2017 3:32 AM, Mr C Camacho wrote:
wouldn't it be easier just to use surface

https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Surface

I made some great paper embossing stamps with this method (niece and nephews seemed to like them!) ...

On 08/09/17 16:02, MathLover wrote:
Huh? What happened to all the "raw" texts that were perfectly visible in the
preview screen?

Let's post his message again:

I am using OpenSCAD to make a wax seal, and I want to hand draw my emblem,
digitize it into lines in with LibreCAD using a drawing tablet, and then
have something I can 3D print and cast into a real seal.

Now OpenSCAD can read lines from DXF, but treats them as an outline. I
wanted line segments to be represented by, for example, cylinders. Lines
with thickness, so I can subtract them from a disc to make a simple wax
seal.

I wrote a little python program to do this. It reads a DXF file through
stdin, and outputs function calls with the endpoints of each line segment
found. You can supply a layer name to include only lines on that layer.
Optionally, you can also provide another function name that will be called
with the endpoints themselves, to provide better corners.

For example, the command:

./dxflines2scad.py -l CORPUS -n draw_point -c 'Warning! Generated file. Do
not edit.' < ../deksels.dxf

Would read all lines on layer "CORPUS" and  produce something like:
//  Warning! Generated file. Do not edit.
line_segment([19.0, 13.0, 0], [16.75, 13.0, 0]); // DXF handle "C9"
line_segment([16.75, 4.0, 0], [16.75, 6.0, 0]); // DXF handle "CB"
line_segment([16.75, 4.0, 0], [3.0, 4.0, 0]); // DXF handle "CC"
...
draw_point([19.0, 13.0, 0]);
draw_point([16.75, 13.0, 0]);
draw_point([16.75, 4.0, 0]);
draw_point([16.75, 6.0, 0]);
...


Which you can include in an OpenSCAD script.

Examples for the modules called are:

module line_segment(vecFrom, vecTo)
       {fltLength = norm(vecTo - vecFrom);
        translate(vecFrom)
                 {rotate([0, 0, atan2(vecTo[1]-vecFrom[1],
vecTo[0]-vecFrom[0])])
                        {rotate([0, 90, 0])
                               {cylinder(h=fltLength, r=0.5);}
                        }
                 }
       }
module draw_point(node)
       {translate(node)
                 {sphere(0.75, center=true);}
       }


I hope this is a useful addition to the OpenSCAD tool set.

You can download the tool from:
http://www.w-p.dds.nl/dxflines2scad_py.txt
(after download, rename it to "dxflines2scad.py")



--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

---
This email has been checked for viruses by AVG.
http://www.avg.com




_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: DXF to "3D-printable" lines with thickness

codifies
nice tip, simple and useful, thanks

On 09/09/17 11:17, nop head wrote:
You can also convert 2D shapes to their outline by subtracting an offset version of themselves. E.g.

module outline(width) difference() {
    offset(width / 2) children();
    offset(-width / 2) children();
}

outline(1) import("shape.dxf");

On 8 September 2017 at 23:45, Mark Schafer <[hidden email]> wrote:
nice script. Also consider the inkscape extension that exports as openscad:

- https://www.thingiverse.com/thing:1065500

Inkscape has a raster to vector tool called "Trace Bitmap" under Path menu item



On 9/9/2017 3:32 AM, Mr C Camacho wrote:
wouldn't it be easier just to use surface

https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Surface

I made some great paper embossing stamps with this method (niece and nephews seemed to like them!) ...

On 08/09/17 16:02, MathLover wrote:
Huh? What happened to all the "raw" texts that were perfectly visible in the
preview screen?

Let's post his message again:

I am using OpenSCAD to make a wax seal, and I want to hand draw my emblem,
digitize it into lines in with LibreCAD using a drawing tablet, and then
have something I can 3D print and cast into a real seal.

Now OpenSCAD can read lines from DXF, but treats them as an outline. I
wanted line segments to be represented by, for example, cylinders. Lines
with thickness, so I can subtract them from a disc to make a simple wax
seal.

I wrote a little python program to do this. It reads a DXF file through
stdin, and outputs function calls with the endpoints of each line segment
found. You can supply a layer name to include only lines on that layer.
Optionally, you can also provide another function name that will be called
with the endpoints themselves, to provide better corners.

For example, the command:

./dxflines2scad.py -l CORPUS -n draw_point -c 'Warning! Generated file. Do
not edit.' < ../deksels.dxf

Would read all lines on layer "CORPUS" and  produce something like:
//  Warning! Generated file. Do not edit.
line_segment([19.0, 13.0, 0], [16.75, 13.0, 0]); // DXF handle "C9"
line_segment([16.75, 4.0, 0], [16.75, 6.0, 0]); // DXF handle "CB"
line_segment([16.75, 4.0, 0], [3.0, 4.0, 0]); // DXF handle "CC"
...
draw_point([19.0, 13.0, 0]);
draw_point([16.75, 13.0, 0]);
draw_point([16.75, 4.0, 0]);
draw_point([16.75, 6.0, 0]);
...


Which you can include in an OpenSCAD script.

Examples for the modules called are:

module line_segment(vecFrom, vecTo)
       {fltLength = norm(vecTo - vecFrom);
        translate(vecFrom)
                 {rotate([0, 0, atan2(vecTo[1]-vecFrom[1],
vecTo[0]-vecFrom[0])])
                        {rotate([0, 90, 0])
                               {cylinder(h=fltLength, r=0.5);}
                        }
                 }
       }
module draw_point(node)
       {translate(node)
                 {sphere(0.75, center=true);}
       }


I hope this is a useful addition to the OpenSCAD tool set.

You can download the tool from:
http://www.w-p.dds.nl/dxflines2scad_py.txt
(after download, rename it to "dxflines2scad.py")



--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

---
This email has been checked for viruses by AVG.
http://www.avg.com




_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org



_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org