File: Visolate-info.html

package info (click to toggle)
visolate 3.1.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,856 kB
  • sloc: java: 9,882; makefile: 7; sh: 1
file content (225 lines) | stat: -rw-r--r-- 9,511 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225













































<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <style type="text/css">
body {
  background: #ffffff;
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 14px;
  color: #000000;
/*  margin-left: 0;
  margin-right: 0; */
}

h1 {
  color: #333399;
}

h2.separator {
  margin-bottom: 0px;
  border-bottom: 2px solid #9999cc;
}

h3.separator {
  margin-bottom: 0px;
  border-bottom: 2px solid #9999cc;
}

h4.separator {
  margin-bottom: 0px;
  border-bottom: 2px solid #9999cc;
}

h5.separator {
  margin-bottom: 0px;
  border-bottom: 2px solid #9999cc;
}

h6.separator {
  margin-bottom: 0px;
  border-bottom: 2px solid #9999cc;
}

img {
  border: 0px;
}

code {
  font-family: Courier New, Courier, mono, monospace;
  font-size: 12px;
  color: #000066;
  background-color: #ffeedd;
}

table.itemlist {
  /* border-top: 1px solid #000000; */
  padding-top: 0px;
  margin-top: 4px;
}

p {
  text-indent: 1.5em;
  margin-top: 0.6em;
  margin-bottom: 0.6em;
}

pre {
  font-family: monospace;
}

 </style>
  
 <title>Marsette Vona:  Visolate Info </title>
</head>

<body>

  <table border="0" cellspacing="0" cellpadding="0">
    <tr valign="top">
      <td nowrap="true">
        <font size="5"><a href="http://www.mit.edu/~vona">Marsette Vona</a>:</font>
      </td>
      
      <td><font size="5">Visolate Info</font></td>
    </tr>
  </table>


<p>
&nbsp;<br/>
<center>
<img width="640" height="422" src="ATM0PCB0-three-ways-med.jpg" alt="Visolate example image"/><br/>
<!-- <a href="Visolate-info.html">info</a>&nbsp;|&nbsp -->
<!-- <a href="Visolate-autodownload.html">JOGL auto-download applet</a>&nbsp;|&nbsp; -->
<!-- <a href="Visolate.html">applet</a>&nbsp;|&nbsp; -->
<a href="Visolate.jnlp">webstart</a>&nbsp;|&nbsp;
<a href="#Download">download</a>&nbsp;|&nbsp;
<a href="visolate">browse source</a>&nbsp;|&nbsp;
<a href="javadoc-Visolate/index.html">javadoc</a>
</center>
</p>


<h2 class="separator"><a name="Introduction"/a>Introduction</h2>

<p>Printed circuit boards are in virtually every piece of modern electronics.  They typically start out as a sheet of fiberglass coated on one or both sides with copper.  A photochemical process is normally used to remove much of that copper, leaving a pattern of traces to which electronic components are soldered forming the desired circuit.</p>

<p>For some applications, particularly very low-volume production in home or office environments or rapid-design cycle R&amp;D, the setup costs, environmental hazards, and sensitivity of the chemical process suggest exploring other methods of PCB production.  Mechanical etch is one alternative.  This process also starts with a copper-clad PCB.  However, the unwanted copper is removed mechanically rather than chemically.  Most often, a fine-point rotary tool bit is used to create a separation in the copper around the boundary of each trace.  The extra copper remaining between the traces is usually left in-place, as it is no longer electrically connected to any trace.</p>

<p>Here we explore an alternate method: compute the Voronoi region associated with each trace and cut along the boundaries between such regions.  The image above shows the same printed circuit board (PCB) manufactured three different ways: by traditional photochemical process (right, this one has also been drilled and plated); by mechanical etch with standard outline toolpaths (middle); by mechanical etch with Voronoi toolpaths (left).</p>

<p>We developed a Java application, <i>Visolate</i>, which computes PCB isolation routing toolpaths, optionally following the boundaries of the entity Voronoi diagram induced by the traces.  Given a board design, the program computes a toolpath for a CNC mill to cut out the traces.</p>

<!-- <p>If Voronoi diagram is new to you, here's a commonly used intuitive definition.  Imagine that instead of a PCB we are talking about a big flat field of uniform dry grass.  Now, simultaneously and uniformly, start little fires where all the traces would be.  As each trace's fire spreads, the burned region it leaves is the trace's Voronoi region.  You can imagine that the fires from two nearby traces will eventually expand, meet each other, and go out.  These meetings of fires occur at the boundaries between the Voronoi regions.</p> -->

<p>Cutting the Voronoi boundaries has both advantages and disadvantages.  Compared with boundary tracing, the Voronoi method produces only one cut instead of two to separate traces.  This can produce cleaner and more consistent results for closely spaced traces.  While there is no guarantee that the overall length of the Voronoi toolpath will be shorter than boundary tracing, in practice on real board designs we found that the Voronoi toolpath was on average nearly 40% shorter (see paper below).  The Voronoi method usually produces "fat" traces, thus maximizing current carrying capacity, though in its basic form there is no way to specify particular traces that should be fattened more than others.  On the downside, the Voronoi traces will have different second-order properties, such as parasitic capacitance, than the originally designed traces.</p>
 
<p>More information is available in a paper we wrote about the algorithms in our system: "<a href="http://www.mit.edu/~vona/publications/Vona_Rus__2005__Voronoi_toolpaths_for_PCB_mechanical_etch_Simple_and_intuitive_algorithms_with_the_3D_GPU.pdf">Voronoi toolpaths for PCB mechanical etch: Simple and intuitive algorithms with the 3D GPU</a>" by Marsette A. Vona and Daniela Rus, which is published in the proceedings of the International Conference on Robotics and Automation, 2005.</p>

<h2 class="separator"><a name="Download"/a>Download</h2>

<p>Visolate is <a href="Visolate.jar">released</a> in precompiled source form under the <a href="http://www.gnu.org">GNU</a> <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>.</p>

<h2 class="separator"><a name="Status"/a>Status</h2>

<p>This is highly experimental code.  In particular, the gerber parser is incomplete (polygons and inverted images are not implemented, for example).  We do not recommend driving any a CNC machine with g-code generated by Visolate unless you first carefully verify its safety.</p>

<h2 class="separator"><a name="Requirements and Installation"/a>Requirements and Installation</h2>

<p>Visolate has been tested under 1.5+ JREs from Sun with <a
href="https://java3d.dev.java.net/binary-builds.html">Java3D 1.5+</a> on
GNU/Linux (Mozilla) and Windows (Firefox).  Other JREs may work, but working
installations of Java3D (not typically included with a JRE) and Swing
(typically only included in full with Sun JREs, at the time of this writing)
are required to run as a stand-alone application. Note that Java3D 1.5+ on Mac
OS X itself <a
href="http://www.nofluffjuststuff.com/blog_detail.jsp?rssItemId=97558">apparrently</a>
requires <a href="http://jogl.dev.java.net">JOGL</a>.</p>

<h2 class="separator"><a name="Acknowledgements"/a>Acknowledgements</h2>
<p>
<ul>
  <li>The raster-to-vector algorithm is heavily inspired by Peter Selinger's <a href="http://potrace.sourceforge.net">potrace</a> and his writeup <a href="http://potrace.sourceforge.net/potrace.pdf">Potrace: a polygon-based tracing algorithm</a>.</li>
  <li>The voronoi computation is based on the following paper: Kenneth E. Hoff III, Tim Culver, John Keyser, Ming Lin, Dinesh Manocha.  <a href="http://www.cs.unc.edu/~geom/voronoi/siggraph_paper/voronoi.pdf">Fast Computation of Generalized Voronoi Diagrams Using Graphics Hardware</a>.  1999.</li>
  <li>I learned some undocumented details of the <a href="http://members.optusnet.com.au/~eseychell/rs274xrevd_e.pdf">gerber format</a> from the source code for C. Scott Ananian's PCBMill Web Utilities and also the <a href="http://gerbv.sourceforge.net/">gerbv</a> source code.</li>
</ul>
</p>

<h2 class="separator"><a name="Disclaimer"/a>Disclaimer</h2>

<p><p>THIS INFORMATION AND/OR SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS INFORMATION AND/OR SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p></p>


<table border="0" cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
</table>

<hr size="0" noshade="true">

<table border="0" cellspacing="0" cellpadding="0" width="100%">
  <tr valign="top">
    <td align="left" width="33%"><a href=mailto:vona@mit.edu>vona@mit.edu</a></td>
    <td align="center" width="34%">
      <font size="-1">&copy; 2008 Marsette Vona</font>
		</td>
    <td align="right" width="33%">Sun Sep 14 20:29:08 EDT 2008</td>
  </tr>
</table>

<!-- Begin MIT-use only web reporting counter -->
<img src="http://counter.mit.edu/tally" width="1" height="1" alt="">
<!-- End MIT-use only web reporting counter -->

</body>
</html>