|
@ -1,3 +1,4 @@
|
||||||
|
# -*- explicit-buffer-name: "CMakeLists.txt<kite>" -*-
|
||||||
|
|
||||||
project(KITE)
|
project(KITE)
|
||||||
|
|
||||||
|
@ -40,6 +41,6 @@
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
add_subdirectory(cmake_modules)
|
add_subdirectory(cmake_modules)
|
||||||
if(BUILD_DOC AND DOXYGEN_FOUND AND IS_DIRECTORY doc)
|
if(BUILD_DOC AND DOXYGEN_FOUND)
|
||||||
add_subdirectory(doc)
|
add_subdirectory(doc)
|
||||||
endif(BUILD_DOC AND DOXYGEN_FOUND AND IS_DIRECTORY doc)
|
endif(BUILD_DOC AND DOXYGEN_FOUND)
|
||||||
|
|
|
@ -1,353 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
* | HTML Standart Tags |
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
*/
|
|
||||||
|
|
||||||
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-size: 100%;
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
color: black;
|
|
||||||
background: white;
|
|
||||||
background-color: white;
|
|
||||||
background-position: top left;
|
|
||||||
background-attachment: fixed;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
margin-top: 2em;
|
|
||||||
margin-right: 10%;
|
|
||||||
margin-left: 10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
height: 1px;
|
|
||||||
border: 0;
|
|
||||||
color: #004400;
|
|
||||||
background-color: #004400;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 { text-align: center; }
|
|
||||||
h2, h3, h4, h5, h6 { text-align: left;
|
|
||||||
padding-top: 2em;
|
|
||||||
}
|
|
||||||
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif;
|
|
||||||
color: #09550B;
|
|
||||||
}
|
|
||||||
h1 { font-weight: bold; font-size: 170%; }
|
|
||||||
h2 { font-weight: bold; font-size: 140%; }
|
|
||||||
h3 { font-weight: bold; font-size: 118%; }
|
|
||||||
h4 { font-weight: bold; font-size: 100%; }
|
|
||||||
h5 { font-style: italic; font-size: 100%; }
|
|
||||||
h6 { font-variant: small-caps; font-size: 100%; }
|
|
||||||
|
|
||||||
.hide {
|
|
||||||
display: none;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 0.6em;
|
|
||||||
margin-bottom: 0.6em;
|
|
||||||
margin-left: 0.0em;
|
|
||||||
margin-right: 0.0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
address {
|
|
||||||
text-align: right;
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: italic;
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
caption { font-weight: bold }
|
|
||||||
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin-left: 4em;
|
|
||||||
margin-right: 4em;
|
|
||||||
margin-top: 0.8em;
|
|
||||||
margin-bottom: 0.8em;
|
|
||||||
font-style: italic;
|
|
||||||
color: #003300;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote p {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote address {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt, dd { margin-top: 0; margin-bottom: 0; }
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
|
|
||||||
|
|
||||||
pre, tt, code {
|
|
||||||
font-family: "andale mono", monospace;
|
|
||||||
font-size: 100%;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
font-size: 80%;
|
|
||||||
border: solid;
|
|
||||||
border-width: thin;
|
|
||||||
border-color: #003300;
|
|
||||||
background-color: #EEEEEE;
|
|
||||||
padding: 0.5em;
|
|
||||||
margin-left: 2em;
|
|
||||||
margin-right: 2em
|
|
||||||
}
|
|
||||||
|
|
||||||
tt { color: green; }
|
|
||||||
em { font-style: italic; font-weight: bold; }
|
|
||||||
strong { font-weight: bold; }
|
|
||||||
|
|
||||||
span.textit { font-style: italic; }
|
|
||||||
span.textbf { font-weight: bold; }
|
|
||||||
|
|
||||||
.small { font-size: 90%; }
|
|
||||||
.white { color: #FFFFFF; }
|
|
||||||
|
|
||||||
|
|
||||||
ul.toc {
|
|
||||||
list-style: disc;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a:link img, a:visited img { border-style: none; }
|
|
||||||
a img { color: white; }
|
|
||||||
|
|
||||||
a:link, a:active, a:visited {
|
|
||||||
color: #09550B;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover, a:focus {
|
|
||||||
color: #FF9900;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
* | Doxygen Specific Classes |
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Header & Footer Classes (customized top page navigation bar).
|
|
||||||
*/
|
|
||||||
|
|
||||||
table.header {
|
|
||||||
width: 100%;
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1.header {
|
|
||||||
font-family: times, verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.header {
|
|
||||||
/*width: 14%;*/
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footer {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.leftFoot1, td.leftFoot2 {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.rightFoot1, td.rightFoot2 {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.leftFoot2 {
|
|
||||||
font-family: time;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.rightFoot2 {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.ah {
|
|
||||||
font-family: time;
|
|
||||||
font-size: 250%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Quick Index Class (top page navigation bar).
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.qindex, div.nav {
|
|
||||||
width: 100%;
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #eeeeff;*/
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
border: 1px solid #003300;
|
|
||||||
text-align: center;
|
|
||||||
margin: 2px;
|
|
||||||
padding: 2px;
|
|
||||||
line-height: 140%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex, a.qindex:visited {
|
|
||||||
color: #09550B;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex:hover {
|
|
||||||
background-color: #ddddff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindexHL, a.qindexHL:hover, a.qindexHL:visited {
|
|
||||||
background-color: #0c780c;
|
|
||||||
color: #ffffff;
|
|
||||||
border: 1px double #9295C2;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited {
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #0000ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey {
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border: 1px solid #b0b0b0;
|
|
||||||
padding: 2px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey, .indexvalue {
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border: 1px solid #b0b0b0;
|
|
||||||
padding: 2px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexvalue {
|
|
||||||
width: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Verbatim Source Code / Examples.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pre.fragment { background-color: #EEEEEE; }
|
|
||||||
|
|
||||||
span.keyword { color: #008000 }
|
|
||||||
span.keywordtype { color: #604020 }
|
|
||||||
span.keywordflow { color: #e08000 }
|
|
||||||
span.comment { color: #800000 }
|
|
||||||
span.preprocessor { color: #806020 }
|
|
||||||
span.stringliteral { color: #002080 }
|
|
||||||
span.charliteral { color: #008080 }
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Attributes Listing.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mdTable {
|
|
||||||
/*border: 1px solid #868686;*/
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #F4F4FB;*/
|
|
||||||
border: 1px none #868686;
|
|
||||||
/*background-color: #B8E6B8;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
margin-top: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mdRow {
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This Mozilla/Firefox bug has been corrected from v1.5.
|
|
||||||
* .mdname1 {
|
|
||||||
* padding: 3px 0px 0px 0px;
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mdescLeft, .mdescRight {
|
|
||||||
padding: 0px 8px 4px 8px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-style: italic;
|
|
||||||
/*background-color: #FAFAFA;*/
|
|
||||||
border-top: 1px none #E0E0E0;
|
|
||||||
border-right: 1px none #E0E0E0;
|
|
||||||
border-bottom: 1px none #E0E0E0;
|
|
||||||
border-left: 1px none #E0E0E0;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memItemLeft, .memItemRight, .memTemplItemLeft {
|
|
||||||
padding: 1px 0px 0px 8px;
|
|
||||||
margin: 4px;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
border-top-color: #0c0c0c;
|
|
||||||
border-right-color: #0c0c0c;
|
|
||||||
border-bottom-color: #0c0c0c;
|
|
||||||
border-left-color: #0c0c0c;
|
|
||||||
border-top-style: solid;
|
|
||||||
border-right-style: none;
|
|
||||||
border-bottom-style: none;
|
|
||||||
border-left-style: none;
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #eeeeff;*/
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memItemLeft { font-size: 12px; }
|
|
||||||
.memItemRight { font-size: 13px; }
|
|
||||||
.memTemplItemLeft { font-size: 12px; }
|
|
||||||
.memTemplItemRight { font-size: 13px; }
|
|
||||||
|
|
||||||
.memTemplParams {
|
|
||||||
color: #606060;
|
|
||||||
background-color: #DADAEF;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,485 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
* | HTML Standart Tags |
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
*/
|
|
||||||
|
|
||||||
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-size: 96%;
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
color: black;
|
|
||||||
background: white;
|
|
||||||
background-color: white;
|
|
||||||
background-position: top left;
|
|
||||||
background-attachment: fixed;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
margin-top: 2em;
|
|
||||||
margin-right: 8%;
|
|
||||||
margin-left: 8%;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
height: 1px;
|
|
||||||
border: 0;
|
|
||||||
color: #004400;
|
|
||||||
background-color: #004400;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 { text-align: center; }
|
|
||||||
h2, h3, h4, h5, h6 { text-align: left;
|
|
||||||
padding-top: 2em;
|
|
||||||
}
|
|
||||||
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif;
|
|
||||||
color: #09550B;
|
|
||||||
}
|
|
||||||
h1 { font-weight: bold; font-size: 170%; }
|
|
||||||
h2 { font-weight: bold; font-size: 140%; }
|
|
||||||
h3 { font-weight: bold; font-size: 118%; }
|
|
||||||
h4 { font-weight: bold; font-size: 100%; }
|
|
||||||
h5 { font-style: italic; font-size: 100%; }
|
|
||||||
h6 { font-variant: small-caps; font-size: 100%; }
|
|
||||||
|
|
||||||
h2.classHierarchy {
|
|
||||||
/*border: 1px none #008500;*/
|
|
||||||
border: 1px none #000000;
|
|
||||||
border-top-width: 2px;
|
|
||||||
border-top-style: solid;
|
|
||||||
padding-top: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.hide {
|
|
||||||
display: none;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 0.6em;
|
|
||||||
margin-bottom: 0.6em;
|
|
||||||
margin-left: 0.0em;
|
|
||||||
margin-right: 0.0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
address {
|
|
||||||
text-align: right;
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: italic;
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
caption { font-weight: bold }
|
|
||||||
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin-left: 4em;
|
|
||||||
margin-right: 4em;
|
|
||||||
margin-top: 0.8em;
|
|
||||||
margin-bottom: 0.8em;
|
|
||||||
font-style: italic;
|
|
||||||
color: #003300;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote p {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote address {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt, dd { margin-top: 0; margin-bottom: 0; }
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
|
|
||||||
|
|
||||||
pre, tt, code {
|
|
||||||
font-family: "andale mono", monospace;
|
|
||||||
font-size: 100%;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
font-size: 80%;
|
|
||||||
border: dashed;
|
|
||||||
border-width: thin;
|
|
||||||
border-color: #003300;
|
|
||||||
/*
|
|
||||||
background-color: #EEEEEE;
|
|
||||||
*/
|
|
||||||
background-color: #FCFCE1;
|
|
||||||
padding: 0.5em;
|
|
||||||
margin-left: 2em;
|
|
||||||
margin-right: 2em
|
|
||||||
}
|
|
||||||
|
|
||||||
tt { color: green; }
|
|
||||||
em { font-style: italic;
|
|
||||||
font-weight: bold; }
|
|
||||||
strong { font-weight: bold; }
|
|
||||||
|
|
||||||
span.textit { font-style: italic; }
|
|
||||||
span.textbf { font-weight: bold; }
|
|
||||||
|
|
||||||
.small { font-size: 90%; }
|
|
||||||
.white { color: #FFFFFF; }
|
|
||||||
|
|
||||||
|
|
||||||
ul.toc {
|
|
||||||
list-style: disc;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
a:link img, a:visited img { border-style: none; }
|
|
||||||
a img { color: white; }
|
|
||||||
|
|
||||||
a:link, a:active, a:visited {
|
|
||||||
color: #09550B;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover, a:focus {
|
|
||||||
color: #FF9900;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
* | Doxygen Specific Classes |
|
|
||||||
* x-----------------------------------------------------------------x
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Header & Footer Classes (customized top page navigation bar).
|
|
||||||
*/
|
|
||||||
|
|
||||||
h1.header {
|
|
||||||
font-size: 200%;
|
|
||||||
font-family: times, verdana, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
center.header {
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.header {
|
|
||||||
/*width: 100%;*/
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.header td {
|
|
||||||
padding: 2px 14px;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
font-family: verdana, sans-serif;
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footer1, table.footer2 { width: 100%; }
|
|
||||||
td.LFooter { text-align: left; }
|
|
||||||
td.RFooter { text-align: right; }
|
|
||||||
td.CFooter { text-align: center;}
|
|
||||||
table.footer2 td.RFooter { font-weight: bold; width: 35% }
|
|
||||||
table.footer2 td.CFooter { width: 30% }
|
|
||||||
table.footer2 td.LFooter { font-weight: bold; width: 35%; font-family: time; }
|
|
||||||
|
|
||||||
table.classHierarchy {
|
|
||||||
border-collapse: separate;
|
|
||||||
border-spacing: 5px;
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classHierarchy tr {
|
|
||||||
border: 1px solid blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classHierarchy td.normal {
|
|
||||||
border: 1px solid #CCE6CA;
|
|
||||||
width: 140pt;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classHierarchy td.virtual {
|
|
||||||
border: 1px solid black;
|
|
||||||
width: 140pt;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classHierarchy td.wnormal {
|
|
||||||
border: 1px solid #CCE6CA;
|
|
||||||
width: 240pt;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.classHierarchy td.wvirtual {
|
|
||||||
border: 1px solid black;
|
|
||||||
width: 240pt;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.ah {
|
|
||||||
font-family: time;
|
|
||||||
font-size: 250%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Quick Index Class (top page navigation bar).
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.qindex, div.nav {
|
|
||||||
width: 100%-4px;
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #eeeeff;*/
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
border: 0px solid #003300;
|
|
||||||
text-align: center;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 2px;
|
|
||||||
line-height: 140%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex, a.qindex:visited {
|
|
||||||
color: #09550B;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindex:hover {
|
|
||||||
background-color: #ddddff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.qindexHL, a.qindexHL:hover, a.qindexHL:visited {
|
|
||||||
background-color: #0c780c;
|
|
||||||
color: #ffffff;
|
|
||||||
border: 1px double #9295C2;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited {
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #0000ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey {
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border: 1px solid #b0b0b0;
|
|
||||||
padding: 2px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey, .indexvalue {
|
|
||||||
background-color: #eeeeff;
|
|
||||||
border: 1px solid #b0b0b0;
|
|
||||||
padding: 2px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexkey {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.indexvalue {
|
|
||||||
width: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 a[name="index__"],
|
|
||||||
h3 a[name="index_a"],
|
|
||||||
h3 a[name="index_b"],
|
|
||||||
h3 a[name="index_c"],
|
|
||||||
h3 a[name="index_d"],
|
|
||||||
h3 a[name="index_e"],
|
|
||||||
h3 a[name="index_f"],
|
|
||||||
h3 a[name="index_g"],
|
|
||||||
h3 a[name="index_h"],
|
|
||||||
h3 a[name="index_i"],
|
|
||||||
h3 a[name="index_j"],
|
|
||||||
h3 a[name="index_k"],
|
|
||||||
h3 a[name="index_l"],
|
|
||||||
h3 a[name="index_m"],
|
|
||||||
h3 a[name="index_n"],
|
|
||||||
h3 a[name="index_o"],
|
|
||||||
h3 a[name="index_p"],
|
|
||||||
h3 a[name="index_q"],
|
|
||||||
h3 a[name="index_r"],
|
|
||||||
h3 a[name="index_s"],
|
|
||||||
h3 a[name="index_t"],
|
|
||||||
h3 a[name="index_u"],
|
|
||||||
h3 a[name="index_v"],
|
|
||||||
h3 a[name="index_w"],
|
|
||||||
h3 a[name="index_x"],
|
|
||||||
h3 a[name="index_y"],
|
|
||||||
h3 a[name="index_z"],
|
|
||||||
h3 a[name="index_0"],
|
|
||||||
h3 a[name="index_1"],
|
|
||||||
h3 a[name="index_2"],
|
|
||||||
h3 a[name="index_3"],
|
|
||||||
h3 a[name="index_4"],
|
|
||||||
h3 a[name="index_5"],
|
|
||||||
h3 a[name="index_6"],
|
|
||||||
h3 a[name="index_7"],
|
|
||||||
h3 a[name="index_8"],
|
|
||||||
h3 a[name="index_9"]
|
|
||||||
{
|
|
||||||
font-family: time;
|
|
||||||
font-size: 250%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Verbatim Source Code / Examples.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* pre.fragment { background-color: #EEEEEE; } */
|
|
||||||
|
|
||||||
span.keyword { color: #008000 }
|
|
||||||
span.keywordtype { color: #604020 }
|
|
||||||
span.keywordflow { color: #e08000 }
|
|
||||||
span.comment { color: #800000 }
|
|
||||||
span.preprocessor { color: #806020 }
|
|
||||||
span.stringliteral { color: #002080 }
|
|
||||||
span.charliteral { color: #008080 }
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------
|
|
||||||
* Attributes Listing.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mdTable {
|
|
||||||
/*border: 1px solid #868686;*/
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #F4F4FB;*/
|
|
||||||
border: 1px none #008500;
|
|
||||||
border-left-width: 1px;
|
|
||||||
border-left-style: solid;
|
|
||||||
/*background-color: #B8E6B8;*/
|
|
||||||
/*background-color: #CCE6CA;*/
|
|
||||||
margin-top: 25px;
|
|
||||||
font-size: 105%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mdRow {
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This Mozilla/Firefox bug has been corrected from v1.5.
|
|
||||||
* .mdname1 {
|
|
||||||
* padding: 3px 0px 0px 0px;
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mdescLeft, .mdescRight {
|
|
||||||
padding: 0px 8px 4px 8px;
|
|
||||||
font-size: 11px;
|
|
||||||
font-style: italic;
|
|
||||||
/*background-color: #FAFAFA;*/
|
|
||||||
border-top: 1px none #E0E0E0;
|
|
||||||
border-right: 1px none #E0E0E0;
|
|
||||||
border-bottom: 1px none #E0E0E0;
|
|
||||||
border-left: 1px none #E0E0E0;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memitem {
|
|
||||||
margin-bottom: 30px;
|
|
||||||
border: 1px none #008500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memproto {
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
border-left-width: 4px;
|
|
||||||
border-left-style: solid;
|
|
||||||
border-color: #008500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memname {
|
|
||||||
white-space: nowrap;
|
|
||||||
padding-left: 5px;
|
|
||||||
font-size: 105%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.memdoc{
|
|
||||||
padding-left: 5px;
|
|
||||||
/*margin-top: -8px;*/
|
|
||||||
border-left-width: 1px;
|
|
||||||
border-left-style: solid;
|
|
||||||
border-color: #008500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
|
|
||||||
padding: 1px 0px 0px 8px;
|
|
||||||
margin: 4px;
|
|
||||||
border-top-width: 1px;
|
|
||||||
border-right-width: 1px;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
border-left-width: 1px;
|
|
||||||
border-top-color: #0c0c0c;
|
|
||||||
border-right-color: #0c0c0c;
|
|
||||||
border-bottom-color: #0c0c0c;
|
|
||||||
border-left-color: #0c0c0c;
|
|
||||||
border-top-style: solid;
|
|
||||||
border-right-style: none;
|
|
||||||
border-bottom-style: none;
|
|
||||||
border-left-style: none;
|
|
||||||
/*background-color: #DADAEF;*/
|
|
||||||
/*background-color: #eeeeff;*/
|
|
||||||
/*background-color: #EEEEEE;*/
|
|
||||||
background-color: #CCE6CA;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memTemplItemLeft, .memTemplItemRight {
|
|
||||||
border-bottom-width: 2px;
|
|
||||||
border-bottom-style: solid;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.memItemLeft { font-size: 11px; }
|
|
||||||
.memItemRight { font-size: 12px; }
|
|
||||||
.memTemplItemLeft { font-size: 11px; }
|
|
||||||
.memTemplItemRight { font-size: 12px; }
|
|
||||||
|
|
||||||
.memTemplParams {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #000000;
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.groupText, .groupHeader {
|
|
||||||
color: #09550B;
|
|
||||||
margin-top: 15px;
|
|
||||||
font-size: 130%;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- explicit-buffer-name: "CMakeLists.txt<kite/doc>" -*-
|
||||||
|
|
||||||
set ( htmlInstallDir share/doc/coriolis2/en/html/kite )
|
set ( htmlInstallDir share/doc/coriolis2/en/html/kite )
|
||||||
set ( latexInstallDir share/doc/coriolis2/en/latex/kite )
|
set ( latexInstallDir share/doc/coriolis2/en/latex/kite )
|
||||||
|
@ -5,8 +6,8 @@
|
||||||
add_custom_target ( doc ALL cd ${KITE_SOURCE_DIR}/doc && ${DOXYGEN_EXECUTABLE} doxyfile )
|
add_custom_target ( doc ALL cd ${KITE_SOURCE_DIR}/doc && ${DOXYGEN_EXECUTABLE} doxyfile )
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
# install ( FILES customHierarchy.html DESTINATION ${htmlInstallDir} )
|
install ( FILES customHierarchy.html DESTINATION ${htmlInstallDir} )
|
||||||
# install ( FILES customSummary.html DESTINATION ${htmlInstallDir} )
|
install ( FILES customSummary.html DESTINATION ${htmlInstallDir} )
|
||||||
|
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
|
|
@ -1,597 +1,246 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
/*! \class RoutingEvent::Key
|
||||||
|
* \brief RoutingEvent cached key for maps
|
||||||
|
*
|
||||||
|
* The key is used as a cache in RoutingEvent, that is, the RoutingEvent
|
||||||
|
* attributes could be modificated without the key changing. It is
|
||||||
|
* important for the key to remain stable as it used in the various
|
||||||
|
* event queue as the sorting attribute. The key should be updated
|
||||||
|
* only when the RoutingEvent is temporarily whidrawn from the queue.
|
||||||
|
*
|
||||||
|
* Cached attributes: (used in that lexicographical order for sorting)
|
||||||
|
* - \b 1 -- \c eventLevel.
|
||||||
|
* - \b 2 -- \c canRipple.
|
||||||
|
* - \b 3 -- \c priority.
|
||||||
|
* - \b 4 -- \c length.
|
||||||
|
* - \b 5 -- \c isHorizontal.
|
||||||
|
* - \b 6 -- \c axis.
|
||||||
|
* - \b 7 -- \c sourceU.
|
||||||
|
* - \b 8 -- \c net (name).
|
||||||
|
* - \b 9 -- \c id.
|
||||||
|
* - \b X -- \c slackenStrap \b unused.
|
||||||
|
* - \b X -- \c tracksNb \b unused.
|
||||||
|
*
|
||||||
|
* It is internally managed by RoutingEvent and the queue.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//! \function RoutingEvent::Key::update ( const RoutingEvent* event );
|
||||||
|
//! Cache the value of the key from \c event.
|
||||||
|
|
||||||
/*! \class RoutingEvent
|
/*! \class RoutingEvent
|
||||||
* \brief Manage TrackSegment routing requests.
|
* \brief Atomic Placement Request for a TrackSegment
|
||||||
*
|
*
|
||||||
* The \RoutingEvent is the workhorse of Kite. A \RoutingEvent is
|
* \red{The trackFrees attribute has to be reviewed not sure it's still useful.}
|
||||||
* associated to one \TrackSegment. One \TrackSegment could be
|
|
||||||
* associated to many \RoutingEvent in the queue, but only one
|
|
||||||
* of those is active (marked as unprocessed).
|
|
||||||
*
|
*
|
||||||
* \see ClassManipulator.
|
* Cached key for stable sorting, see RoutingEvent::Key.
|
||||||
*
|
|
||||||
* \section secProcessAlgorithm Description of the process() method
|
|
||||||
*
|
|
||||||
\code
|
|
||||||
void RoutingEvent::process ()
|
|
||||||
{
|
|
||||||
if ( isProcessed() ) return;
|
|
||||||
setProcessed ();
|
|
||||||
incRipupCount ();
|
|
||||||
|
|
||||||
if ( getRipupCount() > MAX_RIPUP_COUNT ) {
|
|
||||||
// We are *not* in ripup mode.
|
|
||||||
// The event's segment has to be topologically modified.
|
|
||||||
modifyTopology ( _segment );
|
|
||||||
} else {
|
|
||||||
// We are in ripup mode.
|
|
||||||
// Other overlaping segments are to be removeds/pusheds. It can result in
|
|
||||||
// segment breaking *if* other segment came from an already routed GCell.
|
|
||||||
|
|
||||||
// optimal, constraint, perpandicular.
|
|
||||||
computeAllIntervals ();
|
|
||||||
|
|
||||||
// Find & order all candidates Tracks.
|
|
||||||
candidates = computeCostOnCandidateTracks ();
|
|
||||||
sort ( candidates );
|
|
||||||
|
|
||||||
if ( candidates[0].isFree() ) {
|
|
||||||
// Case -A.1- "Free Track".
|
|
||||||
candidate[0].insert ( _segment );
|
|
||||||
} else if ( candidates[0].isSoftOverlap()
|
|
||||||
|| candidates[0].isHardOverlap() ) {
|
|
||||||
// Case -A.2- "Soft Overlap".
|
|
||||||
// Case -A.3- "Hard Overlap".
|
|
||||||
for ( size_t i=0 ; i<candidates.size() ; i++ ) {
|
|
||||||
if ( candidates[0].insertInTrack ( _segment ) ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Case -B- "Infinite Cost".
|
|
||||||
// Attention: meaning's changed, *infinite* only in case of
|
|
||||||
// conflict with a *fixed* other segment.
|
|
||||||
modifyTopology ( _segment );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restore Track coherency before processing any other event.
|
|
||||||
Session::revalidate ();
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
* \section secRoutingIntervalToDo ToDo
|
|
||||||
*
|
|
||||||
* <ul>
|
|
||||||
* <li>New \c isLocal() method on \TrackSegment. Tells if the \TrackSegment
|
|
||||||
* is associated only to local AutoSegment.
|
|
||||||
* <li>Increase the overlap cost of a \TrackSegment from an already routed
|
|
||||||
* GCell routing set.
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secRoutingEventInterval The various intervals of a RoutingEvent
|
|
||||||
*
|
|
||||||
* The three Intervals controlling a RoutingEvent : all those intervals
|
|
||||||
* defines the track range in which the \TrackSegment could be inserted.
|
|
||||||
* <ul>
|
|
||||||
* <li>The <i>optimal</i> interval : where the \Net wirelength will be
|
|
||||||
* minimal (comes from \c Katabatic::AutoSegment).
|
|
||||||
* <li>The <i>constraint</i> interval : the interval outside of which
|
|
||||||
* the \Net connexity would be broken. This is the bigger interval
|
|
||||||
* but it must be strictly respected (also comes from
|
|
||||||
* \c Katabatic::AutoSegment).
|
|
||||||
* <li>The <i>perpandicular</i> interval : for each perpandicular
|
|
||||||
* \TrackSegment connected, the intersection of the free interval
|
|
||||||
* around them in their track.
|
|
||||||
*
|
|
||||||
* It is important to note that the \TrackSegment overlaping in the
|
|
||||||
* target track is not removed from the track. It is it's perpandiculars
|
|
||||||
* which are, along with a modification of theirs left axis weight and/or
|
|
||||||
* right axis weight.
|
|
||||||
*
|
|
||||||
* Second remark: no overlap will be created (due to the non-removal of
|
|
||||||
* overlaping \TrackSegments) because the insertion is delayed in case
|
|
||||||
* of overlap.
|
|
||||||
* </ul>
|
|
||||||
* The perpandicular interval comes from perpandicular constraints on \TrackSegment
|
|
||||||
* of the <i>same</i> \c Net. The left/right axis weights comes from requests of
|
|
||||||
* <i>other</i> \c Nets.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-1.png "RoutingEvent Intervals"
|
|
||||||
* \image latex RoutingEvent-1.pdf "RoutingEvent Intervals" width=0.6\textwidth
|
|
||||||
*
|
|
||||||
* Example of perpandicular interval computation :
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-2.png "Perpandicular Interval"
|
|
||||||
* \image latex RoutingEvent-2.pdf "Perpandicular Interval"
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secRoutingEventRules Rules governing RoutingEvents
|
|
||||||
*
|
|
||||||
* \RoutingEvent respect the following rules:
|
|
||||||
* <ul>
|
|
||||||
* <li>A \TrackSegment can only be displaced by it's associated \RoutingEvent.
|
|
||||||
* <li>Corollary: the only \TrackSegment displaced while processing a
|
|
||||||
* \RoutingEvent is the one associated to the event.
|
|
||||||
* <li>Conflicts occurs between the \RoutingEvent \TrackSegment and already
|
|
||||||
* placed others \TrackSegment.
|
|
||||||
*
|
|
||||||
* The conflict can be solved by displacing/modifying <i>others</i>
|
|
||||||
* \TrackSegment or by modifying the to be inserted one. In the later
|
|
||||||
* case, the newly created or modified \TrackSegment are (re)scheduleds
|
|
||||||
* <i>before</i> the would be inserted.
|
|
||||||
* <li>Conflicting \TrackSegments are only removed from their \Track
|
|
||||||
* but their axis remains unchanged. Movement requests are passed
|
|
||||||
* through increase of the left/right axis weights, if needed.
|
|
||||||
* <li>\TrackSegment are inserted only, and only if there is enough free space.
|
|
||||||
* That is, if any kind of overlap occurs, it is <i>not</i> inserted
|
|
||||||
* but <i>rescheduled</i>. The blocking \TrackSegments are then
|
|
||||||
* rescheduled <i>after</i> the current one.
|
|
||||||
* <li>Each \RoutingEvent processing takes place inside a one atomic
|
|
||||||
* Session. That is, the coherency of the data-base is restored
|
|
||||||
* immediatly afterward (both Kite & Katabatic).
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* \remark Be very careful to distinguish between Session commands, which affects
|
|
||||||
* \Track and \TrackSegment insertion/update/removal and schedule/re-schedule
|
|
||||||
* events, which relates to the negociation algorithm.
|
|
||||||
*
|
|
||||||
* Re-ordering rules:
|
|
||||||
* <ol>
|
|
||||||
* <li>In normal mode, that is, no maximum ripup has been reached, the
|
|
||||||
* blocking <i>other</i> \TrackSegment are removed and the current
|
|
||||||
* is rescheduled <i>before</i> them.
|
|
||||||
* <li>In maximum ripup mode, some \TrackSegment has to give way.
|
|
||||||
* <ul>
|
|
||||||
* <li>If the current one is modified, it must be rescheduled <i>after</i>
|
|
||||||
* it's modified bits are rescheduleds.
|
|
||||||
* <li>If <i>others</i> are modifieds they must be rescheduled <i>after</i>
|
|
||||||
* the current one (so it will grabs the place).
|
|
||||||
* </ul>
|
|
||||||
* </ol>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secRoutingEventCycle RoutingEvent life cycle
|
|
||||||
*
|
|
||||||
* As an active \RoutingEvent is associated with one and only one \TrackSegment
|
|
||||||
* we can talk indeferently of \RoutingEvent lifecycle or \TrackSegment
|
|
||||||
* lifecycle.
|
|
||||||
*
|
|
||||||
* Below is the ordered list of states that a \RoutingEvent could be in.
|
|
||||||
* The order correspond to increasing level of slackening/freedom.
|
|
||||||
* Transition between states occurs each time a maximum ripup is reached.
|
|
||||||
*
|
|
||||||
* <table>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center"> \b Id </td>
|
|
||||||
* <td align="center">\b Type</td>
|
|
||||||
* <td align="center"> \b Local </td>
|
|
||||||
* <td align="center"> \b Global </td>
|
|
||||||
* <td align="center">\b Action</td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 1</td>
|
|
||||||
* <td align="center">\c Minimize</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td align="center">\e no</td>
|
|
||||||
* <td>try to fit into a hole</td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 2</td>
|
|
||||||
* <td align="center">\c DogLeg</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td align="center">\e no</td>
|
|
||||||
* <td>Dogleg : analyse overlap and try to solve it by breaking (self)</td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 3</td>
|
|
||||||
* <td align="center">\c Desalignate</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>on a set of alignated \TrackSegment, suppress the
|
|
||||||
* alignment constraints, thus making then independants
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 4</td>
|
|
||||||
* <td align="center">\c Slacken</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>if the target/source constraint is less than the
|
|
||||||
* GCell, adds perpandicular straps to free the \TrackSegment.
|
|
||||||
* This occurs to free from terminal constraints
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 5</td>
|
|
||||||
* <td align="center">\c ConflictSolve1</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>try to find in the history a reccurent dislodger,
|
|
||||||
* and break (self) to accomodate it
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 6</td>
|
|
||||||
* <td align="center">\c ConflictSolve2</td>
|
|
||||||
* <td align="center">\e no</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>try to find a Track on which we can dislodge
|
|
||||||
* an other \TrackSegment
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 7</td>
|
|
||||||
* <td align="center">\c MoveUp</td>
|
|
||||||
* <td align="center">\e no</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>try to go on upper layer.
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* <tr>
|
|
||||||
* <td align="center">\e 8</td>
|
|
||||||
* <td align="center">\c Unimplemented</td>
|
|
||||||
* <td align="center">\e no</td>
|
|
||||||
* <td align="center">\e yes</td>
|
|
||||||
* <td>we failed to place this \TrackSegment
|
|
||||||
* </td>
|
|
||||||
* </tr>
|
|
||||||
* </table>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secManageMaximumRipup Managing the maximum ripup case
|
|
||||||
*
|
|
||||||
\code
|
|
||||||
bool State::manageMaximumRipup ()
|
|
||||||
{
|
|
||||||
bool success = false;
|
|
||||||
|
|
||||||
if ( !_segment->isGlobal() ) {
|
|
||||||
// Candidates Tracks (ignore optimal & perpandiculars).
|
|
||||||
candidates = computeAllIntervals ();
|
|
||||||
overlap = _segment->getInterval();
|
|
||||||
|
|
||||||
for ( size_t i=0 ; i<candidates.size() ; i++ ) {
|
|
||||||
others = otherSegmentsConflicts(candidates[i]);
|
|
||||||
|
|
||||||
// Select Track with only one conflicting other.
|
|
||||||
if ( others.size() == 1 ) {
|
|
||||||
// Local vs. Local => reject.
|
|
||||||
// Local vs. Terminal => reject.
|
|
||||||
if ( others[0]->isLocal() || others[0]->isTerminal() ) continue;
|
|
||||||
|
|
||||||
// Local vs. Global (not routed yet).
|
|
||||||
if ( others[i]->getOrder() >= _segment->getOrder() ) {
|
|
||||||
success = modifyTopology(others[0]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Local vs. Global (already routed).
|
|
||||||
success = relax(_others[0],overlap);
|
|
||||||
if ( success ) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !success ) {
|
|
||||||
// Global vs. Local.
|
|
||||||
// Failed Local vs. Any.
|
|
||||||
success = modifyTopology(_segment);
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secModifyTopology Description of the modifyTopology() method
|
|
||||||
*
|
|
||||||
\code
|
|
||||||
bool Manipulator::modifyTopology ( TrackSegment* segment )
|
|
||||||
{
|
|
||||||
bool success = false;
|
|
||||||
|
|
||||||
if ( segment->isLocal() ) {
|
|
||||||
if ( segment->canMinimize() {
|
|
||||||
segment->minimize();
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
if ( segment->canDogLeg() ) {
|
|
||||||
// Case -C.4- "Self Relax".
|
|
||||||
segment->makeDogLeg();
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
} else if ( segment->canDesalignate() ) {
|
|
||||||
// Case -C.5- "Desalignate".
|
|
||||||
segment->desalignate();
|
|
||||||
success = true;
|
|
||||||
} else if ( segment->canSlacken() ) {
|
|
||||||
// Case -C.6- "Slacken".
|
|
||||||
segment->slacken();
|
|
||||||
success = true;
|
|
||||||
} else {
|
|
||||||
RipupHistory* history = RipupHistory(segment);
|
|
||||||
GCell* dogLegGCell = history.getDogLegGCell();
|
|
||||||
|
|
||||||
if ( dogLegGCell ) {
|
|
||||||
if ( segment->canDogLegAt(dogLegGCell) ) {
|
|
||||||
segment->makeDogLeg(dogLegGCell)
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Dislodgers seems to far in ripup history.
|
|
||||||
// Recheck the Track, maybe they have vanish.
|
|
||||||
Track* track = getTrack(segment);
|
|
||||||
if ( track->getFreeInterval(segment) ) {
|
|
||||||
track.insert ( segment );
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( segment->canMoveUp() ) {
|
|
||||||
segment->moveUp ();
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( success ) {
|
|
||||||
resetRipupCount(segment);
|
|
||||||
} else {
|
|
||||||
cerr << "[UNIMPLEMENTED] " << segment << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secHardSoftOverlap Hard and soft overlap
|
|
||||||
*
|
|
||||||
* Schematic execution of a \RoutingEvent leading to a set aside.
|
|
||||||
* <ol>
|
|
||||||
* <li>The scheduler try to place the \TrackSegment on top of the
|
|
||||||
* event queue, calling process().
|
|
||||||
* <li>There is a soft overlap on the best candidate track, a set
|
|
||||||
* aside is issued.
|
|
||||||
* <li>Each \TrackSegment in conflict in the candidate track has the
|
|
||||||
* \RoutingEvent bounds of it's perpandicular \TrackSegment modificated
|
|
||||||
* according to the free space requested through setLeftBound() or setRightBound().
|
|
||||||
* <li>If a perpandicular is already in a \Track is removed from it and scheduled for
|
|
||||||
* immediate re-routing (it's event level is increased so it pops
|
|
||||||
* out immediately from the queue).
|
|
||||||
* <li>If the perpandicular is not routed yet, we are done.
|
|
||||||
*
|
|
||||||
* Note that this technique of modificating a \RoutingEvent yet to come is
|
|
||||||
* kind a like seeing the future...
|
|
||||||
* </ol>
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-3.png "Set aside schematic"
|
|
||||||
* \image latex RoutingEvent-3.pdf "Set aside schematic"
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section setDetructionStrategy Destruction Strategy
|
|
||||||
*
|
|
||||||
* \RoutingEvent are not destroyed as soon as they have been processed by
|
|
||||||
* the scheduler. Instead, they are stored in the historical queue.
|
|
||||||
* They are two reasons for that behavior :
|
|
||||||
* <ul>
|
|
||||||
* <li>\RoutingEvent are used to store algorithmic informations that
|
|
||||||
* must persist until the negociation algorithm have fully
|
|
||||||
* completed (<i>bound</i> interval in particular).
|
|
||||||
* <li>When ripup phases takes place and maximum ripup count is
|
|
||||||
* reached, the history can be used to find the whole set of
|
|
||||||
* \TrackSegment in conflict an made an educated guess about
|
|
||||||
* which one must be relaxed.
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* \important This is the history queue which is responsible for freeing all the
|
|
||||||
* \RoutingEvent in his destructor.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* \section secRoutingEventCase Routing Event actions
|
|
||||||
*
|
|
||||||
* <ul>
|
|
||||||
* <li><b>Free Track Case</b>
|
|
||||||
*
|
|
||||||
* There is a sufficent free space in the candidate \Track to insert the
|
|
||||||
* \TrackSegment. The \TrackSegment is inserted.
|
|
||||||
*
|
|
||||||
* \important This is the only way for a \TrackSegment to be inserted into a \Track.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-10.png
|
|
||||||
* \image latex RoutingEvent-10.pdf
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* <li><b>Soft Overlap Case</b>
|
|
||||||
*
|
|
||||||
* Already inserted \TrackSegment <b>a</b> & <b>b</b> could be shrunk
|
|
||||||
* to make place for \TrackSegment <b>c</b>. Parallel overlaping \TrackSegment
|
|
||||||
* are not removed, their perpandiculars are with updated left/right axis weight.
|
|
||||||
*
|
|
||||||
* The <b>a</b> perpandicular belongs the same GCell routing set so it
|
|
||||||
* is removed from is \Track to be displaced.
|
|
||||||
*
|
|
||||||
* The <b>b</b> perdandicular belongs to a more prioritary GCell routing
|
|
||||||
* set, which has therefore be placed earlier so it can't be removed.
|
|
||||||
* Instead it is broken.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-11.png
|
|
||||||
* \image latex RoutingEvent-11.pdf
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* <li><b>Hard Overlap Case</b>
|
|
||||||
*
|
|
||||||
* No way to shrunk overlaping \TrackSegment to make place for <b>c</b>.
|
|
||||||
* All parallel overlaping \TrackSegments must be removeds to be displaced
|
|
||||||
* on other \Tracks.
|
|
||||||
*
|
|
||||||
* The <b>a</b> parallel belongs to a more prioritary GCell routing set
|
|
||||||
* so it can be removed, it is therefore broken.
|
|
||||||
*
|
|
||||||
* The <b>b</b> parallel belongs the same GCell routing set so it can be
|
|
||||||
* removed to be displaced.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-12.png
|
|
||||||
* \image latex RoutingEvent-12.pdf
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* <li><b>Self Relax</b>
|
|
||||||
*
|
|
||||||
* Instead of trying to displace overlaping \TrackSegments we break the
|
|
||||||
* current one.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-13.png
|
|
||||||
* \image latex RoutingEvent-13.pdf
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* <li><b>Self Desalignate</b>
|
|
||||||
*
|
|
||||||
* Instead of trying to displace overlaping \TrackSegments we desalignate
|
|
||||||
* it's components (by supressing alignement constraints on it's
|
|
||||||
* AutoContacts). We do not create new Katabatic components but new
|
|
||||||
* \TrackSegments will appears.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-14.png
|
|
||||||
* \image latex RoutingEvent-14.pdf
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* <li><b>Self Slacken</b>
|
|
||||||
*
|
|
||||||
* Instead of trying to displace overlaping \TrackSegments we slacken
|
|
||||||
* the current one. This is different than desalignate because we create
|
|
||||||
* new Katabatic component to relax any AutoContact transmitted constraints.
|
|
||||||
* This operation is most likely to be applied on \TrackSegments that are
|
|
||||||
* directly connecteds to terminals.
|
|
||||||
*
|
|
||||||
* \image html RoutingEvent-15.png
|
|
||||||
* \image latex RoutingEvent-15.pdf
|
|
||||||
*
|
|
||||||
* </ul>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \function bool RoutingEvent::isProcessed () const;
|
//! \enum RoutingEvent::Mode
|
||||||
* \return \true if this event has already been processed.
|
//! The working mode of the router, affect how events are to
|
||||||
*
|
//! be handled.
|
||||||
* \remark Note that inside a _setAside() a \RoutingEvent can be re-posted for
|
|
||||||
* a given \TrackSegment which has been processed yet. This can lead
|
//! \var RoutingEvent::Negociate
|
||||||
* to two or more \RoutingEvent in the queue (as we cannot easily remove
|
//! This is the normal mode of operation, topological modifications
|
||||||
* a \RoutingEvent already in the queue). We need this new \RoutingEvent
|
//! and ripup are enableds.
|
||||||
* because we want to reschedule with a new priority/slack.
|
|
||||||
* As we cannot remove the previous \RoutingEvent, we mark it as
|
//! \var RoutingEvent::Pack
|
||||||
* processed for it to be ignored by the scheduler.
|
//! First post-processing step. For each segment, tries to find a
|
||||||
|
//! more compact position for a segment, but without riping any others.
|
||||||
|
|
||||||
|
//! \var RoutingEvent::Repair
|
||||||
|
//! Second post-processing step, try to find a suitable location for
|
||||||
|
//! a segment more aggressively.
|
||||||
|
|
||||||
|
//! \function unsigned int RoutingEvent::getStage ();
|
||||||
|
//! \sreturn The stage the router is in (see RoutingEvent::Mode).
|
||||||
|
|
||||||
|
//! \function size_t RoutingEvent::getAllocateds ();
|
||||||
|
//! \sreturn The number of RoutingEvent currently allocateds.
|
||||||
|
|
||||||
|
//! \function size_t RoutingEvent::getProcesseds ();
|
||||||
|
//! \sreturn The number of RoutingEvent that have been processeds since
|
||||||
|
//! the last call to RoutingEvent::resetProcesseds().
|
||||||
|
|
||||||
|
//! \function void RoutingEvent::resetProcesseds ();
|
||||||
|
//! \sreturn Reset the number of processeds events.
|
||||||
|
|
||||||
|
//! \function unsigned int RoutingEvent::setStage ( unsigned int mode );
|
||||||
|
//! Sets the router's stage (see RoutingEvent::Mode).
|
||||||
|
|
||||||
|
//! \function RoutingEvent* RoutingEvent::create ( TrackElement* element, unsigned int mode );
|
||||||
|
//! \param element The element for which to create the event.
|
||||||
|
//! \param mode The mode into which this event will be valid.
|
||||||
|
//!
|
||||||
|
//! RoutingEvent constructor.
|
||||||
|
|
||||||
|
//! \function RoutingEvent* RoutingEvent::clone () const;
|
||||||
|
//! \return A clone of the event.
|
||||||
|
//!
|
||||||
|
//! Cloning an event is slightly different from copying it (which is forbidden).
|
||||||
|
//! There can be multiple events for one \c element but only one must be
|
||||||
|
//! active at a time. This is a cheap way of implementing the rescheduling
|
||||||
|
//! mechanism. The original event remains the active one, but it's cloned
|
||||||
|
//! flag is raised. The cloned event is created inactive and with a null
|
||||||
|
//! \e eventLevel.
|
||||||
|
|
||||||
|
//! \function void RoutingEvent::destroy ();
|
||||||
|
//! The destructor.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isCloned () const;
|
||||||
|
//! \sreturn \true if this event has been cloned at least once.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isValid () const;
|
||||||
|
//! \sreturn \true if the cached informations from the \e element are valid
|
||||||
|
//! (i.e. the element has not been changed).
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isUnimplemented () const;
|
||||||
|
//! \sreturn \true if the event has tried to use an unimplemented feature.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isProcessed () const;
|
||||||
|
//! \sreturn \true if the event has been processed.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isDisabled () const;
|
||||||
|
//! \sreturn \true if the event is \b not the active one. It should be discarted
|
||||||
|
//! by the algorithm.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isForcedToHint () const;
|
||||||
|
//! \sreturn \true the \e element must be placed exacltly on the given axis hint.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::isRipedByLocal () const;
|
||||||
|
//! \sreturn \true the \e element (global) has been riped up to place a local one.
|
||||||
|
|
||||||
|
//! \function bool RoutingEvent::canMinimize () const;
|
||||||
|
//! \sreturn \true the \e element could still be minimized.
|
||||||
|
|
||||||
|
//! \function unsigned int RoutingEvent::getMode () const;
|
||||||
|
//! \sreturn the mode the event must be taken into account to.
|
||||||
|
|
||||||
|
//! \function unsigned int RoutingEvent::getState () const;
|
||||||
|
//! \sreturn the mode the router is currently in.
|
||||||
|
|
||||||
|
//! \function const Key& RoutingEvent::getKey () const;
|
||||||
|
//! \sreturn The \e key to use in map & queue for this event.
|
||||||
|
|
||||||
|
//! \function TrackElement* RoutingEvent::getSegment () const;
|
||||||
|
//! \sreturn The associated segment.
|
||||||
|
|
||||||
|
//! \function const vector<TrackElement*>& RoutingEvent::getPerpandiculars () const;
|
||||||
|
//! \sreturn A vector of cached perpandiculars to the associated segment.
|
||||||
|
|
||||||
|
//! \function DbU::Unit RoutingEvent::getAxisHint () const;
|
||||||
|
//! \sreturn The preferred position for the segment axis.
|
||||||
|
|
||||||
|
//! \function DbU::Unit RoutingEvent::getAxisHistory () const;
|
||||||
|
//! \sreturn The previous position of the segment axis (before it's current position).
|
||||||
|
|
||||||
|
//! \function DbU::Unit RoutingEvent::getAxisWeight ( DbU::Unit axis ) const;
|
||||||
|
//! \sreturn The distance between \c axis and the preferred position.
|
||||||
|
|
||||||
|
//! \function const Interval& RoutingEvent::getOptimal () const;
|
||||||
|
//! \sreturn The range of positions for the optimal axis (cached).
|
||||||
|
|
||||||
|
//! \function const Interval& RoutingEvent::getConstraints () const;
|
||||||
|
//! \sreturn The range of legal positions for the axis.
|
||||||
|
|
||||||
|
/*! \function unsigned int RoutingEvent::getPriority () const;
|
||||||
|
* \sreturn The priority of the event, it quantify the degree of freedom of the
|
||||||
|
* segment. Currently it's computed from the length of the segment
|
||||||
|
* and it's slack:
|
||||||
|
\f[
|
||||||
|
priority = (slack(segment)+1.0) \times (length(segment)+1.0)
|
||||||
|
\f]
|
||||||
|
* A high priority means that the segment will be harder to place
|
||||||
|
* thus it will be scheduled first. With this function, longer
|
||||||
|
* segments will be placed first.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \function TrackSegment* RoutingEvent::getSegment () const;
|
//! \function unsigned int RoutingEvent::getEventLevel () const;
|
||||||
* \Return The associated and unique \TrackSegment.
|
//! \sreturn The event level of the event, used to tweak the order inside the event
|
||||||
*/
|
//! queue. It differs from the priority in the sense that it isn't a
|
||||||
|
//! topologicaly based value, but manipulated by the algorithm.
|
||||||
|
|
||||||
/*! \function unsigned long RoutingEvent::getPriority () const;
|
//! \function unsigned int RoutingEvent::getTracksNb () const;
|
||||||
* \Return The second criterion used to sort \RoutingEvents in the negociation queue.
|
//! \sreturn The number of tracks avalaibles for the segment to be placed.
|
||||||
* Currently, it is the <i>area</i> of the associated \TrackSegment, which in
|
|
||||||
* turn return the <i>slack</i> (not a very fortunate choice of name...).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function unsigned int RoutingEvent::getEventLevel () const;
|
//! \function unsigned int RoutingEvent::getInsertState () const;
|
||||||
* \Return The first criterion used to sort \RoutingEvents in the negociation queue.
|
//! \return The kind of track insertion that will be intended. It's a counter
|
||||||
* It is used to re-schedule a \RoutingEvent and make the new event be
|
//! whose values have the following meaning:
|
||||||
* processed <i>before</i> the original one, which is marked as
|
//! - \b 1 : normal insert.
|
||||||
* <i>processed</i> to be ignored.
|
//! - \b 2 : shrink the segment to it's minimum before inserting.
|
||||||
*
|
//! - \b 3 : attempt to ripup conflicting others before inserting.
|
||||||
* \see setEventLevel().
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function RoutingEvent* RoutingEvent::getClone () const;
|
//! \function void RoutingEvent::revalidate ();
|
||||||
* \Return An exact copy of the current \RoutingEvent.
|
//! Perform an event revalidation.
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function RoutingEvent* RoutingEvent::reschedule ( RoutingEventQueue& queue );
|
//! \function void RoutingEvent::updateKey ();
|
||||||
* \param queue The \RoutingEvent queue.
|
//! Update the key with the new values from the event, the key \e must
|
||||||
* \return The rescheduled \RoutingEvent. May be \NULL if it cannot be rescheduled.
|
//! not be inserted in the queue when this method is called.
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void RoutingEvent::setProcessed ( bool state=true );
|
//! \function void RoutingEvent::process ( RoutingEventQueue& queue, RoutingEventHistory& history, RoutingEventLoop& loop );
|
||||||
* \param state The state into which the event is to be put.
|
//! \param queue The main event queue.
|
||||||
*
|
//! \param history The event's history list.
|
||||||
* Mark the event as processed. This arises in two cases :
|
//! \param loop The loop detector.
|
||||||
* <ul>
|
//!
|
||||||
* <li>The event has really been processed by the process() member
|
//! Process the event, that is:
|
||||||
* function.
|
//! - First, check if there is no looping, if any, do not process the
|
||||||
* <li>There has been a fork from this event and it has been
|
//! event but dicard it (marked as unimplemented).
|
||||||
* superseded by a newly rescheduled one, so we have to
|
//! - Second, attempt to place the associated segment. Pass it to the relevant
|
||||||
* invalidate this one.
|
//! function, according to the router's mode (\c _processNegociate(),
|
||||||
* </ul>
|
//! \c processPack() or \c _processRepair() ).
|
||||||
*/
|
//! Once processed, the event is added to both \c history (for the record)
|
||||||
|
//! and \c loop to check if we are not looping.
|
||||||
|
|
||||||
/*! \function void RoutingEvent::setEventLevel ( unsigned int level );
|
//! \function void RoutingEvent::setSegment ( TrackElement* element );
|
||||||
* \param level The new event level.
|
//! Change the associated \c segment. \red{Used only by TrackSegment::swapTrack().}
|
||||||
*
|
|
||||||
* \see getEventLevel().
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void RoutingEvent::process ( RoutingEventQueue& queue, RoutingEventHistory& history );
|
//! \function RoutingEvent* RoutingEvent::reschedule ( RoutingEventQueue& queue, unsigned int eventLevel);
|
||||||
* \param queue The event queue from the negociate algorithm.
|
//! \return The newly reinserted event. Depending on the cases it could be itself.
|
||||||
* \param history The event history.
|
//!
|
||||||
*
|
//! Insert or reinsert an event in the scheduler. The \c eventLevel parameter only
|
||||||
* Perform all the operations shared by all \RoutingEvent classes then
|
//! allows to increase the level (if it is less than the current level of the
|
||||||
* calls the virtual _subProcess() functions.
|
//! event, it will be ignored).
|
||||||
*
|
//!
|
||||||
* Shared operations are :
|
//! <b>Cloning Management.</b> As an event could be cloned, if we try to re-insert
|
||||||
* <ol>
|
//! a disabled original, we must first lookup the currently cloned active event.
|
||||||
* <li>Invalidating all perpandicular \TrackSegments.
|
//! This is done through the associated \c segment which must always be associated
|
||||||
* <li>Computing the free interval allowed by the free intervals
|
//! with the active event (if any).
|
||||||
* in perpandicular \Tracks holding the perpandicular \TrackSegments.
|
//!
|
||||||
* <li>Merging in the various constraints intervals : from the
|
//! <b>Unimplemented Protection.</b> If the unimplemented flag is set the reschedule
|
||||||
* \TrackSegment itself, from the free intervals in the
|
//! is cancelled (\c NULL is returned).
|
||||||
* perpandicular \Tracks and from the \RoutingEvent bound
|
//!
|
||||||
* constraints.
|
//! <b>Unprocessed Event.</b> The event is still in queue, waiting to be
|
||||||
* <li>Finding the candidate \Tracks for the \RoutingEvent,
|
//! processed, then just repush it in the queue with it's new level.
|
||||||
* using \c Track_Spiral \Collection.
|
//!
|
||||||
* </ol>
|
//! <b>Processed Event.</b> Clone the already processed one, activate it
|
||||||
* The results of the shared operation are passed to derived classes
|
//! and push it on the queue.
|
||||||
* trough the \c State internal structure.
|
//!
|
||||||
*/
|
//! <b>Router's Mode.</b> The mode is also updated.
|
||||||
|
|
||||||
/* \function bool RoutingEvent::_setAside ( Track* track, size_t begin, size_t end, Net* net, Interval interval, RoutingEventQueue& queue );
|
//! \function void RoutingEvent::setMode ( unsigned int mode );
|
||||||
* \param track The track in wich to make free space.
|
//! Set the mode in which the event must be processed (see RoutingEvent::Mode).
|
||||||
* \param begin The index of the first overlaping TrackSegment.
|
|
||||||
* \param end The index of the last overlaping TrackSegment.
|
|
||||||
* \param net The net for which we want to insert a TrackSegment.
|
|
||||||
* \param interval The interval which must be made empty.
|
|
||||||
* \param queue The queue of RoutingEvent.
|
|
||||||
*
|
|
||||||
* Manage the case of <i>soft overlap</i>. Create or enlarge a free space
|
|
||||||
* in \c track so it can contain the requested \interval. <code>[begin:end]</code> defines
|
|
||||||
* the range of indexes of overlaping \TrackSegment in \c track.
|
|
||||||
* Displace TrackSegment that are <b>perpandicular</b> to those overlaping,
|
|
||||||
* remove them from their \c Track if needed and issue an associated \RoutingEvent
|
|
||||||
* with an updated bound constraint. Note that the overlaping \TrackSegment
|
|
||||||
* themselves are <em>not</em> removed from the \c track.
|
|
||||||
*
|
|
||||||
* A note on implementation :
|
|
||||||
* <ul>
|
|
||||||
* <li>\c data1 : the DataNegociate of the to be inserted \TrackSegment.
|
|
||||||
* <li>\c segment2 : the current overlaping \TrackSegment (from \c begin
|
|
||||||
* to \c end).
|
|
||||||
* <li>\c data2 : the DataNegociate of the overlaping \TrackSegment.
|
|
||||||
* <li>\c segment3 : a \TrackSegment perpandicular to \c segment2.
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* \function void RoutingEvent::_ripup ( Track* track, Net* net, Interval interval, size_t begin, size_t end, RoutingEventQueue& queue );
|
//! \function void RoutingEvent::setState ( unsigned int state );
|
||||||
* \param track The track in wich to make free space.
|
//! Proxy mutator for DataNegociate::setState().
|
||||||
* \param net The net for which we want to insert a TrackSegment.
|
|
||||||
* \param interval The interval which must be made empty.
|
|
||||||
* \param begin The index of the first overlaping TrackSegment.
|
|
||||||
* \param end The index of the last overlaping TrackSegment.
|
|
||||||
* \param queue The queue of RoutingEvent.
|
|
||||||
*
|
|
||||||
* Manage the case of <i>hard overlap</i>, that is bluntly remove
|
|
||||||
* any \TrackSegment overlaping \interval. Issue both a remove event
|
|
||||||
* (to \c Session) and a \RoutingEvent to re-process the dislodged
|
|
||||||
* \TrackSegment.
|
|
||||||
*/
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
//! \function void RoutingEvent::setAxisHintFromParent ();
|
||||||
|
//! Sets the axis hint from it's parent segment. The parentage is found
|
||||||
|
//! through the TrackSegment parentage.
|
||||||
|
|
||||||
|
//! \function void RoutingEvent::incInsertState ();
|
||||||
|
//! Increment the insertion state.
|
||||||
|
//!
|
||||||
|
//! \sa RoutingEvent::getInsertState().
|
||||||
|
|
||||||
|
//! \function void RoutingEvent::resetInsertState ();
|
||||||
|
//! Reset the insertion state.
|
||||||
|
//!
|
||||||
|
//! \sa RoutingEvent::getInsertState().
|
||||||
|
|
||||||
|
//! \function void RoutingEvent::setEventLevel ( unsigned int level );
|
||||||
|
//! Set the event level (user-controlled re-ordering).
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -1,133 +1,163 @@
|
||||||
|
// -*- mode: C++; explicit-buffer-name: "Session.dox<kite>" -*-
|
||||||
// -*- C++ -*-
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
/*! \class Session
|
/*! \class Session
|
||||||
* \brief Kite update Session (\b API).
|
* \brief Kite update Session
|
||||||
*
|
*
|
||||||
* Session extend the Katabatic update session to the Kite
|
* Session extend the Katabatic update session to the Kite
|
||||||
* router level. Mainly by managing Track update.
|
* router level. Mainly by managing Track update.
|
||||||
*
|
*
|
||||||
|
* <b>Difference between Kite & Katabatic sessions:</b>
|
||||||
|
* - In Katabatic, segments are actually moved \e before the
|
||||||
|
* revalidation, then \e during the revalidation, contacts
|
||||||
|
* and topologies are adjusteds
|
||||||
|
* - In Kite, nothing is moved until the revalidation.
|
||||||
|
* Requests for segment displacement are queued for the session.
|
||||||
|
*
|
||||||
|
* <b>Asymmetry between invalidation & revalidation:</b>
|
||||||
|
* - When a TrackSegment (or directly an AutoSegment) is invalidated
|
||||||
|
* both associated AutoSegment and TrackSegment are invalidated
|
||||||
|
* (through the Observer mechanism).
|
||||||
|
* - When an AutoSegment is revalidated, the TrackSegment is \b not
|
||||||
|
* immediatly revalidated. See the revalidate algorithm for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* <b>Indirect TrackSegment invalidation:</b>
|
||||||
|
* - TrackSegment invalidation do not result only from direct insertion
|
||||||
|
* in Track. For example, any or all of it's perpandicular can be
|
||||||
|
* invalidated trough the Katabatic::Session update (the perpandicular
|
||||||
|
* Katabatic::AutoSegment is revalidated, generating invalidation on their
|
||||||
|
* associated TrackSegment).
|
||||||
|
*
|
||||||
* For details on how Katabatic Sessions works, have a look to
|
* For details on how Katabatic Sessions works, have a look to
|
||||||
* \ref katabaticSession.
|
* Katabatic::Session.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section secSessionMechanism The Session Mechanism.
|
* \section secSessionMechanism The Session Mechanism.
|
||||||
*
|
*
|
||||||
* Delayed modification procedure :
|
* Delayed modification procedure :
|
||||||
* <ol>
|
* - Modifications events are recorded (queued) into the Session.
|
||||||
* <li>Modifications events are recorded into the Session.
|
* At this step, no modification are actually done, the
|
||||||
* At this step, no modification are actually done, the
|
* data-base retains it's previous state and coherency.
|
||||||
* data-base retains it's previous state and coherency.
|
* - The \c revalidate() procedure is called (or the Session
|
||||||
* <li>The Revalidate() procedure is called (or the Session
|
* is closed), then all the modification events are applied.
|
||||||
* is closed), then all the modification events are applied.
|
* The data-base is in now in it's new state.
|
||||||
* the data-base is in it's new state.
|
|
||||||
* </ol>
|
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section secKiteSessionRevalidate The Revalidate Algorithm.
|
* \section secKiteSessionRevalidate The Revalidate Algorithm.
|
||||||
*
|
*
|
||||||
* Revalidation steps :
|
* Revalidation steps :
|
||||||
* <ol>
|
* - Process all remove events. detach TrackSegment from
|
||||||
* <li>process all remove events. detach TrackSegment from
|
* their Track, but do not remove the pointer from the
|
||||||
* their Track, but do not remove the pointer from the
|
* internal \vector.
|
||||||
* internal \vector.
|
* - Pack all Track in which removal have took place.
|
||||||
* <li>Pack all Track in which removal have took place.
|
* - Process all insert events. <b>This is the time TrackSegment
|
||||||
* <li>process all insert events. This is the time TrackSegment
|
* are moved into their new Track (physical displacement)</b>.
|
||||||
* are moved into their new Track (physical displacement).
|
* It is at this point that the invalidation of both AutoSegment
|
||||||
* <li>Call the Katabatic::Session::revalidate() method.
|
* and TrackSEgment is done.
|
||||||
* <li>Recompute the canonical position of source and target
|
* - Call the Katabatic::Session::revalidate() method which
|
||||||
* of all invalidateds TrackSegment (take account of
|
* will recompute the correct contact extensions and topologies.
|
||||||
* extention modifications).
|
* \e After this step the Katabatic data-base is up to date,
|
||||||
* <li>Perform a sort() on all Track that have been modifieds.
|
* but \e not the Kite one. AutoSEgment are revalidated.
|
||||||
* </ol>
|
* - Recompute the canonical position of source and target
|
||||||
*/
|
* of all invalidateds TrackSegment (take account of
|
||||||
|
* extention modifications). The set of invalidated TrackSegment
|
||||||
|
* is computed from the revalidated AutoSegment, that is
|
||||||
/*! \name Accessors
|
* AutoSegment that are canonical.
|
||||||
*/
|
* - Perform a sort() on all Track that have been modifieds.
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function static Session* Session::get ();
|
|
||||||
* \Return The currently opened session, \c NULL if no session has
|
|
||||||
* been opened.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function static KiteEngine* Session::getKiteEngine ();
|
|
||||||
* \Return The Kite ToolEngine associated to the current update
|
|
||||||
* session.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Miscellaneous
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function bool Session::isEmpty ();
|
|
||||||
* Ensure that the Session is empty and can be closed (deleted)
|
|
||||||
* safely.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function static Session* Session::open ( KiteEngine* kite );
|
|
||||||
* \param kite A Kite ToolEngine on which to work.
|
|
||||||
* \return A new Kite update Session.
|
|
||||||
*
|
*
|
||||||
* Open a new Kite update Session on the \c kite \c ToolEngine.
|
* <b>Note:</b> We cannot use the Observer mechanism to automatically
|
||||||
* At this point only one session can be opened at a time. Attempt
|
* update TrackSegment from an AutoSegment, because we must wait for all
|
||||||
* to open a second one will result in an exception.
|
* AutoSegments (canonical or not) involved into the TrackSegment to be
|
||||||
*/
|
* up to date before we can update it.
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Event Scheduling
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/* \function void Session::addInvalidated ( TrackSegment* segment );
|
|
||||||
* \param segment An AutoSegment that has been moved.
|
|
||||||
*
|
*
|
||||||
* add \e segment to the \vector of TrackSegment for which we
|
* <b>Note:</b> Have to talk about the special case when new canonical
|
||||||
* have to recompute the canonical size (i.e. extentions may
|
* AutoSegment appears after dogleg creation.
|
||||||
* have moved).
|
*
|
||||||
|
*
|
||||||
|
* \section secKiteSessionLookup The Lookup Mechanism
|
||||||
|
*
|
||||||
|
* There are two lookup mechanisms:
|
||||||
|
* - From a Hurricane::Segment, we uses the Katabatic segment lookup
|
||||||
|
* table (slow, stored in a \c map<>).
|
||||||
|
* - From a Katabatic::AutoSegment, we uses the Observer, it's owner
|
||||||
|
* is the TrackSegment (fast).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \function void Session::addInsertEvent ( TrackSegment* segment, Track* track );
|
//! \function Session* Session::open ( KiteEngine* kite );
|
||||||
* \param segment An AutoSegment to insert in a Track.
|
//! \param kite A Kite ToolEngine on which to work.
|
||||||
* \param track The Track into which the \e segment will be inserted.
|
//! \return A new Kite update Session.
|
||||||
*
|
//!
|
||||||
* Schedule the insertion of \e segment into Track \e track.
|
//! Open a new Kite update Session on the \c kite \c ToolEngine.
|
||||||
* The \e segment must not already be part of a Track.
|
//! At this point only one session can be opened at a time. Attempt
|
||||||
*/
|
//! to open a second one will result in an exception.
|
||||||
|
|
||||||
/*! \function void Session::addRemoveEvent ( TrackSegment* segment );
|
//! \function Session* Session::get ( const char* message=NULL );
|
||||||
* \param segment An AutoSegment to remove from a Track.
|
//! \sreturn The currently opened session, \c NULL if no session has
|
||||||
*
|
//! been opened.
|
||||||
* Schedule the removal of \e segment from Track \e track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Session::addMoveEvent ( TrackSegment* segment, Track* track );
|
//! \function Katabatic::Session* Session::base ();
|
||||||
* \param segment An AutoSegment to move into a new Track.
|
//! \sreturn The Session, casted as it's base object.
|
||||||
* \param track The Track into which the \e segment will be moved.
|
|
||||||
*
|
|
||||||
* Schedule the displacement of \e segment into Track \e track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Session::addSortEvent ( Track* track, bool forced=false );
|
//! \function bool Session::isEmpty ();
|
||||||
* \param track The Track to update.
|
//! Ensure that the Session is empty and can be closed (deleted)
|
||||||
* \param forced Force the invalidation of the \Track.
|
//! safely.
|
||||||
*
|
|
||||||
* Schedule the update of Track \e track. If the \Track has not been
|
//! \function Configuration* Session::getConfiguration ();
|
||||||
* invalidated, no actual sort will takes place. To force a sort
|
//! \sreturn The Kite Configuration of the Router (proxy helper).
|
||||||
* (manually invalidating the \Track), sets \b forced to \true.
|
|
||||||
*
|
//! \function Net* Session::getBlockageNet ();
|
||||||
* \see Track::pack() & Track::sort().
|
//! \sreturn The net used to create blockage components (proxy helper).
|
||||||
*/
|
|
||||||
|
//! \function KiteEngine* Session::getKiteEngine ();
|
||||||
|
//! \sreturn The Kite ToolEngine associated to the current update
|
||||||
|
//! session (proxy helper).
|
||||||
|
|
||||||
|
//! \function NegociateWindow* Session::getNegociateWindow ();
|
||||||
|
//! \sreturn The current NegociateWindow (proxy helper).
|
||||||
|
|
||||||
|
//! \function Katabatic::GCell* Session::getGCellUnder ( DbU::Unit x, DbU::Unit y );
|
||||||
|
//! \sreturn The GCell under \c (x,y) (proxy helper, see Katabatic::GCellGrid::getGCell()).
|
||||||
|
|
||||||
|
//! \function void Session::addInsertEvent ( TrackElement* segment, Track* track );
|
||||||
|
//! \param segment An AutoSegment to insert in a Track.
|
||||||
|
//! \param track The Track into which the \e segment will be inserted.
|
||||||
|
//!
|
||||||
|
//! Schedule the insertion of \e segment into Track \e track.
|
||||||
|
//! The \e segment must not already be part of a Track.
|
||||||
|
|
||||||
|
//! \function void Session::addRemoveEvent ( TrackElement* segment );
|
||||||
|
//! \param segment A TrackSegment to remove from a Track.
|
||||||
|
//!
|
||||||
|
//! Schedule the removal of \e segment from Track \e track.
|
||||||
|
|
||||||
|
//! \function void Session::addMoveEvent ( TrackElement* segment, Track* track );
|
||||||
|
//! \param segment An AutoSegment to move into a new Track.
|
||||||
|
//! \param track The Track into which the \e segment will be moved.
|
||||||
|
//!
|
||||||
|
//! Schedule the displacement of \e segment into Track \e track.
|
||||||
|
|
||||||
|
//! \function void Session::addSortEvent ( Track* track, bool forced=false );
|
||||||
|
//! \param track The Track to update.
|
||||||
|
//! \param forced Force the invalidation of the \Track.
|
||||||
|
//!
|
||||||
|
//! Schedule the update of Track \e track. If the \Track has not been
|
||||||
|
//! invalidated, no actual sort will takes place. To force a sort
|
||||||
|
//! (manually invalidating the \Track), sets \b forced to \true.
|
||||||
|
//!
|
||||||
|
//! \sa Track::pack() & Track::sort().
|
||||||
|
|
||||||
|
//! \function void Session::revalidate ();
|
||||||
|
//! Applies all the requested modifications, but keeping the session
|
||||||
|
//! opened.
|
||||||
|
|
||||||
|
//! \function TrackElement* Session::lookup ( Segment* segment );
|
||||||
|
//! \sreturn the TrackElement associated to \c segment.
|
||||||
|
|
||||||
|
//! \function TrackElement* Session::lookup ( AutoSegment* segment );
|
||||||
|
//! \sreturn the TrackElement associated to \c segment.
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,391 +7,481 @@
|
||||||
/*! \class Track
|
/*! \class Track
|
||||||
* \brief Structure managing one routing track.
|
* \brief Structure managing one routing track.
|
||||||
*
|
*
|
||||||
|
* \section secTrackPurpose Track Purpose
|
||||||
|
*
|
||||||
|
* We use an array of <em>regularly spaced</em> Track as a geometrical
|
||||||
|
* fast access structure. It allows to know whether an area is used or
|
||||||
|
* not. The whole area may be seen as a set of adjoining tiles of fixed
|
||||||
|
* \e width but variable \e length.
|
||||||
|
*
|
||||||
|
* The figure <b>(1.b)</b> show, for an horizontal, track the relation
|
||||||
|
* between <code>y,min,max</code> and the occupied area of the plane.
|
||||||
|
* \c min and \c max must take into account segment extensions (\c e) and
|
||||||
|
* the minimal distance between two rectangles (\c MD) of the same layer.
|
||||||
|
* We assume that the width of the segment, augmented of all it's
|
||||||
|
* contraints is no greater than \c TS (in fact it's how \c TS must be
|
||||||
|
* calculated).
|
||||||
|
*
|
||||||
|
* For the whole track array, see RoutingPlane.
|
||||||
|
*
|
||||||
|
* \image html Track-0.png "Fig 1: Track Area"
|
||||||
|
*
|
||||||
|
*
|
||||||
* \section secTrackImplementation Track Implementation
|
* \section secTrackImplementation Track Implementation
|
||||||
*
|
*
|
||||||
* Basically a Track is a sorted vector of TrackSegment, TrackSegment
|
* A Track is implemented with a sorted vector of TrackElement.
|
||||||
* beeing a decoration of the Katabatic::AutoSegment. Managment rules :
|
* TrackElements from differents nets must not overlap.
|
||||||
* <ul>
|
* The sorting order is defined as follow:
|
||||||
* <li><b>Rule 1 :</b> the vector of TrackSegment is sorted by
|
* - TrackElements are sorted by increasing source (\e min)
|
||||||
* increasing source positions.
|
* positions.
|
||||||
* <li><b>Rule 2 :</b> two consecutives segments TrackSegment do
|
* - In case of overlap (i.e. belongs to the same net), if
|
||||||
* not overlap, except in case of <b>rule 3</b>.
|
* they share the same source position, then they are sorted
|
||||||
* <li><b>Rule 3 :</b> if they belongs to the same \Net, two
|
* by \e decreasing length. This way, the longest one will be
|
||||||
* consecutive segments can overlap, see Track::getNetUsedInterval().
|
* the first encountered when walking through the Track in
|
||||||
* </ul>
|
* increasing index order.
|
||||||
*
|
*
|
||||||
* \image html Track-1.png "Track Structure"
|
* Figure <b>2.b</b> shows the details of the Track <b>[1]</b> of
|
||||||
|
* figure <b>1.a</b>. Net \b \<d\> show an exemple of overlapping.
|
||||||
|
*
|
||||||
|
* \image html Track-1.png "Fig 2: Track Structure"
|
||||||
* \image latex Track-1.pdf "Track Structure" width=0.7\textwidth
|
* \image latex Track-1.pdf "Track Structure" width=0.7\textwidth
|
||||||
*
|
*
|
||||||
|
* In addition to the TrackSegments, the Track also manage additionnal
|
||||||
|
* informations through a second vector of TrackMarkers. TrackMarker
|
||||||
|
* are currently used only to hints at how strongly a terminal is
|
||||||
|
* dependant on that portion of Track to be accessed.
|
||||||
*
|
*
|
||||||
* <b>updates procedures</b>
|
|
||||||
*
|
*
|
||||||
* Kite extend the Katabatic::Session mechanism to manage Track
|
* \subsection ssecTrackIndexes Indexes vs. Iterators
|
||||||
* modifications.
|
|
||||||
*
|
|
||||||
* <b>Indexes vs. Iterators</b>
|
|
||||||
*
|
*
|
||||||
* Numerical indexes have been prefered over iterators because they can
|
* Numerical indexes have been prefered over iterators because they can
|
||||||
* be used more easily by objects other the Track itself for referencing.
|
* be used more easily by objects other the Track itself for referencing.
|
||||||
* So internal managment follow the same rule, handling indexes or
|
* So internal managment follow the same rule, handling indexes or
|
||||||
* reference to indexes.
|
* reference to indexes.
|
||||||
*
|
*
|
||||||
* <b>Looking up free/used zones</b>
|
|
||||||
*
|
*
|
||||||
* The most important operation performed on a Track is to locate
|
* \subsection ssecTrackUpdate Update Mechanism
|
||||||
* free or used zones at a given point. We uses the \STL \lower_bound
|
|
||||||
* function to find the index in the vector from a position.
|
|
||||||
* It relies heavily on the hypothesis that consecutives TrackSegment
|
|
||||||
* do not overlap, however, as segments from a same net can overlap
|
|
||||||
* the \c max() function is more complex than the \c min(). In fact
|
|
||||||
* it has to aggregate all the overlaping TrackSegment from the
|
|
||||||
* same \Net (getUsedNetInterval()).
|
|
||||||
*
|
*
|
||||||
* \image html Track-2.png "Track Zones - First Approach"
|
* When a TrackElement is normaly inserted in a Track, a two way link
|
||||||
* \image latex Track-2.pdf "Track Zones - First Approach" width=0.7\textwidth
|
* is established. The Track has an entry in it's vector refering to
|
||||||
|
* TrackElement, and conversely, the TrackElement has it's \c track
|
||||||
|
* field pointing to it's owning Track.
|
||||||
*
|
*
|
||||||
* As can be seen on the previous figure it is slightly more
|
* <b>TrackElement Removal</b>
|
||||||
* efficient to work on \c lower_bound-1 instead of \c lower_bound.
|
|
||||||
*
|
*
|
||||||
* \image html Track-3.png "Track Zones - Optimized"
|
* To remove a TrackElement from a Track, we break one of those two links:
|
||||||
* \image latex Track-3.pdf "Track Zones - Optimized" width=0.7\textwidth
|
* the TrackElement cease to refer to the owning Track, marking him for
|
||||||
*/
|
* removal which will occurs at the next track revalidation (Track::doRemoval()).
|
||||||
|
* In figure <b>3</b>, the TrackElement belonging to net \b \<b\> is
|
||||||
/*! \enum Track::IndexState
|
* marked for removal.
|
||||||
* Indicates how to compute the bounds of the interval enclosing
|
|
||||||
* a given position.
|
|
||||||
*
|
*
|
||||||
* \note According to \e position, the interval can be a free interval
|
* \image html Track-2.png "Fig 3: TrackElement Removal"
|
||||||
* or a used interval.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MinTrackMin
|
|
||||||
* Minimum/Source : uses the Track minimum.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MinSegmentMin
|
|
||||||
* Minimum/Source : uses the begin segment minimum (source).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MinSegmentMax
|
|
||||||
* Minimum/Source : uses the begin segment maximum (target).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MaxTrackMax
|
|
||||||
* Maximum/Target : uses the Track maximum.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MaxSegmentMin
|
|
||||||
* Maximum/Target : uses the end segment minimum (source).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MaxNextSegmentMin
|
|
||||||
* Maximum/Target : uses the next to end segment minimum (source).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MaxSegmentMax
|
|
||||||
* Maximum/Target : uses the end segment maximum (target).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::BeforeFirst
|
|
||||||
* Interval type : free, before the first interval [case (1)].
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::Inside
|
|
||||||
* Interval type : used, in the Track [case (2)].
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::Outside
|
|
||||||
* Interval type : free, between two used TrackSegment [case (3)].
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::AfterLast
|
|
||||||
* Interval type : free, after the last used TrackSegment [case (4)].
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::EmptyTrack
|
|
||||||
* Interval type : free, and the Track is empty [case (5)].
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MinMask
|
|
||||||
* Mask value : used to reset all the minimal values.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::MaxMask
|
|
||||||
* Mask value : used to reset all the maximal values.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \var Track::NPOS;
|
|
||||||
* A special index value (greatest integer) meaning that
|
|
||||||
* an index is invalid.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Accessors
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function RoutingPlane* Track::getRoutingPlane () const;
|
|
||||||
* \Return The RoutingPlane owning this Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function KiteEngine* Track::getKiteEngine () const;
|
|
||||||
* \Return The KiteEngine owning this Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function RoutingPlane* Track::getIndex () const;
|
|
||||||
* \Return The index of this Track in the RoutingPlane Track vector.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Layer* Track::getLayer () const;
|
|
||||||
* \Return The \Layer of the Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getAxis () const;
|
|
||||||
* \Return The Axis of the Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getMin () const;
|
|
||||||
* \Return The minimal allowed coordinate of the Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getMax () const;
|
|
||||||
* \Return The maximal allowed coordinate of the Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Track* Track::getNext () const;
|
|
||||||
* \Return The next Ttrack in the \RoutingPlane vector. That is the
|
|
||||||
* one with the axis immediatly superior.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Track* Track::getPrevious () const;
|
|
||||||
* \Return The previous Track in the \RoutingPlane vector. That is the
|
|
||||||
* one with the axis immediatly inferior.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function size_t Track::getSize () const;
|
|
||||||
* \Return The total number of TrackSegment in the Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Point Track::getPosition ( DbU::Unit position ) const;
|
|
||||||
* \Return the point at \c (position,getAxis()) for horizontal Track
|
|
||||||
* at or \c (getAxis(),position) for vertical Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name TrackSegment Accessors
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function TrackSegment* Track::getNext ( size_t& index, Net* net ) const;
|
|
||||||
* \param index Index of the starting TrackSegment.
|
|
||||||
* \param net A \Net to ignore.
|
|
||||||
* \return The next TrackSegment (\NULL if not found).
|
|
||||||
*
|
*
|
||||||
* find, starting from TrackSegment at \e index the next TrackSegment
|
* <b>TrackElement Insertion</b>
|
||||||
* ignoring TrackSegment from \e net. \e index is modified to point
|
|
||||||
* on the returned TrackSegment. If there's no next TrackSegment (\NULL)
|
|
||||||
* then index is set to Track::NPOS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function TrackSegment* Track::getPrevious ( size_t& index, Net* net ) const;
|
|
||||||
* \param index Index of the starting TrackSegment.
|
|
||||||
* \param net A \Net to ignore.
|
|
||||||
* \return The previous TrackSegment (\NULL if not found).
|
|
||||||
*
|
*
|
||||||
* find, starting from TrackSegment at \e index the previous TrackSegment
|
* When a TrackElement is inserted into a Track, the two way link is
|
||||||
* ignoring TrackSegment from \e net. \e index is modified to point
|
* immediatly created (but the TrackElement is not yet at it's final
|
||||||
* on the returned TrackSegment. If there's no previous TrackSegment (\NULL)
|
* place in the Track's vector). Before inserting a TrackElement we
|
||||||
* then index is set to Track::NPOS.
|
* check that it's been already detached (\c track field to \c NULL).
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function TrackSegment* Track::getNextFixed ( size_t& index ) const;
|
|
||||||
* \param index Index of the starting TrackSegment.
|
|
||||||
* \return The first previous \e Fixed TrackSegment.
|
|
||||||
*
|
*
|
||||||
* find, starting from TrackSegment at \e index the first previous
|
* It is at that step that the TrackElement axis is actually updated
|
||||||
* with a \e Fixed attribute set. \e index is modified to point on the
|
* through a call to TrackElement::setAxis().
|
||||||
* returned TrackSegment. If there's no previous TrackSegment (\NULL)
|
*
|
||||||
* then index is set to Track::NPOS.
|
* <b>Revalidation Sequence</b>
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function TrackSegment* Track::getSegment ( size_t index ) const;
|
|
||||||
* \param index The index of the TrackSegment.
|
|
||||||
* \return The TrackSegment at \e index. The result will be \NULL in the
|
|
||||||
* follwing cases :
|
|
||||||
* <ul>
|
|
||||||
* <li>\e index is outside the sorted zone.
|
|
||||||
* <li>\e index points to a hole in the Track.
|
|
||||||
* <li>\e index is equal to Track::NPOS.
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function TrackSegment* Track::getSegment ( DbU::Unit position ) const;
|
|
||||||
* \param position The position where to search.
|
|
||||||
* \return The TrackSegment whose starting point is immediatly inferior to \e position.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function size_t Track::find ( const TrackSegment* segment ) const;
|
|
||||||
* \Return the \e index of \e segment inside the Track. If the \e segment do
|
|
||||||
* not belongs to the Track, return Track::NPOS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Track::getIBounds ( DbU::Unit position, size_t& begin, size_t& end, unsigned int& state ) const;
|
|
||||||
* \param position The position where to search.
|
|
||||||
* \param begin Index of the starting bound.
|
|
||||||
* \param end Index of the ending bound.
|
|
||||||
* \param state how to use the returned \e indexes.
|
|
||||||
* \return The TrackSegment index around \e position.
|
|
||||||
*
|
*
|
||||||
* The relation between the returned \e index and the position is
|
* After a Track has been modificated either the Track element vector or
|
||||||
* given through the \e state parameter.
|
* the MarkerElement vector (or both) has been invalidateds. Revalidation
|
||||||
|
* take place in three steps:
|
||||||
|
* - Track::doRemoval(), remove all TrackElement marked for removal.
|
||||||
|
* - Track::insert(), insert the TrackElement into their new Track.
|
||||||
|
* - Track::doReorder(), sort the TrackElement of the vector, that is, put the
|
||||||
|
* newly inserted elements at their right place.
|
||||||
*
|
*
|
||||||
* \note It uses the \lower_bound \STL function.
|
* Each step must be done <em>for all Tracks</em> before proceeding to the
|
||||||
*/
|
* next. This way a TrackElement \c track field doesn't get set \e before
|
||||||
|
* it has been actually removed from it's previous Track.
|
||||||
/*! \function DbU::Unit Track::getSourcePosition ( size_t index ) const;
|
*
|
||||||
* \Return The canonical source position of TrackSegment at index \e index.
|
*
|
||||||
* If \e index is equal to Track::NPOS, returns zero.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getSourcePosition ( vector<TrackSegment*>::iterator it ) const;
|
|
||||||
* \Return The canonical source position of TrackSegment pointed by iterator \e it.
|
|
||||||
* If \e it is equal to \c end() , returns zero.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getMinimalPosition ( size_t index, unsigned int state ) const;
|
|
||||||
* \Return The minmal position (lower bound) of an interval, starting near index \e index
|
|
||||||
* with state \e state.
|
|
||||||
*
|
*
|
||||||
* \see Track::IndexState.
|
* \subsection ssecTrackOperations Main Operations on Tracks
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getMaximalPosition ( size_t index, unsigned int state ) const;
|
|
||||||
* \Return The maximal position (upper bound) of an interval, ending near index \e index
|
|
||||||
* with state \e state.
|
|
||||||
*
|
*
|
||||||
* \see Track::IndexState.
|
* <b>Helper Function:</b> Track::getBeginIndex()
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Interval Track::getFreeInterval ( DbU::Unit position, Net* net ) const;
|
|
||||||
* \param position where fo find a free interval.
|
|
||||||
* \param net for which net to find the free interval.
|
|
||||||
* \return The longuest free interval enclosing \e position (may be empty).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Interval Track::expandUsedInterval ( size_t& begin, size_t& end ) const;
|
|
||||||
* \param begin index on any of the overlaping TrackSegment. This value
|
|
||||||
* is then modified to point on the lower TrackSegment of the set.
|
|
||||||
* \param end initial value is ignored. sets to the index of the rightmost
|
|
||||||
* extended TrackSegment of the set (i.e. the one setting the
|
|
||||||
* upper bound).
|
|
||||||
* \return the whole interval used by a set of overlaping TrackSegment.
|
|
||||||
*
|
*
|
||||||
* \image html Track-4.png "Overlap - Example 1"
|
* Return in \c begin the index of the TrackElement whose minimum is immediately
|
||||||
* \image html Track-5.png "Overlap - Example 2"
|
* below the requested \c position on the Track axis. The second returned
|
||||||
* \image latex Track-4.pdf "Overlap - Example 1" width=0.7\textwidth
|
* parameter \c state is a set of flags to tell how the \c begin index
|
||||||
* \image latex Track-5.pdf "Overlap - Example 2" width=0.7\textwidth
|
* has to be interpreted.
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function Interval Track::expandFreeInterval ( size_t& begin, size_t& end, unsigned int state, Net* net ) const;
|
|
||||||
* \param begin the lowest used TrackSegment.
|
|
||||||
* \param end the highest used TrackSegment.
|
|
||||||
* \param state the enclosing characterics.
|
|
||||||
* \param net the for wich we seek place.
|
|
||||||
* \Return The longuest free interval between \c ]begin,end[ .
|
|
||||||
*
|
*
|
||||||
* \note \c ]begin,end[ must define a free interval between two TrackSegment.
|
* <b>Helper Function:</b> Track::getOccupiedInterval()
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Track::_check ( const char* message=NULL ) const;
|
|
||||||
* \param message An iformative message, only printed if an error occurs.
|
|
||||||
* \return \true if the Track contains no incoherencies.
|
|
||||||
*
|
*
|
||||||
* Perform a complete Track check. Looks for the following incoherencies :
|
* Returns the complete interval of a set of overlapping TrackElement from
|
||||||
* <ul>
|
* the same net.
|
||||||
* <li>TrackSegment do not refers this Track.
|
|
||||||
* <li>TrackSegment is detached (TrackSegment::getTrack() is \NULL).
|
|
||||||
* <li>TrackSegment is hollow, this one is very unlikely as hollow
|
|
||||||
* TrackSegment are only created for the \lower_bound.
|
|
||||||
* <li>\NULL pointers (should never occurs, nevertheless...)
|
|
||||||
* <li>And finally, call checkOverlap().
|
|
||||||
* </ul>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \function void Track::checkOverlap () const;
|
//! \enum Track::IndexState
|
||||||
* \return the number of overlaping TrackSegment.
|
//! Indicates how to compute the bounds of the interval enclosing
|
||||||
*
|
//! a given \c position on track axis.
|
||||||
* Perform the following checks :
|
//!
|
||||||
* <ul>
|
//! \note According to \e position, the interval can be a free interval
|
||||||
* <li>Two consecutive TrackSegment from different \Net must not
|
//! or a used interval.
|
||||||
* overlap.
|
|
||||||
* <li>For TrackSegment starting from the same position, the
|
|
||||||
* longuest must be first.
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Track::getOverlapBounds ( Interval interval, size_t& begin, size_t& end ) const;
|
//! \var Track::BeginIsTrackMin
|
||||||
* \param interval the overlaping interval.
|
//! (implies \c begin=0) there is no TrackElement \e before \c position
|
||||||
* \param begin where to store the starting bound.
|
|
||||||
* \param end where to store the ending bound.
|
|
||||||
*
|
|
||||||
* find the range of TrackSegment intersecting \e interval.
|
|
||||||
* Note that when the \e interval lower bound crosses a set of
|
|
||||||
* overlaping intervals from the same \Net, the interval at
|
|
||||||
* \e begin will crosses the lower bound but some following
|
|
||||||
* of the same \Net may not.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getOverlapCost ( Interval interval, Net* net, size_t begin, size_t end ) const;
|
//! \var Track::BeginIsSegmentMin
|
||||||
* \param interval the overlaping interval.
|
//! The \c begin segment starts \e before \c position and ends \e after.
|
||||||
* \param net a Net to ignore (null cost).
|
|
||||||
* \param begin the starting bound.
|
|
||||||
* \param end the ending bound.
|
|
||||||
* \return The cost of the overlap.
|
|
||||||
*
|
|
||||||
* compute the cost of the overlap of \e interval with the range
|
|
||||||
* \c [begin,end] of TrackSegment. Any TrackSegment belonging to
|
|
||||||
* \e net will be ignored.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit Track::getOverlapCost ( Interval interval, Net* net ) const;
|
//! \var Track::BeginIsSegmentMax
|
||||||
* \param interval the overlaping interval.
|
//! The \c begin segment starts and ends \e before \c position.
|
||||||
* \param net a Net to ignore (null cost).
|
|
||||||
*
|
|
||||||
* compute the overlap of \e interval with TrackSegment from
|
|
||||||
* the current Track, ignoring thoses belonging to \e net.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
//! \var Track::EndIsTrackMax
|
||||||
|
//! There is no TrackElement \e after \c position.
|
||||||
|
|
||||||
|
//! \var Track::EndIsSegmentMin
|
||||||
|
//! The \c begin segment starts \e before \c position.
|
||||||
|
|
||||||
/*! \name Updators
|
//! \var Track::EndIsNextSegmentMin
|
||||||
*/
|
//! The \c begin segment starts and ends \e before \c position. So the maximum
|
||||||
// \{
|
//! is given by the \c minimum of the \e next TrackElement.
|
||||||
|
|
||||||
/*! \function void Track::insert ( TrackSegment* segment );
|
//! \var Track::EndIsSegmentMax
|
||||||
* adds \e segment to the Track. Must only be used inside a
|
//! The \c begin segment starts \e before \c position and ends \e after.
|
||||||
* TrackSession.
|
|
||||||
*
|
|
||||||
* \see TrackSession.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function size_t Track::pack ();
|
//! \var Track::BeforeFirstElement
|
||||||
* \Return The number of removeds TrackSegment.
|
//! the \c position is before the first TrackElement.
|
||||||
*
|
|
||||||
* Suppress all the TrackSegment that have been withdraw from the
|
|
||||||
* Track. TrackSegment must be withdraw trough the TrackSegment::detach()
|
|
||||||
* method which sets their owning Track to \NULL (the removal criterion).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void Track::sort ();
|
//! \var Track::InsideElement
|
||||||
*
|
//! the \c position is inside a TrackElement.
|
||||||
* sort the the vector. Must be called \e after the Pack() method,
|
|
||||||
* so no detached TrackSegment are presents.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
//! \var Track::OutsideElement
|
||||||
|
//! the \c position is in free zone between two TrackElements.
|
||||||
|
|
||||||
|
//! \var Track::AfterLastElement
|
||||||
|
//! the position is after the end of the last element.
|
||||||
|
|
||||||
|
//! \var Track::EmptyTrack
|
||||||
|
//! the track is still empty.
|
||||||
|
|
||||||
|
//! \var Track::BeginMask
|
||||||
|
//! To extract the \e begin part from a combination of flags.
|
||||||
|
|
||||||
|
//! \var Track::EndMask
|
||||||
|
//! To extract the \e end part from a combination of flags.
|
||||||
|
|
||||||
|
//! \var Track::npos;
|
||||||
|
//! A special index value (greatest integer) meaning that
|
||||||
|
//! an index is invalid.
|
||||||
|
|
||||||
|
//! \function bool Track::isHorizontal () const;
|
||||||
|
//! \sreturn \true if the Track in horizontal direction.
|
||||||
|
|
||||||
|
//! \function bool Track::isVertical () const;
|
||||||
|
//! \sreturn \true if the Track in vertical direction.
|
||||||
|
|
||||||
|
//! \function bool Track::isLocalAssigned () const;
|
||||||
|
//! \sreturn \true is the Track should be preferentially used for local routing.
|
||||||
|
|
||||||
|
//! \function RoutingPlane* Track::getRoutingPlane () const;
|
||||||
|
//! \sreturn The RoutingPlane owning this Track.
|
||||||
|
|
||||||
|
//! \function KiteEngine* Track::getKiteEngine () const;
|
||||||
|
//! \sreturn The KiteEngine owning this Track.
|
||||||
|
|
||||||
|
//! \function unsigned int Track::getDirection () const;
|
||||||
|
//! \sreturn The direction of the Track, either Katabatic::KbHorizontal or
|
||||||
|
//! Katabatic::KbVertical.
|
||||||
|
|
||||||
|
//! \function RoutingPlane* Track::getIndex () const;
|
||||||
|
//! \sreturn The index of this Track in the RoutingPlane Track vector.
|
||||||
|
|
||||||
|
//! \function unsigned int Track::getDepth () const;
|
||||||
|
//! \sreturn The depth (as given by the RoutingGauge) of the Track's layer.
|
||||||
|
|
||||||
|
//! \function Layer* Track::getLayer () const;
|
||||||
|
//! \sreturn The \Layer of the Track.
|
||||||
|
|
||||||
|
//! \function Layer* Track::getBlockageLayer () const;
|
||||||
|
//! \sreturn The associated blockage \Layer to the Track's layer.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getAxis () const;
|
||||||
|
//! \sreturn The Axis of the Track.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getMin () const;
|
||||||
|
//! \sreturn The minimal allowed coordinate of the Track.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getMax () const;
|
||||||
|
//! \sreturn The maximal allowed coordinate of the Track.
|
||||||
|
|
||||||
|
//! \function Track* Track::getNextTrack () const;
|
||||||
|
//! \sreturn The next Track in the \RoutingPlane vector. That is the
|
||||||
|
//! one with the axis immediatly superior.
|
||||||
|
|
||||||
|
//! \function Track* Track::getPreviousTrack () const;
|
||||||
|
//! \sreturn The previous Track in the \RoutingPlane vector. That is the
|
||||||
|
//! one with the axis immediatly inferior.
|
||||||
|
|
||||||
|
//! \function size_t Track::getSize () const;
|
||||||
|
//! \sreturn The total number of TrackSegment in the Track.
|
||||||
|
|
||||||
|
//! \function Point Track::getPosition ( DbU::Unit position ) const;
|
||||||
|
//! \sreturn the point at \c (position,getAxis()) for horizontal Track
|
||||||
|
//! at or \c (getAxis(),position) for vertical Track.
|
||||||
|
|
||||||
|
//! \function TrackSegment* Track::getSegment ( size_t index ) const;
|
||||||
|
//! \param index The index of the TrackSegment.
|
||||||
|
//! \return The TrackSegment at \e index. The result will be \NULL in the
|
||||||
|
//! follwing cases :
|
||||||
|
//! - \e index is outside the sorted zone.
|
||||||
|
//! - \e index points to a hole in the Track.
|
||||||
|
//! - \e index is equal to Track::npos.
|
||||||
|
|
||||||
|
//! \function TrackSegment* Track::getSegment ( DbU::Unit position ) const;
|
||||||
|
//! \param position The position where to search.
|
||||||
|
//! \return The TrackSegment whose starting point is immediatly inferior to \e position.
|
||||||
|
|
||||||
|
//! \function TrackSegment* Track::getNext ( size_t& index, Net* net ) const;
|
||||||
|
//! \param index Index of the starting TrackSegment.
|
||||||
|
//! \param net A \Net to ignore.
|
||||||
|
//! \return The next TrackSegment (\NULL if not found).
|
||||||
|
//!
|
||||||
|
//! Find, starting from TrackSegment at \e index the next TrackSegment
|
||||||
|
//! ignoring TrackSegment from \e net. \e index is modified to point
|
||||||
|
//! on the returned TrackSegment. If there's no next TrackSegment (\NULL)
|
||||||
|
//! then index is set to Track::npos.
|
||||||
|
|
||||||
|
//! \function TrackSegment* Track::getPrevious ( size_t& index, Net* net ) const;
|
||||||
|
//! \param index Index of the starting TrackSegment.
|
||||||
|
//! \param net A \Net to ignore.
|
||||||
|
//! \return The previous TrackSegment (\NULL if not found).
|
||||||
|
//!
|
||||||
|
//! find, starting from TrackSegment at \e index the previous TrackSegment
|
||||||
|
//! ignoring TrackSegment from \e net. \e index is modified to point
|
||||||
|
//! on the returned TrackSegment. If there's no previous TrackSegment (\NULL)
|
||||||
|
//! then index is set to Track::npos.
|
||||||
|
|
||||||
|
//! \function TrackSegment* Track::getNextFixed ( size_t& index ) const;
|
||||||
|
//! \param index Index of the starting TrackSegment.
|
||||||
|
//! \return The first previous \e Fixed TrackSegment.
|
||||||
|
//!
|
||||||
|
//! find, starting from TrackSegment at \e index the first previous
|
||||||
|
//! with a \e Fixed attribute set. \e index is modified to point on the
|
||||||
|
//! returned TrackSegment. If there's no previous TrackSegment (\NULL)
|
||||||
|
//! then index is set to Track::npos.
|
||||||
|
|
||||||
|
//! \function size_t Track::find ( const TrackElement* element ) const;
|
||||||
|
//! \sreturn the \e index of \e element inside the Track. If the \e element do
|
||||||
|
//! not belongs to the Track, return Track::npos.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getSourcePosition ( size_t index ) const;
|
||||||
|
//! \sreturn The source position of TrackSegment at index \e index.
|
||||||
|
//! If \e index is equal to Track::npos, returns zero.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getSourcePosition ( vector<TrackElement*>::iterator it ) const;
|
||||||
|
//! \sreturn The source position of TrackSegment pointed by iterator \e it.
|
||||||
|
//! If \e it is equal to \c end() , returns zero.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getMinimalPosition ( size_t index, unsigned int state ) const;
|
||||||
|
//! \sreturn Extract the minimal position from the interval at \c index in accordance
|
||||||
|
//! to \c state hinting.
|
||||||
|
//!
|
||||||
|
//! \sa Track::IndexState.
|
||||||
|
|
||||||
|
//! \function DbU::Unit Track::getMaximalPosition ( size_t index, unsigned int state ) const;
|
||||||
|
//! \sreturn Extract the maximal position from the interval at \c index in accordance
|
||||||
|
//! to \c state hinting.
|
||||||
|
//!
|
||||||
|
//! \sa Track::IndexState.
|
||||||
|
|
||||||
|
//! \function Interval Track::getFreeInterval ( DbU::Unit position, Net* net=NULL ) const;
|
||||||
|
//! \param position where fo find a free interval.
|
||||||
|
//! \param net for which net to find the free interval.
|
||||||
|
//! \sreturn The longuest free interval enclosing \e position (may be empty).
|
||||||
|
|
||||||
|
//! \function Interval Track::getOccupiedInterval ( size_t& begin ) const;
|
||||||
|
//! \param begin index of one of the TrackElement set. May be modificated.
|
||||||
|
//! \sreturn the whole interval used by a set of overlaping TrackSegment.
|
||||||
|
//!
|
||||||
|
//! As TrackElement from a same net can overlap, the interval of one of
|
||||||
|
//! them do not give the full extend of the Track occupation at this point.
|
||||||
|
//! This function looks for all overlaping segments and returns the
|
||||||
|
//! merged interval. Additionnaly it sets \c begin to the index of the
|
||||||
|
//! lowest TrackElement of the set.
|
||||||
|
//!
|
||||||
|
//! \image html TrackOccupiedInterval-1.png "Fig 4: Track::getOccuppiedInterval()"
|
||||||
|
|
||||||
|
//! \function Interval Track::expandFreeInterval ( size_t& begin, size_t& end, unsigned int state, Net* net ) const;
|
||||||
|
//! \param begin the lowest used TrackSegment.
|
||||||
|
//! \param end the highest used TrackSegment.
|
||||||
|
//! \param state tells how to interpret the \c begin & \c end indexes.
|
||||||
|
//! \param net the for wich we seek place.
|
||||||
|
//! \sreturn The longuest free interval between \c ]begin,end[ .
|
||||||
|
//!
|
||||||
|
//! Starting from the initial <code>[begin,end]</code> interval, expand the
|
||||||
|
//! interval to encompass all free space or segments belonging to \c net.
|
||||||
|
//! \c state may be used to compute the interval bounds from \c begin
|
||||||
|
//! and \c end instead of directly using the returned \c interval.
|
||||||
|
//!
|
||||||
|
//! \note \c ]begin,end[ must define a free interval between two TrackSegment.
|
||||||
|
|
||||||
|
//! \function void Track::getBeginIndex ( DbU::Unit position, size_t& begin, unsigned int& state ) const;
|
||||||
|
//! \param position The position where to search.
|
||||||
|
//! \param begin Index of the immediatly inferior TrackElement.
|
||||||
|
//! \param state how to interpret the returned \c begin.
|
||||||
|
//!
|
||||||
|
//! Return in \c begin the index of the TrackElement whose minimum is immediately
|
||||||
|
//! below the requested \c position on the Track axis. The second returned
|
||||||
|
//! parameter \c state is a set of flags to tell how the \c begin index
|
||||||
|
//! has to be interpreted.
|
||||||
|
//!
|
||||||
|
//! Flags for the \c state are:
|
||||||
|
//! - Track::BeginIsTrackMin : (implies \c begin=0) there is no TrackElement
|
||||||
|
//! \e before \c position.
|
||||||
|
//! - Track::EndIsSegmentMin : The \c begin segment starts \e before \c position.
|
||||||
|
//! - Track::BeginIsSegmentMin : The \c begin segment starts \e before \c position
|
||||||
|
//! and ends \e after.
|
||||||
|
//! - Track::EndIsSegmentMax : The \c begin segment starts \e before \c position
|
||||||
|
//! and ends \e after.
|
||||||
|
//! - Track::BeginIsSegmentMax : The \c begin segment starts and ends \e before
|
||||||
|
//! \c position.
|
||||||
|
//! - Track::EndIsNextSegmentMin : The \c begin segment starts and ends \e before
|
||||||
|
//! \c position. So the maximum is given by the \c minimum of the \e next
|
||||||
|
//! TrackElement.
|
||||||
|
//! - Track::EndIsTrackMax : There is no TrackElement \e after \c position.
|
||||||
|
//!
|
||||||
|
//! Based on the previous flags, we build the \c state parameter:
|
||||||
|
//! - Track::BeforeFirstElement : the \c position is before the first TrackElement.
|
||||||
|
//! - Track::InsideElement : the \c position is inside a TrackElement.
|
||||||
|
//! - Track::OutsideElement : the \c position is in free zone between two
|
||||||
|
//! TrackElements.
|
||||||
|
//! - Track::AfterLastElement : the position is after the end of the last
|
||||||
|
//! element.
|
||||||
|
//! - Track::EmptyTrack : the track is still empty.
|
||||||
|
//!
|
||||||
|
//! To separate flags relevant to \e begin and \e end informations, two masks
|
||||||
|
//! are provideds:
|
||||||
|
//! - Track::BeginMask
|
||||||
|
//! - Track::EndMask
|
||||||
|
//!
|
||||||
|
//! \image html TrackBeginIndex-1.png "Fig 3: Track::getBeginIndex()"
|
||||||
|
//!
|
||||||
|
//! <b>Reminder for myself:</b>
|
||||||
|
//! The Track::getBeginIndex() function relies on the \STL \lower_bound
|
||||||
|
//! function. \c lower_bound() finds the TrackElement immediately \e superior
|
||||||
|
//! to \c position (shown on Figure <b>3</b> by the \c LB label in white on black).
|
||||||
|
//!
|
||||||
|
//! The relation between the returned \c begin index and the position is
|
||||||
|
//! given through the \c state parameter.
|
||||||
|
|
||||||
|
//! \function void Track::getOverlapBounds ( Interval interval, size_t& begin, size_t& end ) const;
|
||||||
|
//! \param interval the overlaping interval.
|
||||||
|
//! \param begin where to store the starting bound.
|
||||||
|
//! \param end where to store the ending bound.
|
||||||
|
//!
|
||||||
|
//! find the range of TrackSegment intersecting \e interval.
|
||||||
|
//! Note that when the \e interval lower bound crosses a set of
|
||||||
|
//! overlaping intervals from the same \Net, the interval at
|
||||||
|
//! \e begin will crosses the lower bound but some following
|
||||||
|
//! of the same \Net may not.
|
||||||
|
|
||||||
|
//! \function TrackCost Track::getOverlapCost ( Interval interval, Net* net, size_t begin, size_t end, unsigned int flags ) const;
|
||||||
|
//! \param interval the overlaping interval.
|
||||||
|
//! \param net a Net to ignore (null cost).
|
||||||
|
//! \param begin the starting bound.
|
||||||
|
//! \param end the ending bound.
|
||||||
|
//! \param flags passed to the overlap cost function.
|
||||||
|
//! \return The cost of the overlap.
|
||||||
|
//!
|
||||||
|
//! Compute the cost of the overlap of \e interval with the range
|
||||||
|
//! \c [begin,end] of TrackSegment. Any TrackSegment belonging to
|
||||||
|
//! \e net will be ignored.
|
||||||
|
|
||||||
|
//! \function TrackCost Track::getOverlapCost ( Interval interval, Net* net, unsigned int flags ) const;
|
||||||
|
//! \param interval the overlaping interval.
|
||||||
|
//! \param net a Net to ignore (null cost).
|
||||||
|
//! \param flags passed to the overlap cost function.
|
||||||
|
//!
|
||||||
|
//! Compute the overlap cost of \e interval with TrackSegment from
|
||||||
|
//! the current Track, ignoring thoses belonging to \e net.
|
||||||
|
|
||||||
|
//! \function TrackCost Track::getOverlapCost ( TrackElement* segment, unsigned int flags ) const;
|
||||||
|
//! \param segment under which to compute overlap cost.
|
||||||
|
//! \param flags passed to the overlap cost function.
|
||||||
|
//!
|
||||||
|
//! Compute the overlap cost of \c segment with TrackSegment from
|
||||||
|
//! the current Track (interval and net are deduced from \c segment).
|
||||||
|
|
||||||
|
//! \function void Track::getTerminalWeight ( Interval interval, Net* net, size_t& count, unsigned int& weight ) const;
|
||||||
|
//! \param interval under which to compute terminal weight.
|
||||||
|
//! \param net a net to be ignored.
|
||||||
|
//! \param count incremented of the number of track markers under the
|
||||||
|
//! \c interval.
|
||||||
|
//! \param weight incremented of the sum of the weight of the track markers
|
||||||
|
//! under the \c interval.
|
||||||
|
//!
|
||||||
|
//! Compute and return the sum of the weight of the track markers (see TrackMarker)
|
||||||
|
//! under \c interval ignoring \c net (that is, \e for \c net).
|
||||||
|
//!
|
||||||
|
//! \remark The referenced variables \c count and \c weight are <b>not</b> reset to
|
||||||
|
//! zero by this function. It is of the caller's responsability.
|
||||||
|
|
||||||
|
//! \function bool Track::check ( unsigned int& overlaps, const char* message=NULL ) const;
|
||||||
|
//! \param overlaps The number of overlaping segments.
|
||||||
|
//! \param message An iformative message, only printed if an error occurs.
|
||||||
|
//! \return \true if the Track contains no incoherencies.
|
||||||
|
//!
|
||||||
|
//! Perform a complete Track check. Looks for the following incoherencies :
|
||||||
|
//! - TrackSegment do not refers this Track.
|
||||||
|
//! - TrackSegment is detached (TrackSegment::getTrack() is \NULL).
|
||||||
|
//! - TrackSegment is hollow, this one is very unlikely as hollow
|
||||||
|
//! TrackSegment are only created for the \lower_bound.
|
||||||
|
//! - \NULL pointers (should never occurs, nevertheless...)
|
||||||
|
//! - Two consecutive TrackSegment from different \Net must not
|
||||||
|
//! overlap.
|
||||||
|
//! - For TrackSegment starting from the same position, the
|
||||||
|
//! longuest must be first.
|
||||||
|
|
||||||
|
//! \function void Track::invalidate ();
|
||||||
|
//! Inconditionnaly invalidate the Track, regardless if it has been
|
||||||
|
//! modificated. The Track will be forced to be revalidated on closure
|
||||||
|
//! of the current session.
|
||||||
|
|
||||||
|
//! \function void Track::insert ( TrackElement* segment );
|
||||||
|
//! Adds \e segment to the Track. Must only be used inside a
|
||||||
|
//! Session. They must appears \e after Track::doRemoval()
|
||||||
|
//! and \e before Track::doReorder().
|
||||||
|
//!
|
||||||
|
//! \sa Kite::Session.
|
||||||
|
|
||||||
|
//! \function void Track::insert ( TrackMarker* marker );
|
||||||
|
//! Adds \e marker to the Track. Must only be used inside a
|
||||||
|
//! Session.
|
||||||
|
//!
|
||||||
|
//! \sa Kite::Session.
|
||||||
|
|
||||||
|
//! \function void Track::setSegment ( TrackElement* element, size_t index );
|
||||||
|
//! Directly affect the Track entry at position \c index to
|
||||||
|
//! \c element (use with great care).
|
||||||
|
//!
|
||||||
|
//! \sa Kite::Session.
|
||||||
|
|
||||||
|
//! \function size_t Track::doRemoval ();
|
||||||
|
//! \sreturn The number of removeds TrackSegment.
|
||||||
|
//!
|
||||||
|
//! Suppress all the TrackSegment that have been withdraw from the
|
||||||
|
//! Track. TrackSegment must be withdraw trough the TrackSegment::detach()
|
||||||
|
//! method which sets their owning Track to \NULL (the removal criterion).
|
||||||
|
//! It uses the \STL \e remove_if algorithm that put all the to be removed
|
||||||
|
//! elements at the end of the vector.
|
||||||
|
//!
|
||||||
|
//! \sa Kite::Session.
|
||||||
|
|
||||||
|
//! \function void Track::doReorder ();
|
||||||
|
//!
|
||||||
|
//! (Re)sort the TrackElement of the vector. Must be called \e after:
|
||||||
|
//! - Track::doRemoval() so no detached TrackSegment are presents.
|
||||||
|
//! - All calls to Track::insert(), as the newly inserted elements
|
||||||
|
//! are put at the back of the vector.
|
||||||
|
//!
|
||||||
|
//! \sa Kite::Session.
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
/*! \typedef SegmentOverlapCostCB
|
|
||||||
* Prototype of overlap cost callback functions.
|
|
||||||
*
|
|
||||||
* \see TrackSegment::setOverlapCostCB(), TrackSegment::getOverlapCost().
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \class TrackSegment
|
/*! \class TrackSegment
|
||||||
* \brief Derived Katabatic::AutoSegment for the router.
|
* \brief Derived Katabatic::AutoSegment for the router.
|
||||||
*
|
*
|
||||||
|
* \image html TrackSegment-10.png "Fig 1: TrackSegment Context"
|
||||||
|
*
|
||||||
* We create one TrackSegment per aligned Katabatic::AutoSegment set,
|
* We create one TrackSegment per aligned Katabatic::AutoSegment set,
|
||||||
* the TrackSegment is associated to the canonical one of the set.
|
* the TrackSegment is associated to the canonical one of the set.
|
||||||
*
|
*
|
||||||
|
@ -21,150 +16,114 @@
|
||||||
* The drawback beeing that whenever one segment from the aligned
|
* The drawback beeing that whenever one segment from the aligned
|
||||||
* set has it's extention modified, the full extention must be
|
* set has it's extention modified, the full extention must be
|
||||||
* recomputed.
|
* recomputed.
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Constructors & Destructors
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function static TrackSegment* TrackSegment::create ( AutoSegment* segment, Track* track, bool& created );
|
|
||||||
* \param segment The Katabatic AutoSegment to decorate.
|
|
||||||
* \param track A Track into which insert the TrackSegment (may be \NULL).
|
|
||||||
* \param created This flag is sets is a new TrackSegment has be created.
|
|
||||||
* \return A TrackSegment wrapped around an AutoSegment.
|
|
||||||
*
|
*
|
||||||
* Constructor mainly used at loading time to decorate the Katabatic
|
|
||||||
* data-base with the router attributes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Predicates
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function bool TrackSegment::isLocked () const;
|
|
||||||
* \Return \True if the TrackSegment is locked (cannot be deleted from the
|
|
||||||
* Track).
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Callback modifier
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function SegmentOverlapCostCB* TrackSegment::setOverlapCostCB ( SegmentOverlapCostCB* cb );
|
|
||||||
* \param cb the new overlap cost callback.
|
|
||||||
* \return the previous overlap cost callback.
|
|
||||||
*
|
*
|
||||||
* sets the overlap callback.
|
* \section secTSLazyRevalidate Lazy Revalidate
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Accessors
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function Track* TrackSegment::getTrack () const;
|
|
||||||
* \Return The Track in which this TrackSegment is inserted (can be \NULL).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function size_t TrackSegment::getIndex () const;
|
|
||||||
* \Return Index of the TrackSegment inside the Track's vector. set to
|
|
||||||
* Track::NPOS if not inserted in any Track.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function unsigned long TrackSegment::getArea () const;
|
|
||||||
* \Return The priority value used for TrackSegment sorting. Currently,
|
|
||||||
* the slack of the AutoSegment.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function TrackSegment* TrackSegment::getNext () const;
|
|
||||||
* \Return The next TrackSegment in the Track (can be \NULL).
|
|
||||||
*
|
*
|
||||||
* \see Track::getNext().
|
* When the TrackSegment::revalidate() method is called, it only update
|
||||||
*/
|
* the cached size of the segment (from the AutoSegment set of aligneds)
|
||||||
|
* and the track into which it may be inserted.
|
||||||
/*! \function TrackSegment* TrackSegment::getPrevious () const;
|
|
||||||
* \Return The previous TrackSegment in the Track (can be \NULL).
|
|
||||||
*
|
*
|
||||||
* \see Track::getPrevious().
|
* The associated DataNegociate and RoutingEvent are \b not updated.
|
||||||
*/
|
* - The RoutingEvent will be updated when it's key is updated,
|
||||||
|
* typically during a requeueing operation \b and in the
|
||||||
/*! \function Interval TrackSegment::getFreeInterval () const;
|
* SegmentFsm constructor. This should be optimzed in the future.
|
||||||
* \Return The free interval around this TrackSegment in the Track.
|
* - The DataNegociate is updated \e only in the SegmentFsm
|
||||||
*/
|
* constructor. This is the most costly of the two updates as
|
||||||
|
* it perform a perpandicular & parallel connexity exploration.
|
||||||
/*! \function DbU::Unit TrackSegment::getSourceCanonical () const;
|
|
||||||
* \Return The leftmost position of the associated aligned segment set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit TrackSegment::getTargetCanonical () const;
|
|
||||||
* \Return The rightmost position of the associated aligned segment set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function DbU::Unit TrackSegment::getCanonicalInterval () const;
|
|
||||||
* \Return The canonical interval of the associated aligned segment set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* \function DbU::Unit TrackSegment::getOverlapCost ( Interval interval, Net* net ) const;
|
|
||||||
* \param interval the overlaping interval.
|
|
||||||
* \param net the \Net owning the overlaping interval.
|
|
||||||
* \return The cost of overlaping the TrackSegment with \e interval from \Net \e net.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
|
||||||
|
|
||||||
|
|
||||||
/*! \name Modifiers
|
|
||||||
*/
|
|
||||||
// \{
|
|
||||||
|
|
||||||
/*! \function void TrackSegment::setLock ( bool state );
|
|
||||||
* \param state set the Track locking state.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void TrackSegment::setTrack ( Track* track );
|
|
||||||
* \param track The Track the TrackSegment is assigned to.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void TrackSegment::setIndex ( size_t index );
|
|
||||||
* \param index The index of TrackSegment in the Track's vector.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void TrackSegment::setArea ();
|
|
||||||
* compute the the sorting criterion used as priority, for
|
|
||||||
* now it's simply the AutoSegment's slack.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \function void TrackSegment::detach ();
|
|
||||||
* remove the TrackSegment from the Track.
|
|
||||||
*
|
*
|
||||||
* \important This function <em>do not</em> update the Track itself. The
|
|
||||||
* program must take care of it under penalty of introducing
|
|
||||||
* incoherencies.
|
|
||||||
*
|
*
|
||||||
* \see Track::detach().
|
* \section secDogleg Dogleg Management
|
||||||
|
*
|
||||||
|
* The basic AutoSegment::canDogleg() method is declined in three more
|
||||||
|
* dedicated methods in this class:
|
||||||
|
* - TrackSegment::canDogleg(), for locals only, check if a break
|
||||||
|
* is possible, never break a segment more than once (to avoid
|
||||||
|
* fragmentation).
|
||||||
|
* - TrackSegment::canDogleg(Katabatic::GCell*,unsigned int flags)
|
||||||
|
* for globals, check that the segment is breakable in the desired
|
||||||
|
* GCell. Never break twice in the first/last GCell (fragmentation
|
||||||
|
* limitation), but may \e reuse an already existing dogleg.
|
||||||
|
* - TrackSegment::canDogleg(Interval), for locals only, direct proxy
|
||||||
|
* for the AutoSegment method. Never allow more than one break.
|
||||||
|
*
|
||||||
|
* <b>Relationship between AutoSegment and TrackSegment</b>
|
||||||
|
*
|
||||||
|
* Figure 2 below, shows an example of dogleg creation:
|
||||||
|
* - At the Katabatic level, AutoSegment \c id:12 is broken. Thus
|
||||||
|
* the creation of AutoSegments \c id:20 and \c id:21. As per
|
||||||
|
* specification, the orignal segment \c id:10 remains on the
|
||||||
|
* left side (source) of the break.
|
||||||
|
* - But, because the canonical of the former aligned AutoSegment
|
||||||
|
* set \c (10,11,12,13,14) was on the \e right side of the break,
|
||||||
|
* the new parallel TrackSegment will be created on the \c left
|
||||||
|
* side, associated to the newly promoted canonical AutoSegment
|
||||||
|
* \c id:12.
|
||||||
|
*
|
||||||
|
* \image html _makeDogleg-10.png "Fig 2: Dogleg Management"
|
||||||
|
*
|
||||||
|
* The TrackSegment::_postDoglegs() method called by all flavors of
|
||||||
|
* TrackSegment::makeDogleg() methods is responsible for creating new
|
||||||
|
* TrackSegments for the new doglegs (there may be more than one), it
|
||||||
|
* also update the dogleg level and source/target dogleg flags.
|
||||||
|
*
|
||||||
|
* \redB{This section is not finished.} I need to review the parent and
|
||||||
|
* doglevel numbering management. There seems to be a risk of infinite
|
||||||
|
* fragmentation as the numbering of the original segment is not
|
||||||
|
* increased, we should create a \e break counter separate from
|
||||||
|
* deepness.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* \section secWeakGlobal Global, Weak Global and Local Segments
|
||||||
|
*
|
||||||
|
* There's a slight semantic change between Katabatic and Kite about
|
||||||
|
* what is local and what is local. This is due to how we consider the
|
||||||
|
* intermediate status of \e WeakGlobal.
|
||||||
|
*
|
||||||
|
* A \c WeakGlobal segment is a local segment which is aligned with a
|
||||||
|
* global (though a VTee or an HTee contact).
|
||||||
|
*
|
||||||
|
* In Katabatic a local segment is one that is not \c Global, a local segment
|
||||||
|
* can be both \c Local and \c WeakGlobal.
|
||||||
|
*
|
||||||
|
* In Kite a local segment is one that is neither \c Global or \c WeakGlobal.
|
||||||
|
* The \c WeakGlobal sides with \c Global unlike in Katabatic.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* \function void TrackSegment::autoInvalidate ();
|
//! \function static TrackSegment* TrackSegment::create ( AutoSegment* segment, Track* track, bool& created );
|
||||||
* add \e this TrackSegment to the Kite level update Session.
|
//! \param segment The Katabatic AutoSegment to decorate.
|
||||||
* Something maybe buggy here, or at least not very clean.
|
//! \param track A Track into which insert the TrackSegment (may be \NULL).
|
||||||
*/
|
//! \param created This flag is sets is a new TrackSegment has be created.
|
||||||
|
//! \return A TrackSegment wrapped around an AutoSegment.
|
||||||
|
//!
|
||||||
|
//! Constructor mainly used at loading time to decorate the Katabatic
|
||||||
|
//! data-base with the router attributes.
|
||||||
|
|
||||||
/* \function void TrackSegment::refreshCanonical ();
|
//! \function unsigned long TrackElement::getFreedomDegree() const;
|
||||||
* Recompute the letfmost & rightmost position of the collapsed set.
|
//! \sreturn The degree of freedom of the element. It is used as a priority value
|
||||||
* Must be done after each modification of the TrackSegment.
|
//! when sorting TrackElement (in RoutingEvent).
|
||||||
* Dealt by the TrackSession mechanism.
|
//!
|
||||||
*
|
//! Currently, it is the \e slack of the Katabatic::AutoSegment.
|
||||||
*/
|
|
||||||
|
|
||||||
// \}
|
//! \function void TrackSegment::revalidate ();
|
||||||
|
//! Actualize the TrackSegment characteristics from the supporting
|
||||||
|
//! elements (set of AutoSegment).
|
||||||
|
//!
|
||||||
|
//! This method do not update the DataNegociate or the RoutingEvent.
|
||||||
|
//! This is a lazy update delayed until the constructor of SegmentFsm is called.
|
||||||
|
//! (see \ref secTSLazyRevalidate "Lazy Revalidate").
|
||||||
|
|
||||||
|
//! \function TrackSegment* TrackSegment::_postDoglegs ( TrackElement*& perpandicular, TrackElement*& parallel );
|
||||||
|
//! Post-process to be called inside the various dogleg creation or slacken
|
||||||
|
//! methods. Iterate through the newly created AutoSegments to create, for
|
||||||
|
//! the <em>perpandicular</em> and the <em>new parallel</em> associateds
|
||||||
|
//! TrackSegments. Also sets the dogleg levels and flags of the newly
|
||||||
|
//! created elements.
|
||||||
|
//!
|
||||||
|
//! The session dogleg reset is called at the end of this method. The \c perpandicular
|
||||||
|
//! and \c parallel references to pointers contains the newly created segments
|
||||||
|
//! for the \b last dogleg. If more than one was created, you cannot access them
|
||||||
|
//! (the need has not arised yet).
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,798 +0,0 @@
|
||||||
%%
|
|
||||||
%% This is file `book.cls',
|
|
||||||
%% generated with the docstrip utility.
|
|
||||||
%%
|
|
||||||
%% The original source files were:
|
|
||||||
%%
|
|
||||||
%% classes.dtx (with options: `book')
|
|
||||||
%%
|
|
||||||
%% This is a generated file.
|
|
||||||
%%
|
|
||||||
%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001
|
|
||||||
%% The LaTeX3 Project and any individual authors listed elsewhere
|
|
||||||
%% in this file.
|
|
||||||
%%
|
|
||||||
%% This file was generated from file(s) of the LaTeX base system.
|
|
||||||
%% --------------------------------------------------------------
|
|
||||||
%%
|
|
||||||
%% It may be distributed and/or modified under the
|
|
||||||
%% conditions of the LaTeX Project Public License, either version 1.2
|
|
||||||
%% of this license or (at your option) any later version.
|
|
||||||
%% The latest version of this license is in
|
|
||||||
%% http://www.latex-project.org/lppl.txt
|
|
||||||
%% and version 1.2 or later is part of all distributions of LaTeX
|
|
||||||
%% version 1999/12/01 or later.
|
|
||||||
%%
|
|
||||||
%% This file may only be distributed together with a copy of the LaTeX
|
|
||||||
%% base system. You may however distribute the LaTeX base system without
|
|
||||||
%% such generated files.
|
|
||||||
%%
|
|
||||||
%% The list of all files belonging to the LaTeX base distribution is
|
|
||||||
%% given in the file `manifest.txt'. See also `legal.txt' for additional
|
|
||||||
%% information.
|
|
||||||
%%
|
|
||||||
%% \CharacterTable
|
|
||||||
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
|
|
||||||
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
|
|
||||||
%% Digits \0\1\2\3\4\5\6\7\8\9
|
|
||||||
%% Exclamation \! Double quote \" Hash (number) \#
|
|
||||||
%% Dollar \$ Percent \% Ampersand \&
|
|
||||||
%% Acute accent \' Left paren \( Right paren \)
|
|
||||||
%% Asterisk \* Plus \+ Comma \,
|
|
||||||
%% Minus \- Point \. Solidus \/
|
|
||||||
%% Colon \: Semicolon \; Less than \<
|
|
||||||
%% Equals \= Greater than \> Question mark \?
|
|
||||||
%% Commercial at \@ Left bracket \[ Backslash \\
|
|
||||||
%% Right bracket \] Circumflex \^ Underscore \_
|
|
||||||
%% Grave accent \` Left brace \{ Vertical bar \|
|
|
||||||
%% Right brace \} Tilde \~}
|
|
||||||
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
|
||||||
\ProvidesClass{asimbook}
|
|
||||||
[2005/11/21 v1.0
|
|
||||||
ASIM LaTeX document class]
|
|
||||||
\newcommand\@ptsize{}
|
|
||||||
\newif\if@restonecol
|
|
||||||
\newif\if@titlepage
|
|
||||||
\@titlepagetrue
|
|
||||||
\newif\if@openright
|
|
||||||
\newif\if@mainmatter \@mainmattertrue
|
|
||||||
\if@compatibility\else
|
|
||||||
\DeclareOption{a4paper}
|
|
||||||
{\setlength\paperheight {297mm}%
|
|
||||||
\setlength\paperwidth {210mm}}
|
|
||||||
\DeclareOption{a5paper}
|
|
||||||
{\setlength\paperheight {210mm}%
|
|
||||||
\setlength\paperwidth {148mm}}
|
|
||||||
\DeclareOption{b5paper}
|
|
||||||
{\setlength\paperheight {250mm}%
|
|
||||||
\setlength\paperwidth {176mm}}
|
|
||||||
\DeclareOption{letterpaper}
|
|
||||||
{\setlength\paperheight {11in}%
|
|
||||||
\setlength\paperwidth {8.5in}}
|
|
||||||
\DeclareOption{legalpaper}
|
|
||||||
{\setlength\paperheight {14in}%
|
|
||||||
\setlength\paperwidth {8.5in}}
|
|
||||||
\DeclareOption{executivepaper}
|
|
||||||
{\setlength\paperheight {10.5in}%
|
|
||||||
\setlength\paperwidth {7.25in}}
|
|
||||||
\DeclareOption{landscape}
|
|
||||||
{\setlength\@tempdima {\paperheight}%
|
|
||||||
\setlength\paperheight {\paperwidth}%
|
|
||||||
\setlength\paperwidth {\@tempdima}}
|
|
||||||
\fi
|
|
||||||
\if@compatibility
|
|
||||||
\renewcommand\@ptsize{0}
|
|
||||||
\else
|
|
||||||
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
|
|
||||||
\fi
|
|
||||||
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
|
||||||
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
|
||||||
\if@compatibility\else
|
|
||||||
\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
|
|
||||||
\fi
|
|
||||||
\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
|
|
||||||
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
|
|
||||||
\if@compatibility\else
|
|
||||||
\DeclareOption{final}{\setlength\overfullrule{0pt}}
|
|
||||||
\fi
|
|
||||||
\DeclareOption{titlepage}{\@titlepagetrue}
|
|
||||||
\if@compatibility\else
|
|
||||||
\DeclareOption{notitlepage}{\@titlepagefalse}
|
|
||||||
\fi
|
|
||||||
\if@compatibility
|
|
||||||
\@openrighttrue
|
|
||||||
\else
|
|
||||||
\DeclareOption{openright}{\@openrighttrue}
|
|
||||||
\DeclareOption{openany}{\@openrightfalse}
|
|
||||||
\fi
|
|
||||||
\if@compatibility\else
|
|
||||||
\DeclareOption{onecolumn}{\@twocolumnfalse}
|
|
||||||
\fi
|
|
||||||
\DeclareOption{twocolumn}{\@twocolumntrue}
|
|
||||||
\DeclareOption{leqno}{\input{leqno.clo}}
|
|
||||||
\DeclareOption{fleqn}{\input{fleqn.clo}}
|
|
||||||
\DeclareOption{openbib}{%
|
|
||||||
\AtEndOfPackage{%
|
|
||||||
\renewcommand\@openbib@code{%
|
|
||||||
\advance\leftmargin\bibindent
|
|
||||||
\itemindent -\bibindent
|
|
||||||
\listparindent \itemindent
|
|
||||||
\parsep \z@
|
|
||||||
}%
|
|
||||||
\renewcommand\newblock{\par}}%
|
|
||||||
}
|
|
||||||
\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright}
|
|
||||||
\ProcessOptions
|
|
||||||
\input{bk1\@ptsize.clo}
|
|
||||||
\setlength\lineskip{1\p@}
|
|
||||||
\setlength\normallineskip{1\p@}
|
|
||||||
\renewcommand\baselinestretch{}
|
|
||||||
\setlength\parskip{0\p@ \@plus \p@}
|
|
||||||
\@lowpenalty 51
|
|
||||||
\@medpenalty 151
|
|
||||||
\@highpenalty 301
|
|
||||||
\setcounter{topnumber}{2}
|
|
||||||
\renewcommand\topfraction{.7}
|
|
||||||
\setcounter{bottomnumber}{1}
|
|
||||||
\renewcommand\bottomfraction{.3}
|
|
||||||
\setcounter{totalnumber}{3}
|
|
||||||
\renewcommand\textfraction{.2}
|
|
||||||
\renewcommand\floatpagefraction{.5}
|
|
||||||
\setcounter{dbltopnumber}{2}
|
|
||||||
\renewcommand\dbltopfraction{.7}
|
|
||||||
\renewcommand\dblfloatpagefraction{.5}
|
|
||||||
%%%% Select Chapter font.
|
|
||||||
\newcommand \textchapter [1] {\textsf{\textbf{#1}}}
|
|
||||||
\newcommand \fontchapter {\sffamily \bfseries}
|
|
||||||
\if@twoside
|
|
||||||
\def\ps@headings{%
|
|
||||||
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
|
||||||
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
|
||||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
||||||
\let\@mkboth\markboth
|
|
||||||
\def\chaptermark##1{%
|
|
||||||
\markboth {\MakeUppercase{%
|
|
||||||
\ifnum \c@secnumdepth >\m@ne
|
|
||||||
\if@mainmatter
|
|
||||||
\@chapapp\ \thechapter. \ %
|
|
||||||
\fi
|
|
||||||
\fi
|
|
||||||
##1}}{}}%
|
|
||||||
\def\sectionmark##1{%
|
|
||||||
\markright {\MakeUppercase{%
|
|
||||||
\ifnum \c@secnumdepth >\z@
|
|
||||||
\thesection. \ %
|
|
||||||
\fi
|
|
||||||
##1}}}}
|
|
||||||
\else
|
|
||||||
\def\ps@headings{%
|
|
||||||
\let\@oddfoot\@empty
|
|
||||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
||||||
\let\@mkboth\markboth
|
|
||||||
\def\chaptermark##1{%
|
|
||||||
\markright {\MakeUppercase{%
|
|
||||||
\ifnum \c@secnumdepth >\m@ne
|
|
||||||
\if@mainmatter
|
|
||||||
\@chapapp\ \thechapter. \ %
|
|
||||||
\fi
|
|
||||||
\fi
|
|
||||||
##1}}}}
|
|
||||||
\fi
|
|
||||||
\def\ps@myheadings{%
|
|
||||||
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
|
||||||
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
|
||||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
||||||
\let\@mkboth\@gobbletwo
|
|
||||||
\let\chaptermark\@gobble
|
|
||||||
\let\sectionmark\@gobble
|
|
||||||
}
|
|
||||||
\if@titlepage
|
|
||||||
\newcommand\maketitle{\begin{titlepage}%
|
|
||||||
\let\footnotesize\small
|
|
||||||
\let\footnoterule\relax
|
|
||||||
\let \footnote \thanks
|
|
||||||
\null\vfil
|
|
||||||
\vskip 60\p@
|
|
||||||
\begin{center}%
|
|
||||||
{\LARGE \@title \par}%
|
|
||||||
\vskip 3em%
|
|
||||||
{\large
|
|
||||||
\lineskip .75em%
|
|
||||||
\begin{tabular}[t]{c}%
|
|
||||||
\@author
|
|
||||||
\end{tabular}\par}%
|
|
||||||
\vskip 1.5em%
|
|
||||||
{\large \@date \par}% % Set date in \large size.
|
|
||||||
\end{center}\par
|
|
||||||
\@thanks
|
|
||||||
\vfil\null
|
|
||||||
\end{titlepage}%
|
|
||||||
\setcounter{footnote}{0}%
|
|
||||||
\global\let\thanks\relax
|
|
||||||
\global\let\maketitle\relax
|
|
||||||
\global\let\@thanks\@empty
|
|
||||||
\global\let\@author\@empty
|
|
||||||
\global\let\@date\@empty
|
|
||||||
\global\let\@title\@empty
|
|
||||||
\global\let\title\relax
|
|
||||||
\global\let\author\relax
|
|
||||||
\global\let\date\relax
|
|
||||||
\global\let\and\relax
|
|
||||||
}
|
|
||||||
\else
|
|
||||||
\newcommand\maketitle{\par
|
|
||||||
\begingroup
|
|
||||||
\renewcommand\thefootnote{\@fnsymbol\c@footnote}%
|
|
||||||
\def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
|
|
||||||
\long\def\@makefntext##1{\parindent 1em\noindent
|
|
||||||
\hb@xt@1.8em{%
|
|
||||||
\hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
|
|
||||||
\if@twocolumn
|
|
||||||
\ifnum \col@number=\@ne
|
|
||||||
\@maketitle
|
|
||||||
\else
|
|
||||||
\twocolumn[\@maketitle]%
|
|
||||||
\fi
|
|
||||||
\else
|
|
||||||
\newpage
|
|
||||||
\global\@topnum\z@ % Prevents figures from going at top of page.
|
|
||||||
\@maketitle
|
|
||||||
\fi
|
|
||||||
\thispagestyle{plain}\@thanks
|
|
||||||
\endgroup
|
|
||||||
\setcounter{footnote}{0}%
|
|
||||||
\global\let\thanks\relax
|
|
||||||
\global\let\maketitle\relax
|
|
||||||
\global\let\@maketitle\relax
|
|
||||||
\global\let\@thanks\@empty
|
|
||||||
\global\let\@author\@empty
|
|
||||||
\global\let\@date\@empty
|
|
||||||
\global\let\@title\@empty
|
|
||||||
\global\let\title\relax
|
|
||||||
\global\let\author\relax
|
|
||||||
\global\let\date\relax
|
|
||||||
\global\let\and\relax
|
|
||||||
}
|
|
||||||
\def\@maketitle{%
|
|
||||||
\newpage
|
|
||||||
\null
|
|
||||||
\vskip 2em%
|
|
||||||
\begin{center}%
|
|
||||||
\let \footnote \thanks
|
|
||||||
{\LARGE \@title \par}%
|
|
||||||
\vskip 1.5em%
|
|
||||||
{\large
|
|
||||||
\lineskip .5em%
|
|
||||||
\begin{tabular}[t]{c}%
|
|
||||||
\@author
|
|
||||||
\end{tabular}\par}%
|
|
||||||
\vskip 1em%
|
|
||||||
{\large \@date}%
|
|
||||||
\end{center}%
|
|
||||||
\par
|
|
||||||
\vskip 1.5em}
|
|
||||||
\fi
|
|
||||||
\newcommand*\chaptermark[1]{}
|
|
||||||
\setcounter{secnumdepth}{2}
|
|
||||||
\newcounter {part}
|
|
||||||
\newcounter {chapter}
|
|
||||||
\newcounter {section}[chapter]
|
|
||||||
\newcounter {subsection}[section]
|
|
||||||
\newcounter {subsubsection}[subsection]
|
|
||||||
\newcounter {paragraph}[subsubsection]
|
|
||||||
\newcounter {subparagraph}[paragraph]
|
|
||||||
\renewcommand \thepart {\@Roman\c@part}
|
|
||||||
\renewcommand \thechapter {\@arabic\c@chapter}
|
|
||||||
\renewcommand \thesection {\thechapter.\@arabic\c@section}
|
|
||||||
\renewcommand\thesubsection {\thesection.\@arabic\c@subsection}
|
|
||||||
\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection}
|
|
||||||
\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}
|
|
||||||
\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}
|
|
||||||
\newcommand\@chapapp{\chaptername}
|
|
||||||
\newcommand\frontmatter{%
|
|
||||||
\cleardoublepage
|
|
||||||
\@mainmatterfalse
|
|
||||||
\pagenumbering{roman}}
|
|
||||||
\newcommand\mainmatter{%
|
|
||||||
\cleardoublepage
|
|
||||||
\@mainmattertrue
|
|
||||||
\pagenumbering{arabic}}
|
|
||||||
\newcommand\backmatter{%
|
|
||||||
\if@openright
|
|
||||||
\cleardoublepage
|
|
||||||
\else
|
|
||||||
\clearpage
|
|
||||||
\fi
|
|
||||||
\@mainmatterfalse}
|
|
||||||
\newcommand\part{%
|
|
||||||
\if@openright
|
|
||||||
\cleardoublepage
|
|
||||||
\else
|
|
||||||
\clearpage
|
|
||||||
\fi
|
|
||||||
\thispagestyle{plain}%
|
|
||||||
\if@twocolumn
|
|
||||||
\onecolumn
|
|
||||||
\@tempswatrue
|
|
||||||
\else
|
|
||||||
\@tempswafalse
|
|
||||||
\fi
|
|
||||||
\null\vfil
|
|
||||||
\secdef\@part\@spart}
|
|
||||||
|
|
||||||
\def\@part[#1]#2{%
|
|
||||||
\ifnum \c@secnumdepth >-2\relax
|
|
||||||
\refstepcounter{part}%
|
|
||||||
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
|
|
||||||
\else
|
|
||||||
\addcontentsline{toc}{part}{#1}%
|
|
||||||
\fi
|
|
||||||
\markboth{}{}%
|
|
||||||
{\centering
|
|
||||||
\interlinepenalty \@M
|
|
||||||
\normalfont
|
|
||||||
\ifnum \c@secnumdepth >-2\relax
|
|
||||||
\huge\bfseries \partname\nobreakspace\thepart
|
|
||||||
\par
|
|
||||||
\vskip 20\p@
|
|
||||||
\fi
|
|
||||||
\Huge \bfseries #2\par}%
|
|
||||||
\@endpart}
|
|
||||||
\def\@spart#1{%
|
|
||||||
{\centering
|
|
||||||
\interlinepenalty \@M
|
|
||||||
\normalfont
|
|
||||||
\Huge \bfseries #1\par}%
|
|
||||||
\@endpart}
|
|
||||||
\def\@endpart{\vfil\newpage
|
|
||||||
\if@twoside
|
|
||||||
\if@openright
|
|
||||||
\null
|
|
||||||
\thispagestyle{empty}%
|
|
||||||
\newpage
|
|
||||||
\fi
|
|
||||||
\fi
|
|
||||||
\if@tempswa
|
|
||||||
\twocolumn
|
|
||||||
\fi}
|
|
||||||
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
|
|
||||||
\thispagestyle{plain}%
|
|
||||||
\global\@topnum\z@
|
|
||||||
\@afterindentfalse
|
|
||||||
\secdef\@chapter\@schapter}
|
|
||||||
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
|
|
||||||
\if@mainmatter
|
|
||||||
\refstepcounter{chapter}%
|
|
||||||
\typeout{\@chapapp\space\thechapter.}%
|
|
||||||
\addcontentsline{toc}{chapter}%
|
|
||||||
{\protect\numberline{\thechapter}#1}%
|
|
||||||
\else
|
|
||||||
\addcontentsline{toc}{chapter}{#1}%
|
|
||||||
\fi
|
|
||||||
\else
|
|
||||||
\addcontentsline{toc}{chapter}{#1}%
|
|
||||||
\fi
|
|
||||||
\chaptermark{#1}%
|
|
||||||
\addtocontents{lof}{\protect\addvspace{10\p@}}%
|
|
||||||
\addtocontents{lot}{\protect\addvspace{10\p@}}%
|
|
||||||
\if@twocolumn
|
|
||||||
\@topnewpage[\@makechapterhead{#2}]%
|
|
||||||
\else
|
|
||||||
\@makechapterhead{#2}%
|
|
||||||
\@afterheading
|
|
||||||
\fi}
|
|
||||||
%%%%\def\@makechapterhead#1{%
|
|
||||||
%%%% \vspace*{50\p@}%
|
|
||||||
%%%% {\parindent \z@ \raggedright \normalfont
|
|
||||||
%%%% \ifnum \c@secnumdepth >\m@ne
|
|
||||||
%%%% \if@mainmatter
|
|
||||||
%%%% \huge\bfseries \@chapapp\space \thechapter
|
|
||||||
%%%% \par\nobreak
|
|
||||||
%%%% \vskip 20\p@
|
|
||||||
%%%% \fi
|
|
||||||
%%%% \fi
|
|
||||||
%%%% \interlinepenalty\@M
|
|
||||||
%%%% \Huge \bfseries #1\par\nobreak
|
|
||||||
%%%% \vskip 40\p@
|
|
||||||
%%%% }}
|
|
||||||
\newlength \titlewidth
|
|
||||||
\setlength \titlewidth {\textwidth}
|
|
||||||
\addtolength \titlewidth {\marginparwidth}
|
|
||||||
\addtolength \titlewidth {\marginparsep}
|
|
||||||
\def\@makechapterhead#1{%
|
|
||||||
\vspace*{50\p@}%
|
|
||||||
{\parindent \z@ \raggedleft \fontchapter
|
|
||||||
\ifnum \c@secnumdepth >\m@ne
|
|
||||||
\if@mainmatter
|
|
||||||
\huge \@chapapp\space \thechapter
|
|
||||||
\par\nobreak
|
|
||||||
\vskip 20\p@
|
|
||||||
\fi
|
|
||||||
\fi
|
|
||||||
\interlinepenalty\@M
|
|
||||||
\hsize=\titlewidth
|
|
||||||
\Huge #1 \par\nobreak
|
|
||||||
\hsize=\textwidth
|
|
||||||
\vskip 40\p@
|
|
||||||
}}
|
|
||||||
\def\@schapter#1{\if@twocolumn
|
|
||||||
\@topnewpage[\@makeschapterhead{#1}]%
|
|
||||||
\else
|
|
||||||
\@makeschapterhead{#1}%
|
|
||||||
\@afterheading
|
|
||||||
\fi}
|
|
||||||
%%%%\def\@makeschapterhead#1{%
|
|
||||||
%%%% \vspace*{50\p@}%
|
|
||||||
%%%% {\parindent \z@ \raggedright
|
|
||||||
%%%% \normalfont
|
|
||||||
%%%% \interlinepenalty\@M
|
|
||||||
%%%% \Huge \bfseries #1\par\nobreak
|
|
||||||
%%%% \vskip 40\p@
|
|
||||||
%%%% }}
|
|
||||||
\def\@makeschapterhead#1{%
|
|
||||||
\vspace*{50\p@}%
|
|
||||||
{\parindent \z@ \raggedright
|
|
||||||
\normalfont
|
|
||||||
\interlinepenalty\@M
|
|
||||||
\hsize=\titlewidth
|
|
||||||
\flushright
|
|
||||||
\Huge \bfseries #1\par\nobreak
|
|
||||||
\hsize=\textwidth
|
|
||||||
\vskip 40\p@
|
|
||||||
}}
|
|
||||||
\newcommand\section{\@startsection {section}{1}{\z@}%
|
|
||||||
{-3.5ex \@plus -1ex \@minus -.2ex}%
|
|
||||||
{2.3ex \@plus.2ex}%
|
|
||||||
{\normalfont\Large\bfseries}}
|
|
||||||
\newcommand\subsection{\@startsection{subsection}{2}{\z@}%
|
|
||||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
|
||||||
{1.5ex \@plus .2ex}%
|
|
||||||
{\normalfont\large\bfseries}}
|
|
||||||
\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
|
|
||||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
|
||||||
{1.5ex \@plus .2ex}%
|
|
||||||
{\normalfont\normalsize\bfseries}}
|
|
||||||
\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
|
|
||||||
{3.25ex \@plus1ex \@minus.2ex}%
|
|
||||||
{-1em}%
|
|
||||||
{\normalfont\normalsize\bfseries}}
|
|
||||||
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
|
|
||||||
{3.25ex \@plus1ex \@minus .2ex}%
|
|
||||||
{-1em}%
|
|
||||||
{\normalfont\normalsize\bfseries}}
|
|
||||||
\if@twocolumn
|
|
||||||
\setlength\leftmargini {2em}
|
|
||||||
\else
|
|
||||||
\setlength\leftmargini {2.5em}
|
|
||||||
\fi
|
|
||||||
\leftmargin \leftmargini
|
|
||||||
\setlength\leftmarginii {2.2em}
|
|
||||||
\setlength\leftmarginiii {1.87em}
|
|
||||||
\setlength\leftmarginiv {1.7em}
|
|
||||||
\if@twocolumn
|
|
||||||
\setlength\leftmarginv {.5em}
|
|
||||||
\setlength\leftmarginvi {.5em}
|
|
||||||
\else
|
|
||||||
\setlength\leftmarginv {1em}
|
|
||||||
\setlength\leftmarginvi {1em}
|
|
||||||
\fi
|
|
||||||
\setlength \labelsep {.5em}
|
|
||||||
\setlength \labelwidth{\leftmargini}
|
|
||||||
\addtolength\labelwidth{-\labelsep}
|
|
||||||
\@beginparpenalty -\@lowpenalty
|
|
||||||
\@endparpenalty -\@lowpenalty
|
|
||||||
\@itempenalty -\@lowpenalty
|
|
||||||
\renewcommand\theenumi{\@arabic\c@enumi}
|
|
||||||
\renewcommand\theenumii{\@alph\c@enumii}
|
|
||||||
\renewcommand\theenumiii{\@roman\c@enumiii}
|
|
||||||
\renewcommand\theenumiv{\@Alph\c@enumiv}
|
|
||||||
\newcommand\labelenumi{\theenumi.}
|
|
||||||
\newcommand\labelenumii{(\theenumii)}
|
|
||||||
\newcommand\labelenumiii{\theenumiii.}
|
|
||||||
\newcommand\labelenumiv{\theenumiv.}
|
|
||||||
\renewcommand\p@enumii{\theenumi}
|
|
||||||
\renewcommand\p@enumiii{\theenumi(\theenumii)}
|
|
||||||
\renewcommand\p@enumiv{\p@enumiii\theenumiii}
|
|
||||||
\newcommand\labelitemi{\textbullet}
|
|
||||||
\newcommand\labelitemii{\normalfont\bfseries \textendash}
|
|
||||||
\newcommand\labelitemiii{\textasteriskcentered}
|
|
||||||
\newcommand\labelitemiv{\textperiodcentered}
|
|
||||||
\newenvironment{description}
|
|
||||||
{\list{}{\labelwidth\z@ \itemindent-\leftmargin
|
|
||||||
\let\makelabel\descriptionlabel}}
|
|
||||||
{\endlist}
|
|
||||||
\newcommand*\descriptionlabel[1]{\hspace\labelsep
|
|
||||||
\normalfont\bfseries #1}
|
|
||||||
\newenvironment{verse}
|
|
||||||
{\let\\\@centercr
|
|
||||||
\list{}{\itemsep \z@
|
|
||||||
\itemindent -1.5em%
|
|
||||||
\listparindent\itemindent
|
|
||||||
\rightmargin \leftmargin
|
|
||||||
\advance\leftmargin 1.5em}%
|
|
||||||
\item\relax}
|
|
||||||
{\endlist}
|
|
||||||
\newenvironment{quotation}
|
|
||||||
{\list{}{\listparindent 1.5em%
|
|
||||||
\itemindent \listparindent
|
|
||||||
\rightmargin \leftmargin
|
|
||||||
\parsep \z@ \@plus\p@}%
|
|
||||||
\item\relax}
|
|
||||||
{\endlist}
|
|
||||||
\newenvironment{quote}
|
|
||||||
{\list{}{\rightmargin\leftmargin}%
|
|
||||||
\item\relax}
|
|
||||||
{\endlist}
|
|
||||||
\if@compatibility
|
|
||||||
\newenvironment{titlepage}
|
|
||||||
{%
|
|
||||||
\cleardoublepage
|
|
||||||
\if@twocolumn
|
|
||||||
\@restonecoltrue\onecolumn
|
|
||||||
\else
|
|
||||||
\@restonecolfalse\newpage
|
|
||||||
\fi
|
|
||||||
\thispagestyle{empty}%
|
|
||||||
\setcounter{page}\z@
|
|
||||||
}%
|
|
||||||
{\if@restonecol\twocolumn \else \newpage \fi
|
|
||||||
}
|
|
||||||
\else
|
|
||||||
\newenvironment{titlepage}
|
|
||||||
{%
|
|
||||||
\cleardoublepage
|
|
||||||
\if@twocolumn
|
|
||||||
\@restonecoltrue\onecolumn
|
|
||||||
\else
|
|
||||||
\@restonecolfalse\newpage
|
|
||||||
\fi
|
|
||||||
\thispagestyle{empty}%
|
|
||||||
\setcounter{page}\@ne
|
|
||||||
}%
|
|
||||||
{\if@restonecol\twocolumn \else \newpage \fi
|
|
||||||
\if@twoside\else
|
|
||||||
\setcounter{page}\@ne
|
|
||||||
\fi
|
|
||||||
}
|
|
||||||
\fi
|
|
||||||
\newcommand\appendix{\par
|
|
||||||
\setcounter{chapter}{0}%
|
|
||||||
\setcounter{section}{0}%
|
|
||||||
\gdef\@chapapp{\appendixname}%
|
|
||||||
\gdef\thechapter{\@Alph\c@chapter}}
|
|
||||||
\setlength\arraycolsep{5\p@}
|
|
||||||
\setlength\tabcolsep{6\p@}
|
|
||||||
\setlength\arrayrulewidth{.4\p@}
|
|
||||||
\setlength\doublerulesep{2\p@}
|
|
||||||
\setlength\tabbingsep{\labelsep}
|
|
||||||
\skip\@mpfootins = \skip\footins
|
|
||||||
\setlength\fboxsep{3\p@}
|
|
||||||
\setlength\fboxrule{.4\p@}
|
|
||||||
\@addtoreset {equation}{chapter}
|
|
||||||
\renewcommand\theequation
|
|
||||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}
|
|
||||||
\newcounter{figure}[chapter]
|
|
||||||
\renewcommand \thefigure
|
|
||||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure}
|
|
||||||
\def\fps@figure{tbp}
|
|
||||||
\def\ftype@figure{1}
|
|
||||||
\def\ext@figure{lof}
|
|
||||||
\def\fnum@figure{\figurename\nobreakspace\thefigure}
|
|
||||||
\newenvironment{figure}
|
|
||||||
{\@float{figure}}
|
|
||||||
{\end@float}
|
|
||||||
\newenvironment{figure*}
|
|
||||||
{\@dblfloat{figure}}
|
|
||||||
{\end@dblfloat}
|
|
||||||
\newcounter{table}[chapter]
|
|
||||||
\renewcommand \thetable
|
|
||||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table}
|
|
||||||
\def\fps@table{tbp}
|
|
||||||
\def\ftype@table{2}
|
|
||||||
\def\ext@table{lot}
|
|
||||||
\def\fnum@table{\tablename\nobreakspace\thetable}
|
|
||||||
\newenvironment{table}
|
|
||||||
{\@float{table}}
|
|
||||||
{\end@float}
|
|
||||||
\newenvironment{table*}
|
|
||||||
{\@dblfloat{table}}
|
|
||||||
{\end@dblfloat}
|
|
||||||
\newlength\abovecaptionskip
|
|
||||||
\newlength\belowcaptionskip
|
|
||||||
\setlength\abovecaptionskip{10\p@}
|
|
||||||
\setlength\belowcaptionskip{0\p@}
|
|
||||||
\long\def\@makecaption#1#2{%
|
|
||||||
\vskip\abovecaptionskip
|
|
||||||
\sbox\@tempboxa{#1: #2}%
|
|
||||||
\ifdim \wd\@tempboxa >\hsize
|
|
||||||
#1: #2\par
|
|
||||||
\else
|
|
||||||
\global \@minipagefalse
|
|
||||||
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
|
|
||||||
\fi
|
|
||||||
\vskip\belowcaptionskip}
|
|
||||||
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
|
|
||||||
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
|
|
||||||
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
|
|
||||||
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
|
|
||||||
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
|
|
||||||
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
|
|
||||||
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
|
|
||||||
\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
|
|
||||||
\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
|
|
||||||
\newcommand\@pnumwidth{1.55em}
|
|
||||||
\newcommand\@tocrmarg{2.55em}
|
|
||||||
\newcommand\@dotsep{4.5}
|
|
||||||
\setcounter{tocdepth}{2}
|
|
||||||
\newcommand\tableofcontents{%
|
|
||||||
\if@twocolumn
|
|
||||||
\@restonecoltrue\onecolumn
|
|
||||||
\else
|
|
||||||
\@restonecolfalse
|
|
||||||
\fi
|
|
||||||
\chapter*{\contentsname
|
|
||||||
\@mkboth{%
|
|
||||||
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
|
|
||||||
\@starttoc{toc}%
|
|
||||||
\if@restonecol\twocolumn\fi
|
|
||||||
}
|
|
||||||
\newcommand*\l@part[2]{%
|
|
||||||
\ifnum \c@tocdepth >-2\relax
|
|
||||||
\addpenalty{-\@highpenalty}%
|
|
||||||
\addvspace{2.25em \@plus\p@}%
|
|
||||||
\setlength\@tempdima{3em}%
|
|
||||||
\begingroup
|
|
||||||
\parindent \z@ \rightskip \@pnumwidth
|
|
||||||
\parfillskip -\@pnumwidth
|
|
||||||
{\leavevmode
|
|
||||||
\large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par
|
|
||||||
\nobreak
|
|
||||||
\global\@nobreaktrue
|
|
||||||
\everypar{\global\@nobreakfalse\everypar{}}%
|
|
||||||
\endgroup
|
|
||||||
\fi}
|
|
||||||
%%%%\newcommand*\l@chapter[2]{%
|
|
||||||
%%%% \ifnum \c@tocdepth >\m@ne
|
|
||||||
%%%% \addpenalty{-\@highpenalty}%
|
|
||||||
%%%% \vskip 1.0em \@plus\p@
|
|
||||||
%%%% \setlength\@tempdima{1.5em}%
|
|
||||||
%%%% \begingroup
|
|
||||||
%%%% \parindent \z@ \rightskip \@pnumwidth
|
|
||||||
%%%% \parfillskip -\@pnumwidth
|
|
||||||
%%%% \leavevmode \bfseries
|
|
||||||
%%%% \advance\leftskip\@tempdima
|
|
||||||
%%%% \hskip -\leftskip
|
|
||||||
%%%% #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
|
|
||||||
%%%% \penalty\@highpenalty
|
|
||||||
%%%% \endgroup
|
|
||||||
%%%% \fi}
|
|
||||||
\newcommand\l@chapter[2]{%
|
|
||||||
\ifnum \c@tocdepth >\m@ne
|
|
||||||
\addpenalty{-\@highpenalty}%
|
|
||||||
\vskip 1.0em \@plus\p@
|
|
||||||
\setlength\@tempdima{1.5em}%
|
|
||||||
\begingroup
|
|
||||||
\parindent \z@ \rightskip \@pnumwidth
|
|
||||||
\parfillskip -\@pnumwidth
|
|
||||||
\leavevmode \fontchapter
|
|
||||||
\advance\leftskip\@tempdima
|
|
||||||
\hskip -\leftskip
|
|
||||||
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
|
|
||||||
\penalty\@highpenalty
|
|
||||||
\endgroup
|
|
||||||
\fi}
|
|
||||||
\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
|
|
||||||
\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
|
|
||||||
\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
|
|
||||||
\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
|
|
||||||
\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
|
|
||||||
\newcommand\listoffigures{%
|
|
||||||
\if@twocolumn
|
|
||||||
\@restonecoltrue\onecolumn
|
|
||||||
\else
|
|
||||||
\@restonecolfalse
|
|
||||||
\fi
|
|
||||||
\chapter*{\listfigurename}%
|
|
||||||
\@mkboth{\MakeUppercase\listfigurename}%
|
|
||||||
{\MakeUppercase\listfigurename}%
|
|
||||||
\@starttoc{lof}%
|
|
||||||
\if@restonecol\twocolumn\fi
|
|
||||||
}
|
|
||||||
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
|
|
||||||
\newcommand\listoftables{%
|
|
||||||
\if@twocolumn
|
|
||||||
\@restonecoltrue\onecolumn
|
|
||||||
\else
|
|
||||||
\@restonecolfalse
|
|
||||||
\fi
|
|
||||||
\chapter*{\listtablename}%
|
|
||||||
\@mkboth{%
|
|
||||||
\MakeUppercase\listtablename}%
|
|
||||||
{\MakeUppercase\listtablename}%
|
|
||||||
\@starttoc{lot}%
|
|
||||||
\if@restonecol\twocolumn\fi
|
|
||||||
}
|
|
||||||
\let\l@table\l@figure
|
|
||||||
\newdimen\bibindent
|
|
||||||
\setlength\bibindent{1.5em}
|
|
||||||
\newenvironment{thebibliography}[1]
|
|
||||||
{\chapter*{\bibname}%
|
|
||||||
\@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
|
|
||||||
\list{\@biblabel{\@arabic\c@enumiv}}%
|
|
||||||
{\settowidth\labelwidth{\@biblabel{#1}}%
|
|
||||||
\leftmargin\labelwidth
|
|
||||||
\advance\leftmargin\labelsep
|
|
||||||
\@openbib@code
|
|
||||||
\usecounter{enumiv}%
|
|
||||||
\let\p@enumiv\@empty
|
|
||||||
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
|
|
||||||
\sloppy
|
|
||||||
\clubpenalty4000
|
|
||||||
\@clubpenalty \clubpenalty
|
|
||||||
\widowpenalty4000%
|
|
||||||
\sfcode`\.\@m}
|
|
||||||
{\def\@noitemerr
|
|
||||||
{\@latex@warning{Empty `thebibliography' environment}}%
|
|
||||||
\endlist}
|
|
||||||
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
|
|
||||||
\let\@openbib@code\@empty
|
|
||||||
\newenvironment{theindex}
|
|
||||||
{\if@twocolumn
|
|
||||||
\@restonecolfalse
|
|
||||||
\else
|
|
||||||
\@restonecoltrue
|
|
||||||
\fi
|
|
||||||
\columnseprule \z@
|
|
||||||
\columnsep 35\p@
|
|
||||||
\twocolumn[\@makeschapterhead{\indexname}]%
|
|
||||||
\@mkboth{\MakeUppercase\indexname}%
|
|
||||||
{\MakeUppercase\indexname}%
|
|
||||||
\thispagestyle{plain}\parindent\z@
|
|
||||||
\parskip\z@ \@plus .3\p@\relax
|
|
||||||
\let\item\@idxitem}
|
|
||||||
{\if@restonecol\onecolumn\else\clearpage\fi}
|
|
||||||
\newcommand\@idxitem{\par\hangindent 40\p@}
|
|
||||||
\newcommand\subitem{\@idxitem \hspace*{20\p@}}
|
|
||||||
\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
|
|
||||||
\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
|
|
||||||
\renewcommand\footnoterule{%
|
|
||||||
\kern-3\p@
|
|
||||||
\hrule\@width.4\columnwidth
|
|
||||||
\kern2.6\p@}
|
|
||||||
\@addtoreset{footnote}{chapter}
|
|
||||||
\newcommand\@makefntext[1]{%
|
|
||||||
\parindent 1em%
|
|
||||||
\noindent
|
|
||||||
\hb@xt@1.8em{\hss\@makefnmark}#1}
|
|
||||||
\newcommand\contentsname{Contents}
|
|
||||||
\newcommand\listfigurename{List of Figures}
|
|
||||||
\newcommand\listtablename{List of Tables}
|
|
||||||
\newcommand\bibname{Bibliography}
|
|
||||||
\newcommand\indexname{Index}
|
|
||||||
\newcommand\figurename{Figure}
|
|
||||||
\newcommand\tablename{Table}
|
|
||||||
\newcommand\partname{Part}
|
|
||||||
\newcommand\chaptername{Chapter}
|
|
||||||
\newcommand\appendixname{Appendix}
|
|
||||||
\def\today{\ifcase\month\or
|
|
||||||
January\or February\or March\or April\or May\or June\or
|
|
||||||
July\or August\or September\or October\or November\or December\fi
|
|
||||||
\space\number\day, \number\year}
|
|
||||||
\setlength\columnsep{10\p@}
|
|
||||||
\setlength\columnseprule{0\p@}
|
|
||||||
\pagestyle{headings}
|
|
||||||
\pagenumbering{arabic}
|
|
||||||
\if@twoside
|
|
||||||
\else
|
|
||||||
\raggedbottom
|
|
||||||
\fi
|
|
||||||
\if@twocolumn
|
|
||||||
\twocolumn
|
|
||||||
\sloppy
|
|
||||||
\flushbottom
|
|
||||||
\else
|
|
||||||
\onecolumn
|
|
||||||
\fi
|
|
||||||
\endinput
|
|
||||||
%%
|
|
||||||
%% End of file `book.cls'.
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- explicit-buffer-name: "doxyfile<kite/doc>" -*-
|
||||||
|
|
||||||
# Doxyfile 1.3.4
|
# Doxyfile 1.3.4
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
@ -24,7 +26,8 @@ TAB_SIZE = 2
|
||||||
ALIASES = "function=\fn"\
|
ALIASES = "function=\fn"\
|
||||||
"important=\par Important:\n"\
|
"important=\par Important:\n"\
|
||||||
"remark=\par Remark:\n"\
|
"remark=\par Remark:\n"\
|
||||||
"Return=<b>Returns:</b>"\
|
"sreturn=\b Returns:"\
|
||||||
|
"sa=<b>See also:</b> "\
|
||||||
"True=\b True"\
|
"True=\b True"\
|
||||||
"true=\b true"\
|
"true=\b true"\
|
||||||
"False=\b False"\
|
"False=\b False"\
|
||||||
|
@ -33,7 +36,7 @@ ALIASES = "function=\fn"\
|
||||||
"HORIZONTAL=\b HORIZONTAL"\
|
"HORIZONTAL=\b HORIZONTAL"\
|
||||||
"NULL=\c NULL"\
|
"NULL=\c NULL"\
|
||||||
"vector=\c vector"\
|
"vector=\c vector"\
|
||||||
"lower_bound=\c lower_bound"\
|
"lower_bound=\c lower_bound()"\
|
||||||
"Collection=\c Collection"\
|
"Collection=\c Collection"\
|
||||||
"Collections=\c Collections"\
|
"Collections=\c Collections"\
|
||||||
"Interval=\c Interval"\
|
"Interval=\c Interval"\
|
||||||
|
@ -72,7 +75,9 @@ ALIASES = "function=\fn"\
|
||||||
"Session=\c Session"\
|
"Session=\c Session"\
|
||||||
"Sessions=\c Sessions"\
|
"Sessions=\c Sessions"\
|
||||||
"Hurricane=<a href='../hurricane/Index.html'>Hurricane</a>"\
|
"Hurricane=<a href='../hurricane/Index.html'>Hurricane</a>"\
|
||||||
"STL=<a href='http://www.sgi.com/tech/stl/'>STL</a>"
|
"STL=<a href='http://www.sgi.com/tech/stl/'>STL</a>"\
|
||||||
|
"red{1}=<span class=\"red\">\1</span>" \
|
||||||
|
"redB{1}=<b><span class=\"red\">\1</span></b>"
|
||||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||||
OPTIMIZE_OUTPUT_JAVA = NO
|
OPTIMIZE_OUTPUT_JAVA = NO
|
||||||
SUBGROUPING = YES
|
SUBGROUPING = YES
|
||||||
|
@ -91,7 +96,7 @@ HIDE_FRIEND_COMPOUNDS = NO
|
||||||
HIDE_IN_BODY_DOCS = NO
|
HIDE_IN_BODY_DOCS = NO
|
||||||
INTERNAL_DOCS = NO
|
INTERNAL_DOCS = NO
|
||||||
CASE_SENSE_NAMES = YES
|
CASE_SENSE_NAMES = YES
|
||||||
HIDE_SCOPE_NAMES = NO
|
HIDE_SCOPE_NAMES = YES
|
||||||
SHOW_INCLUDE_FILES = YES
|
SHOW_INCLUDE_FILES = YES
|
||||||
INLINE_INFO = YES
|
INLINE_INFO = YES
|
||||||
SORT_MEMBER_DOCS = NO
|
SORT_MEMBER_DOCS = NO
|
||||||
|
@ -117,13 +122,30 @@ WARN_LOGFILE =
|
||||||
# Configuration options related to the input files
|
# Configuration options related to the input files
|
||||||
|
|
||||||
INPUT = \
|
INPUT = \
|
||||||
../src/kite/TrackSegment.h ../src/TrackSegment.cpp TrackSegment.dox \
|
../src/kite/Constants.h Constants.dox \
|
||||||
../src/kite/TrackSegmentCost.h ../src/TrackSegmentCost.cpp TrackSegmentCost.dox \
|
../src/kite/KiteEngine.h KiteEngine.dox \
|
||||||
../src/kite/Track.h ../src/Track.cpp Track.dox \
|
../src/kite/DataNegociate.h ../src/DataNegociate.cpp DataNegociate.dox \
|
||||||
../src/kite/TrackCost.h ../src/TrackCost.cpp TrackCost.dox \
|
../src/kite/TrackMarker.h ../src/TrackMarker.cpp TrackMarker.dox \
|
||||||
../src/kite/RoutingEvent.h ../src/RoutingEvent.cpp RoutingEvent.dox \
|
../src/kite/TrackElement.h ../src/TrackElement.cpp TrackElement.dox \
|
||||||
../src/kite/Session.h Session.dox \
|
../src/kite/TrackSegment.h ../src/TrackSegment.cpp TrackSegment.dox \
|
||||||
Kite.dox
|
../src/kite/TrackFixedSegment.h ../src/TrackFixedSegment.cpp TrackFixedSegment.dox \
|
||||||
|
../src/kite/Track.h ../src/Track.cpp Track.dox \
|
||||||
|
../src/kite/HorizontalTrack.h ../src/HorizontalTrack.cpp HorizontalTrack.dox \
|
||||||
|
../src/kite/VerticalTrack.h ../src/VerticalTrack.cpp VerticalTrack.dox \
|
||||||
|
../src/kite/RoutingPlane.h ../src/RoutingPlane.cpp RoutingPlane.dox \
|
||||||
|
../src/kite/Manipulator.h ../src/Manipulator.cpp Manipulator.dox \
|
||||||
|
../src/kite/SegmentFsm.h ../src/SegmentFsm.cpp SegmentFsm.dox \
|
||||||
|
../src/kite/RoutingEvent.h ../src/RoutingEvent.cpp RoutingEvent.dox \
|
||||||
|
../src/kite/RoutingEventQueue.h ../src/RoutingEventQueue.cpp RoutingEventQueue.dox \
|
||||||
|
../src/kite/RoutingEventLoop.h ../src/RoutingEventLoop.cpp RoutingEventLoop.dox \
|
||||||
|
../src/kite/RoutingEventHistory.h ../src/RoutingEventHistory.cpp RoutingEventHistory.dox \
|
||||||
|
../src/kite/NegociateWindow.h ../src/NegociateWindow.cpp NegociateWindow.dox \
|
||||||
|
../src/kite/Session.h Session.dox \
|
||||||
|
Kite.dox \
|
||||||
|
notes.dox
|
||||||
|
|
||||||
|
# ../src/kite/TrackSegmentCost.h ../src/TrackSegmentCost.cpp TrackSegmentCost.dox \
|
||||||
|
# ../src/kite/TrackCost.h ../src/TrackCost.cpp TrackCost.dox \
|
||||||
|
|
||||||
FILE_PATTERNS = *.h \
|
FILE_PATTERNS = *.h \
|
||||||
*.cpp \
|
*.cpp \
|
||||||
|
@ -166,7 +188,7 @@ HTML_OUTPUT = html
|
||||||
HTML_FILE_EXTENSION = .html
|
HTML_FILE_EXTENSION = .html
|
||||||
HTML_HEADER = header.html
|
HTML_HEADER = header.html
|
||||||
HTML_FOOTER = footer.html
|
HTML_FOOTER = footer.html
|
||||||
HTML_STYLESHEET = ASIM.css
|
HTML_STYLESHEET = SoC.css
|
||||||
HTML_ALIGN_MEMBERS = YES
|
HTML_ALIGN_MEMBERS = YES
|
||||||
GENERATE_HTMLHELP = NO
|
GENERATE_HTMLHELP = NO
|
||||||
CHM_FILE =
|
CHM_FILE =
|
||||||
|
@ -250,7 +272,7 @@ SKIP_FUNCTION_MACROS = YES
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# Configuration options related to external references
|
# Configuration options related to external references
|
||||||
|
|
||||||
TAGFILES = ../../../../hurricane/doc/hurricane/html/hurricane.tag=../hurricane \
|
TAGFILES = ../../hurricane/doc/hurricane/html/hurricane.tag=../hurricane \
|
||||||
../../katabatic/doc/html/katabatic.tag=../katabatic
|
../../katabatic/doc/html/katabatic.tag=../katabatic
|
||||||
GENERATE_TAGFILE = html/kite.tag
|
GENERATE_TAGFILE = html/kite.tag
|
||||||
ALLEXTERNALS = NO
|
ALLEXTERNALS = NO
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<table class="footer2">
|
<table class="footer2">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LFooter">Kite - Detailed Router</td>
|
<td class="LFooter">Kite - Detailed Router</td>
|
||||||
<td class="RFooter"><small>Copyright © 2008-2009 LIP6. All rights reserved</small></td>
|
<td class="RFooter"><small>Copyright © 2008-2013 UPMC. All rights reserved</small></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
|
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Kite - Detailed Router: Router Documentation</title>
|
<title>Kite - Detailed Router</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 class="header">Kite - Detailed Router</h1>
|
<h1 class="header">Kite - Detailed Router</h1>
|
||||||
<center class="header">
|
<center class="header">
|
||||||
<table class="header">
|
<table class="header">
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="index.html">Summary</a></td>
|
<td><a href="customSummary.html">Summary</a></td>
|
||||||
<td><a href="modules.html">Concepts</a></td>
|
|
||||||
<td><a href="namespaces.html">Namespaces</a></td>
|
<td><a href="namespaces.html">Namespaces</a></td>
|
||||||
<td><a href="hierarchy.html">Class Hierarchy</a></td>
|
<td><a href="customHierarchy.html">Class Hierarchy</a></td>
|
||||||
<td><a href="annotated.html">Classes</a></td>
|
<td><a href="annotated.html">Classes</a></td>
|
||||||
<td><a href="functions.html">Member Index</a></td>
|
<td><a href="functions.html">Member Index</a></td>
|
||||||
<!-- <td><a href="classes.html">Index2</a></td> -->
|
<!-- <td><a href="classes.html">Index2</a></td> -->
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 750 525 11400 1050
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 600 9900 600
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 11400 900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 900 4500 900
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 1500 825 a\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 975 [3]\001
|
||||||
|
-6
|
||||||
|
6 750 975 11400 1350
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1200 11400 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 1200 5100 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8100 1200 11100 1200
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 2100 1125 b\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 8100 1125 f\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 1275 [2]\001
|
||||||
|
-6
|
||||||
|
6 750 1275 11400 1650
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1500 11400 1500
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 1500 5700 1500
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7500 1500 10500 1500
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 2700 1425 c\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 7500 1425 e\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 1575 [1]\001
|
||||||
|
-6
|
||||||
|
6 750 1575 11400 1950
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1800 11400 1800
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6900 1800 9900 1800
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 6900 1725 d\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 1875 [0]\001
|
||||||
|
-6
|
||||||
|
6 750 2775 11400 4050
|
||||||
|
6 750 2775 11400 3150
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3000 11400 3000
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 3000 4500 3000
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 1500 2925 a\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 3075 [3]\001
|
||||||
|
-6
|
||||||
|
6 750 3075 11400 3450
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3300 11400 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 3300 5100 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8100 3300 11100 3300
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 2100 3225 b\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 8100 3225 f\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 3375 [2]\001
|
||||||
|
-6
|
||||||
|
6 750 3375 11400 3750
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3600 11400 3600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 3600 5700 3600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7575 3600 10575 3600
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 2700 3525 c\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 105 150 7575 3525 e\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 3675 [1]\001
|
||||||
|
-6
|
||||||
|
6 750 3675 11400 4050
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 11400 3900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6900 3900 9900 3900
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 150 6900 3825 d\001
|
||||||
|
4 0 4 50 -1 14 14 0.0000 4 150 150 2400 3825 g\001
|
||||||
|
4 2 0 50 -1 14 14 0.0000 4 180 450 1200 3975 [0]\001
|
||||||
|
-6
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2400 3900 6300 3900 6300 3000 9900 3000
|
||||||
|
-6
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
675 0 11700 0 11700 4500 675 4500 675 0
|
||||||
|
4 0 4 50 -1 14 14 0.0000 4 150 150 2400 525 g\001
|
After Width: | Height: | Size: 3.9 KiB |
|
@ -0,0 +1,89 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 5025 1425 7350 2175
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 1500 5100 1500 5100 2100 5175 2100
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7275 1500 7200 1500 7200 2100 7275 2100
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5100 1650 7200 1650 7200 1950 5100 1950 5100 1650
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 5475 1575 [-4]\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1800 9300 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
2400 600 2400 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3675 600 3600 600 3600 1200 3675 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5475 600 5400 600 5400 1200 5475 1200
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3600 750 5400 750 5400 1050 3600 1050 3600 750
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 900 5400 900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 2700 3300 2700 3300 3300 3375 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 2700 5100 2700 5100 3300 5175 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 3225 4500 3225 4500 2775 4575 2775
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 3225 7500 3225 7500 2775 7575 2775
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 2850 5100 2850 5100 3150 3300 3150 3300 2850
|
||||||
|
2 1 0 4 1 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 3000 7500 3000
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 9300 900
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4500 2925 7500 2925 7500 3075 4500 3075 4500 2925
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3000 9300 3000
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1575 3600 1500 3600 1500 4200 1575 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8775 3600 8700 3600 8700 4200 8775 4200
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 9300 3900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3975 3600 3900 3600 3900 4200 3975 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 3600 6000 3600 6000 4200 6075 4200
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1500 3750 3900 3750 3900 4050 1500 4050 1500 3750
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 3750 8700 3750 8700 4050 6000 4050 6000 3750
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 2250 6300 2250 6300 2550 6375 2550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 2250 1800 2250 1800 2550 1875 2550
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 2325 6300 2325 6300 2475 1800 2475 1800 2325
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 300 9600 300 9600 5700 900 5700 900 300
|
||||||
|
3 0 0 1 4 7 50 -1 -1 0.000 0 1 0 3
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
1800 2400 1500 2550 1500 3000
|
||||||
|
0.000 1.000 0.000
|
||||||
|
3 0 0 4 1 7 50 -1 -1 0.000 0 0 0 2
|
||||||
|
1200 5100 2700 5100
|
||||||
|
0.000 0.000
|
||||||
|
4 1 4 50 -1 14 12 1.5708 4 165 2160 2325 2250 perpandicular span\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 3975 675 [-3]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 3675 2775 [-1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 4800 2775 [-2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 1875 3675 [-5]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 6975 3675 [-6]\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 1500 4050 2250 conflicted\001
|
||||||
|
4 0 1 50 -1 14 14 0.0000 4 150 2100 3000 5100 UnionIntervals\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 6900 1200 5400 [-INDEX] index of the segment in event history\001
|
After Width: | Height: | Size: 7.0 KiB |
|
@ -0,0 +1,116 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1425 6825 5850 7575
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1575 6900 1500 6900 1500 7500 1575 7500
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 6900 3300 6900 3300 7500 3375 7500
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2775 7425 2700 7425 2700 6975 2775 6975
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 7425 5700 7425 5700 6975 5775 6975
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1500 7050 3300 7050 3300 7350 1500 7350 1500 7050
|
||||||
|
2 1 0 4 1 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 7200 5700 7200
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2700 7125 5700 7125 5700 7275 2700 7275 2700 7125
|
||||||
|
-6
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 2700 3300 2700 3300 3300 3375 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 2700 5100 2700 5100 3300 5175 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 3225 4500 3225 4500 2775 4575 2775
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 3225 7500 3225 7500 2775 7575 2775
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 2850 5100 2850 5100 3150 3300 3150 3300 2850
|
||||||
|
2 1 0 4 1 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 3000 7500 3000
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4500 2925 7500 2925 7500 3075 4500 3075 4500 2925
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3000 9600 3000
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 2250 6300 2250 6300 2550 6375 2550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 2250 1800 2250 1800 2550 1875 2550
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 2325 6300 2325 6300 2475 1800 2475 1800 2325
|
||||||
|
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 1800 3300 3900
|
||||||
|
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7500 1800 7500 3900
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 4050 1800 4050 1800 4350 1875 4350
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 4950 6300 4950 6300 5250 6375 5250
|
||||||
|
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 4200 3000 5100
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3225 4050 3150 4050 3150 4350 3225 4350
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2925 4950 2850 4950 2850 5250 2925 5250
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 4125 3150 4125 3150 4275 1800 4275 1800 4125
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2850 5025 6300 5025 6300 5175 2850 5175 2850 5025
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 7200 9600 7200
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 6450 6300 6450 6300 6750 6375 6750
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 6450 1800 6450 1800 6750 1875 6750
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 6525 6300 6525 6300 6675 1800 6675 1800 6525
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 8250 1800 8250 1800 8550 1875 8550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 9150 6300 9150 6300 9450 6375 9450
|
||||||
|
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 6000 1500 8100
|
||||||
|
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 6000 5700 8100
|
||||||
|
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 8400 6000 9300
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6225 8250 6150 8250 6150 8550 6225 8550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5925 9150 5850 9150 5850 9450 5925 9450
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 8325 6150 8325 6150 8475 1800 8475 1800 8325
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5850 9225 6300 9225 6300 9375 5850 9375 5850 9225
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 1500 9900 1500 9900 10200 900 10200 900 1500
|
||||||
|
3 0 0 1 4 7 50 -1 -1 0.000 0 1 0 3
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
1800 2400 1500 2550 1500 3000
|
||||||
|
0.000 1.000 0.000
|
||||||
|
3 0 0 1 4 7 60 -1 -1 0.000 0 1 0 4
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
3300 2325 2700 3000 2700 3900 3000 4500
|
||||||
|
0.000 1.000 1.000 0.000
|
||||||
|
3 0 0 1 4 7 60 -1 -1 0.000 0 1 0 4
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
5700 6525 5100 7200 5100 8100 6000 8850
|
||||||
|
0.000 1.000 1.000 0.000
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 1500 4050 2250 conflicted\001
|
||||||
|
4 0 4 60 -1 12 14 0.0000 4 195 1800 3375 3900 sourceDogleg\001
|
||||||
|
4 0 4 60 -1 12 14 0.0000 4 195 1800 7575 3900 targetDogleg\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1650 3375 1950 minConflict\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1650 7575 1950 maxConflict\001
|
||||||
|
4 1 0 50 -1 14 16 0.0000 4 210 3960 4500 5700 (a) - Break under Source\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 1500 4050 6450 conflicted\001
|
||||||
|
4 0 4 60 -1 12 14 0.0000 4 195 1800 1575 8100 sourceDogleg\001
|
||||||
|
4 0 4 60 -1 12 14 0.0000 4 195 1800 5775 8100 targetDogleg\001
|
||||||
|
4 1 0 50 -1 14 16 0.0000 4 225 3960 4425 9900 (b) - Break under Target\001
|
After Width: | Height: | Size: 9.3 KiB |
|
@ -0,0 +1,93 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1725 2100 6450 2625
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 2250 6300 2250 6300 2550 6375 2550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 2250 1800 2250 1800 2550 1875 2550
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 2325 6300 2325 6300 2475 1800 2475 1800 2325
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 1500 4050 2250 conflicted\001
|
||||||
|
-6
|
||||||
|
6 5025 1425 7350 2175
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 1500 5100 1500 5100 2100 5175 2100
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7275 1500 7200 1500 7200 2100 7275 2100
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5100 1650 7200 1650 7200 1950 5100 1950 5100 1650
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 5475 1575 [-4]\001
|
||||||
|
-6
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
15000 -300 24900 -300 24900 12300 15000 12300 15000 -300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
13800 1800 13800 300
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1800 9300 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
2400 600 2400 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3675 600 3600 600 3600 1200 3675 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5475 600 5400 600 5400 1200 5475 1200
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3600 750 5400 750 5400 1050 3600 1050 3600 750
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 900 5400 900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 2700 3300 2700 3300 3300 3375 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 2700 5100 2700 5100 3300 5175 3300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 3225 4500 3225 4500 2775 4575 2775
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 3225 7500 3225 7500 2775 7575 2775
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 2850 5100 2850 5100 3150 3300 3150 3300 2850
|
||||||
|
2 1 0 4 1 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 3000 7500 3000
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 9300 900
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4500 2925 7500 2925 7500 3075 4500 3075 4500 2925
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3000 9300 3000
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1575 3600 1500 3600 1500 4200 1575 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8775 3600 8700 3600 8700 4200 8775 4200
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 9300 3900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3975 3600 3900 3600 3900 4200 3975 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 3600 6000 3600 6000 4200 6075 4200
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1500 3750 3900 3750 3900 4050 1500 4050 1500 3750
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 3750 8700 3750 8700 4050 6000 4050 6000 3750
|
||||||
|
3 0 0 1 4 7 50 -1 -1 0.000 0 1 0 3
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
1800 2400 1500 2550 1500 3000
|
||||||
|
0.000 1.000 0.000
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 2160 12750 -675 BeforeFirstElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 13200 -1200 Pos\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 1800 4800 -750 EndIsSegmentMin\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 2100 -1200 begin:0\001
|
||||||
|
4 1 4 50 -1 14 12 1.5708 4 165 2160 2325 2250 perpandicular span\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 3975 675 [-3]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 3675 2775 [-1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 4800 2775 [-2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 1875 3675 [-5]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 600 6975 3675 [-6]\001
|
|
@ -0,0 +1,145 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 5625 1575 7050 2025
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 1650 5700 1650 5700 1950 5775 1950
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5700 1725 6900 1725 6900 1875 5700 1875 5700 1725
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6975 1650 6900 1650 6900 1950 6975 1950
|
||||||
|
-6
|
||||||
|
6 3225 1575 4650 2025
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 1650 3300 1650 3300 1950 3375 1950
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 1725 4500 1725 4500 1875 3300 1875 3300 1725
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 1650 4500 1650 4500 1950 4575 1950
|
||||||
|
-6
|
||||||
|
6 3225 675 5850 1125
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 750 3300 750 3300 1050 3375 1050
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 750 5700 750 5700 1050 5775 1050
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 825 5700 825 5700 975 3300 975 3300 825
|
||||||
|
-6
|
||||||
|
6 3225 2775 4650 3225
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 2850 3300 2850 3300 3150 3375 3150
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 2925 4500 2925 4500 3075 3300 3075 3300 2925
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 2850 4500 2850 4500 3150 4575 3150
|
||||||
|
-6
|
||||||
|
6 2625 3675 4050 4125
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2775 3750 2700 3750 2700 4050 2775 4050
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2700 3825 3900 3825 3900 3975 2700 3975 2700 3825
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3975 3750 3900 3750 3900 4050 3975 4050
|
||||||
|
-6
|
||||||
|
6 4425 3675 4950 4125
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 3750 4500 3750 4500 4050 4575 4050
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4500 3825 4800 3825 4800 3975 4500 3975 4500 3825
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4875 3750 4800 3750 4800 4050 4875 4050
|
||||||
|
-6
|
||||||
|
6 5625 3675 7050 4125
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 3750 5700 3750 5700 4050 5775 4050
|
||||||
|
2 2 0 0 0 0 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5700 3825 6900 3825 6900 3975 5700 3975 5700 3825
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6975 3750 6900 3750 6900 4050 6975 4050
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 1800 7800 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
2400 600 2400 4200
|
||||||
|
2 1 0 4 1 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 3000 7500 3000
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 7800 900
|
||||||
|
2 2 0 0 0 0 70 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4500 2925 7500 2925 7500 3075 4500 3075 4500 2925
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3000 7800 3000
|
||||||
|
2 1 0 1 0 7 100 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 7800 3900
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6375 2250 6300 2250 6300 2550 6375 2550
|
||||||
|
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 2250 1800 2250 1800 2550 1875 2550
|
||||||
|
2 2 0 0 0 4 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 2325 6300 2325 6300 2475 1800 2475 1800 2325
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 2850 5100 2850 5100 3150 5175 3150
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 2850 7500 2850 7500 3150 7575 3150
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 900 5700 900
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 1800 4500 1800
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 1800 6900 1800
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 3900 3900 3900
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 3900 6900 3900
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1800 600 1800 4800
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6300 600 6300 4800
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
1800 4725 6300 4725
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8100 -1500 8100 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8700 -1500 8700 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9300 -1500 9300 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8100 600 9300 600
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 -1800 9600 -1800 9600 6000 900 6000 900 -1800
|
||||||
|
3 0 0 4 1 7 50 -1 -1 0.000 0 0 0 2
|
||||||
|
1200 5700 2700 5700
|
||||||
|
0.000 0.000
|
||||||
|
4 1 4 50 -1 14 12 1.5708 4 165 2160 2325 2250 perpandicular span\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 1500 4050 2250 conflicted\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 4650 4200 L\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 3300 4200 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 6300 4200 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 3900 3300 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 6000 3300 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 4500 750 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 6300 1650 G\001
|
||||||
|
4 1 0 50 -1 12 14 0.0000 4 135 150 3900 1650 G\001
|
||||||
|
4 0 1 50 -1 14 14 0.0000 4 150 4200 2775 5700 accounted conflict intervals\001
|
||||||
|
4 1 4 50 -1 12 12 0.0000 4 165 3000 3900 4650 conflict span (begin,end)\001
|
||||||
|
4 0 0 50 -1 14 12 1.5708 4 120 1800 9075 450 Candidate Order\001
|
||||||
|
4 0 0 50 -1 14 12 1.5708 4 150 1680 8475 375 Track Id/Index\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 8400 3975 [0]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 8400 975 [3]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 8400 1875 [2]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 8400 3075 [1]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 120 9000 3075 0\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 120 9000 975 1\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 120 9000 1875 2\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 120 9000 3975 3\001
|
After Width: | Height: | Size: 8.9 KiB |
|
@ -0,0 +1,145 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 2475 975 2925 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
2550 1200 2850 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
2700 1050 2700 1200
|
||||||
|
-6
|
||||||
|
6 3225 1125 3675 1425
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
3300 1200 3600 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
3450 1350 3450 1200
|
||||||
|
-6
|
||||||
|
6 4125 975 4575 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
4200 1200 4500 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
4350 1050 4350 1200
|
||||||
|
-6
|
||||||
|
6 5175 975 5475 1425
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
5400 1350 5400 1050
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5250 1200 5400 1200
|
||||||
|
-6
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 3
|
||||||
|
1800 1200 1650 1200 1650 1350
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
2700 1200 2700 300
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
3450 1200 3450 1800
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
4350 1200 4350 600
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
5400 1200 5400 1800
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
5400 1200 5400 0
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1650 1950 1650 2250
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1500 2100 1650 2100
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 2100 1650 2850
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
1725 2850 6300 2850
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
4425 600 6300 600
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
2775 300 6300 300
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
5475 0 6300 0
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 1650 2100
|
||||||
|
2 1 3 1 4 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
1725 2100 6300 2100
|
||||||
|
2 1 0 2 0 7 70 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 2700 1200
|
||||||
|
2 1 0 2 0 7 70 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
3450 1200 5400 1200
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 0 6300 0
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 300 6300 300
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 600 6300 600
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 1800 6300 1800
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 2850 6300 2850
|
||||||
|
2 1 0 2 4 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 2100 6300 2100
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
1650 2700 1650 2850 1500 2850
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
2550 300 2700 300 2700 450
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
4200 600 4350 600 4350 750
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
5250 0 5400 0 5400 150
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
3450 1650 3450 1800 3300 1800
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
5400 1650 5400 1800 5550 1800
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 1 0 2
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
1200 3150 1200 -600
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 2850 1275 2850
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 2100 1275 2100
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 1200 1275 1200
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 300 1275 300
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 0 1275 0
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 600 1275 600
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 1800 1275 1800
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
5475 1200 6300 1200
|
||||||
|
2 1 0 2 0 7 69 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6000 1200 6300 1200
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
3525 1800 6300 1800
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6900 -450 7200 -450
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6900 150 7200 150
|
||||||
|
2 2 1 0 32 32 100 -1 20 2.000 0 0 -1 0 0 5
|
||||||
|
600 -900 8850 -900 8850 3750 600 3750 600 -900
|
||||||
|
2 2 0 2 0 0 50 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6900 -225 7200 -225 7200 -150 6900 -150 6900 -225
|
||||||
|
2 2 0 2 0 7 50 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2700 1200 3450 1200 3450 1275 2700 1275 2700 1200
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 105 210 6150 2775 -1\001
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 105 210 6150 1725 -2\001
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 105 210 6150 525 +1\001
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 105 210 6150 -75 +1\001
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 105 210 6150 225 +1\001
|
||||||
|
4 1 4 60 -1 14 10 0.0000 4 105 105 6150 2025 0\001
|
||||||
|
4 2 0 60 -1 14 12 0.0000 4 135 120 1050 -450 y\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 0 29\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 300 27\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 600 25\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 1200 21\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 2100 15\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 2850 10\001
|
||||||
|
4 1 0 60 -1 14 12 0.0000 4 150 3360 3750 3450 _attractors=[10,17,25,27,29]\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 1800 17\001
|
||||||
|
4 1 0 60 -1 14 10 0.0000 4 135 315 6150 1125 N/A\001
|
||||||
|
4 1 0 60 -1 14 12 0.0000 4 165 480 6150 -450 spin\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 135 840 7275 -450 aligneds\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 105 945 7275 -150 canonical\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 135 1470 7275 150 perpandiculars\001
|
After Width: | Height: | Size: 7.1 KiB |
|
@ -0,0 +1,164 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 2475 975 2925 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
2550 1200 2850 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
2700 1050 2700 1200
|
||||||
|
-6
|
||||||
|
6 3225 1125 3675 1425
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
3300 1200 3600 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
3450 1350 3450 1200
|
||||||
|
-6
|
||||||
|
6 4125 975 4575 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
4200 1200 4500 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
4350 1050 4350 1200
|
||||||
|
-6
|
||||||
|
6 5175 975 5475 1425
|
||||||
|
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
||||||
|
5400 1350 5400 1050
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5250 1200 5400 1200
|
||||||
|
-6
|
||||||
|
6 6150 3000 7650 3300
|
||||||
|
3 0 0 1 0 7 50 -1 -1 4.000 0 0 0 4
|
||||||
|
6150 3000 6150 3150 6900 3150 6900 3300
|
||||||
|
0.000 1.000 1.000 0.000
|
||||||
|
3 0 0 1 0 7 50 -1 -1 4.000 0 0 0 4
|
||||||
|
7650 3000 7650 3150 6900 3150 6900 3300
|
||||||
|
0.000 1.000 1.000 0.000
|
||||||
|
-6
|
||||||
|
6 4725 3375 8700 3675
|
||||||
|
6 6000 3375 8700 3675
|
||||||
|
4 0 0 50 -1 32 14 0.0000 4 195 225 6225 3600 S(\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 45 150 6000 3600 =\001
|
||||||
|
4 0 0 50 -1 12 12 0.0000 4 150 2160 6450 3600 |axis - attractor|\001
|
||||||
|
4 0 0 50 -1 32 14 0.0000 4 195 75 8625 3600 )\001
|
||||||
|
-6
|
||||||
|
4 1 0 50 -1 14 10 0.0000 4 135 1155 5325 3600 wiringDelta\001
|
||||||
|
-6
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 3
|
||||||
|
1800 1200 1650 1200 1650 1350
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
2700 1200 2700 300
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
3450 1200 3450 1800
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
4350 1200 4350 600
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
5400 1200 5400 1800
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
5400 1200 5400 0
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1650 1950 1650 2250
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1500 2100 1650 2100
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 2100 1650 2850
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 1650 2100
|
||||||
|
2 1 0 2 0 7 70 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 2700 1200
|
||||||
|
2 1 0 2 0 7 70 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
3450 1200 5400 1200
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
1650 2700 1650 2850 1500 2850
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
2550 300 2700 300 2700 450
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
4200 600 4350 600 4350 750
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
5250 0 5400 0 5400 150
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
3450 1650 3450 1800 3300 1800
|
||||||
|
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
5400 1650 5400 1800 5550 1800
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 1 0 2
|
||||||
|
0 0 2.00 120.00 240.00
|
||||||
|
1200 3150 1200 -600
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 2850 1275 2850
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 2100 1275 2100
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 1200 1275 1200
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 300 1275 300
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 0 1275 0
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 600 1275 600
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
1125 1800 1275 1800
|
||||||
|
2 2 0 2 0 7 50 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2700 1200 3450 1200 3450 1275 2700 1275 2700 1200
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
1725 2850 6525 2850
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
3525 1800 6525 1800
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
5475 1200 6675 1200
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
4425 600 6825 600
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
2775 300 6975 300
|
||||||
|
2 1 3 1 0 7 70 -1 -1 4.000 0 0 7 0 0 2
|
||||||
|
5475 0 7125 0
|
||||||
|
2 1 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6300 2250 7350 2250
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6450 2250 6450 1800
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6450 2250 6450 2850
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6600 2250 6600 1200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6750 2250 6750 600
|
||||||
|
2 1 0 2 4 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
7950 150 8250 150
|
||||||
|
2 2 0 2 0 7 50 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7950 -225 8250 -225 8250 -150 7950 -150 7950 -225
|
||||||
|
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
7950 -450 8250 -450
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6900 300 6900 2250
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
7050 0 7050 2250
|
||||||
|
2 2 1 0 32 32 100 -1 20 2.000 0 0 -1 0 0 5
|
||||||
|
600 -900 10050 -900 10050 3900 600 3900 600 -900
|
||||||
|
4 2 0 60 -1 14 12 0.0000 4 135 120 1050 -450 y\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 0 29\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 300 27\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 600 25\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 1200 21\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 2100 15\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 2850 10\001
|
||||||
|
4 2 0 60 -1 14 10 0.0000 4 105 210 1050 1800 17\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 135 1470 8400 150 perpandiculars\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 105 945 8400 -150 canonical\001
|
||||||
|
4 0 0 60 -1 14 10 0.0000 4 135 840 8400 -450 aligneds\001
|
||||||
|
4 0 0 50 -1 14 10 0.0000 4 105 420 7500 2250 axis\001
|
After Width: | Height: | Size: 7.7 KiB |
|
@ -0,0 +1,158 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1200 1200 2625 1500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 2100 1200 2100 1500 1200 1500 1200 1200
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 1425 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 1425 d:7\001
|
||||||
|
-6
|
||||||
|
6 1200 6900 2625 7200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 6900 2100 6900 2100 7200 1200 7200 1200 6900
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 7125 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 7125 d:7\001
|
||||||
|
-6
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 2700 75 75 5025 2700 5175 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 8100 2700 75 75 8025 2700 8175 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 6000 75 75 5025 6000 5175 6000
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 8100 6000 75 75 8025 6000 8175 6000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 1200 3000 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 1200 4800 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 1200 6600 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 1200 8400 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 1200 10200 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 1200 12000 3000
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 900 7200 900
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 1200 3900 1200 3900 1500 3000 1500 3000 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 1200 5700 1200 5700 1500 4800 1500 4800 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 1200 7500 1200 7500 1500 6600 1500 6600 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 1200 9300 1200 9300 1500 8400 1500 8400 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 1200 11100 1200 11100 1500 10200 1500 10200 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 1200 12900 1200 12900 1500 12000 1500 12000 1200
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 2400 12600 2400
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 13800 1200 13800 3000 1200 3000 1200 1200
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 825 5400 2700
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
7200 825 7200 2700
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
5100 2700 5100 3600
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
8100 2700 8100 3600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
2400 7200 2400 7425 3000 7425
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
1650 7275 1650 7725 3000 7725
|
||||||
|
2 2 0 0 1 1 110 -1 30 2.000 0 0 -1 0 0 5
|
||||||
|
5100 4125 5400 4125 5400 6000 5100 6000 5100 4125
|
||||||
|
2 2 0 0 1 1 110 -1 30 2.000 0 0 -1 0 0 5
|
||||||
|
7200 4125 7500 4125 7500 6000 7200 6000 7200 4125
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 4500 3000 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 4500 4800 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 4500 6600 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 4500 8400 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 4500 10200 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 4500 12000 6300
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 4200 7200 4200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 2100 4500 2100 4800 1200 4800 1200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 4500 3900 4500 3900 4800 3000 4800 3000 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 4500 5700 4500 5700 4800 4800 4800 4800 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 4500 7500 4500 7500 4800 6600 4800 6600 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 4500 9300 4500 9300 4800 8400 4800 8400 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 4500 11100 4500 11100 4800 10200 4800 10200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 4500 12900 4500 12900 4800 12000 4800 12000 4500
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 5700 5100 5700
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 13800 4500 13800 6300 1200 6300 1200 4500
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 4125 5400 6000
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
7200 4125 7200 6000
|
||||||
|
2 1 0 4 19 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5100 5700 5100 5100 7500 5100 7500 5700 12600 5700
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
4875 5700 5100 5700 5100 5475
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
5100 5325 5100 5100 5250 5100
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
7275 5100 7500 5100 7500 5250
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
7500 5475 7500 5700 7725 5700
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
600 300 14400 300 14400 8100 600 8100 600 300
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 1425 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 1425 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 1425 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 1425 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 1425 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 1425 id:16\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1800 8250 3600 imaxconflict\001
|
||||||
|
4 2 0 50 -1 12 14 0.0000 4 150 1800 5025 3600 iminconflict\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 6300 750 interval\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 1425 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 1425 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 1425 d:7\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 1950 3075 7500 GCell density\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 1200 3075 7800 GCell id\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 4725 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 4725 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 4725 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 4725 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 4725 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 4725 id:16\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 4725 id:10\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 6300 4050 interval\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 4725 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 4725 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 4725 d:7\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 4800 5250 (b)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 6300 5325 (c)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 7800 5250 (d)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 12375 5550 (e)\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 5550 (a)\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 2250 (a)\001
|
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,163 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1200 1200 2625 1500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 2100 1200 2100 1500 1200 1500 1200 1200
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 1425 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 1425 d:7\001
|
||||||
|
-6
|
||||||
|
6 1200 6900 2625 7200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 6900 2100 6900 2100 7200 1200 7200 1200 6900
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 7125 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 7125 d:7\001
|
||||||
|
-6
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 6000 75 75 5025 6000 5175 6000
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 2700 75 75 5025 2700 5175 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 8100 2700 75 75 8025 2700 8175 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 10500 2700 75 75 10425 2700 10575 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 10500 6000 75 75 10425 6000 10575 6000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 4500 3000 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 4500 4800 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 4500 6600 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 4500 8400 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 4500 10200 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 4500 12000 6300
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 4200 7200 4200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 2100 4500 2100 4800 1200 4800 1200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 4500 3900 4500 3900 4800 3000 4800 3000 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 4500 5700 4500 5700 4800 4800 4800 4800 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 4500 7500 4500 7500 4800 6600 4800 6600 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 4500 9300 4500 9300 4800 8400 4800 8400 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 4500 11100 4500 11100 4800 10200 4800 10200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 4500 12900 4500 12900 4800 12000 4800 12000 4500
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 5700 5100 5700
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 13800 4500 13800 6300 1200 6300 1200 4500
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 4125 5400 6000
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
7200 4125 7200 6000
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
4875 5700 5100 5700 5100 5475
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
5100 5325 5100 5100 5250 5100
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 1200 3000 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 1200 4800 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 1200 6600 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 1200 8400 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 1200 10200 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 1200 12000 3000
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 900 7200 900
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 1200 3900 1200 3900 1500 3000 1500 3000 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 1200 5700 1200 5700 1500 4800 1500 4800 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 1200 7500 1200 7500 1500 6600 1500 6600 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 1200 9300 1200 9300 1500 8400 1500 8400 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 1200 11100 1200 11100 1500 10200 1500 10200 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 1200 12900 1200 12900 1500 12000 1500 12000 1200
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 2400 12600 2400
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 13800 1200 13800 3000 1200 3000 1200 1200
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 825 5400 2700
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
7200 825 7200 2700
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
5100 2700 5100 3600
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
10500 2700 10500 3600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
2400 7200 2400 7425 2925 7425
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
1650 7200 1650 7725 2925 7725
|
||||||
|
2 2 0 0 1 1 110 -1 36 2.000 0 0 -1 0 0 5
|
||||||
|
5100 4125 5400 4125 5400 6000 5100 6000 5100 4125
|
||||||
|
2 2 0 0 1 1 110 -1 36 2.000 0 0 -1 0 0 5
|
||||||
|
7200 4125 7500 4125 7500 6000 7200 6000 7200 4125
|
||||||
|
2 1 0 4 19 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
||||||
|
5100 5700 5100 5100 11100 5100 11100 5700 12600 5700
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
10875 5100 11100 5100 11100 5250
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
11100 5475 11100 5700 11325 5700
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
600 300 14400 300 14400 8100 600 8100 600 300
|
||||||
|
3 0 0 1 0 7 50 -1 -1 4.000 0 1 0 4
|
||||||
|
0 0 1.00 120.00 240.00
|
||||||
|
8100 2700 8700 2400 9900 3000 10500 2700
|
||||||
|
0.000 1.000 1.000 0.000
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 4725 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 4725 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 4725 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 4725 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 4725 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 4725 id:16\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 4725 id:10\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 6300 4050 interval\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 4725 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 4725 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 4725 d:7\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 1425 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 1425 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 1425 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 1425 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 1425 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 1425 id:16\001
|
||||||
|
4 2 0 50 -1 12 14 0.0000 4 150 1800 5025 3600 iminconflict\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 6300 750 interval\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 1425 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 1425 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1800 10575 3600 imaxconflict\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 1950 3000 7500 GCell density\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 1200 3000 7800 GCell id\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 12450 5550 (e)\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 5550 (a)\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 2250 (a)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 4800 5250 (b)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 6000 5325 (c)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 11400 5250 (d)\001
|
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,152 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1200 1200 2625 1500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 2100 1200 2100 1500 1200 1500 1200 1200
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 1425 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 1425 d:7\001
|
||||||
|
-6
|
||||||
|
6 1200 6900 2625 7200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 6900 2100 6900 2100 7200 1200 7200 1200 6900
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 7125 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 7125 d:7\001
|
||||||
|
-6
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 6000 75 75 5025 6000 5175 6000
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 5100 2700 75 75 5025 2700 5175 2700
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 4500 3000 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 4500 4800 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 4500 6600 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 4500 8400 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 4500 10200 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 4500 12000 6300
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 4200 13500 4200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 2100 4500 2100 4800 1200 4800 1200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 4500 3900 4500 3900 4800 3000 4800 3000 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 4500 5700 4500 5700 4800 4800 4800 4800 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 4500 7500 4500 7500 4800 6600 4800 6600 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 4500 9300 4500 9300 4800 8400 4800 8400 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 4500 11100 4500 11100 4800 10200 4800 10200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 4500 12900 4500 12900 4800 12000 4800 12000 4500
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 5700 5100 5700
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 13800 4500 13800 6300 1200 6300 1200 4500
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 4125 5400 6000
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
4875 5700 5100 5700 5100 5475
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
5100 5325 5100 5100 5250 5100
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 1200 3000 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 1200 4800 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 1200 6600 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 1200 8400 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 1200 10200 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 1200 12000 3000
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
5400 900 13500 900
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 1200 3900 1200 3900 1500 3000 1500 3000 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 1200 5700 1200 5700 1500 4800 1500 4800 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 1200 7500 1200 7500 1500 6600 1500 6600 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 1200 9300 1200 9300 1500 8400 1500 8400 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 1200 11100 1200 11100 1500 10200 1500 10200 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 1200 12900 1200 12900 1500 12000 1500 12000 1200
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 2400 11400 2400
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 13800 1200 13800 3000 1200 3000 1200 1200
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
5400 825 5400 2700
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
5100 2700 5100 3600
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
10500 3300 10500 3600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
2400 7200 2400 7425 2925 7425
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
1650 7200 1650 7725 2925 7725
|
||||||
|
2 2 0 0 1 1 110 -1 36 2.000 0 0 -1 0 0 5
|
||||||
|
5100 4125 5400 4125 5400 6000 5100 6000 5100 4125
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
13500 825 13500 2700
|
||||||
|
2 1 0 1 0 1 50 -1 36 0.000 0 0 -1 0 0 2
|
||||||
|
10500 3525 12375 3525
|
||||||
|
2 1 0 4 19 7 50 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
5100 5700 5100 5100 12600 5100
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
13500 4125 13500 6000
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
600 300 14400 300 14400 8100 600 8100 600 300
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 4725 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 4725 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 4725 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 4725 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 4725 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 4725 id:16\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 4725 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 4725 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 4725 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 4725 d:7\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 1425 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 1425 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 1425 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 1425 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 1425 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 1425 id:16\001
|
||||||
|
4 2 0 50 -1 12 14 0.0000 4 150 1800 5025 3600 iminconflict\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 1425 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 1425 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1800 10575 3600 imaxconflict\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 1950 3000 7500 GCell density\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 1200 3000 7800 GCell id\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 5550 (a)\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 2250 (a)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 4800 5250 (b)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 6000 5325 (c)\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 9600 825 interval\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 6600 5700 7200 The only dogleg is the min, the axis must be\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 7050 5700 7500 pushed to the left to stay clear of <interval>.\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 9600 4125 interval\001
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,152 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1200 1200 2625 1500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 2100 1200 2100 1500 1200 1500 1200 1200
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 1425 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 1425 d:7\001
|
||||||
|
-6
|
||||||
|
6 1200 6900 2625 7200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 6900 2100 6900 2100 7200 1200 7200 1200 6900
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 7125 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 7125 d:7\001
|
||||||
|
-6
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 8700 2700 75 75 8625 2700 8775 2700
|
||||||
|
1 4 0 0 0 7 50 -1 0 2.000 1 0.0000 8700 6000 75 75 8625 6000 8775 6000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 4500 3000 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 4500 4800 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 4500 6600 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 4500 8400 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 4500 10200 6300
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 4500 12000 6300
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 2100 4500 2100 4800 1200 4800 1200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 4500 3900 4500 3900 4800 3000 4800 3000 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 4500 5700 4500 5700 4800 4800 4800 4800 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 4500 7500 4500 7500 4800 6600 4800 6600 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 4500 9300 4500 9300 4800 8400 4800 8400 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 4500 11100 4500 11100 4800 10200 4800 10200 4500
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 4500 12900 4500 12900 4800 12000 4800 12000 4500
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 4500 13800 4500 13800 6300 1200 6300 1200 4500
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3000 1200 3000 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4800 1200 4800 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
6600 1200 6600 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
8400 1200 8400 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
10200 1200 10200 3000
|
||||||
|
2 1 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
12000 1200 12000 3000
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
3000 1200 3900 1200 3900 1500 3000 1500 3000 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
4800 1200 5700 1200 5700 1500 4800 1500 4800 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
6600 1200 7500 1200 7500 1500 6600 1500 6600 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
8400 1200 9300 1200 9300 1500 8400 1500 8400 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
10200 1200 11100 1200 11100 1500 10200 1500 10200 1200
|
||||||
|
2 2 0 1 0 7 100 -1 0 4.000 0 0 -1 0 0 5
|
||||||
|
12000 1200 12900 1200 12900 1500 12000 1500 12000 1200
|
||||||
|
2 2 1 1 0 7 70 -1 -1 4.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 13800 1200 13800 3000 1200 3000 1200 1200
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
5100 2700 5100 3600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
2400 7200 2400 7425 2925 7425
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
|
||||||
|
1650 7200 1650 7725 2925 7725
|
||||||
|
2 1 0 4 19 7 50 -1 -1 10.000 0 0 -1 0 0 3
|
||||||
|
9900 5700 9900 5100 12600 5100
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
3300 2400 12900 2400
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
1500 825 1500 2700
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1500 900 9600 900
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
9600 825 9600 2700
|
||||||
|
2 1 0 2 0 7 80 -1 0 6.000 0 0 -1 0 0 2
|
||||||
|
8700 2700 8700 3600
|
||||||
|
2 1 0 1 0 1 50 -1 36 0.000 0 0 -1 0 0 2
|
||||||
|
3300 3525 5175 3525
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
1500 4125 1500 6000
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1500 4200 9600 4200
|
||||||
|
2 1 0 1 1 7 80 -1 0 4.000 0 0 -1 0 0 2
|
||||||
|
9600 4125 9600 6000
|
||||||
|
2 2 0 0 1 1 110 -1 36 2.000 0 0 -1 0 0 5
|
||||||
|
9600 4125 9900 4125 9900 6000 9600 6000 9600 4125
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
9900 5325 9900 5100 10050 5100
|
||||||
|
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
1800 5700 9900 5700
|
||||||
|
2 1 0 8 19 7 40 -1 -1 18.000 0 0 -1 0 0 3
|
||||||
|
9675 5700 9900 5700 9900 5475
|
||||||
|
2 2 0 0 0 32 200 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
600 300 14400 300 14400 8100 600 8100 600 300
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 4725 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 4725 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 4725 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 4725 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 4725 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 4725 id:16\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 1275 4725 id:10\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 4725 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 2175 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 4725 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 4725 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 4725 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 4725 d:7\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 3075 1425 id:11\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 4875 1425 id:12\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 6675 1425 id:13\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 8475 1425 id:14\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 10275 1425 id:15\001
|
||||||
|
4 0 7 50 -1 14 14 0.0000 4 150 750 12075 1425 id:16\001
|
||||||
|
4 2 0 50 -1 12 14 0.0000 4 150 1800 5025 3600 iminconflict\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 5775 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 3975 1425 d:6\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 11175 1425 d:3\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 12975 1425 d:7\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 7575 1425 d:5\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 450 9375 1425 d:7\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 1950 3000 7500 GCell density\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 1200 3000 7800 GCell id\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 1950 5550 (a)\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 6600 5700 7200 The only dogleg is the max, the axis must be\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 7200 5700 7500 pushed to the right to stay clear of <interval>.\001
|
||||||
|
4 1 4 50 -1 14 14 0.0000 4 195 450 3525 2250 (a)\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 5100 825 interval\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 150 1800 8775 3600 imaxconflict\001
|
||||||
|
4 1 1 50 -1 12 14 0.0000 4 150 1200 5100 4125 interval\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 12450 5325 (c)\001
|
||||||
|
4 1 19 50 -1 14 14 0.0000 4 195 450 9675 5250 (b)\001
|
After Width: | Height: | Size: 12 KiB |
|
@ -1,66 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 900 0 2700 4800
|
|
||||||
2 2 0 0 4 7 60 -1 45 0.000 0 0 7 0 0 5
|
|
||||||
1650 0 1950 0 1950 1800 1650 1800 1650 0
|
|
||||||
2 2 0 0 4 7 60 -1 45 0.000 0 0 7 0 0 5
|
|
||||||
1650 3000 1950 3000 1950 4800 1650 4800 1650 3000
|
|
||||||
2 2 0 0 7 4 60 -1 38 2.000 0 0 -1 0 0 5
|
|
||||||
1650 1800 1950 1800 1950 3000 1650 3000 1650 1800
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 180 1785 1800 1725 right axis weight\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 180 1680 1800 3225 left axis weight\001
|
|
||||||
-6
|
|
||||||
6 375 0 675 4800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
600 4800 600 3000
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
600 0 600 1800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 1800 600 3000
|
|
||||||
4 1 4 50 -1 14 12 1.5708 4 180 1470 525 4050 _perpandicular\001
|
|
||||||
-6
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 2400 6900 2400
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 900 6900 900
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 3300 6900 3300
|
|
||||||
2 2 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 5
|
|
||||||
3000 900 6900 900 6900 3300 3000 3300 3000 900
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7050 3300 8400 3300
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7050 900 8400 900
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7050 1500 7800 1500
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7125 2700 7800 2700
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
7725 1500 7725 2700
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
8325 900 8325 3300
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
6900 3000 300 3000
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
6900 1800 300 1800
|
|
||||||
2 2 0 0 0 7 55 -1 10 0.000 0 0 -1 0 0 5
|
|
||||||
3000 1500 6900 1500 6900 2700 3000 2700 3000 1500
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
2925 2325 3075 2325 3075 2475 2925 2475 2925 2325
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
6825 2325 6975 2325 6975 2475 6825 2475 6825 2325
|
|
||||||
4 1 0 50 -1 14 12 1.5708 4 180 840 7950 2100 _optimal\001
|
|
||||||
4 1 0 50 -1 14 12 1.5708 4 165 1155 8550 2100 _constraint\001
|
|
|
@ -1,46 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 3600 6600 3600
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
900 3600 2400 3600 2400 6300
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
6300 3600 4800 3600 4800 900
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
|
||||||
2700 900 2700 3600 4500 3600 4500 6300
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3300 1200 3300 1200 3600 900 3600 900 3300
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3300 6300 3300 6300 3600 6000 3600 6000 3300
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
2700 900 3000 900 3000 1200 2700 1200 2700 900
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 525 0 525 0 0
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 3150 0 3150 525 525 525 525 0
|
|
||||||
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2700 600 2700 6600
|
|
||||||
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4500 600 4500 6600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4800 600 4800 6600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2400 600 2400 6600
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
0 0 7200 0 7200 7200 0 7200 0 0
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 2400 3600 2400 3600 4800 1200 4800 1200 2400
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 3525 a\001
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 3525 b\001
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 2850 1125 c\001
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 1\001
|
|
||||||
4 0 0 50 -1 14 24 0.0000 4 240 2250 675 375 Free Track\001
|
|
|
@ -1,124 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
60.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 8925 825 9375 1275
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
9000 900 9300 900 9300 1200 9000 1200 9000 900
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 9150 1125 c\001
|
|
||||||
-6
|
|
||||||
6 825 3525 1275 3975
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3600 1200 3600 1200 3900 900 3900 900 3600
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 3825 a\001
|
|
||||||
-6
|
|
||||||
6 5925 3525 6375 3975
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3600 6300 3600 6300 3900 6000 3900 6000 3600
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 3825 b\001
|
|
||||||
-6
|
|
||||||
6 8025 3525 8475 3975
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8100 3600 8400 3600 8400 3900 8100 3900 8100 3600
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 8250 3825 a\001
|
|
||||||
-6
|
|
||||||
6 13125 3525 13575 3975
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
13200 3600 13500 3600 13500 3900 13200 3900 13200 3600
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 13350 3825 b\001
|
|
||||||
-6
|
|
||||||
6 1725 825 2175 1275
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1800 900 2100 900 2100 1200 1800 1200 1800 900
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 1950 1125 c\001
|
|
||||||
-6
|
|
||||||
6 4425 2475 5175 2925
|
|
||||||
1 4 0 2 0 7 45 -1 20 0.000 1 0.0000 4800 2700 75 75 4725 2700 4875 2700
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4500 2550 5100 2850
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
5100 2550 4500 2850
|
|
||||||
-6
|
|
||||||
1 4 0 2 0 7 45 -1 20 0.000 1 0.0000 2400 4800 75 75 2325 4800 2475 4800
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 3600 13800 3600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 3600 6600 3600
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
900 3600 2400 3600 2400 6300
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
2400 4800 1500 4800
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12600 600 12600 6600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12300 600 12300 6600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9300 6600 9300 600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5100 600 5100 6600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
2100 600 2100 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
4800 600 4800 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
2400 600 2400 6600
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 525 0 525 0 0
|
|
||||||
2 1 0 4 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
12000 2775 12000 900
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9600 600 9600 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12000 600 12000 6600
|
|
||||||
2 2 0 2 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 14400 0 14400 7800 0 7800 0 0
|
|
||||||
2 2 0 2 0 7 45 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 3525 0 3525 525 525 525 525 0
|
|
||||||
2 1 1 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 3
|
|
||||||
12525 3600 12525 2775 12000 2775
|
|
||||||
2 1 1 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9525 3600 9525 6300
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
8100 3600 9525 3600
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
12525 3600 13500 3600
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
9300 900 9300 3675
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
5100 3675 5100 6300
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
12300 3675 12300 6300
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2100 900 2100 3675
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
2100 3675 5100 3675
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9300 3675 12300 3675
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
6300 3600 4800 3600
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4800 3600 4800 900
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4725 900 4725 3600
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8400 2400 10800 2400 10800 4800 8400 4800 8400 2400
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
10800 2400 13200 2400 13200 4800 10800 4800 10800 2400
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 2400 3600 2400 3600 4800 1200 4800 1200 2400
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
11925 900 11925 2775
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
7800 2700 13800 2700
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 2\001
|
|
||||||
4 0 0 45 -1 14 24 0.0000 4 315 2700 675 375 Soft Overlap\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 255 5775 8400 6900 (a/vertical) is pushed to the left.\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 240 3795 8400 7200 (b/vertical) is broken.\001
|
|
|
@ -1,127 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
60.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 5925 3225 6375 3675
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3300 6300 3300 6300 3600 6000 3600 6000 3300
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 3525 b\001
|
|
||||||
-6
|
|
||||||
6 13125 3600 13575 4050
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
13200 3675 13500 3675 13500 3975 13200 3975 13200 3675
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 13350 3900 b\001
|
|
||||||
-6
|
|
||||||
6 1725 825 2175 1275
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1800 900 2100 900 2100 1200 1800 1200 1800 900
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 1950 1125 c\001
|
|
||||||
-6
|
|
||||||
6 8925 825 9375 1275
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
9000 900 9300 900 9300 1200 9000 1200 9000 900
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 9150 1125 c\001
|
|
||||||
-6
|
|
||||||
6 825 3150 1275 3600
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3225 1200 3225 1200 3525 900 3525 900 3225
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 3450 a\001
|
|
||||||
-6
|
|
||||||
6 1425 3225 1875 3975
|
|
||||||
1 4 0 2 0 7 45 -1 20 0.000 1 0.0000 1650 3600 75 75 1575 3600 1725 3600
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
1500 3300 1800 3900
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
1500 3900 1800 3300
|
|
||||||
-6
|
|
||||||
6 8025 3150 8475 3600
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8100 3225 8400 3225 8400 3525 8100 3525 8100 3225
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 8250 3450 a\001
|
|
||||||
-6
|
|
||||||
1 4 0 2 0 7 45 -1 20 0.000 1 0.0000 5400 3600 75 75 5325 3600 5475 3600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 3600 13800 3600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 3600 6600 3600
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
6300 3600 4800 3600 4800 900
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12300 600 12300 6600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9300 6600 9300 600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5100 600 5100 6600
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
2100 600 2100 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
4800 600 4800 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
2400 600 2400 6600
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 525 0 525 0 0
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
5400 3300 5400 4200
|
|
||||||
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
5400 3900 5400 3000
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9600 600 9600 6600
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9000 600 9000 6600
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 4500 13500 4500
|
|
||||||
2 2 0 2 0 7 45 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 3525 0 3525 525 525 525 525 0
|
|
||||||
2 2 0 2 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 14400 0 14400 7500 0 7500 0 0
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
12000 3675 12000 900
|
|
||||||
2 1 1 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
12000 3675 13500 3675
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
8925 3600 8100 3600
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
2100 900 2100 3675
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9300 900 9300 3750
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
5100 3675 5100 6300
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
12300 3750 12300 6300
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
2100 3675 5100 3675
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9300 3750 12300 3750
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9600 4575 9600 6300
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
900 3525 2400 3525
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
900 3600 2400 3600
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
2400 3600 2400 6300
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12000 600 12000 6600
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
8100 3525 8925 3525
|
|
||||||
2 1 1 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 3
|
|
||||||
8925 3600 8925 4575 9600 4575
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 2100 3600 2100 3600 4800 1200 4800 1200 2100
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 2100 6000 2100 6000 4800 3600 4800 3600 2100
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8400 2100 10800 2100 10800 4800 8400 4800 8400 2100
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
10800 2100 13200 2100 13200 4800 10800 4800 10800 2100
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 3\001
|
|
||||||
4 0 0 45 -1 14 24 0.0000 4 315 2700 675 375 Hard Overlap\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 240 4125 8400 6900 (a/horizontal) is broken.\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 255 4620 8400 7200 (b/horizontal) is dislodged.\001
|
|
|
@ -1,108 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 825 3825 1275 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3900 1200 3900 1200 4200 900 4200 900 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 4125 a\001
|
|
||||||
-6
|
|
||||||
6 5925 3825 6375 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3900 6300 3900 6300 4200 6000 4200 6000 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 4125 b\001
|
|
||||||
-6
|
|
||||||
6 13125 3825 13575 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
13200 3900 13500 3900 13500 4200 13200 4200 13200 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 13350 4125 b\001
|
|
||||||
-6
|
|
||||||
6 4125 1425 4575 1875
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
4200 1500 4500 1500 4500 1800 4200 1800 4200 1500
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 4350 1725 c\001
|
|
||||||
-6
|
|
||||||
6 4425 3900 4875 4650
|
|
||||||
1 4 0 2 4 7 45 -1 20 0.000 1 0.0000 4650 4275 75 75 4575 4275 4725 4275
|
|
||||||
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4500 3975 4800 4575
|
|
||||||
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4500 4575 4800 3975
|
|
||||||
-6
|
|
||||||
6 8025 3825 8475 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8100 3900 8400 3900 8400 4200 8100 4200 8100 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 8250 4125 a\001
|
|
||||||
-6
|
|
||||||
6 11325 1425 11775 1875
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
11400 1500 11700 1500 11700 1800 11400 1800 11400 1500
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 11550 1725 c\001
|
|
||||||
-6
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 4200 13800 4200
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 4200 6600 4200
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
900 4200 3900 4200 3900 6900
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
6300 4200 5100 4200 5100 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
13575 4200 12300 4200 12300 1500
|
|
||||||
2 2 0 2 0 7 45 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 3525 0 3525 825 525 825 525 0
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 825 0 825 0 0
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
8100 4200 11100 4200 11100 6900
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
0 0 14400 0 14400 8100 0 8100 0 0
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 3000 3600 3000 3600 5400 1200 5400 1200 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 3000 6000 3000 6000 5400 3600 5400 3600 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8400 3000 10800 3000 10800 5400 8400 5400 8400 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
10800 3000 13200 3000 13200 5400 10800 5400 10800 3000
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5400 1200 5400 7200
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
5400 4275 5400 6900
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5100 1200 5100 7200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
4200 1200 4200 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
3900 1200 3900 7200
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4200 1500 4200 4275
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4200 4275 5400 4275
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12600 1200 12600 7200
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
12600 5175 12600 6900
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
11400 4500 11400 1200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12000 1200 12000 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
11100 1200 11100 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12300 1200 12300 7200
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 4
|
|
||||||
11400 4275 11925 4275 11925 5175 12525 5175
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
11400 1500 11400 4275
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
7800 5100 13725 5100
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 4\001
|
|
||||||
4 0 0 45 -1 14 24 0.0000 4 240 2250 675 375 Self Relax\001
|
|
||||||
4 0 0 60 -1 12 18 0.0000 4 240 1650 675 675 Local only\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 240 4125 8700 7800 (c/horizontal) is broken.\001
|
|
|
@ -1,110 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
60.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 825 3825 1275 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3900 1200 3900 1200 4200 900 4200 900 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 4125 a\001
|
|
||||||
-6
|
|
||||||
6 5925 3825 6375 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3900 6300 3900 6300 4200 6000 4200 6000 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 4125 b\001
|
|
||||||
-6
|
|
||||||
6 13125 3825 13575 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
13200 3900 13500 3900 13500 4200 13200 4200 13200 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 13350 4125 b\001
|
|
||||||
-6
|
|
||||||
6 8025 3825 8475 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8100 3900 8400 3900 8400 4200 8100 4200 8100 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 8250 4125 a\001
|
|
||||||
-6
|
|
||||||
6 1725 1425 2175 1875
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1800 1500 2100 1500 2100 1800 1800 1800 1800 1500
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 1950 1725 c\001
|
|
||||||
-6
|
|
||||||
6 8925 1425 9375 1875
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
9000 1500 9300 1500 9300 1800 9000 1800 9000 1500
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 9150 1725 c\001
|
|
||||||
-6
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 4200 13800 4200
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
900 4200 3900 4200 3900 6900
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
6300 4200 5100 4200 5100 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
13575 4200 12300 4200 12300 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
8100 4200 11100 4200 11100 6900
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
0 0 14400 0 14400 8100 0 8100 0 0
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 3000 3600 3000 3600 5400 1200 5400 1200 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 3000 6000 3000 6000 5400 3600 5400 3600 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8400 3000 10800 3000 10800 5400 8400 5400 8400 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
10800 3000 13200 3000 13200 5400 10800 5400 10800 3000
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5100 1200 5100 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
11100 1200 11100 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12300 1200 12300 7200
|
|
||||||
2 2 0 2 0 7 45 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 4500 0 4500 600 525 600 525 0
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 600 0 600 0 0
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
3900 1200 3900 7200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
1800 1200 1800 7200
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 4200 6600 4200
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
1800 1500 1800 4275
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
4800 1200 4800 7200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
4200 1200 4200 7200
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
4800 4275 4800 6900
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
1800 4275 4800 4275
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4200 1500 4200 4275
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
4125 4200 4275 4200 4275 4350 4125 4350 4125 4200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
9000 7200 9000 1200
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
11400 1200 11400 7200
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
11400 1500 11400 4275
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9000 1500 9000 3975
|
|
||||||
2 1 0 1 4 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12000 1200 12000 7200
|
|
||||||
2 1 0 4 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
12000 4275 12000 6900
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
11400 4275 12000 4275
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9000 3975 11325 3975
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
11325 3825 11475 3825 11475 4350 11325 4350 11325 3825
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 5\001
|
|
||||||
4 0 0 45 -1 14 24 0.0000 4 315 3600 675 375 Self Desalignate\001
|
|
||||||
4 0 0 50 -1 14 20 0.0000 4 255 4950 8400 7800 (c/horizontal) is desalignate.\001
|
|
|
@ -1,96 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
60.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 825 3825 1275 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
900 3900 1200 3900 1200 4200 900 4200 900 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 1050 4125 a\001
|
|
||||||
-6
|
|
||||||
6 5925 3825 6375 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
6000 3900 6300 3900 6300 4200 6000 4200 6000 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 6150 4125 b\001
|
|
||||||
-6
|
|
||||||
6 13125 3825 13575 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
13200 3900 13500 3900 13500 4200 13200 4200 13200 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 180 165 13350 4125 b\001
|
|
||||||
-6
|
|
||||||
6 8025 3825 8475 4275
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8100 3900 8400 3900 8400 4200 8100 4200 8100 3900
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 135 165 8250 4125 a\001
|
|
||||||
-6
|
|
||||||
6 1575 2325 2025 2775
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1650 2400 1950 2400 1950 2700 1650 2700 1650 2400
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 1800 2625 c\001
|
|
||||||
-6
|
|
||||||
6 8925 2325 9375 2775
|
|
||||||
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
9000 2400 9300 2400 9300 2700 9000 2700 9000 2400
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 135 165 9150 2625 c\001
|
|
||||||
-6
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7800 4200 13800 4200
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
900 4200 3900 4200 3900 6900
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
6300 4200 5100 4200 5100 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
13575 4200 12300 4200 12300 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
|
|
||||||
8100 4200 11100 4200 11100 6900
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
0 0 14400 0 14400 8100 0 8100 0 0
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1200 3000 3600 3000 3600 5400 1200 5400 1200 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
3600 3000 6000 3000 6000 5400 3600 5400 3600 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
8400 3000 10800 3000 10800 5400 8400 5400 8400 3000
|
|
||||||
2 2 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
10800 3000 13200 3000 13200 5400 10800 5400 10800 3000
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
5100 1200 5100 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
11100 1200 11100 7200
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
12300 1200 12300 7200
|
|
||||||
2 2 0 2 0 7 45 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
525 0 4500 0 4500 600 525 600 525 0
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 0 525 0 525 600 0 600 0 0
|
|
||||||
2 1 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 2
|
|
||||||
3900 1200 3900 7200
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
600 4200 6600 4200
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
1800 4275 4800 4275
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
4725 4125 4875 4125 4875 4875 4725 4875 4725 4125
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
1725 3225 1875 3225 1875 4350 1725 4350 1725 3225
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
8925 3225 9075 3225 9075 4350 8925 4350 8925 3225
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
11925 4125 12075 4125 12075 4875 11925 4875 11925 4125
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 6
|
|
||||||
9000 3675 9525 3675 9525 4275 11325 4275 11325 4575 12000 4575
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
9600 1200 9600 7200
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
11400 1200 11400 7200
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
7800 3600 13800 3600
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
7800 4500 13800 4500
|
|
||||||
4 1 0 50 -1 14 24 0.0000 4 240 225 300 375 6\001
|
|
||||||
4 0 0 45 -1 14 24 0.0000 4 240 2700 675 375 Self Slacken\001
|
|
||||||
4 0 0 45 -1 14 20 0.0000 4 240 4620 9000 7800 [c/horizontal] is slackened.\001
|
|
|
@ -1,82 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 2100 7350 2325 8100
|
|
||||||
4 1 4 50 -1 15 18 1.5708 4 165 660 2325 7725 Free\001
|
|
||||||
-6
|
|
||||||
6 7500 3600 7725 4350
|
|
||||||
4 1 4 50 -1 15 18 1.5708 4 165 660 7725 3975 Free\001
|
|
||||||
-6
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
8400 6600 1125 6600
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
6900 5400 1125 5400
|
|
||||||
2 1 0 2 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
1800 1575 1800 9900
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
1800 1575 1800 5400
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
1200 4200 1200 5400
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
1200 5400 1200 6600
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
1200 8400 1200 6600
|
|
||||||
2 4 0 2 0 7 45 -1 -1 6.000 0 0 7 0 0 5
|
|
||||||
3150 6150 3150 5850 1650 5850 1650 6150 3150 6150
|
|
||||||
2 4 0 2 0 7 45 -1 -1 6.000 0 0 7 0 0 5
|
|
||||||
8325 6150 8325 5850 6750 5850 6750 6150 8325 6150
|
|
||||||
2 2 1 0 4 7 60 -1 45 2.000 0 0 -1 0 0 5
|
|
||||||
2100 1500 2400 1500 2400 5400 2100 5400 2100 1500
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
8100 6000 8100 2700
|
|
||||||
2 1 0 2 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
8100 1500 8100 9900
|
|
||||||
2 1 1 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
8100 6675 8100 9900
|
|
||||||
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 4
|
|
||||||
1650 5325 1650 5400 1950 5400 1950 5325
|
|
||||||
2 1 0 4 4 7 50 -1 -1 10.000 0 0 -1 0 0 4
|
|
||||||
7950 6675 7950 6600 8250 6600 8250 6675
|
|
||||||
2 2 0 0 7 4 60 -1 38 2.000 0 0 -1 0 0 5
|
|
||||||
2100 5400 2400 5400 2400 9900 2100 9900 2100 5400
|
|
||||||
2 2 0 0 7 4 60 -1 38 2.000 0 0 -1 0 0 5
|
|
||||||
7500 1500 7800 1500 7800 6600 7500 6600 7500 1500
|
|
||||||
2 2 1 0 4 7 60 -1 45 2.000 0 0 -1 0 0 5
|
|
||||||
7500 6600 7800 6600 7800 9900 7500 9900 7500 6600
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 6000 6900 6000
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 4500 6900 4500
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3000 6900 6900 6900
|
|
||||||
2 2 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 5
|
|
||||||
3000 4500 6900 4500 6900 6900 3000 6900 3000 4500
|
|
||||||
2 2 0 0 0 7 55 -1 10 0.000 0 0 -1 0 0 5
|
|
||||||
3000 5100 6900 5100 6900 6300 3000 6300 3000 5100
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
1800 9300 1800 6000
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
2925 5925 3075 5925 3075 6075 2925 6075 2925 5925
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
1725 5925 1875 5925 1875 6075 1725 6075 1725 5925
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
1725 9225 1875 9225 1875 9375 1725 9375 1725 9225
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
6825 5925 6975 5925 6975 6075 6825 6075 6825 5925
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
8025 5925 8175 5925 8175 6075 8025 6075 8025 5925
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
8025 2625 8175 2625 8175 2775 8025 2775 8025 2625
|
|
||||||
4 1 4 50 -1 14 12 1.5708 4 180 1470 1125 7575 _perpandicular\001
|
|
||||||
4 1 0 45 -1 14 14 0.0000 4 135 270 7500 6075 AC\001
|
|
||||||
4 1 0 45 -1 14 14 0.0000 4 135 270 2400 6075 AC\001
|
|
||||||
4 1 4 45 -1 14 18 1.5708 4 180 825 1725 1950 Track\001
|
|
||||||
4 1 4 45 -1 14 18 1.5708 4 180 825 8025 1950 Track\001
|
|
|
@ -1,98 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 1125 1425 1875 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
1200 1500 1800 1500 1800 2100 1200 2100 1200 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 1500 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 1800 1425 2550 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
1875 1500 2475 1500 2475 2100 1875 2100 1875 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 2175 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 2475 1425 3225 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2550 1500 3150 1500 3150 2100 2550 2100 2550 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 2850 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 3150 1425 3900 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
3225 1500 3825 1500 3825 2100 3225 2100 3225 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 3525 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 5025 1425 5775 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
5100 1500 5700 1500 5700 2100 5100 2100 5100 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 5400 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 5700 1425 6450 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
5775 1500 6375 1500 6375 2100 5775 2100 5775 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 6075 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 6375 1425 7125 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
6450 1500 7050 1500 7050 2100 6450 2100 6450 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 6750 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 7050 1425 7800 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
7125 1500 7725 1500 7725 2100 7125 2100 7125 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 7425 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 7725 1425 8475 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
7800 1500 8400 1500 8400 2100 7800 2100 7800 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 8100 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 8400 1425 9150 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
8475 1500 9075 1500 9075 2100 8475 2100 8475 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 8775 1875 RE\001
|
|
||||||
-6
|
|
||||||
6 9075 1425 9825 2175
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
9150 1500 9750 1500 9750 2100 9150 2100 9150 1500
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 165 330 9450 1875 RE\001
|
|
||||||
-6
|
|
||||||
2 1 0 2 0 7 50 -1 -1 6.000 0 0 -1 1 0 2
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
5400 2100 5400 3900
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
4425 3900 6375 3900 6375 4800 4425 4800 4425 3900
|
|
||||||
2 1 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 7
|
|
||||||
975 150 1125 0 2325 0 2475 -150 2625 0 3825 0
|
|
||||||
3975 150
|
|
||||||
2 1 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 7
|
|
||||||
4950 150 5100 0 7200 0 7350 -150 7500 0 9600 0
|
|
||||||
9750 150
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
300 -900 10500 -900 10500 5100 300 5100 300 -900
|
|
||||||
3 0 0 2 4 7 50 -1 -1 6.000 0 1 0 4
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
4425 4650 3300 4650 2100 3600 2100 2100
|
|
||||||
0.000 1.000 1.000 0.000
|
|
||||||
3 0 0 2 4 7 50 -1 -1 6.000 0 1 0 4
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
6393 4502 6618 4502 6768 3302 6768 2102
|
|
||||||
0.000 1.000 1.000 0.000
|
|
||||||
3 0 0 2 4 7 50 -1 -1 6.000 0 1 0 6
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
2100 1500 2100 1200 2700 600 5100 600 5700 1200 5700 1425
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
4 1 0 50 -1 14 18 0.0000 4 240 1485 5475 4200 process()\001
|
|
||||||
4 1 4 50 -1 14 18 0.0000 4 240 1815 5400 4650 _setAside()\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 165 1470 2475 3900 setLeftBound()\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 180 1575 6750 3450 setRightBound()\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 165 2625 2475 4125 Session::addRemoveEvent()\001
|
|
||||||
4 1 0 50 -1 18 18 0.0000 4 270 900 2550 -300 history\001
|
|
||||||
4 1 0 50 -1 18 18 0.0000 4 210 840 7350 -300 queue\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 165 1575 2175 1200 setEventLevel()\001
|
|
||||||
4 1 4 50 -1 14 12 0.0000 4 180 945 2175 975 getFork()\001
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
80.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 4050 4650 4050
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 3450 4650 3450
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 2850 4650 2850
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 2250 4650 2250
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 1650 4650 1650
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 1050 4650 1050
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
300 450 4650 450
|
||||||
|
2 2 1 2 26 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
||||||
|
300 150 4650 150 4650 4350 300 4350 300 150
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4725 150 5550 150
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4725 4350 5550 4350
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
300 4425 300 5100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
4650 4425 4650 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2
|
||||||
|
300 4800 300 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2
|
||||||
|
4650 4800 4650 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2
|
||||||
|
5250 150 5550 150
|
||||||
|
2 1 0 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2
|
||||||
|
5250 4350 5550 4350
|
||||||
|
2 1 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
||||||
|
6450 300 7050 300
|
||||||
|
2 1 1 2 25 7 50 -1 -1 6.000 0 0 -1 0 0 2
|
||||||
|
6450 600 7050 600
|
||||||
|
2 2 1 0 32 32 100 -1 20 2.000 0 0 -1 0 0 5
|
||||||
|
0 -150 9450 -150 9450 5400 0 5400 0 -150
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 4125 [0]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 3525 [1]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 2925 [2]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 2325 [3]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 1725 [4]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 1125 [5]\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 150 360 4875 525 [6]\001
|
||||||
|
4 0 0 50 -1 14 12 1.5708 4 120 840 5550 4275 axisMin\001
|
||||||
|
4 2 0 50 -1 14 12 1.5708 4 120 840 5550 225 axisMax\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 600 7200 300 Track\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 2040 7200 600 Cell abutment box\001
|
||||||
|
4 2 0 50 -1 14 12 0.0000 4 120 960 4575 5100 trackMax\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 960 375 5100 trackMin\001
|
After Width: | Height: | Size: 5.8 KiB |
|
@ -0,0 +1,212 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
90.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 3225 7725 6975 8475
|
||||||
|
6 3450 7950 3750 8250
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3525 8025 3675 8175
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3675 8025 3525 8175
|
||||||
|
-6
|
||||||
|
6 6450 7950 6750 8250
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6525 8025 6675 8175
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6675 8025 6525 8175
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3450 7800 3300 7950
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3600 7800 3300 8100
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3750 7800 3300 8250
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3900 7800 3300 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4050 7800 3450 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4200 7800 3600 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4350 7800 3750 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4500 7800 3900 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4650 7800 4050 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4800 7800 4200 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4950 7800 4350 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5100 7800 4500 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5250 7800 4650 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5400 7800 4800 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5550 7800 4950 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5700 7800 5100 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5850 7800 5250 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6000 7800 5400 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6150 7800 5550 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6300 7800 5700 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6450 7800 5850 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6600 7800 6000 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6750 7800 6150 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6900 7800 6300 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6900 7950 6450 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6900 8100 6600 8400
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6900 8250 6750 8400
|
||||||
|
2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3300 7800 6900 7800 6900 8400 3300 8400 3300 7800
|
||||||
|
-6
|
||||||
|
6 2400 10350 7950 11175
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 135 450 2400 10500 TS:\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 135 450 2400 10800 MD:\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 105 300 2400 11100 e:\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 195 1950 3000 10500 Track Spacing\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 195 4950 3000 10800 Minimal Distance (layer to layer)\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 195 3000 3000 11100 Extension (of layer)\001
|
||||||
|
-6
|
||||||
|
2 1 0 2 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3300 8400 3300
|
||||||
|
2 1 0 2 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 8400 3900
|
||||||
|
2 1 0 2 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
1200 4500 8400 4500
|
||||||
|
2 1 0 2 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
1200 5100 8400 5100
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1500 3600 2100 3600 2100 4200 1500 4200 1500 3600
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3000 3600 3900 3600 3900 4200 3000 4200 3000 3600
|
||||||
|
2 2 0 1 0 7 60 -1 15 0.000 0 0 -1 0 0 5
|
||||||
|
2100 3600 2700 3600 2700 4200 2100 4200 2100 3600
|
||||||
|
2 2 0 1 4 4 60 -1 30 0.000 0 0 -1 0 0 5
|
||||||
|
4200 3600 5100 3600 5100 4200 4200 4200 4200 3600
|
||||||
|
2 2 0 1 4 4 60 -1 35 0.000 0 0 -1 0 0 5
|
||||||
|
5100 3600 5700 3600 5700 4200 5100 4200 5100 3600
|
||||||
|
2 2 0 1 4 4 60 -1 37 0.000 0 0 -1 0 0 5
|
||||||
|
5700 3600 6300 3600 6300 4200 5700 4200 5700 3600
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6900 3600 7800 3600 7800 4200 6900 4200 6900 3600
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1200 3000 2400 3000 2400 3600 1200 3600 1200 3000
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2400 3000 3300 3000 3300 3600 2400 3600 2400 3000
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4800 3000 6000 3000 6000 3600 4800 3600 4800 3000
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 4200 7500 4200 7500 4800 1800 4800 1800 4200
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1500 4800 2400 4800 2400 5400 1500 5400 1500 4800
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3000 4800 3900 4800 3900 5400 3000 5400 3000 4800
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3900 4800 4500 4800 4500 5400 3900 5400 3900 4800
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
5100 4800 6300 4800 6300 5400 5100 5400 5100 4800
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6300 4800 6900 4800 6900 5400 6300 5400 6300 4800
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7200 4800 8100 4800 8100 5400 7200 5400 7200 4800
|
||||||
|
2 1 0 4 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
2700 8100 7500 8100
|
||||||
|
2 1 0 4 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
2700 9300 7500 9300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7275 8700 7800 8700 8100 9300 8775 9300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7575 8100 8700 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7275 7500 7800 7500 8100 6900 8700 6900
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2625 6900 1500 6900
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2625 8100 900 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7200 8775 7200 9900
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
8625 6900 8625 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
8625 8100 8625 9300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
1575 6900 1575 8100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
900 8100 1200 8100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 9600 3000 9900
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7200 9600 7200 9900
|
||||||
|
2 1 0 4 0 32 50 -1 20 0.000 0 0 -1 0 0 2
|
||||||
|
2700 6900 7500 6900
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 8775 3000 9900
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 8775 3600 9900
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 9600 3600 9900
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
1500 8850 3000 8850
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
3525 8850 3300 8850
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 8850 3300 8850
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3225 9150 3600 9150
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
1500 9150 3300 9150
|
||||||
|
2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 1.00 60.00 120.00
|
||||||
|
3825 9150 3600 9150
|
||||||
|
2 2 0 1 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3000 7500 7200 7500 7200 8700 3000 8700 3000 7500
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 8475 3300 9225
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
300 2700 9300 2700 9300 13200 300 13200 300 2700
|
||||||
|
4 1 0 50 -1 14 14 1.5708 4 195 600 8550 7500 TS/2\001
|
||||||
|
4 1 0 50 -1 14 14 1.5708 4 195 600 8550 8700 TS/2\001
|
||||||
|
4 1 0 50 -1 14 14 1.5708 4 135 300 1500 7500 TS\001
|
||||||
|
4 1 0 50 -1 14 14 0.0000 4 105 450 7500 9900 max\001
|
||||||
|
4 1 0 50 -1 14 14 0.0000 4 150 150 675 8175 y\001
|
||||||
|
4 1 0 50 -1 18 16 0.0000 4 255 330 5100 6000 (a)\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 105 150 1500 9075 e\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 195 600 1500 8775 MD/2\001
|
||||||
|
4 1 0 50 -1 14 14 0.0000 4 150 450 2700 9900 min\001
|
||||||
|
4 0 0 40 -1 14 14 0.0000 4 150 300 3750 9900 x1\001
|
||||||
|
4 1 0 50 -1 14 16 0.0000 4 255 7095 5100 11700 area(y,min,max) = (min,y-TS/2) (max,y+TS/2)\001
|
||||||
|
4 1 0 50 -1 14 16 0.0000 4 225 3135 5100 12000 min = x1 - e - MD/2\001
|
||||||
|
4 1 0 50 -1 14 16 0.0000 4 225 3135 5100 12300 max = x2 + e + MD/2\001
|
||||||
|
4 1 0 50 -1 18 16 0.0000 4 255 345 5100 12900 (b)\001
|
||||||
|
4 0 0 40 -1 14 16 0.0000 4 210 495 600 3375 [0]\001
|
||||||
|
4 0 0 40 -1 14 16 0.0000 4 225 495 600 3975 [1]\001
|
||||||
|
4 0 0 40 -1 14 16 0.0000 4 210 495 600 4575 [2]\001
|
||||||
|
4 0 0 40 -1 14 16 0.0000 4 210 495 600 5175 [3]\001
|
After Width: | Height: | Size: 15 KiB |
|
@ -1,87 +1,253 @@
|
||||||
#FIG 3.2
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Metric
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
1200 2
|
1200 2
|
||||||
6 495 405 4320 6120
|
0 32 #ffffdd
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 1800 585 45 45 1755 585 1845 585
|
6 1500 1725 2100 5325
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 2250 585 45 45 2205 585 2295 585
|
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 2700 585 45 45 2655 585 2745 585
|
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 3150 585 45 45 3105 585 3195 585
|
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 3600 585 45 45 3555 585 3645 585
|
|
||||||
1 4 0 1 0 7 50 -1 -1 4.000 1 0.0000 4050 585 45 45 4005 585 4095 585
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2025 450 2025 675
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2475 450 2475 675
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 450 2925 675
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3375 450 3375 675
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3825 450 3825 675
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
3600 630 3600 1755
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
3375 1755 3825 1755 3825 4680 3375 4680 3375 1755
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
3150 630 3150 1710
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2925 1710 3375 1710 3375 4635 2925 4635 2925 1710
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
2700 630 2700 1665
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2475 1665 2925 1665 2925 4590 2475 4590 2475 1665
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
2250 630 2250 1620
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2025 1620 2475 1620 2475 4545 2025 4545 2025 1620
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
1800 630 1800 1575
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
3375 5175 3150 4680
|
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
|
||||||
3 0 1.00 60.00 120.00
|
|
||||||
3375 5175 3600 4725
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
1575 1575 2025 1575 2025 4500 1575 4500 1575 1575
|
1575 2250 2025 2250 2025 5250 1575 5250 1575 2250
|
||||||
2 1 0 3 0 7 60 -1 10 0.000 0 0 -1 1 0 2
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
3 1 2.00 120.00 240.00
|
1575 3750 2025 3750
|
||||||
1575 5850 4275 5850
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
2 1 0 3 0 7 60 -1 10 0.000 0 0 -1 0 0 2
|
1575 2250 1575 1800 2025 1800 2025 2250 1575 2250
|
||||||
1575 5805 1575 5895
|
4 0 0 50 -1 14 16 1.5708 4 165 990 1875 3450 net<a>\001
|
||||||
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
|
4 0 0 50 -1 14 16 1.5708 4 210 825 1875 4950 [5,8[\001
|
||||||
3 0 1.00 60.00 120.00
|
4 1 7 40 -1 14 16 1.5708 4 165 330 1875 2025 TS\001
|
||||||
4050 630 4050 1800
|
|
||||||
2 2 0 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
3825 1800 4275 1800 4275 4725 3825 4725 3825 1800
|
|
||||||
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
1575 450 4275 450 4275 675 1575 675 1575 450
|
|
||||||
4 2 0 50 -1 14 12 0.0000 4 165 945 1440 630 _segments\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 3555 4590 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 945 3645 3105 [32,35[\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 3105 4545 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 945 3195 3060 [31,38[\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 2655 4500 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 945 2745 3015 [12,30[\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 2205 4455 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 810 2295 2970 [8,10[\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 1755 4410 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 675 1845 2925 [5,8[\001
|
|
||||||
4 1 0 50 -1 18 12 0.0000 4 135 825 3375 5400 same net\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 180 1260 4005 4635 TrackSegment\001
|
|
||||||
4 0 0 50 -1 14 14 1.5708 4 180 945 4095 3150 [40,45[\001
|
|
||||||
4 1 0 50 -1 19 12 0.0000 4 180 1140 2925 6075 sorting order\001
|
|
||||||
-6
|
-6
|
||||||
2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
|
6 2100 1725 2700 5325
|
||||||
0 0 4725 0 4725 6525 0 6525 0 0
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 2250 2625 2250 2625 5250 2175 5250 2175 2250
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2175 3750 2625 3750
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
2175 2250 2175 1800 2625 1800 2625 2250 2175 2250
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 165 990 2475 3450 net<b>\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 2475 2025 TS\001
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 225 990 2475 4950 [8,10[\001
|
||||||
|
-6
|
||||||
|
6 2700 1725 3300 5325
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2775 2250 3225 2250 3225 5250 2775 5250 2775 2250
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2775 3750 3225 3750
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
2775 2250 2775 1800 3225 1800 3225 2250 2775 2250
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 165 990 3075 3450 net<c>\001
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 225 1155 3075 4950 [12,30[\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 3075 2025 TS\001
|
||||||
|
-6
|
||||||
|
6 3300 1725 3900 5325
|
||||||
|
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3375 2250 3375 5250 3825 5250 3825 2250 3375 2250
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3375 3750 3825 3750
|
||||||
|
2 2 0 2 4 4 50 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
3375 2250 3375 1800 3825 1800 3825 2250 3375 2250
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 165 990 3675 3450 net<d>\001
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 225 1155 3675 4950 [31,38[\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 3675 2025 TS\001
|
||||||
|
-6
|
||||||
|
6 3900 1725 4500 5325
|
||||||
|
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3975 2250 3975 5250 4425 5250 4425 2250 3975 2250
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3975 3750 4425 3750
|
||||||
|
2 2 0 2 4 4 50 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
3975 2250 3975 1800 4425 1800 4425 2250 3975 2250
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 165 990 4275 3450 net<d>\001
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 225 1155 4275 4950 [31,35[\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 4275 2025 TS\001
|
||||||
|
-6
|
||||||
|
6 4500 1725 5100 5325
|
||||||
|
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
4575 2250 4575 5250 5025 5250 5025 2250 4575 2250
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4575 3750 5025 3750
|
||||||
|
2 2 0 2 4 4 50 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
4575 2250 4575 1800 5025 1800 5025 2250 4575 2250
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 165 990 4875 3450 net<d>\001
|
||||||
|
4 0 4 50 -1 14 16 1.5708 4 210 1155 4875 4950 [34,40[\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 4875 2025 TS\001
|
||||||
|
-6
|
||||||
|
6 5100 1725 5700 5325
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5175 2250 5625 2250 5625 5250 5175 5250 5175 2250
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5175 3750 5625 3750
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
5175 2250 5175 1800 5625 1800 5625 2250 5175 2250
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 165 990 5475 3450 net<e>\001
|
||||||
|
4 0 0 50 -1 14 16 1.5708 4 210 1155 5475 4950 [45,50[\001
|
||||||
|
4 1 7 40 -1 14 16 1.5708 4 165 330 5475 2025 TS\001
|
||||||
|
-6
|
||||||
|
6 1350 6525 1575 7275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 6600 1425 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 6600 1500 7200
|
||||||
|
-6
|
||||||
|
6 8925 6525 9150 7275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 6600 9000 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 6600 9075 7200
|
||||||
|
-6
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 3600 750 75 75 3525 750 3675 750
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 4200 750 75 75 4125 750 4275 750
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 4800 750 75 75 4725 750 4875 750
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 5400 750 75 75 5325 750 5475 750
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 3000 750 75 75 2925 750 3075 750
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 2400 750 75 75 2325 750 2475 750
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 1800 750 75 75 1725 750 1875 750
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 600 2100 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 600 2700 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 600 3300 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3900 600 3900 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4500 600 4500 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 600 5100 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 600 5700 900
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1500 600 6300 600 6300 900 1500 900 1500 600
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
1800 825 1800 1800
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
2400 825 2400 1800
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
3000 825 3000 1800
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
5400 825 5400 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
4800 825 4800 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
4200 825 4200 1800
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
3600 825 3600 1800
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
1500 300 2700 300 2700 600 1500 600 1500 300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 6600 1800 6600 1800 7200 1875 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 6600 2400 6600 2400 7200 2475 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3075 6600 3000 6600 3000 7200 3075 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 6600 3300 6600 3300 7200 3375 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4275 6600 4200 6600 4200 7200 4275 7200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 6750 2400 6750 2400 7050 1800 7050 1800 6750
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 6750 4200 6750 4200 7050 3300 7050 3300 6750
|
||||||
|
2 2 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 5
|
||||||
|
2400 6750 3000 6750 3000 7050 2400 7050 2400 6750
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 6600 4500 6600 4500 7200 4575 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4875 6600 4800 6600 4800 7200 4875 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5475 6600 5400 6600 5400 7200 5475 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 6600 6000 6600 6000 7200 6075 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 6600 6600 6600 6600 7200 6675 7200
|
||||||
|
2 2 0 0 4 4 61 -1 35 0.000 0 0 -1 0 0 5
|
||||||
|
4500 6750 6000 6750 6000 7050 4500 7050 4500 6750
|
||||||
|
2 2 0 0 4 4 62 -1 30 0.000 0 0 -1 0 0 5
|
||||||
|
4500 6675 5400 6675 5400 7125 4500 7125 4500 6675
|
||||||
|
2 2 0 0 4 4 60 -1 38 0.000 0 0 -1 0 0 5
|
||||||
|
4800 6825 6600 6825 6600 6975 4800 6975 4800 6825
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 6600 7500 6600 7500 7200 7575 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 6600 8400 6600 8400 7200 8475 7200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 6750 8400 6750 8400 7050 7500 7050 7500 6750
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 6900 9300 6900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
1800 5250 1800 6600
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
2400 5250 2400 6600
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
3000 5250 3300 6600
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
5400 5250 7500 6600
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
3600 5250 4500 6600
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
4200 5250 4500 6600
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
4800 5250 4800 6600
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4500 7275 4500 8100
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4800 7275 4800 8100
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5400 7275 5400 8100
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 7275 6000 8100
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6600 7275 6600 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4200 7275 4200 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 7275 3300 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 7275 3000 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 7275 2400 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1800 7275 1800 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7500 7275 7500 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8400 7275 8400 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 7275 9000 8100
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 7275 1500 8100
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
300 0 9600 0 9600 8700 300 8700 300 0
|
||||||
|
4 1 7 40 -1 14 16 0.0000 4 165 825 2100 525 Track\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 105 1800 8250 5\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 105 2400 8250 8\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 3000 8250 10\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 3300 8250 12\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 4200 8250 30\001
|
||||||
|
4 0 4 50 -1 16 12 0.0000 4 135 210 4500 8250 31\001
|
||||||
|
4 0 4 50 -1 16 12 0.0000 4 135 210 4800 8250 34\001
|
||||||
|
4 0 4 50 -1 16 12 0.0000 4 135 210 5400 8250 35\001
|
||||||
|
4 0 4 50 -1 16 12 0.0000 4 135 210 6000 8250 38\001
|
||||||
|
4 0 4 50 -1 16 12 0.0000 4 135 210 6600 8250 40\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 7500 8250 45\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 8400 8250 50\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 210 9000 8250 60\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 135 105 1500 8250 0\001
|
||||||
|
4 0 0 50 -1 18 16 0.0000 4 255 330 600 675 (a)\001
|
||||||
|
4 0 0 50 -1 18 16 0.0000 4 255 345 600 6975 (b)\001
|
||||||
|
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 11 KiB |
|
@ -1,150 +1,198 @@
|
||||||
#FIG 3.2
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Metric
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
1200 2
|
1200 2
|
||||||
6 360 855 540 1395
|
0 32 #ffffdd
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
6 600 -525 8175 3075
|
||||||
405 900 405 1350
|
6 3525 1275 7575 1875
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
6 3525 1275 4125 1875
|
||||||
495 900 495 1350
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
3600 1350 4050 1350 4050 1800 3600 1800 3600 1350
|
||||||
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 1650 TS\001
|
||||||
-6
|
-6
|
||||||
6 7785 855 7965 1395
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 7275 1575 75 75 7200 1575 7350 1575
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
7830 900 7830 1350
|
5550 1350 5550 1800
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
7920 900 7920 1350
|
7500 1350 4050 1350 4050 1800 7500 1800 7500 1350
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7050 1350 7050 1800
|
||||||
|
4 0 0 50 -1 14 16 0.0000 4 165 990 5850 1650 net<a>\001
|
||||||
|
4 0 0 50 -1 14 16 0.0000 4 210 825 4350 1650 [5,8[\001
|
||||||
-6
|
-6
|
||||||
6 0 0 135 720
|
6 3525 1875 7575 2475
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
6 3525 1875 4125 2475
|
||||||
113 22 68 68 68 135 68 248 68 315 23 360
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
3600 1950 4050 1950 4050 2400 3600 2400 3600 1950
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 2250 TS\001
|
||||||
113 698 68 653 68 585 68 473 68 405 23 360
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
-6
|
-6
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 1485 1935 135 135 1350 1935 1620 1935
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 7275 2175 75 75 7200 2175 7350 2175
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 2160 1935 135 135 2025 1935 2295 1935
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 3510 1935 135 135 3375 1935 3645 1935
|
5550 1950 5550 2400
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 5310 1935 135 135 5175 1935 5445 1935
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 6300 1935 135 135 6165 1935 6435 1935
|
7500 1950 7500 2400 4050 2400 4050 1950 7500 1950
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 7335 1935 135 135 7200 1935 7470 1935
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 2610 135 135 765 2610 1035 2610
|
7050 1950 7050 2400
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3060 135 135 765 3060 1035 3060
|
4 0 0 50 -1 14 16 0.0000 4 165 990 5850 2250 net<b>\001
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3510 135 135 765 3510 1035 3510
|
4 0 0 50 -1 14 16 0.0000 4 225 990 4350 2250 [8,10[\001
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3960 135 135 765 3960 1035 3960
|
-6
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 4410 135 135 765 4410 1035 4410
|
6 3525 2475 7575 3075
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 4860 135 135 765 4860 1035 4860
|
6 3525 2475 4125 3075
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 810 1935 135 135 675 1935 945 1935
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
3600 2550 4050 2550 4050 3000 3600 3000 3600 2550
|
||||||
315 1125 8010 1125
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 2850 TS\001
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
-6
|
||||||
1125 1035 1800 1035 1800 1215 1125 1215 1125 1035
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 7275 2775 75 75 7200 2775 7350 2775
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
2475 1035 3600 1035 3600 1215 2475 1215 2475 1035
|
5550 2550 5550 3000
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
5850 1035 6750 1035 6750 1215 5850 1215 5850 1035
|
7500 2550 7500 3000 4050 3000 4050 2550 7500 2550
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
1125 0 1125 900
|
7050 2550 7050 3000
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
4 0 0 50 -1 14 16 0.0000 4 165 990 5850 2850 net<c>\001
|
||||||
2475 0 2475 900
|
4 0 0 50 -1 14 16 0.0000 4 225 1155 4350 2850 [12,30[\001
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
-6
|
||||||
5850 0 5850 900
|
6 1425 225 6375 975
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 3000 750 75 75 2925 750 3075 750
|
||||||
3375 0 3375 810
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 2400 750 75 75 2325 750 2475 750
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 1800 750 75 75 1725 750 1875 750
|
||||||
1125 540 1125 450 2250 450 2475 540 2250 630 1125 630
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
1125 540
|
2100 600 2100 900
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
2475 540 2475 450 3150 450 3375 540 3150 630 2475 630
|
2700 600 2700 900
|
||||||
2475 540
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
3300 600 3300 900
|
||||||
3375 540 3375 450 5625 450 5850 540 5625 630 3375 630
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
3375 540
|
3900 600 3900 900
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
5850 540 5850 450 7650 450 7875 540 7650 630 5850 630
|
4500 600 4500 900
|
||||||
5850 540
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
5100 600 5100 900
|
||||||
450 540 450 450 900 450 1125 540 900 630 450 630
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
450 540
|
5700 600 5700 900
|
||||||
2 2 0 0 0 7 70 -1 19 0.000 0 0 -1 0 0 5
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
3375 990 4500 990 4500 1260 3375 1260 3375 990
|
1500 600 6300 600 6300 900 1500 900 1500 600
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
-1575 -675 8325 -675 8325 5400 -1575 5400 -1575 -675
|
1500 300 2700 300 2700 600 1500 600 1500 300
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
4 1 7 40 -1 14 16 0.0000 4 165 825 2100 525 Track\001
|
||||||
6795 945 6750 945 6750 1305 6795 1305
|
-6
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
5895 945 5850 945 5850 1305 5895 1305
|
3 1 2.00 120.00 240.00
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
3000 825 3000 1425 3150 1575 3600 1575
|
||||||
4545 855 4500 855 4500 1395 4545 1395
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
3 1 2.00 120.00 240.00
|
||||||
3645 945 3600 945 3600 1305 3645 1305
|
2400 825 2400 2025 2550 2175 3600 2175
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
3420 855 3375 855 3375 1395 3420 1395
|
3 1 2.00 120.00 240.00
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
1800 825 1800 2625 1950 2775 3600 2775
|
||||||
2520 945 2475 945 2475 1305 2520 1305
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 8
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
3 1 2.00 120.00 240.00
|
||||||
1845 945 1800 945 1800 1305 1845 1305
|
2550 300 2550 0 2700 -150 7650 -150 7800 0 7800 1425
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
7650 1575 7350 1575
|
||||||
1170 945 1125 945 1125 1305 1170 1305
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 8
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
3 1 2.00 120.00 240.00
|
||||||
675 2385 4410 2385 4410 5085 675 5085 675 2385
|
2400 300 2400 -150 2550 -300 7800 -300 7950 -150 7950 2025
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 1125 -45 3\001
|
7800 2175 7500 2175
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 2475 -45 9\001
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 8
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 3375 -45 13\001
|
3 1 2.00 120.00 240.00
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 5850 -45 24\001
|
2250 300 2250 -300 2400 -450 7950 -450 8100 -300 8100 2625
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 810 225 [0]\001
|
7950 2775 7500 2775
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 1800 225 [1]\001
|
2 1 0 4 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 2925 225 [2]\001
|
7650 1950 7800 2400
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 4635 225 [3]\001
|
2 1 0 4 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 6975 225 [4]\001
|
7800 1950 7650 2400
|
||||||
4 0 0 50 -1 14 12 1.5708 4 120 420 7920 0 _max\001
|
4 0 0 50 -1 18 16 0.0000 4 255 330 600 675 (a)\001
|
||||||
4 0 0 50 -1 14 12 1.5708 4 165 420 450 0 _min\001
|
-6
|
||||||
4 2 0 50 -1 18 12 0.0000 4 180 1125 -90 405 lower_bound\001
|
6 3525 6525 7575 7125
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 810 2025 1\001
|
6 3525 6525 4125 7125
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 1485 2025 2\001
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 2160 2025 3\001
|
3600 6600 4050 6600 4050 7050 3600 7050 3600 6600
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 3510 2025 2\001
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 6900 TS\001
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 5310 2025 3\001
|
-6
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 6300 2025 4\001
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 7275 6825 75 75 7200 6825 7350 6825
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 7335 2025 5\001
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 4905 [\001
|
5550 6600 5550 7050
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 4455 [\001
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 4005 [\001
|
7500 6600 7500 7050 4050 7050 4050 6600 7500 6600
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 3555 [\001
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 3105 [\001
|
7050 6600 7050 7050
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 2655 [\001
|
4 0 0 50 -1 14 16 0.0000 4 165 990 5850 6900 net<c>\001
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 3105 ]\001
|
4 0 0 50 -1 14 16 0.0000 4 225 1155 4350 6900 [12,30[\001
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 540 1395 2655 _min\001
|
-6
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 3150 ,\001
|
6 3525 5325 7575 5925
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 2925 3105 max(i-1)\001
|
6 3525 5325 4125 5925
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 1440 3105 min(i-1)\001
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 2655 ]\001
|
3600 5400 4050 5400 4050 5850 3600 5850 3600 5400
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 2925 2655 min(i)\001
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 5700 TS\001
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 2700 ,\001
|
-6
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 3555 ]\001
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 7275 5625 75 75 7200 5625 7350 5625
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 4005 ]\001
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 4455 ]\001
|
5550 5400 5550 5850
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 4905 ]\001
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 2925 3555 min(i)\001
|
7500 5400 4050 5400 4050 5850 7500 5850 7500 5400
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 2925 4005 max(i-1)\001
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 0 0 50 -1 14 14 0.0000 4 135 540 2925 4455 _max\001
|
7050 5400 7050 5850
|
||||||
4 0 0 50 -1 14 14 0.0000 4 135 540 2925 4905 _max\001
|
4 0 0 50 -1 14 16 0.0000 4 165 990 5850 5700 net<a>\001
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1215 1440 3555 _max(i-1)\001
|
4 0 0 50 -1 14 16 0.0000 4 210 825 4350 5700 [5,8[\001
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 1440 4005 min(i-1)\001
|
-6
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 1440 4455 max(i-1)\001
|
6 3525 5925 7575 6525
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 540 1440 4905 _min\001
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 3600 ,\001
|
5550 6000 5550 6450
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 4050 ,\001
|
2 2 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 4500 ,\001
|
7500 6000 4050 6000 4050 6450 7500 6450 7500 6000
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 4950 ,\001
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
4 1 7 40 -1 10 14 0.0000 4 135 90 900 2700 1\001
|
7050 6000 7050 6450
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 3150 2\001
|
2 2 0 2 4 4 50 -1 20 0.000 0 0 -1 0 0 5
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 3600 3\001
|
3600 6000 4050 6000 4050 6450 3600 6450 3600 6000
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 4050 4\001
|
4 0 4 50 -1 14 16 0.0000 4 165 990 5850 6300 net<b>\001
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 4500 5\001
|
4 0 4 50 -1 14 16 0.0000 4 225 990 4350 6300 [8,10[\001
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 4950 6\001
|
4 1 7 40 -1 14 16 0.0000 4 165 330 3825 6300 TS\001
|
||||||
|
4 1 4 50 -1 14 10 0.0000 4 90 420 7275 6300 NULL\001
|
||||||
|
-6
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 3000 4800 75 75 2925 4800 3075 4800
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 2400 4800 75 75 2325 4800 2475 4800
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 1800 4800 75 75 1725 4800 1875 4800
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
3000 4875 3000 5475 3150 5625 3600 5625
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
2400 4875 2400 6075 2550 6225 3600 6225
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
1800 4875 1800 6675 1950 6825 3600 6825
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 8
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
2550 4350 2550 4050 2700 3900 7650 3900 7800 4050 7800 5475
|
||||||
|
7650 5625 7350 5625
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 1 8
|
||||||
|
3 1 2.00 120.00 240.00
|
||||||
|
2250 4350 2250 3750 2400 3600 7950 3600 8100 3750 8100 6675
|
||||||
|
7950 6825 7500 6825
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 4650 2100 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 4650 2700 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 4650 3300 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3900 4650 3900 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4500 4650 4500 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 4650 5100 4950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 4650 5700 4950
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1500 4650 6300 4650 6300 4950 1500 4950 1500 4650
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
1500 4350 2700 4350 2700 4650 1500 4650 1500 4350
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
450 -750 8400 -750 8400 7350 450 7350 450 -750
|
||||||
|
4 0 0 50 -1 18 16 0.0000 4 255 345 600 4725 (b)\001
|
||||||
|
4 1 7 40 -1 14 16 0.0000 4 165 825 2100 4575 Track\001
|
||||||
|
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 11 KiB |
|
@ -1,165 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Metric
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 360 855 540 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
405 900 405 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
495 900 495 1350
|
|
||||||
-6
|
|
||||||
6 7785 855 7965 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7830 900 7830 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7920 900 7920 1350
|
|
||||||
-6
|
|
||||||
6 0 0 135 720
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
113 22 68 68 68 135 68 248 68 315 23 360
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
113 698 68 653 68 585 68 473 68 405 23 360
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
-6
|
|
||||||
6 630 1755 990 2115
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 810 1935 135 135 675 1935 945 1935
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 810 2025 1\001
|
|
||||||
-6
|
|
||||||
6 1305 1755 1665 2115
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 1485 1935 135 135 1350 1935 1620 1935
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 1485 2025 2\001
|
|
||||||
-6
|
|
||||||
6 1980 1755 2340 2115
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 2160 1935 135 135 2025 1935 2295 1935
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 2160 2025 3\001
|
|
||||||
-6
|
|
||||||
6 3330 1755 3690 2115
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 3510 1935 135 135 3375 1935 3645 1935
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 3510 2025 2\001
|
|
||||||
-6
|
|
||||||
6 5130 1755 5490 2115
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 5310 1935 135 135 5175 1935 5445 1935
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 5310 2025 3\001
|
|
||||||
-6
|
|
||||||
6 675 2340 4410 4635
|
|
||||||
6 720 2385 1080 2745
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 2565 135 135 765 2565 1035 2565
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 2655 1\001
|
|
||||||
-6
|
|
||||||
6 720 2835 1080 3195
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3015 135 135 765 3015 1035 3015
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 3105 2\001
|
|
||||||
-6
|
|
||||||
6 720 3285 1080 3645
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3465 135 135 765 3465 1035 3465
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 3555 3\001
|
|
||||||
-6
|
|
||||||
6 720 3735 1080 4095
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 3915 135 135 765 3915 1035 3915
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 4005 4\001
|
|
||||||
-6
|
|
||||||
6 720 4185 1080 4545
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 900 4365 135 135 765 4365 1035 4365
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 900 4455 5\001
|
|
||||||
-6
|
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
675 2340 4410 2340 4410 4635 675 4635 675 2340
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 3960 [\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 3510 [\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 3060 [\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 2610 [\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 3060 ]\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 540 1395 2610 _min\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 3105 ,\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 2925 3060 max(i)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 1440 3060 min(i)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 2610 ]\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 2925 2610 min(i)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 2655 ,\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 3510 ]\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 3960 ]\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 1080 2925 3510 min(i+1)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 135 540 2925 3960 _max\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 1440 3510 max(i)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 810 1440 3960 max(i)\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 3555 ,\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 4005 ,\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 1215 4410 [\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 540 1440 4410 _min\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 60 135 2700 4455 ,\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 135 540 2925 4410 _max\001
|
|
||||||
4 0 0 50 -1 14 14 0.0000 4 180 135 4140 4410 ]\001
|
|
||||||
-6
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 7335 1935 135 135 7200 1935 7470 1935
|
|
||||||
1 4 0 1 0 7 50 -1 0 0.000 1 0.0000 6300 1935 135 135 6165 1935 6435 1935
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
315 1125 8010 1125
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
1125 1035 1800 1035 1800 1215 1125 1215 1125 1035
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
2475 1035 3600 1035 3600 1215 2475 1215 2475 1035
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
5850 1035 6750 1035 6750 1215 5850 1215 5850 1035
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
1125 0 1125 900
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
2475 0 2475 900
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
5850 0 5850 900
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
3375 0 3375 810
|
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
|
||||||
1125 540 1125 450 2250 450 2475 540 2250 630 1125 630
|
|
||||||
1125 540
|
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
|
||||||
2475 540 2475 450 3150 450 3375 540 3150 630 2475 630
|
|
||||||
2475 540
|
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
|
||||||
3375 540 3375 450 5625 450 5850 540 5625 630 3375 630
|
|
||||||
3375 540
|
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
|
||||||
5850 540 5850 450 7650 450 7875 540 7650 630 5850 630
|
|
||||||
5850 540
|
|
||||||
2 1 0 0 0 7 60 -1 15 0.000 0 0 -1 0 0 7
|
|
||||||
450 540 450 450 900 450 1125 540 900 630 450 630
|
|
||||||
450 540
|
|
||||||
2 2 0 0 0 7 70 -1 19 0.000 0 0 -1 0 0 5
|
|
||||||
3375 990 4500 990 4500 1260 3375 1260 3375 990
|
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
-1800 -675 8325 -675 8325 4950 -1800 4950 -1800 -675
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
1170 945 1125 945 1125 1305 1170 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
1845 945 1800 945 1800 1305 1845 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
2520 945 2475 945 2475 1305 2520 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
3420 855 3375 855 3375 1395 3420 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
3645 945 3600 945 3600 1305 3645 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
4545 855 4500 855 4500 1395 4545 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
5895 945 5850 945 5850 1305 5895 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
6795 945 6750 945 6750 1305 6795 1305
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 1125 -45 3\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 2475 -45 9\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 3375 -45 13\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 5850 -45 24\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 810 225 [0]\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 1800 225 [0]\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 2925 225 [1]\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 4635 225 [2]\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 165 315 6975 225 [3]\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 120 420 7920 0 _max\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 165 420 450 0 _min\001
|
|
||||||
4 2 0 50 -1 18 12 0.0000 4 180 1425 -90 405 lower_bound - 1\001
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 6300 2025 2\001
|
|
||||||
4 1 7 40 -1 18 14 0.0000 4 150 120 7335 2025 4\001
|
|
|
@ -1,83 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Metric
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 360 855 540 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
405 900 405 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
495 900 495 1350
|
|
||||||
-6
|
|
||||||
6 7785 855 7965 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7830 900 7830 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7920 900 7920 1350
|
|
||||||
-6
|
|
||||||
1 4 0 1 0 7 50 -1 -1 0.000 1 0.0000 3600 1800 90 90 3510 1800 3690 1800
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
315 1125 8010 1125
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
1395 855 1350 855 1350 1395 1395 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
2295 945 2250 945 2250 1305 2295 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
3195 945 3150 945 3150 1305 3195 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
4095 945 4050 945 4050 1305 4095 1305
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
4050 1035 4950 1035 4950 1215 4050 1215 4050 1035
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
2250 1035 3150 1035 3150 1215 2250 1215 2250 1035
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
7470 945 7425 945 7425 1305 7470 1305
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
6525 1035 7425 1035 7425 1215 6525 1215 6525 1035
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
6570 945 6525 945 6525 1305 6570 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
5895 855 5850 855 5850 1395 5895 1395
|
|
||||||
2 2 0 0 0 7 70 -1 19 0.000 0 0 -1 0 0 5
|
|
||||||
1350 990 5850 990 5850 1260 1350 1260 1350 990
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
2250 0 2250 855
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
1350 0 1350 765
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
4050 0 4050 855
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
6525 0 6525 855
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3600 2250 3600 1215
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3510 1800 2295 1800
|
|
||||||
2 1 3 2 0 7 50 -1 -1 4.500 0 0 -1 0 0 2
|
|
||||||
2250 1395 2250 2250
|
|
||||||
2 1 3 2 0 7 50 -1 -1 4.500 0 0 -1 0 0 2
|
|
||||||
1350 1485 1350 2250
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
2250 2025 1350 2025
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
4995 945 4950 945 4950 1305 4995 1305
|
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 -675 8325 -675 8325 3375 0 3375 0 -675
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
1350 2475 1575 2700 1800 2700 3150 2700 3375 2700 3600 2925
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
5850 2475 5625 2700 5400 2700 4050 2700 3825 2700 3600 2925
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 1350 -45 4\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 2250 -45 8\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 4050 -45 16\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 6525 -45 27\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 180 840 3600 2475 position\001
|
|
||||||
4 1 0 50 -1 18 14 0.0000 4 210 2820 3600 3150 Overlaping TrackSegments\001
|
|
|
@ -1,74 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Metric
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 360 855 540 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
405 900 405 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
495 900 495 1350
|
|
||||||
-6
|
|
||||||
6 7785 855 7965 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7830 900 7830 1350
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7920 900 7920 1350
|
|
||||||
-6
|
|
||||||
1 4 0 1 0 7 50 -1 -1 0.000 1 0.0000 3600 1800 90 90 3510 1800 3690 1800
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
315 1125 8010 1125
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
1395 855 1350 855 1350 1395 1395 1395
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
2295 945 2250 945 2250 1305 2295 1305
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
7470 945 7425 945 7425 1305 7470 1305
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
6525 1035 7425 1035 7425 1215 6525 1215 6525 1035
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
6570 945 6525 945 6525 1305 6570 1305
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
2250 0 2250 855
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
1350 0 1350 765
|
|
||||||
2 1 0 2 0 7 50 -1 19 0.000 0 0 -1 0 0 2
|
|
||||||
6525 0 6525 855
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3600 2250 3600 1215
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
3510 1800 2295 1800
|
|
||||||
2 1 3 2 0 7 50 -1 -1 4.500 0 0 -1 0 0 2
|
|
||||||
2250 1395 2250 2250
|
|
||||||
2 1 3 2 0 7 50 -1 -1 4.500 0 0 -1 0 0 2
|
|
||||||
1350 1485 1350 2250
|
|
||||||
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
3 1 1.00 60.00 120.00
|
|
||||||
2250 2025 1350 2025
|
|
||||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
|
||||||
0 -675 8325 -675 8325 3375 0 3375 0 -675
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
4095 945 4050 945 4050 1305 4095 1305
|
|
||||||
2 2 0 0 0 7 60 -1 16 0.000 0 0 -1 0 0 5
|
|
||||||
2250 1035 4050 1035 4050 1215 2250 1215 2250 1035
|
|
||||||
2 1 0 4 0 7 50 -1 -1 0.000 0 0 7 0 0 4
|
|
||||||
2970 855 2925 855 2925 1395 2970 1395
|
|
||||||
2 2 0 0 0 7 70 -1 19 0.000 0 0 -1 0 0 5
|
|
||||||
1350 990 2925 990 2925 1260 1350 1260 1350 990
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
4095 2475 3825 2700 3600 2700 3150 2700 2925 2700 2700 2925
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
3 0 0 2 0 7 50 -1 -1 0.000 0 0 0 6
|
|
||||||
1350 2475 1575 2700 1800 2700 2250 2700 2475 2700 2700 2925
|
|
||||||
0.000 1.000 1.000 1.000 1.000 0.000
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 1350 -45 4\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 105 2250 -45 8\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 135 210 6525 -45 27\001
|
|
||||||
4 1 0 50 -1 14 12 0.0000 4 180 840 3600 2475 position\001
|
|
||||||
4 1 0 50 -1 18 14 0.0000 4 210 2820 3600 3150 Overlaping TrackSegments\001
|
|
|
@ -0,0 +1,269 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1725 8325 2850 9075
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 8550 2700 8550 2700 8850 1800 8850 1800 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 8400 1800 8400 1800 9000 1875 9000
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2775 8400 2700 8400 2700 9000 2775 9000
|
||||||
|
-6
|
||||||
|
6 3225 8325 4050 9075
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3975 8400 3900 8400 3900 9000 3975 9000
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 8550 3900 8550 3900 8850 3300 8850 3300 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 8400 3300 8400 3300 9000 3375 9000
|
||||||
|
-6
|
||||||
|
6 6000 4200 6450 4800
|
||||||
|
6 6000 4500 6450 4800
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6000 4500 6450 4500 6450 4800 6000 4800 6000 4500
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 6075 4725 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 4200 6000 4800
|
||||||
|
-6
|
||||||
|
6 6000 6600 6450 7200
|
||||||
|
6 6000 6900 6450 7200
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6000 6900 6450 6900 6450 7200 6000 7200 6000 6900
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 6075 7125 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 6600 6000 7200
|
||||||
|
-6
|
||||||
|
6 9000 9000 9450 9600
|
||||||
|
6 9000 9300 9450 9600
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
9000 9300 9450 9300 9450 9600 9000 9600 9000 9300
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 9075 9525 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 9000 9000 9600
|
||||||
|
-6
|
||||||
|
6 9000 11400 9450 12000
|
||||||
|
6 9000 11700 9450 12000
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
9000 11700 9450 11700 9450 12000 9000 12000 9000 11700
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 9075 11925 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 11400 9000 12000
|
||||||
|
-6
|
||||||
|
6 3600 1200 4050 1800
|
||||||
|
6 3600 1500 4050 1800
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
3600 1500 4050 1500 4050 1800 3600 1800 3600 1500
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 3675 1725 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 1200 3600 1800
|
||||||
|
-6
|
||||||
|
6 8925 525 9150 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 600 9000 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 600 9075 1200
|
||||||
|
-6
|
||||||
|
6 5925 525 6750 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 600 6600 600 6600 1200 6675 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 750 6600 750 6600 1050 6000 1050 6000 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 600 6000 600 6000 1200 6075 1200
|
||||||
|
-6
|
||||||
|
6 8925 3525 9150 4275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 3600 9000 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 3600 9075 4200
|
||||||
|
-6
|
||||||
|
6 5925 3525 6750 4275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 3600 6600 3600 6600 4200 6675 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 3750 6600 3750 6600 4050 6000 4050 6000 3750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 3600 6000 3600 6000 4200 6075 4200
|
||||||
|
-6
|
||||||
|
6 8925 5925 9150 6675
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 6000 9000 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 6000 9075 6600
|
||||||
|
-6
|
||||||
|
6 4125 6300 6000 7200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
4200 7200 4200 6300
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1680 4275 7200 OutsideElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 4275 6975 Pos\001
|
||||||
|
-6
|
||||||
|
6 3300 5400 5475 6000
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 5400 3300 6000
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 3375 5550 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 3375 5775 BeginIsSegmentMax\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
2400 2400 2400 900
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 10800 1500 11400
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 11100 9300 11100
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 10800 1425 11400
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 10800 9000 11400
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 10800 9075 11400
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6900 12000 6900 11100
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 10200 9000 10800
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 10200 1500 10800
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 8400 1500 9000
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 8700 9300 8700
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 8400 1425 9000
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 8400 5700 8400 5700 9000 5775 9000
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4800 8550 5700 8550 5700 8850 4800 8850 4800 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4875 8400 4800 8400 4800 9000 4875 9000
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 8400 9000 9000
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 8400 9075 9000
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6900 9600 6900 8700
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 7800 5700 8400
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 7800 9000 8400
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 600 1425 1200
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 600 1500 1200
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 0 1500 600
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3675 600 3600 600 3600 1200 3675 1200
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 0 3600 600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 9300 900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 600 8400 600 8400 1200 8475 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 750 8400 750 8400 1050 7500 1050 7500 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 600 7500 600 7500 1200 7575 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3600 750 4500 750 4500 1050 3600 1050 3600 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 600 4500 600 4500 1200 4575 1200
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 3600 1500 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 9300 3900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 3600 8400 3600 8400 4200 8475 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 3750 8400 3750 8400 4050 7500 4050 7500 3750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 3600 7500 3600 7500 4200 7575 4200
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 3600 1425 4200
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 3600 2400 3600 2400 4200 2475 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
3000 4800 3000 3900
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 3600 5100 3600 5100 4200 5175 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2400 3750 5100 3750 5100 4050 2400 4050 2400 3750
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 3000 2400 3600
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 3000 5100 3600
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 6000 1500 6600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 6300 9300 6300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 6000 8400 6000 8400 6600 8475 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 6150 8400 6150 8400 6450 7500 6450 7500 6150
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 6000 7500 6000 7500 6600 7575 6600
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 6000 1425 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 6000 6600 6000 6600 6600 6675 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 6150 6600 6150 6600 6450 6000 6450 6000 6150
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 6000 6000 6000 6000 6600 6075 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2400 6150 3300 6150 3300 6450 2400 6450 2400 6150
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 6000 3300 6000 3300 6600 3375 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 6000 2400 6000 2400 6600 2475 6600
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 5400 6000 6000
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 -300 10800 -300 10800 12300 900 12300 900 -300
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 2160 2475 2400 BeforeFirstElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 2475 2175 Pos\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 165 1200 6975 12000 EmptyTrack\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 6975 11775 Pos\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1560 9075 10575 EndIsTrackMax\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 1575 10350 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 1800 1575 10575 BeginIsTrackMin\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1920 6975 9600 AfterLastElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 6975 9375 Pos\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 5775 7950 begin:2\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 5775 8175 BeginIsSegmentMax\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1560 9075 8175 EndIsTrackMax\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 4050 825 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 825 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 825 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 3750 3825 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 2850 6225 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 3825 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 6225 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 3825 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 6225 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 2250 8625 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 5250 8625 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 3600 8625 [1]\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 1575 150 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 1800 1575 375 BeginIsTrackMin\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 1800 3675 375 EndIsSegmentMin\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1560 3075 4800 InsideElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 3075 4575 Pos\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 2475 3150 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 2475 3375 BeginIsSegmentMin\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 1800 5175 3375 EndIsSegmentMax\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 2280 6075 5775 EndIsNextSegmentMin\001
|
After Width: | Height: | Size: 20 KiB |
|
@ -0,0 +1,269 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1725 8325 2850 9075
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 8550 2700 8550 2700 8850 1800 8850 1800 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 8400 1800 8400 1800 9000 1875 9000
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2775 8400 2700 8400 2700 9000 2775 9000
|
||||||
|
-6
|
||||||
|
6 3225 8325 4050 9075
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3975 8400 3900 8400 3900 9000 3975 9000
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3300 8550 3900 8550 3900 8850 3300 8850 3300 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 8400 3300 8400 3300 9000 3375 9000
|
||||||
|
-6
|
||||||
|
6 6000 4200 6450 4800
|
||||||
|
6 6000 4500 6450 4800
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6000 4500 6450 4500 6450 4800 6000 4800 6000 4500
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 6075 4725 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 4200 6000 4800
|
||||||
|
-6
|
||||||
|
6 6000 6600 6450 7200
|
||||||
|
6 6000 6900 6450 7200
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6000 6900 6450 6900 6450 7200 6000 7200 6000 6900
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 6075 7125 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 6600 6000 7200
|
||||||
|
-6
|
||||||
|
6 9000 9000 9450 9600
|
||||||
|
6 9000 9300 9450 9600
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
9000 9300 9450 9300 9450 9600 9000 9600 9000 9300
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 9075 9525 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 9000 9000 9600
|
||||||
|
-6
|
||||||
|
6 9000 11400 9450 12000
|
||||||
|
6 9000 11700 9450 12000
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
9000 11700 9450 11700 9450 12000 9000 12000 9000 11700
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 9075 11925 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 11400 9000 12000
|
||||||
|
-6
|
||||||
|
6 3600 1200 4050 1800
|
||||||
|
6 3600 1500 4050 1800
|
||||||
|
2 2 0 1 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
3600 1500 4050 1500 4050 1800 3600 1800 3600 1500
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 135 300 3675 1725 LB\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 1200 3600 1800
|
||||||
|
-6
|
||||||
|
6 8925 525 9150 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 600 9000 1200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 600 9075 1200
|
||||||
|
-6
|
||||||
|
6 5925 525 6750 1275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 600 6600 600 6600 1200 6675 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 750 6600 750 6600 1050 6000 1050 6000 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 600 6000 600 6000 1200 6075 1200
|
||||||
|
-6
|
||||||
|
6 8925 3525 9150 4275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 3600 9000 4200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 3600 9075 4200
|
||||||
|
-6
|
||||||
|
6 5925 3525 6750 4275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 3600 6600 3600 6600 4200 6675 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 3750 6600 3750 6600 4050 6000 4050 6000 3750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 3600 6000 3600 6000 4200 6075 4200
|
||||||
|
-6
|
||||||
|
6 8925 5925 9150 6675
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 6000 9000 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 6000 9075 6600
|
||||||
|
-6
|
||||||
|
6 4125 6300 6000 7200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
4200 7200 4200 6300
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1680 4275 7200 OutsideElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 4275 6975 Pos\001
|
||||||
|
-6
|
||||||
|
6 3300 5400 5475 6000
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 5400 3300 6000
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 3375 5550 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 3375 5775 BeginIsSegmentMax\001
|
||||||
|
-6
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
2400 2400 2400 900
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 10800 1500 11400
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 11100 9300 11100
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 10800 1425 11400
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 10800 9000 11400
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 10800 9075 11400
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6900 12000 6900 11100
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 10200 9000 10800
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 10200 1500 10800
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 8400 1500 9000
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 8700 9300 8700
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 8400 1425 9000
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 8400 5700 8400 5700 9000 5775 9000
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
4800 8550 5700 8550 5700 8850 4800 8850 4800 8550
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4875 8400 4800 8400 4800 9000 4875 9000
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 8400 9000 9000
|
||||||
|
2 1 0 4 1 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 8400 9075 9000
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6900 9600 6900 8700
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 7800 5700 8400
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 7800 9000 8400
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 600 1425 1200
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 600 1500 1200
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 0 1500 600
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3675 600 3600 600 3600 1200 3675 1200
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 0 3600 600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 900 9300 900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 600 8400 600 8400 1200 8475 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 750 8400 750 8400 1050 7500 1050 7500 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 600 7500 600 7500 1200 7575 1200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
3600 750 4500 750 4500 1050 3600 1050 3600 750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 600 4500 600 4500 1200 4575 1200
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 3600 1500 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 3900 9300 3900
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 3600 8400 3600 8400 4200 8475 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 3750 8400 3750 8400 4050 7500 4050 7500 3750
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 3600 7500 3600 7500 4200 7575 4200
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 3600 1425 4200
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 3600 2400 3600 2400 4200 2475 4200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
3000 4800 3000 3900
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5175 3600 5100 3600 5100 4200 5175 4200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2400 3750 5100 3750 5100 4050 2400 4050 2400 3750
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 3000 2400 3600
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 3000 5100 3600
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 6000 1500 6600
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 6300 9300 6300
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
8475 6000 8400 6000 8400 6600 8475 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
7500 6150 8400 6150 8400 6450 7500 6450 7500 6150
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7575 6000 7500 6000 7500 6600 7575 6600
|
||||||
|
2 1 0 4 0 7 51 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 6000 1425 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 6000 6600 6000 6600 6600 6675 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
6000 6150 6600 6150 6600 6450 6000 6450 6000 6150
|
||||||
|
2 1 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6075 6000 6000 6000 6000 6600 6075 6600
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
2400 6150 3300 6150 3300 6450 2400 6450 2400 6150
|
||||||
|
2 1 0 4 4 7 51 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 6000 3300 6000 3300 6600 3375 6600
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 6000 2400 6000 2400 6600 2475 6600
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 5400 6000 6000
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 -300 10800 -300 10800 12300 900 12300 900 -300
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 2160 2475 2400 BeforeFirstElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 2475 2175 Pos\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 165 1200 6975 12000 EmptyTrack\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 6975 11775 Pos\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1560 9075 10575 EndIsTrackMax\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 1575 10350 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 1800 1575 10575 BeginIsTrackMin\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1920 6975 9600 AfterLastElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 6975 9375 Pos\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 5775 7950 begin:2\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 5775 8175 BeginIsSegmentMax\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1560 9075 8175 EndIsTrackMax\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 4050 825 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 825 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 825 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 3750 3825 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 2850 6225 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 3825 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 6300 6225 [1]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 3825 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 7950 6225 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 2250 8625 [0]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 5250 8625 [2]\001
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 3600 8625 [1]\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 1575 150 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 1800 1575 375 BeginIsTrackMin\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 1800 3675 375 EndIsSegmentMin\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 120 1560 3075 4800 InsideElement\001
|
||||||
|
4 0 0 50 -1 12 14 0.0000 4 135 450 3075 4575 Pos\001
|
||||||
|
4 0 4 50 -1 12 14 0.0000 4 195 1050 2475 3150 begin:0\001
|
||||||
|
4 0 4 50 -1 14 12 0.0000 4 165 2040 2475 3375 BeginIsSegmentMin\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 1800 5175 3375 EndIsSegmentMax\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 165 2280 6075 5775 EndIsNextSegmentMin\001
|
|
@ -0,0 +1,69 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
90.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1350 6525 1575 7275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 6600 1425 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 6600 1500 7200
|
||||||
|
-6
|
||||||
|
6 8925 6525 9150 7275
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9000 6600 9000 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
9075 6600 9075 7200
|
||||||
|
-6
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1875 6600 1800 6600 1800 7200 1875 7200
|
||||||
|
2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2475 6600 2400 6600 2400 7200 2475 7200
|
||||||
|
2 2 0 0 0 7 60 -1 10 0.000 0 0 -1 0 0 5
|
||||||
|
1800 6750 2400 6750 2400 7050 1800 7050 1800 6750
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3375 6600 3300 6600 3300 7200 3375 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4575 6600 4500 6600 4500 7200 4575 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
7875 6600 7800 6600 7800 7200 7875 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
6675 6600 6600 6600 6600 7200 6675 7200
|
||||||
|
2 1 0 4 4 7 55 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5775 6600 5700 6600 5700 7200 5775 7200
|
||||||
|
2 2 0 0 4 4 62 -1 30 0.000 0 0 -1 0 0 5
|
||||||
|
5700 6975 7800 6975 7800 7050 5700 7050 5700 6975
|
||||||
|
2 2 0 0 4 4 62 -1 30 0.000 0 0 -1 0 0 5
|
||||||
|
3300 6750 6600 6750 6600 6825 3300 6825 3300 6750
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1200 6900 9300 6900
|
||||||
|
2 2 0 0 4 4 62 -1 30 0.000 0 0 -1 0 0 5
|
||||||
|
3300 6975 4500 6975 4500 7050 3300 7050 3300 6975
|
||||||
|
2 1 0 1 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 6000 5700 6600
|
||||||
|
2 1 0 1 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 6000 3300 6600
|
||||||
|
2 1 0 1 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 7275 3300 7800
|
||||||
|
2 1 0 1 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7800 7275 7800 7800
|
||||||
|
2 1 0 1 4 7 40 -1 -1 0.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
3300 7725 7800 7725
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
900 5700 9600 5700 9600 8400 900 8400 900 5700
|
||||||
|
4 1 0 40 -1 14 14 0.0000 4 180 450 2100 6825 [0]\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 180 450 3900 6750 [1]\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 180 450 3900 7125 [2]\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 180 450 6150 7125 [3]\001
|
||||||
|
4 0 4 40 -1 14 14 0.0000 4 195 1050 3375 6150 begin:1\001
|
||||||
|
4 0 4 40 -1 14 14 0.0000 4 195 1050 5775 6150 begin:3\001
|
||||||
|
4 1 4 40 -1 14 14 0.0000 4 150 2550 5550 7950 returned interval\001
|
||||||
|
4 0 4 40 -1 12 14 0.0000 4 180 1200 3300 6375 (return)\001
|
||||||
|
4 0 4 40 -1 12 14 0.0000 4 180 900 5700 6375 (call)\001
|
After Width: | Height: | Size: 3.9 KiB |
|
@ -0,0 +1,93 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
90.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 3975 2400 75 75 3900 2400 4050 2400
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 3975 3300 75 75 3900 3300 4050 3300
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 3975 3600 75 75 3900 3600 4050 3600
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 3000 750 75 75 2925 750 3075 750
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 2400 750 75 75 2325 750 2475 750
|
||||||
|
1 4 0 2 0 7 50 -1 -1 0.000 1 0.0000 1800 750 75 75 1725 750 1875 750
|
||||||
|
1 4 0 2 4 7 50 -1 -1 0.000 1 0.0000 7125 5550 75 75 7050 5550 7200 5550
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 2550 5100 2550
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 2850 5100 2850
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 3150 5100 3150
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 3450 5100 3450
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5100 1950 5100 3750 3000 3750 3000 1950 5100 1950
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1950 5100 1950 5100 2250 3000 2250 3000 1950
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6150 3750 8250 3750
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
8250 3150 8250 4350 6150 4350 6150 3150 8250 3150
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6150 3150 8250 3150 8250 3450 6150 3450 6150 3150
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
9000 5400 11100 5400 11100 5700 9000 5700 9000 5400
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
11100 5400 11100 6000 9000 6000 9000 5400 11100 5400
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
1 1 1.00 60.00 120.00
|
||||||
|
2400 825 2400 1950 2550 2100 3000 2100
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 600 2100 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 600 2700 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 600 3300 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3900 600 3900 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4500 600 4500 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 600 5100 900
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 600 5700 900
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1500 600 6300 600 6300 900 1500 900 1500 600
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
1500 300 2700 300 2700 600 1500 600 1500 300
|
||||||
|
2 2 0 2 0 7 50 -1 0 0.000 0 0 -1 0 0 5
|
||||||
|
6150 4800 8250 4800 8250 5100 6150 5100 6150 4800
|
||||||
|
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6150 5400 8250 5400
|
||||||
|
2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
8250 4800 8250 5700 6150 5700 6150 4800 8250 4800
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 8
|
||||||
|
1 1 1.00 60.00 120.00
|
||||||
|
4050 2400 6750 2400 6900 2250 6900 -150 6750 -300 2250 -300
|
||||||
|
2100 -150 2100 300
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 60.00 120.00
|
||||||
|
4050 3300 6150 3300
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 6
|
||||||
|
1 1 1.00 60.00 120.00
|
||||||
|
4050 3600 5250 3600 5400 3750 5400 4800 5550 4950 6150 4950
|
||||||
|
2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 60.00 120.00
|
||||||
|
7200 5550 9000 5550
|
||||||
|
2 2 0 0 0 32 100 -1 20 0.000 0 0 -1 0 0 5
|
||||||
|
1200 -450 11400 -450 11400 6150 1200 6150 1200 -450
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 900 3075 2775 net<b>\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 195 900 3075 3075 [8,10[\001
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 195 1800 3075 2175 TrackSegment\001
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 180 1650 6225 3375 AutoSegment\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 900 6225 3675 net<b>\001
|
||||||
|
4 0 0 50 -1 14 16 0.0000 4 225 990 6225 3975 _flags\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 165 1440 6450 4200 SegCanonical\001
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 195 1800 9075 5625 RoutingEvent\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 900 9075 5925 net<b>\001
|
||||||
|
4 1 7 40 -1 14 16 0.0000 4 165 825 2100 525 Track\001
|
||||||
|
4 0 7 40 -1 14 14 0.0000 4 195 1950 6225 5025 DataNegociate\001
|
||||||
|
4 0 0 50 -1 14 14 0.0000 4 150 900 6225 5325 net<b>\001
|
After Width: | Height: | Size: 9.9 KiB |
|
@ -0,0 +1,432 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
90.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 1350 300 8700 600
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 450 1500 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 525 1575 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7500 525 7650 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8025 525 8175 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8100 525 8250 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8175 525 8325 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7800 525 7950 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7875 525 8025 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7950 525 8100 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7575 525 7725 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7650 525 7800 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7725 525 7875 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6750 525 6900 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7275 525 7425 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7350 525 7500 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7425 525 7575 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7050 525 7200 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7125 525 7275 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
7200 525 7350 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6825 525 6975 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6900 525 7050 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6975 525 7125 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6000 525 6150 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6525 525 6675 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6600 525 6750 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6675 525 6825 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6300 525 6450 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6375 525 6525 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6450 525 6600 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6075 525 6225 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6150 525 6300 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6225 525 6375 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 525 5400 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5775 525 5925 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5850 525 6000 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5925 525 6075 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5550 525 5700 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5625 525 5775 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5700 525 5850 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5325 525 5475 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5400 525 5550 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5475 525 5625 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4500 525 4650 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5025 525 5175 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 525 5250 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5175 525 5325 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4800 525 4950 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4875 525 5025 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4950 525 5100 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4575 525 4725 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4650 525 4800 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4725 525 4875 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3750 525 3900 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4275 525 4425 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 525 4500 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4425 525 4575 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4050 525 4200 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4125 525 4275 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4200 525 4350 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3825 525 3975 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3900 525 4050 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3975 525 4125 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 525 3150 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3525 525 3675 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3600 525 3750 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3675 525 3825 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3300 525 3450 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3375 525 3525 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3450 525 3600 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3075 525 3225 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3150 525 3300 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3225 525 3375 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2250 525 2400 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2775 525 2925 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2850 525 3000 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2925 525 3075 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 525 2700 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2625 525 2775 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 525 2850 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2325 525 2475 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 525 2550 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2475 525 2625 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 525 1650 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2025 525 2175 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 525 2250 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2175 525 2325 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1800 525 1950 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1875 525 2025 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1950 525 2100 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1575 525 1725 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 525 1800 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1725 525 1875 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8250 525 8400 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8325 525 8475 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8400 525 8550 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8475 525 8625 375
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
8550 525 8625 450
|
||||||
|
2 2 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1425 375 8625 375 8625 525 1425 525 1425 375
|
||||||
|
-6
|
||||||
|
6 1350 1350 3300 1650
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2925 1575 3075 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3000 1575 3150 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3075 1575 3225 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2175 1575 2325 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2700 1575 2850 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2775 1575 2925 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2850 1575 3000 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2475 1575 2625 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 1575 2700 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2625 1575 2775 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2250 1575 2400 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2325 1575 2475 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 1575 2550 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 1575 1575 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1950 1575 2100 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2025 1575 2175 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2100 1575 2250 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1725 1575 1875 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1800 1575 1950 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1875 1575 2025 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 1575 1650 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1575 1575 1725 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 1575 1800 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1425 1500 1500 1425
|
||||||
|
2 1 0 1 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3150 1575 3225 1500
|
||||||
|
2 2 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1425 1425 3225 1425 3225 1575 1425 1575 1425 1425
|
||||||
|
-6
|
||||||
|
6 3000 2250 8700 2550
|
||||||
|
6 3075 2325 8625 2475
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8325 2475 8475 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8400 2475 8550 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8475 2475 8625 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7575 2475 7725 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8100 2475 8250 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8175 2475 8325 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8250 2475 8400 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7875 2475 8025 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7950 2475 8100 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8025 2475 8175 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7650 2475 7800 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7725 2475 7875 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7800 2475 7950 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6825 2475 6975 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7350 2475 7500 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7425 2475 7575 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7500 2475 7650 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7125 2475 7275 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7200 2475 7350 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7275 2475 7425 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6900 2475 7050 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6975 2475 7125 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
7050 2475 7200 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6075 2475 6225 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6600 2475 6750 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6675 2475 6825 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6750 2475 6900 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6375 2475 6525 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6450 2475 6600 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6525 2475 6675 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6150 2475 6300 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6225 2475 6375 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6300 2475 6450 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5325 2475 5475 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5850 2475 6000 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5925 2475 6075 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
6000 2475 6150 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5625 2475 5775 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5700 2475 5850 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5775 2475 5925 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5400 2475 5550 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5475 2475 5625 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5550 2475 5700 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4575 2475 4725 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5100 2475 5250 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5175 2475 5325 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5250 2475 5400 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4875 2475 5025 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4950 2475 5100 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
5025 2475 5175 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4650 2475 4800 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4725 2475 4875 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4800 2475 4950 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3825 2475 3975 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4350 2475 4500 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4425 2475 4575 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4500 2475 4650 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4125 2475 4275 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4200 2475 4350 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4275 2475 4425 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3900 2475 4050 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3975 2475 4125 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
4050 2475 4200 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3075 2475 3225 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3600 2475 3750 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3675 2475 3825 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3750 2475 3900 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3375 2475 3525 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3450 2475 3600 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3525 2475 3675 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3150 2475 3300 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3225 2475 3375 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3300 2475 3450 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
3075 2400 3150 2325
|
||||||
|
2 1 0 1 8 7 50 -1 -1 0.000 0 0 7 0 0 2
|
||||||
|
8550 2475 8625 2400
|
||||||
|
-6
|
||||||
|
2 2 0 2 8 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
3075 2325 8625 2325 8625 2475 3075 2475 3075 2325
|
||||||
|
-6
|
||||||
|
2 1 0 4 8 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3150 1500 3150 2400
|
||||||
|
2 1 3 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3150 150 3150 1500
|
||||||
|
2 1 3 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 1
|
||||||
|
1200 375
|
||||||
|
2 2 3 0 32 32 100 -1 20 2.000 0 0 -1 0 0 5
|
||||||
|
1200 0 8850 0 8850 3300 1200 3300 1200 0
|
||||||
|
4 2 8 50 -1 14 12 0.0000 4 120 1200 8625 2250 id:2 dll:0\001
|
||||||
|
4 0 8 50 -1 14 12 0.0000 4 120 600 3300 2100 dll:1\001
|
||||||
|
4 0 8 50 -1 14 12 0.0000 4 120 480 3300 1875 id:1\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1200 1425 300 id:0 dll:0\001
|
||||||
|
4 0 1 50 -1 14 12 0.0000 4 120 1200 1425 1350 id:0 dll:0\001
|
||||||
|
4 0 0 50 -1 14 12 0.0000 4 165 2160 1350 3150 dll = _dogLegLevel\001
|
After Width: | Height: | Size: 4.0 KiB |
|
@ -1,57 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
3825 2625 3975 2625 3975 2775 3825 2775 3825 2625
|
|
||||||
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
|
||||||
3900 2700 11400 2700
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
5025 2625 5175 2625 5175 2775 5025 2775 5025 2625
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
11325 2625 11475 2625 11475 2775 11325 2775 11325 2625
|
|
||||||
2 2 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 5
|
|
||||||
3600 2100 6300 2100 6300 3000 3600 3000 3600 2100
|
|
||||||
2 2 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 5
|
|
||||||
3000 1200 4800 1200 4800 3600 3000 3600 3000 1200
|
|
||||||
2 2 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 5
|
|
||||||
10800 2100 12000 2100 12000 3600 10800 3600 10800 2100
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
4800 3675 4800 4500
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
6300 3075 6300 4500
|
|
||||||
2 1 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
10800 3675 10800 4500
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 7 1 0 2
|
|
||||||
3 1 4.00 60.00 120.00
|
|
||||||
12900 4800 10800 4800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
4800 4800 10800 4800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
4800 4500 4800 5100
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
10800 4500 10800 5100
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 7 1 0 2
|
|
||||||
3 1 4.00 60.00 120.00
|
|
||||||
2700 4800 4800 4800
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2100 600 13500 600 13500 5400 2100 5400 2100 600
|
|
||||||
3 0 0 1 0 7 60 -1 -1 0.000 0 0 0 3
|
|
||||||
3900 2700 3375 2025 3000 1200
|
|
||||||
0.000 1.000 0.000
|
|
||||||
3 0 0 1 0 7 60 -1 -1 4.000 0 0 0 3
|
|
||||||
5025 2700 4350 2550 3600 2100
|
|
||||||
0.000 1.000 0.000
|
|
||||||
3 0 0 1 0 7 60 -1 -1 4.000 0 0 0 3
|
|
||||||
11400 2700 11025 2475 10800 2100
|
|
||||||
0.000 1.000 0.000
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 120 630 4725 4500 CBXMax\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 120 630 6225 4500 CBXMax\001
|
|
||||||
4 0 0 50 -1 14 12 1.5708 4 135 630 10725 4500 CBXmin\001
|
|
||||||
4 2 4 50 -1 14 18 0.0000 4 180 1485 4500 5100 leftBound\001
|
|
||||||
4 0 4 50 -1 14 18 0.0000 4 240 1650 11100 5100 rightBound\001
|
|
|
@ -1,51 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
3825 2625 3975 2625 3975 2775 3825 2775 3825 2625
|
|
||||||
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
|
||||||
3900 2700 11400 2700
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
5025 2625 5175 2625 5175 2775 5025 2775 5025 2625
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
11325 2625 11475 2625 11475 2775 11325 2775 11325 2625
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 7 1 0 2
|
|
||||||
3 1 4.00 60.00 120.00
|
|
||||||
12900 4800 10800 4800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
4800 4800 10800 4800
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
4800 4500 4800 5100
|
|
||||||
2 1 0 1 4 7 50 -1 -1 4.000 0 0 7 0 0 2
|
|
||||||
10800 4500 10800 5100
|
|
||||||
2 1 0 1 4 7 50 -1 -1 0.000 0 0 7 1 0 2
|
|
||||||
3 1 4.00 60.00 120.00
|
|
||||||
2700 4800 4800 4800
|
|
||||||
2 1 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 2
|
|
||||||
4800 3900 10800 3900
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
10725 3825 10875 3825 10875 3975 10725 3975 10725 3825
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 7 0 0 5
|
|
||||||
4725 3825 4875 3825 4875 3975 4725 3975 4725 3825
|
|
||||||
2 2 0 4 0 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
4650 3750 4950 3750 4950 4050 4650 4050 4650 3750
|
|
||||||
2 1 3 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
|
||||||
3900 2700 4800 3900
|
|
||||||
2 1 3 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
|
||||||
5100 2700 4800 3900
|
|
||||||
2 1 3 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 2
|
|
||||||
11400 2700 10800 3900
|
|
||||||
2 1 0 2 0 7 60 -1 -1 6.000 0 0 -1 1 0 2
|
|
||||||
3 1 2.00 120.00 240.00
|
|
||||||
3300 2100 3300 4500
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2100 1500 13500 1500 13500 5400 2100 5400 2100 1500
|
|
||||||
4 2 4 50 -1 14 18 0.0000 4 180 1485 4500 5100 leftBound\001
|
|
||||||
4 0 4 50 -1 14 18 0.0000 4 240 1650 11100 5100 rightBound\001
|
|
||||||
4 1 0 60 -1 14 14 1.5708 4 150 1890 3225 3150 maximal shrunk\001
|
|
|
@ -1,105 +0,0 @@
|
||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
3525 3225 3675 3225 3675 3375 3525 3375 3525 3225
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
5025 3225 5175 3225 5175 3375 5025 3375 5025 3225
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
9825 3225 9975 3225 9975 3375 9825 3375 9825 3225
|
|
||||||
2 1 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
3600 3300 9900 3300
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
3600 3300 3600 600
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
5100 4500 5100 1500
|
|
||||||
2 1 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 2
|
|
||||||
9900 5100 9900 3300
|
|
||||||
2 2 0 4 0 7 50 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
7125 3225 7275 3225 7275 3375 7125 3375 7125 3225
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
7050 3000 7350 3000 7350 3600 7050 3600 7050 3000
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
3525 525 3675 525 3675 675 3525 675 3525 525
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
5025 1425 5175 1425 5175 1575 5025 1575 5025 1425
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
5025 4425 5175 4425 5175 4575 5025 4575 5025 4425
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
3525 2025 3675 2025 3675 2175 3525 2175 3525 2025
|
|
||||||
2 2 0 4 4 7 60 -1 -1 10.000 0 0 -1 0 0 5
|
|
||||||
9825 5025 9975 5025 9975 5175 9825 5175 9825 5025
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
3750 600 11700 600
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
5250 1500 11700 1500
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
10050 3300 11700 3300
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
10050 5100 11700 5100
|
|
||||||
2 1 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
3600 3450 3600 6000
|
|
||||||
2 1 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
5100 4650 5100 6000
|
|
||||||
2 1 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
7200 3675 7200 6000
|
|
||||||
2 1 0 1 0 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
9900 5250 9900 6000
|
|
||||||
2 1 0 1 4 7 60 -1 -1 4.000 0 0 -1 0 0 2
|
|
||||||
5250 4500 11700 4500
|
|
||||||
2 1 0 1 0 7 60 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 0 1.00 120.00 240.00
|
|
||||||
2700 5700 10500 5700
|
|
||||||
2 1 0 1 4 7 60 -1 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 0 1.00 120.00 240.00
|
|
||||||
3000 6000 3000 0
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 4500 3075 4500
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 5100 3075 5100
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 2100 3075 2100
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 3300 3075 3300
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 600 3075 600
|
|
||||||
2 1 0 4 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
3600 5625 3600 5775
|
|
||||||
2 1 0 4 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
5100 5625 5100 5775
|
|
||||||
2 1 0 4 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
9900 5625 9900 5775
|
|
||||||
2 1 0 4 0 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
7200 5625 7200 5775
|
|
||||||
2 1 0 4 4 7 60 -1 -1 0.000 0 0 -1 0 0 2
|
|
||||||
2925 1500 3075 1500
|
|
||||||
2 2 0 2 0 7 60 -1 -1 6.000 0 0 -1 0 0 5
|
|
||||||
2100 -600 12300 -600 12300 6600 2100 6600 2100 -600
|
|
||||||
4 0 4 60 -1 18 14 0.0000 4 210 1260 10200 1425 right @7: 16\001
|
|
||||||
4 0 4 60 -1 18 14 0.0000 4 210 1260 10200 525 right @2: 19\001
|
|
||||||
4 0 4 60 -1 18 14 0.0000 4 210 1800 10200 3225 punctual @14: 10\001
|
|
||||||
4 0 4 60 -1 18 14 0.0000 4 180 1080 10200 5025 left @23: 4\001
|
|
||||||
4 0 4 60 -1 18 14 0.0000 4 180 960 10200 4425 left @7: 6\001
|
|
||||||
4 1 4 60 -1 18 14 0.0000 4 165 150 3450 1725 A\001
|
|
||||||
4 1 4 60 -1 18 14 0.0000 4 165 150 3750 2775 B\001
|
|
||||||
4 1 4 60 -1 18 14 0.0000 4 165 165 5250 2475 C\001
|
|
||||||
4 1 4 60 -1 18 14 0.0000 4 165 165 7500 3600 D\001
|
|
||||||
4 1 4 60 -1 18 14 0.0000 4 165 135 9750 4200 E\001
|
|
||||||
4 1 0 60 -1 18 14 0.0000 4 150 120 3600 6300 2\001
|
|
||||||
4 1 0 60 -1 18 14 0.0000 4 150 120 5100 6300 7\001
|
|
||||||
4 1 0 60 -1 18 14 0.0000 4 150 240 7200 6300 14\001
|
|
||||||
4 1 0 60 -1 18 14 0.0000 4 150 240 9900 6300 23\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 120 2850 5100 4\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 120 2850 4500 6\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 240 2850 3300 10\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 240 2850 2100 14\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 240 2850 600 19\001
|
|
||||||
4 1 4 60 -1 14 14 0.0000 4 135 135 3000 -75 Y\001
|
|
||||||
4 1 0 60 -1 14 14 0.0000 4 135 135 10650 5775 X\001
|
|
||||||
4 2 4 60 -1 18 14 0.0000 4 150 240 2850 1500 16\001
|
|
|
@ -0,0 +1,271 @@
|
||||||
|
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
0 32 #ffffdd
|
||||||
|
6 450 3000 750 4350
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3225 675 3075
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3300 675 3150
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3375 675 3225
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3450 675 3300
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3525 675 3375
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3600 675 3450
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3675 675 3525
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3750 675 3600
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3825 675 3675
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3900 675 3750
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3975 675 3825
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 4050 675 3900
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 4125 675 3975
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 4200 675 4050
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 4275 675 4125
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 3150 600 3075
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
600 4275 675 4200
|
||||||
|
2 2 0 2 1 32 50 -1 -1 6.000 0 0 -1 0 0 5
|
||||||
|
525 3075 675 3075 675 4275 525 4275 525 3075
|
||||||
|
-6
|
||||||
|
6 1425 3075 1875 3375
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 3300 1800 3300
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 3150 1650 3300
|
||||||
|
-6
|
||||||
|
6 2325 3225 2775 3525
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 3300 2700 3300
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 3450 2550 3300
|
||||||
|
-6
|
||||||
|
6 450 900 750 2250
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1125 675 975
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1200 675 1050
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1275 675 1125
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1350 675 1200
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1425 675 1275
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1500 675 1350
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1575 675 1425
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1650 675 1500
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1725 675 1575
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1800 675 1650
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1875 675 1725
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1950 675 1800
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 2025 675 1875
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 2100 675 1950
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 2175 675 2025
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
525 1050 600 975
|
||||||
|
2 1 0 1 1 32 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
600 2175 675 2100
|
||||||
|
2 2 0 2 1 32 50 -1 -1 6.000 0 0 -1 0 0 5
|
||||||
|
525 975 675 975 675 2175 525 2175 525 975
|
||||||
|
-6
|
||||||
|
6 1425 975 1875 1275
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1500 1200 1800 1200
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 1050 1650 1200
|
||||||
|
-6
|
||||||
|
6 2325 1125 2775 1425
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2400 1200 2700 1200
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 1350 2550 1200
|
||||||
|
-6
|
||||||
|
6 -825 6450 7425 7575
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
-750 6525 -150 6525
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
-750 6825 -150 6825
|
||||||
|
2 1 0 2 4 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
-750 7125 -150 7125
|
||||||
|
2 2 0 0 0 0 60 -1 4 2.000 0 0 -1 0 0 5
|
||||||
|
-750 7350 -150 7350 -150 7425 -750 7425 -750 7350
|
||||||
|
4 0 0 60 -1 18 12 0.0000 4 195 2115 0 6600 parallel AutoSegments\001
|
||||||
|
4 0 0 60 -1 18 12 0.0000 4 195 2715 0 6900 perpandicular AutoSegments\001
|
||||||
|
4 0 0 60 -1 18 12 0.0000 4 195 2700 0 7200 newly created AutoSegments\001
|
||||||
|
4 0 0 60 -1 18 12 0.0000 4 195 1440 0 7500 TrackSegments\001
|
||||||
|
4 0 0 60 -1 14 12 0.0000 4 165 2880 4050 6600 dogleg[N+0] = 10 (paral)\001
|
||||||
|
4 0 0 60 -1 14 12 0.0000 4 165 3120 4050 6900 dogleg[N+1] = 20 (perpand)\001
|
||||||
|
4 0 0 60 -1 14 12 0.0000 4 165 3360 4050 7200 dogleg[N+2] = 21 (new paral)\001
|
||||||
|
-6
|
||||||
|
2 2 0 4 0 32 40 -1 -1 10.000 0 0 -1 0 0 5
|
||||||
|
525 3225 675 3225 675 3375 525 3375 525 3225
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1050 3300 1050 3000 1350 3000 1350 3300
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 3300 1650 2550
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 3300 2550 4050
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 3300 2550 3300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1950 3300 1950 3000 2250 3000 2250 3300
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
2925 3300 2925 3000 3225 3000 3225 3300
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2625 3300 3450 3300
|
||||||
|
2 1 3 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
3450 5550 450 5550
|
||||||
|
2 1 3 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
0 0 1.00 60.00 120.00
|
||||||
|
6150 5550 3450 5550
|
||||||
|
2 1 0 2 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3450 3300 3450 4800
|
||||||
|
2 1 0 4 4 32 40 -1 -1 0.000 0 0 -1 0 0 3
|
||||||
|
3300 3300 3450 3300 3450 3450
|
||||||
|
2 1 0 2 4 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3450 4800 4350 4800
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 4800 4350 4050
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 4800 5250 4050
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6150 4800 6150 5550
|
||||||
|
2 1 0 4 0 32 40 -1 -1 0.000 0 0 -1 0 0 3
|
||||||
|
6000 4800 6150 4800 6150 4950
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4200 4800 4500 4800
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 4650 4350 4800
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 4800 5250 4800
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4650 4800 4650 4500 4950 4500 4950 4800
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 4800 5400 4800
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 4650 5250 4800
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 4800 6150 4800
|
||||||
|
2 1 0 4 4 32 40 -1 -1 0.000 0 0 -1 0 0 3
|
||||||
|
3600 4800 3450 4800 3450 4650
|
||||||
|
2 1 0 1 4 7 50 -1 -1 4.000 0 0 -1 0 0 4
|
||||||
|
3450 4200 3150 4200 3150 3900 3450 3900
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
675 3300 1650 3300
|
||||||
|
2 1 0 1 4 7 50 -1 -1 4.000 0 0 -1 0 0 4
|
||||||
|
3750 4800 3750 4500 4050 4500 4050 4800
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5550 4800 5550 4500 5850 4500 5850 4800
|
||||||
|
2 2 0 4 0 32 40 -1 -1 10.000 0 0 -1 0 0 5
|
||||||
|
525 1125 675 1125 675 1275 525 1275 525 1125
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1050 1200 1050 900 1350 900 1350 1200
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
3450 1200 4350 1200
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 1200 3450 1200
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 1650 450
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
2550 1200 2550 1950
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 1200 4350 450
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 1200 5250 450
|
||||||
|
2 1 0 2 1 7 50 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
6150 1200 6150 1950
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
675 1200 1650 1200
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
1650 1200 2550 1200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
1950 1200 1950 900 2250 900 2250 1200
|
||||||
|
2 1 0 4 0 32 40 -1 -1 0.000 0 0 -1 0 0 3
|
||||||
|
6000 1200 6150 1200 6150 1350
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4200 1200 4500 1200
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 1050 4350 1200
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
4350 1200 5250 1200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
4650 1200 4650 900 4950 900 4950 1200
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5100 1200 5400 1200
|
||||||
|
2 1 0 4 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 1050 5250 1200
|
||||||
|
2 1 0 2 0 32 40 -1 -1 0.000 0 0 -1 0 0 2
|
||||||
|
5250 1200 6150 1200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
5550 1200 5550 900 5850 900 5850 1200
|
||||||
|
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
|
||||||
|
3300 1200 3300 900 3600 900 3600 1200
|
||||||
|
2 1 3 1 4 7 50 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3450 2700 3450 5700
|
||||||
|
2 2 0 0 4 4 60 -1 35 2.000 0 0 -1 0 0 5
|
||||||
|
3600 3300 3675 3300 3675 4800 3600 4800 3600 3300
|
||||||
|
2 2 0 0 0 0 60 -1 4 2.000 0 0 -1 0 0 5
|
||||||
|
3450 5025 6150 5025 6150 5100 3450 5100 3450 5025
|
||||||
|
2 1 0 1 0 0 60 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
2925 3300 2925 3525
|
||||||
|
2 1 0 1 0 0 60 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
5550 4800 5550 5100
|
||||||
|
2 1 0 1 4 0 60 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
3450 4200 3675 4200
|
||||||
|
2 2 0 0 0 0 60 -1 4 2.000 0 0 -1 0 0 5
|
||||||
|
600 1500 6150 1500 6150 1425 600 1425 600 1500
|
||||||
|
2 1 0 1 0 0 60 -1 -1 4.000 0 0 -1 0 0 2
|
||||||
|
5550 1200 5550 1500
|
||||||
|
2 2 0 0 4 4 60 -1 35 2.000 0 0 -1 0 0 5
|
||||||
|
3450 3525 3450 3600 600 3600 600 3525 3450 3525
|
||||||
|
2 2 0 0 0 32 70 -1 21 2.000 0 0 -1 0 0 5
|
||||||
|
-900 300 7500 300 7500 7800 -900 7800 -900 300
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 1200 3225 14\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 2100 3225 13\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 3075 3225 12\001
|
||||||
|
4 1 0 50 -1 14 10 0.0000 4 105 945 1950 5700 left side\001
|
||||||
|
4 1 0 50 -1 14 10 0.0000 4 135 1050 4800 5700 right side\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 4800 4725 11\001
|
||||||
|
4 1 4 50 -1 14 12 0.0000 4 120 240 3300 4125 20\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 5700 4725 10\001
|
||||||
|
4 1 4 50 -1 14 12 0.0000 4 120 240 3900 4725 21\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 1200 1125 14\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 2100 1125 13\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 4800 1125 11\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 5700 1125 10\001
|
||||||
|
4 1 0 50 -1 14 12 0.0000 4 120 240 3450 1125 12\001
|
||||||
|
4 1 0 50 -1 14 10 0.0000 4 90 105 5700 1350 C\001
|
||||||
|
4 1 0 50 -1 14 10 0.0000 4 90 105 5700 4950 C\001
|
||||||
|
4 1 4 50 -1 14 10 0.0000 4 90 105 3525 4125 C\001
|
||||||
|
4 1 4 50 -1 14 10 0.0000 4 90 105 3075 3450 C\001
|
After Width: | Height: | Size: 14 KiB |
|
@ -1,8 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
@ -15,27 +14,26 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/Error.h"
|
#include "hurricane/Warning.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/Technology.h"
|
||||||
#include "hurricane/Technology.h"
|
#include "hurricane/BasicLayer.h"
|
||||||
#include "hurricane/BasicLayer.h"
|
#include "hurricane/RegularLayer.h"
|
||||||
#include "hurricane/RegularLayer.h"
|
#include "hurricane/Horizontal.h"
|
||||||
#include "hurricane/Horizontal.h"
|
#include "hurricane/Vertical.h"
|
||||||
#include "hurricane/Vertical.h"
|
#include "hurricane/NetExternalComponents.h"
|
||||||
#include "hurricane/NetExternalComponents.h"
|
#include "hurricane/Instance.h"
|
||||||
#include "hurricane/Instance.h"
|
#include "hurricane/Plug.h"
|
||||||
#include "hurricane/Plug.h"
|
#include "hurricane/Path.h"
|
||||||
#include "hurricane/Path.h"
|
#include "hurricane/Query.h"
|
||||||
#include "hurricane/Query.h"
|
#include "crlcore/AllianceFramework.h"
|
||||||
#include "crlcore/AllianceFramework.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/TrackFixedSegment.h"
|
||||||
#include "kite/TrackFixedSegment.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -43,6 +41,8 @@ namespace {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using Hurricane::tab;
|
using Hurricane::tab;
|
||||||
using Hurricane::inltrace;
|
using Hurricane::inltrace;
|
||||||
|
using Hurricane::ltracein;
|
||||||
|
using Hurricane::ltraceout;
|
||||||
using Hurricane::ForEachIterator;
|
using Hurricane::ForEachIterator;
|
||||||
using Hurricane::Warning;
|
using Hurricane::Warning;
|
||||||
using Hurricane::Error;
|
using Hurricane::Error;
|
||||||
|
@ -72,7 +72,6 @@ namespace {
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "::GlobalNetTable".
|
// Class : "::GlobalNetTable".
|
||||||
|
|
||||||
|
|
||||||
class GlobalNetTable {
|
class GlobalNetTable {
|
||||||
public:
|
public:
|
||||||
GlobalNetTable ( Cell* );
|
GlobalNetTable ( Cell* );
|
||||||
|
@ -208,7 +207,7 @@ namespace {
|
||||||
|
|
||||||
if ( _vddi == NULL ) cerr << Error("Missing <vddi>/<vdd> net at top level." ) << endl;
|
if ( _vddi == NULL ) cerr << Error("Missing <vddi>/<vdd> net at top level." ) << endl;
|
||||||
if ( _vssi == NULL ) cerr << Error("Missing <vssi>/<vss> net at top level." ) << endl;
|
if ( _vssi == NULL ) cerr << Error("Missing <vssi>/<vss> net at top level." ) << endl;
|
||||||
if ( _ckc == NULL ) cerr << Warning("No <ck> net at top level." ) << endl;
|
if ( _ckc == NULL ) cparanoid << Warning("No <ck> net at top level." ) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -257,23 +256,23 @@ namespace {
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "::PowerRailsPlanes".
|
// Class : "::PowerRailsPlanes".
|
||||||
|
|
||||||
|
|
||||||
class PowerRailsPlanes {
|
class PowerRailsPlanes {
|
||||||
private:
|
public:
|
||||||
class Rails;
|
class Rails;
|
||||||
class Plane;
|
class Plane;
|
||||||
|
|
||||||
class Rail {
|
class Rail {
|
||||||
public:
|
public:
|
||||||
Rail ( Rails*, DbU::Unit axis, DbU::Unit width );
|
Rail ( Rails*, DbU::Unit axis, DbU::Unit width );
|
||||||
inline DbU::Unit getAxis () const;
|
inline DbU::Unit getAxis () const;
|
||||||
inline DbU::Unit getWidth () const;
|
inline DbU::Unit getWidth () const;
|
||||||
inline Rails* getRails () const;
|
inline Rails* getRails () const;
|
||||||
inline RoutingPlane* getRoutingPlane () const;
|
inline RoutingPlane* getRoutingPlane () const;
|
||||||
inline Constant::Direction getDirection () const;
|
inline unsigned int getDirection () const;
|
||||||
inline Net* getNet () const;
|
inline Net* getNet () const;
|
||||||
void merge ( DbU::Unit source, DbU::Unit target );
|
void merge ( DbU::Unit source, DbU::Unit target );
|
||||||
void doLayout ( const Layer* );
|
void doLayout ( const Layer* );
|
||||||
|
string _getString () const;
|
||||||
private:
|
private:
|
||||||
Rails* _rails;
|
Rails* _rails;
|
||||||
DbU::Unit _axis;
|
DbU::Unit _axis;
|
||||||
|
@ -297,41 +296,47 @@ namespace {
|
||||||
DbU::Unit _width;
|
DbU::Unit _width;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
public:
|
||||||
class Rails {
|
class Rails {
|
||||||
public:
|
public:
|
||||||
Rails ( Plane*, Constant::Direction, Net* );
|
Rails ( Plane*, unsigned int direction, Net* );
|
||||||
~Rails ();
|
~Rails ();
|
||||||
inline Plane* getPlane ();
|
inline Plane* getPlane ();
|
||||||
inline RoutingPlane* getRoutingPlane ();
|
inline RoutingPlane* getRoutingPlane ();
|
||||||
inline Constant::Direction getDirection () const;
|
inline unsigned int getDirection () const;
|
||||||
inline Net* getNet () const;
|
inline Net* getNet () const;
|
||||||
void merge ( const Box& );
|
void merge ( const Box& );
|
||||||
void doLayout ( const Layer* );
|
void doLayout ( const Layer* );
|
||||||
private:
|
private:
|
||||||
Plane* _plane;
|
Plane* _plane;
|
||||||
Constant::Direction _direction;
|
unsigned int _direction;
|
||||||
Net* _net;
|
Net* _net;
|
||||||
vector<Rail*> _rails;
|
vector<Rail*> _rails;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
public:
|
||||||
class Plane {
|
class Plane {
|
||||||
public:
|
public:
|
||||||
Plane ( const Layer*, RoutingPlane* );
|
typedef map<Net*,Rails*,Net::CompareById> RailsMap;
|
||||||
~Plane ();
|
public:
|
||||||
inline const Layer* getLayer () const;
|
Plane ( const Layer*, RoutingPlane* );
|
||||||
inline RoutingPlane* getRoutingPlane ();
|
~Plane ();
|
||||||
inline Constant::Direction getDirection () const;
|
inline const Layer* getLayer () const;
|
||||||
void merge ( const Box&, Net* );
|
inline RoutingPlane* getRoutingPlane ();
|
||||||
void doLayout ();
|
inline unsigned int getDirection () const;
|
||||||
|
inline unsigned int getPowerDirection () const;
|
||||||
|
void merge ( const Box&, Net* );
|
||||||
|
void doLayout ();
|
||||||
private:
|
private:
|
||||||
const Layer* _layer;
|
const Layer* _layer;
|
||||||
RoutingPlane* _routingPlane;
|
RoutingPlane* _routingPlane;
|
||||||
map<Net*,Rails*> _horizontalRails;
|
RailsMap _horizontalRails;
|
||||||
map<Net*,Rails*> _verticalRails;
|
RailsMap _verticalRails;
|
||||||
|
unsigned int _powerDirection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef map<const BasicLayer*,Plane*,BasicLayer::CompareByMask> PlanesMap;
|
||||||
public:
|
public:
|
||||||
PowerRailsPlanes ( KiteEngine* );
|
PowerRailsPlanes ( KiteEngine* );
|
||||||
~PowerRailsPlanes ();
|
~PowerRailsPlanes ();
|
||||||
|
@ -342,73 +347,104 @@ namespace {
|
||||||
void merge ( const Box&, Net* );
|
void merge ( const Box&, Net* );
|
||||||
void doLayout ();
|
void doLayout ();
|
||||||
private:
|
private:
|
||||||
KiteEngine* _kite;
|
KiteEngine* _kite;
|
||||||
GlobalNetTable _globalNets;
|
GlobalNetTable _globalNets;
|
||||||
map<const BasicLayer*,Plane*> _planes;
|
PlanesMap _planes;
|
||||||
Plane* _activePlane;
|
Plane* _activePlane;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // Anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
PowerRailsPlanes::Rail::Rail ( Rails* rails, DbU::Unit axis, DbU::Unit width )
|
PowerRailsPlanes::Rail::Rail ( Rails* rails, DbU::Unit axis, DbU::Unit width )
|
||||||
: _rails (rails)
|
: _rails (rails)
|
||||||
, _axis (axis)
|
, _axis (axis)
|
||||||
, _width (width)
|
, _width (width)
|
||||||
, _chunks()
|
, _chunks()
|
||||||
{
|
{
|
||||||
ltrace(300) << " new Rail " << (void*)this
|
ltrace(300) << " new Rail "
|
||||||
<< " @" << DbU::getValueString(axis)
|
<< " @" << DbU::getValueString(axis)
|
||||||
<< " " << getRoutingPlane()->getLayer()->getName()
|
<< " " << getRoutingPlane()->getLayer()->getName()
|
||||||
<< " " << getRails()->getNet()
|
<< " " << getRails()->getNet()
|
||||||
<< " " << getString(getDirection()) << endl;
|
<< " " << ((getDirection()==KbHorizontal) ? "Horizontal" : "Vertical")<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DbU::Unit PowerRailsPlanes::Rail::getAxis () const { return _axis; }
|
inline DbU::Unit PowerRailsPlanes::Rail::getAxis () const { return _axis; }
|
||||||
inline DbU::Unit PowerRailsPlanes::Rail::getWidth () const { return _width; }
|
inline DbU::Unit PowerRailsPlanes::Rail::getWidth () const { return _width; }
|
||||||
inline PowerRailsPlanes::Rails* PowerRailsPlanes::Rail::getRails () const { return _rails; }
|
inline PowerRailsPlanes::Rails* PowerRailsPlanes::Rail::getRails () const { return _rails; }
|
||||||
inline RoutingPlane* PowerRailsPlanes::Rail::getRoutingPlane () const { return _rails->getRoutingPlane(); }
|
inline RoutingPlane* PowerRailsPlanes::Rail::getRoutingPlane () const { return _rails->getRoutingPlane(); }
|
||||||
inline Constant::Direction PowerRailsPlanes::Rail::getDirection () const { return _rails->getDirection(); }
|
inline unsigned int PowerRailsPlanes::Rail::getDirection () const { return _rails->getDirection(); }
|
||||||
inline Net* PowerRailsPlanes::Rail::getNet () const { return _rails->getNet(); }
|
inline Net* PowerRailsPlanes::Rail::getNet () const { return _rails->getNet(); }
|
||||||
|
|
||||||
|
|
||||||
void PowerRailsPlanes::Rail::merge ( DbU::Unit source, DbU::Unit target )
|
void PowerRailsPlanes::Rail::merge ( DbU::Unit source, DbU::Unit target )
|
||||||
{
|
{
|
||||||
Interval chunkMerge ( source, target );
|
Interval chunkToMerge ( source, target );
|
||||||
ltrace(300) << " Rail::merge() " << chunkMerge << endl;
|
ltrace(300) << " Rail::merge() "
|
||||||
|
<< ((getDirection()==KbHorizontal) ? "Horizontal" : "Vertical")
|
||||||
|
<< " " << chunkToMerge << endl;
|
||||||
|
ltrace(300) << " | " << _getString() << endl;
|
||||||
|
|
||||||
list<Interval>::iterator imerge = _chunks.end();
|
list<Interval>::iterator imerge = _chunks.end();
|
||||||
list<Interval>::iterator ichunk = _chunks.begin();
|
list<Interval>::iterator ichunk = _chunks.begin();
|
||||||
|
|
||||||
while ( ichunk != _chunks.end() ) {
|
while ( ichunk != _chunks.end() ) {
|
||||||
if ( chunkMerge.getVMax() < (*ichunk).getVMin() ) {
|
if (imerge == _chunks.end()) {
|
||||||
_chunks.insert ( ichunk, chunkMerge );
|
if (chunkToMerge.getVMax() < (*ichunk).getVMin()) {
|
||||||
break;
|
ltrace(300) << " | Insert before " << *ichunk << endl;
|
||||||
|
imerge = _chunks.insert( ichunk, chunkToMerge );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chunkToMerge.intersect(*ichunk)) {
|
||||||
|
ltrace(300) << " | Merge with " << *ichunk << endl;
|
||||||
|
imerge = ichunk;
|
||||||
|
(*imerge).merge( chunkToMerge );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (chunkToMerge.getVMax() >= (*ichunk).getVMin()) {
|
||||||
|
(*imerge).merge( *ichunk );
|
||||||
|
ltrace(300) << " | Absorb (erase) " << *ichunk << endl;
|
||||||
|
ichunk = _chunks.erase( ichunk );
|
||||||
|
continue;
|
||||||
|
} else
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( chunkMerge.intersect(*ichunk) ) {
|
// if (chunkToMerge.intersect(*ichunk)) {
|
||||||
if ( imerge == _chunks.end() ) {
|
// if (imerge == _chunks.end()) {
|
||||||
imerge = ichunk;
|
// ltrace(300) << " | Merge with " << *ichunk << endl;
|
||||||
(*imerge).merge ( chunkMerge );
|
// imerge = ichunk;
|
||||||
} else {
|
// (*imerge).merge( chunkToMerge );
|
||||||
(*imerge).merge ( *ichunk );
|
// } else {
|
||||||
ichunk = _chunks.erase ( ichunk );
|
// (*imerge).merge( *ichunk );
|
||||||
continue;
|
// ltrace(300) << " | Absorb (erase) " << *ichunk << endl;
|
||||||
}
|
// ichunk = _chunks.erase( ichunk );
|
||||||
}
|
// continue;
|
||||||
ichunk++;
|
// }
|
||||||
|
// }
|
||||||
|
++ichunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( imerge == _chunks.end() ) {
|
if (imerge == _chunks.end()) {
|
||||||
_chunks.insert ( ichunk, chunkMerge );
|
_chunks.insert( ichunk, chunkToMerge );
|
||||||
ltrace(300) << " | Add on " << DbU::getValueString(_axis) << " " << chunkMerge << endl;
|
ltrace(300) << " | Insert at end " << DbU::getValueString(_axis) << " " << chunkToMerge << endl;
|
||||||
|
ltrace(300) << " | " << _getString() << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PowerRailsPlanes::Rail::doLayout ( const Layer* layer )
|
void PowerRailsPlanes::Rail::doLayout ( const Layer* layer )
|
||||||
{
|
{
|
||||||
ltrace(300) << "Doing layout of rail: " << (void*)this
|
ltrace(300) << "Doing layout of rail: "
|
||||||
<< " " << layer->getName()
|
<< " " << layer->getName()
|
||||||
<< " " << getString(getDirection()) << " @" << DbU::getValueString(_axis) << endl;
|
<< " " << ((getDirection()==KbHorizontal) ? "Horizontal" : "Vertical")
|
||||||
|
<< " @" << DbU::getValueString(_axis) << endl;
|
||||||
|
ltrace(300) << _getString() << endl;
|
||||||
|
|
||||||
Net* net = getNet();
|
Net* net = getNet();
|
||||||
RoutingPlane* plane = getRoutingPlane();
|
RoutingPlane* plane = getRoutingPlane();
|
||||||
|
@ -418,18 +454,33 @@ namespace {
|
||||||
- DbU::lambda(0.1);
|
- DbU::lambda(0.1);
|
||||||
DbU::Unit extension = layer->getExtentionCap();
|
DbU::Unit extension = layer->getExtentionCap();
|
||||||
//DbU::Unit extension = Session::getExtentionCap();
|
//DbU::Unit extension = Session::getExtentionCap();
|
||||||
unsigned int type = plane->getLayerGauge()->getType();
|
//unsigned int type = plane->getLayerGauge()->getType();
|
||||||
DbU::Unit axisMin = 0;
|
DbU::Unit axisMin = 0;
|
||||||
DbU::Unit axisMax = 0;
|
DbU::Unit axisMax = 0;
|
||||||
|
|
||||||
if ( type == Constant::PinOnly ) {
|
// if ( type == Constant::PinOnly ) {
|
||||||
ltrace(300) << " Layer is PinOnly." << endl;
|
// ltrace(300) << " Layer is PinOnly." << endl;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if ( getDirection() == Constant::Horizontal ) {
|
if ( getDirection() == KbHorizontal ) {
|
||||||
list<Interval>::iterator ichunk = _chunks.begin();
|
list<Interval>::iterator ichunk = _chunks.begin();
|
||||||
for ( ; ichunk != _chunks.end() ; ichunk++ ) {
|
list<Interval>::iterator ichunknext = ichunk;
|
||||||
|
++ichunknext;
|
||||||
|
|
||||||
|
for ( ; ichunk != _chunks.end() ; ++ichunk, ++ichunknext ) {
|
||||||
|
|
||||||
|
if (ichunknext != _chunks.end()) {
|
||||||
|
if ((*ichunk).intersect(*ichunknext))
|
||||||
|
cerr << Error( "Overlaping consecutive chunks in %s %s Rail @%s:\n"
|
||||||
|
" %s"
|
||||||
|
, getString(layer->getName()).c_str()
|
||||||
|
, ((getDirection()==KbHorizontal) ? "Horizontal" : "Vertical")
|
||||||
|
, DbU::getValueString(_axis).c_str()
|
||||||
|
, _getString().c_str()
|
||||||
|
) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin())
|
ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin())
|
||||||
<< ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl;
|
<< ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl;
|
||||||
|
|
||||||
|
@ -447,7 +498,7 @@ namespace {
|
||||||
axisMax = _axis + _width/2 + delta;
|
axisMax = _axis + _width/2 + delta;
|
||||||
|
|
||||||
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
||||||
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNext() ) {
|
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNextTrack() ) {
|
||||||
TrackElement* element = TrackFixedSegment::create ( track, segment );
|
TrackElement* element = TrackFixedSegment::create ( track, segment );
|
||||||
ltrace(300) << " Insert in " << track << "+" << element << endl;
|
ltrace(300) << " Insert in " << track << "+" << element << endl;
|
||||||
}
|
}
|
||||||
|
@ -472,15 +523,32 @@ namespace {
|
||||||
axisMax = _axis + _width/2 + delta;
|
axisMax = _axis + _width/2 + delta;
|
||||||
|
|
||||||
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
||||||
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNext() ) {
|
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNextTrack() ) {
|
||||||
TrackElement* element = TrackFixedSegment::create ( track, segment );
|
TrackElement* element = TrackFixedSegment::create ( track, segment );
|
||||||
ltrace(300) << " Insert in " << track << "+" << (void*)element << ":" << element << endl;
|
ltrace(300) << " Insert in " << track << "+" << element << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string PowerRailsPlanes::Rail::_getString () const
|
||||||
|
{
|
||||||
|
ostringstream os;
|
||||||
|
|
||||||
|
os << "<Rail " << ((getDirection()==KbHorizontal) ? "Horizontal" : "Vertical")
|
||||||
|
<< " @" << DbU::getValueString(_axis) << " ";
|
||||||
|
list<Interval>::const_iterator ichunk = _chunks.begin();
|
||||||
|
for ( ; ichunk != _chunks.end() ; ++ichunk ) {
|
||||||
|
if (ichunk != _chunks.begin()) os << " ";
|
||||||
|
os << "[" << DbU::getValueString((*ichunk).getVMin())
|
||||||
|
<< " " << DbU::getValueString((*ichunk).getVMax()) << "]";
|
||||||
|
}
|
||||||
|
os << ">";
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool PowerRailsPlanes::RailCompare::operator() ( const Rail* lhs, const Rail* rhs )
|
inline bool PowerRailsPlanes::RailCompare::operator() ( const Rail* lhs, const Rail* rhs )
|
||||||
{
|
{
|
||||||
if ( lhs->getAxis () < rhs->getAxis () ) return true;
|
if ( lhs->getAxis () < rhs->getAxis () ) return true;
|
||||||
|
@ -499,16 +567,16 @@ namespace {
|
||||||
{ return (rail->getAxis() == _axis) and (rail->getWidth() == _width); }
|
{ return (rail->getAxis() == _axis) and (rail->getWidth() == _width); }
|
||||||
|
|
||||||
|
|
||||||
PowerRailsPlanes::Rails::Rails ( PowerRailsPlanes::Plane* plane, Constant::Direction direction, Net* net )
|
PowerRailsPlanes::Rails::Rails ( PowerRailsPlanes::Plane* plane , unsigned int direction , Net* net )
|
||||||
: _plane (plane)
|
: _plane (plane)
|
||||||
, _direction(direction)
|
, _direction (direction)
|
||||||
, _net (net)
|
, _net (net)
|
||||||
, _rails ()
|
, _rails ()
|
||||||
{
|
{
|
||||||
ltrace(300) << " new Rails @"
|
ltrace(300) << " new Rails @"
|
||||||
<< " " << getRoutingPlane()->getLayer()->getName()
|
<< " " << getRoutingPlane()->getLayer()->getName()
|
||||||
<< " " << net
|
<< " " << net
|
||||||
<< " " << getString(getDirection()) << endl;
|
<< " " << ((getDirection()==KbHorizontal) ? "Horizontal": "Vertical") << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -521,10 +589,10 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline PowerRailsPlanes::Plane* PowerRailsPlanes::Rails::getPlane () { return _plane; }
|
inline PowerRailsPlanes::Plane* PowerRailsPlanes::Rails::getPlane () { return _plane; }
|
||||||
inline RoutingPlane* PowerRailsPlanes::Rails::getRoutingPlane () { return getPlane()->getRoutingPlane(); }
|
inline RoutingPlane* PowerRailsPlanes::Rails::getRoutingPlane () { return getPlane()->getRoutingPlane(); }
|
||||||
inline Constant::Direction PowerRailsPlanes::Rails::getDirection () const { return _direction; }
|
inline unsigned int PowerRailsPlanes::Rails::getDirection () const { return _direction; }
|
||||||
inline Net* PowerRailsPlanes::Rails::getNet () const { return _net; }
|
inline Net* PowerRailsPlanes::Rails::getNet () const { return _net; }
|
||||||
|
|
||||||
|
|
||||||
void PowerRailsPlanes::Rails::merge ( const Box& bb )
|
void PowerRailsPlanes::Rails::merge ( const Box& bb )
|
||||||
|
@ -534,7 +602,7 @@ namespace {
|
||||||
DbU::Unit sourceU;
|
DbU::Unit sourceU;
|
||||||
DbU::Unit targetU;
|
DbU::Unit targetU;
|
||||||
|
|
||||||
if ( getDirection() == Constant::Horizontal ) {
|
if (getDirection() == KbHorizontal) {
|
||||||
axis = bb.getYCenter();
|
axis = bb.getYCenter();
|
||||||
width = bb.getHeight();
|
width = bb.getHeight();
|
||||||
sourceU = bb.getXMin();
|
sourceU = bb.getXMin();
|
||||||
|
@ -564,7 +632,7 @@ namespace {
|
||||||
void PowerRailsPlanes::Rails::doLayout ( const Layer* layer )
|
void PowerRailsPlanes::Rails::doLayout ( const Layer* layer )
|
||||||
{
|
{
|
||||||
ltrace(300) << "Doing layout of rails: " << layer->getName()
|
ltrace(300) << "Doing layout of rails: " << layer->getName()
|
||||||
<< " " << getString(_direction)
|
<< " " << ((_direction==KbHorizontal) ? "Horizontal" : "Vertical")
|
||||||
<< " " << _net->getName() << endl;
|
<< " " << _net->getName() << endl;
|
||||||
|
|
||||||
for ( size_t irail=0 ; irail<_rails.size() ; irail++ )
|
for ( size_t irail=0 ; irail<_rails.size() ; irail++ )
|
||||||
|
@ -577,14 +645,18 @@ namespace {
|
||||||
, _routingPlane (routingPlane)
|
, _routingPlane (routingPlane)
|
||||||
, _horizontalRails ()
|
, _horizontalRails ()
|
||||||
, _verticalRails ()
|
, _verticalRails ()
|
||||||
|
, _powerDirection (routingPlane->getDirection())
|
||||||
{
|
{
|
||||||
ltrace(300) << "New Plane " << _layer->getName() << " " << _routingPlane << endl;
|
ltrace(300) << "New Plane " << _layer->getName() << " " << _routingPlane << endl;
|
||||||
|
|
||||||
|
// Hard-coded SxLib gauge.
|
||||||
|
if (_routingPlane->getDepth() == 0) _powerDirection = KbHorizontal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PowerRailsPlanes::Plane::~Plane ()
|
PowerRailsPlanes::Plane::~Plane ()
|
||||||
{
|
{
|
||||||
map<Net*,Rails*>::iterator irail = _horizontalRails.begin();
|
RailsMap::iterator irail = _horizontalRails.begin();
|
||||||
for ( ; irail != _horizontalRails.end() ; ++irail ) {
|
for ( ; irail != _horizontalRails.end() ; ++irail ) {
|
||||||
delete (*irail).second;
|
delete (*irail).second;
|
||||||
}
|
}
|
||||||
|
@ -595,30 +667,35 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Layer* PowerRailsPlanes::Plane::getLayer () const { return _layer; }
|
inline const Layer* PowerRailsPlanes::Plane::getLayer () const { return _layer; }
|
||||||
inline RoutingPlane* PowerRailsPlanes::Plane::getRoutingPlane () { return _routingPlane; }
|
inline RoutingPlane* PowerRailsPlanes::Plane::getRoutingPlane () { return _routingPlane; }
|
||||||
inline Constant::Direction PowerRailsPlanes::Plane::getDirection () const { return (Constant::Direction)_routingPlane->getDirection(); }
|
inline unsigned int PowerRailsPlanes::Plane::getDirection () const { return _routingPlane->getDirection(); }
|
||||||
|
inline unsigned int PowerRailsPlanes::Plane::getPowerDirection () const { return _powerDirection; }
|
||||||
|
|
||||||
|
|
||||||
void PowerRailsPlanes::Plane::merge ( const Box& bb, Net* net )
|
void PowerRailsPlanes::Plane::merge ( const Box& bb, Net* net )
|
||||||
{
|
{
|
||||||
Rails* rails = NULL;
|
Rails* rails = NULL;
|
||||||
|
|
||||||
ltrace(300) << " Plane::merge() " << net->getName() << " " << (void*)net << endl;
|
ltrace(300) << " Plane::merge() " << net->getName() << " " << bb << endl;
|
||||||
|
|
||||||
if ( getDirection() == Constant::Horizontal ) {
|
unsigned int direction = getDirection();
|
||||||
map<Net*,Rails*>::iterator irails = _horizontalRails.find(net);
|
if ( (net->getType() == Net::Type::POWER) or (net->getType() == Net::Type::GROUND) )
|
||||||
|
direction = getPowerDirection();
|
||||||
|
|
||||||
|
if (direction == KbHorizontal) {
|
||||||
|
RailsMap::iterator irails = _horizontalRails.find(net);
|
||||||
if ( irails == _horizontalRails.end() ) {
|
if ( irails == _horizontalRails.end() ) {
|
||||||
rails = new Rails(this,Constant::Horizontal,net);
|
rails = new Rails(this,KbHorizontal,net);
|
||||||
_horizontalRails.insert ( make_pair(net,rails) );
|
_horizontalRails.insert ( make_pair(net,rails) );
|
||||||
} else
|
} else
|
||||||
rails = (*irails).second;
|
rails = (*irails).second;
|
||||||
|
|
||||||
rails->merge ( bb );
|
rails->merge ( bb );
|
||||||
} else {
|
} else {
|
||||||
map<Net*,Rails*>::iterator irails = _verticalRails.find(net);
|
RailsMap::iterator irails = _verticalRails.find(net);
|
||||||
if ( irails == _verticalRails.end() ) {
|
if ( irails == _verticalRails.end() ) {
|
||||||
rails = new Rails(this,Constant::Vertical,net);
|
rails = new Rails(this,KbVertical,net);
|
||||||
_verticalRails.insert ( make_pair(net,rails) );
|
_verticalRails.insert ( make_pair(net,rails) );
|
||||||
} else
|
} else
|
||||||
rails = (*irails).second;
|
rails = (*irails).second;
|
||||||
|
@ -633,7 +710,7 @@ namespace {
|
||||||
{
|
{
|
||||||
ltrace(300) << "Doing layout of plane: " << _layer->getName() << endl;
|
ltrace(300) << "Doing layout of plane: " << _layer->getName() << endl;
|
||||||
|
|
||||||
map<Net*,Rails*>::iterator irails = _horizontalRails.begin();
|
RailsMap::iterator irails = _horizontalRails.begin();
|
||||||
for ( ; irails != _horizontalRails.end() ; ++irails ) {
|
for ( ; irails != _horizontalRails.end() ; ++irails ) {
|
||||||
(*irails).second->doLayout(_layer);
|
(*irails).second->doLayout(_layer);
|
||||||
}
|
}
|
||||||
|
@ -650,7 +727,7 @@ namespace {
|
||||||
, _planes ()
|
, _planes ()
|
||||||
, _activePlane(NULL)
|
, _activePlane(NULL)
|
||||||
{
|
{
|
||||||
_globalNets.setBlockage ( kite->getBlockageNet() );
|
_globalNets.setBlockage( kite->getBlockageNet() );
|
||||||
|
|
||||||
Technology* technology = DataBase::getDB()->getTechnology();
|
Technology* technology = DataBase::getDB()->getTechnology();
|
||||||
RoutingGauge* rg = _kite->getConfiguration()->getRoutingGauge();
|
RoutingGauge* rg = _kite->getConfiguration()->getRoutingGauge();
|
||||||
|
@ -668,14 +745,12 @@ namespace {
|
||||||
RoutingPlane* rp = _kite->getRoutingPlaneByIndex(lg->getDepth());
|
RoutingPlane* rp = _kite->getRoutingPlaneByIndex(lg->getDepth());
|
||||||
ltrace(300) << "Plane:" << rp << endl;
|
ltrace(300) << "Plane:" << rp << endl;
|
||||||
|
|
||||||
_planes.insert ( make_pair(regular->getBasicLayer(),new Plane(regular,rp)) );
|
_planes.insert( make_pair(regular->getBasicLayer(),new Plane(regular,rp)) );
|
||||||
|
|
||||||
const BasicLayer* blockageLayer = regular->getBasicLayer()->getBlockageLayer();
|
const BasicLayer* blockageLayer = regular->getBasicLayer()->getBlockageLayer();
|
||||||
if ( not blockageLayer ) continue;
|
if (not blockageLayer) continue;
|
||||||
|
|
||||||
_planes.insert ( make_pair(blockageLayer,new Plane(blockageLayer,rp)) );
|
_planes.insert( make_pair(blockageLayer,new Plane(blockageLayer,rp)) );
|
||||||
|
|
||||||
ltrace(300) << "OK" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,7 +774,7 @@ namespace {
|
||||||
|
|
||||||
bool PowerRailsPlanes::setActivePlane ( const BasicLayer* layer )
|
bool PowerRailsPlanes::setActivePlane ( const BasicLayer* layer )
|
||||||
{
|
{
|
||||||
map<const BasicLayer*,Plane*>::iterator iplane = _planes.find(layer);
|
PlanesMap::iterator iplane = _planes.find(layer);
|
||||||
if ( iplane == _planes.end() ) return false;
|
if ( iplane == _planes.end() ) return false;
|
||||||
|
|
||||||
_activePlane = iplane->second;
|
_activePlane = iplane->second;
|
||||||
|
@ -727,7 +802,7 @@ namespace {
|
||||||
|
|
||||||
void PowerRailsPlanes::doLayout ()
|
void PowerRailsPlanes::doLayout ()
|
||||||
{
|
{
|
||||||
map<const BasicLayer*,Plane*>::iterator iplane = _planes.begin();
|
PlanesMap::iterator iplane = _planes.begin();
|
||||||
for ( ; iplane != _planes.end() ; iplane++ )
|
for ( ; iplane != _planes.end() ; iplane++ )
|
||||||
iplane->second->doLayout ();
|
iplane->second->doLayout ();
|
||||||
}
|
}
|
||||||
|
@ -737,7 +812,6 @@ namespace {
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "::QueryPowerRails".
|
// Class : "::QueryPowerRails".
|
||||||
|
|
||||||
|
|
||||||
class QueryPowerRails : public Query {
|
class QueryPowerRails : public Query {
|
||||||
public:
|
public:
|
||||||
QueryPowerRails ( KiteEngine* );
|
QueryPowerRails ( KiteEngine* );
|
||||||
|
@ -811,8 +885,16 @@ namespace {
|
||||||
|
|
||||||
void QueryPowerRails::doQuery ()
|
void QueryPowerRails::doQuery ()
|
||||||
{
|
{
|
||||||
if ( not _powerRailsPlanes.getActivePlane() ) return;
|
PowerRailsPlanes::Plane* activePlane = _powerRailsPlanes.getActivePlane();
|
||||||
Query::doQuery ();
|
|
||||||
|
if (not activePlane) return;
|
||||||
|
// if (activePlane->getRoutingPlane()->getLayerGauge()->getType() == Constant::PinOnly) {
|
||||||
|
// cmess1 << " - PowerRails in " << activePlane->getLayer()->getName() << " - Skipped (PinOnly layer)." << endl;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
cmess1 << " - PowerRails in " << activePlane->getLayer()->getName() << " ..." << endl;
|
||||||
|
Query::doQuery();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,6 +909,8 @@ namespace {
|
||||||
|
|
||||||
void QueryPowerRails::goCallback ( Go* go )
|
void QueryPowerRails::goCallback ( Go* go )
|
||||||
{
|
{
|
||||||
|
//ltrace(80) << "QueryPowerRails::goCallback() " << go->getId() << ":" << go
|
||||||
|
// << " " << getPath().getName() << endl;
|
||||||
addToPowerRail ( go, getBasicLayer(), getArea(), getTransformation() );
|
addToPowerRail ( go, getBasicLayer(), getArea(), getTransformation() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -961,10 +1045,10 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
cmess1 << " o Building power rails." << endl;
|
cmess1 << " o Building power rails." << endl;
|
||||||
|
|
||||||
if ( not _blockageNet ) {
|
if (not _blockageNet) {
|
||||||
_blockageNet = getCell()->getNet("blockagenet");
|
_blockageNet = getCell()->getNet("blockagenet");
|
||||||
if ( not _blockageNet )
|
if (not _blockageNet)
|
||||||
_blockageNet = Net::create ( getCell(), "blockagenet" );
|
_blockageNet = Net::create( getCell(), "blockagenet" );
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryPowerRails query ( this );
|
QueryPowerRails query ( this );
|
||||||
|
@ -974,21 +1058,18 @@ namespace Kite {
|
||||||
if ( (iLayer->getMaterial() != BasicLayer::Material::metal)
|
if ( (iLayer->getMaterial() != BasicLayer::Material::metal)
|
||||||
and (iLayer->getMaterial() != BasicLayer::Material::blockage) )
|
and (iLayer->getMaterial() != BasicLayer::Material::blockage) )
|
||||||
continue;
|
continue;
|
||||||
if ( _configuration->isGMetal(*iLayer) ) continue;
|
if (_configuration->isGMetal(*iLayer)) continue;
|
||||||
|
if (not query.hasBasicLayer(*iLayer)) continue;
|
||||||
|
|
||||||
cmess1 << " - PowerRails in " << iLayer->getName() << " ..." << endl;
|
query.setBasicLayer( *iLayer );
|
||||||
|
query.doQuery ();
|
||||||
if ( not query.hasBasicLayer(*iLayer) ) continue;
|
|
||||||
|
|
||||||
query.setBasicLayer ( *iLayer );
|
|
||||||
query.doQuery ();
|
|
||||||
}
|
}
|
||||||
query.ringAddToPowerRails ();
|
query.ringAddToPowerRails();
|
||||||
query.doLayout ();
|
query.doLayout();
|
||||||
cmess1 << " - " << query.getGoMatchCount() << " power rails elements found." << endl;
|
cmess1 << " - " << query.getGoMatchCount() << " power rails elements found." << endl;
|
||||||
|
|
||||||
Session::revalidate ();
|
Session::revalidate ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- explicit-buffer-name: "CMakeLists.txt<kite/src>" -*-
|
||||||
|
|
||||||
include ( ${QT_USE_FILE} )
|
include ( ${QT_USE_FILE} )
|
||||||
|
|
||||||
|
@ -8,7 +9,7 @@
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
${PYTHON_INCLUDE_PATH}
|
${PYTHON_INCLUDE_PATH}
|
||||||
)
|
)
|
||||||
set ( includes kite/TrackSegmentCost.h
|
set ( includes kite/Constants.h
|
||||||
kite/TrackCost.h
|
kite/TrackCost.h
|
||||||
kite/DataNegociate.h
|
kite/DataNegociate.h
|
||||||
kite/TrackElement.h kite/TrackElements.h
|
kite/TrackElement.h kite/TrackElements.h
|
||||||
|
@ -19,12 +20,14 @@
|
||||||
kite/Tracks.h
|
kite/Tracks.h
|
||||||
kite/HorizontalTrack.h
|
kite/HorizontalTrack.h
|
||||||
kite/VerticalTrack.h
|
kite/VerticalTrack.h
|
||||||
|
kite/RoutingPlane.h
|
||||||
kite/Session.h
|
kite/Session.h
|
||||||
|
kite/Manipulator.h
|
||||||
|
kite/SegmentFsm.h
|
||||||
kite/RoutingEvent.h
|
kite/RoutingEvent.h
|
||||||
kite/RoutingEventQueue.h
|
kite/RoutingEventQueue.h
|
||||||
kite/RoutingEventHistory.h
|
kite/RoutingEventHistory.h
|
||||||
kite/RoutingEventLoop.h
|
kite/RoutingEventLoop.h
|
||||||
kite/RoutingPlane.h
|
|
||||||
kite/NegociateWindow.h
|
kite/NegociateWindow.h
|
||||||
kite/Configuration.h
|
kite/Configuration.h
|
||||||
kite/KiteEngine.h
|
kite/KiteEngine.h
|
||||||
|
@ -34,8 +37,7 @@
|
||||||
kite/PyGraphicKiteEngine.h
|
kite/PyGraphicKiteEngine.h
|
||||||
)
|
)
|
||||||
set ( mocIncludes kite/GraphicKiteEngine.h )
|
set ( mocIncludes kite/GraphicKiteEngine.h )
|
||||||
set ( cpps TrackSegmentCost.cpp
|
set ( cpps TrackCost.cpp
|
||||||
TrackCost.cpp
|
|
||||||
DataNegociate.cpp
|
DataNegociate.cpp
|
||||||
TrackElement.cpp
|
TrackElement.cpp
|
||||||
TrackElements.cpp
|
TrackElements.cpp
|
||||||
|
@ -46,16 +48,18 @@
|
||||||
Tracks.cpp
|
Tracks.cpp
|
||||||
HorizontalTrack.cpp
|
HorizontalTrack.cpp
|
||||||
VerticalTrack.cpp
|
VerticalTrack.cpp
|
||||||
|
RoutingPlane.cpp
|
||||||
Session.cpp
|
Session.cpp
|
||||||
|
Manipulator.cpp
|
||||||
|
SegmentFsm.cpp
|
||||||
RoutingEvent.cpp
|
RoutingEvent.cpp
|
||||||
RoutingEventQueue.cpp
|
RoutingEventQueue.cpp
|
||||||
RoutingEventHistory.cpp
|
RoutingEventHistory.cpp
|
||||||
RoutingEventLoop.cpp
|
RoutingEventLoop.cpp
|
||||||
RoutingPlane.cpp
|
NegociateWindow.cpp
|
||||||
BuildPowerRails.cpp
|
BuildPowerRails.cpp
|
||||||
ProtectRoutingPads.cpp
|
ProtectRoutingPads.cpp
|
||||||
PreProcess.cpp
|
PreProcess.cpp
|
||||||
NegociateWindow.cpp
|
|
||||||
Configuration.cpp
|
Configuration.cpp
|
||||||
KiteEngine.cpp
|
KiteEngine.cpp
|
||||||
GraphicKiteEngine.cpp
|
GraphicKiteEngine.cpp
|
||||||
|
@ -68,42 +72,42 @@
|
||||||
qt4_wrap_cpp ( mocCpps ${mocIncludes} )
|
qt4_wrap_cpp ( mocCpps ${mocIncludes} )
|
||||||
|
|
||||||
|
|
||||||
add_library ( kite ${cpps} ${mocCpps} ${pyCpps} )
|
add_library ( kite ${cpps} ${mocCpps} ${pyCpps} )
|
||||||
set_target_properties ( kite PROPERTIES VERSION 1.0 SOVERSION 1 )
|
set_target_properties ( kite PROPERTIES VERSION 1.0 SOVERSION 1 )
|
||||||
target_link_libraries ( kite ${KATABATIC_LIBRARIES}
|
target_link_libraries ( kite ${KATABATIC_LIBRARIES}
|
||||||
${KNIK_LIBRARIES}
|
${KNIK_LIBRARIES}
|
||||||
${NIMBUS_LIBRARIES}
|
${NIMBUS_LIBRARIES}
|
||||||
${CORIOLIS_LIBRARIES}
|
${CORIOLIS_LIBRARIES}
|
||||||
${HURRICANE_PYTHON_LIBRARIES}
|
${HURRICANE_PYTHON_LIBRARIES}
|
||||||
${HURRICANE_GRAPHICAL_LIBRARIES}
|
${HURRICANE_GRAPHICAL_LIBRARIES}
|
||||||
${HURRICANE_LIBRARIES}
|
${HURRICANE_LIBRARIES}
|
||||||
${CONFIGURATION_LIBRARY}
|
${CONFIGURATION_LIBRARY}
|
||||||
${BOOKSHELF_LIBRARY}
|
${BOOKSHELF_LIBRARY}
|
||||||
${CIF_LIBRARY}
|
${CIF_LIBRARY}
|
||||||
${AGDS_LIBRARY}
|
${AGDS_LIBRARY}
|
||||||
${LEFDEF_LIBRARIES}
|
${LEFDEF_LIBRARIES}
|
||||||
${OA_LIBRARIES}
|
${OA_LIBRARIES}
|
||||||
${QT_LIBRARIES}
|
${QT_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${LIBXML2_LIBRARIES}
|
${LIBXML2_LIBRARIES}
|
||||||
${PYTHON_LIBRARIES} -lutil
|
${PYTHON_LIBRARIES} -lutil
|
||||||
${LIBEXECINFO_LIBRARIES}
|
${LIBEXECINFO_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library ( pyKite MODULE ${pyCpps} )
|
add_library ( pyKite MODULE ${pyCpps} )
|
||||||
set_target_properties ( pyKite PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -D__PYTHON_MODULE__=1"
|
set_target_properties ( pyKite PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -D__PYTHON_MODULE__=1"
|
||||||
PREFIX ""
|
PREFIX ""
|
||||||
OUTPUT_NAME "Kite"
|
OUTPUT_NAME "Kite"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable ( kite.bin ${kitecpps} )
|
# add_executable ( kite.bin ${kitecpps} )
|
||||||
target_link_libraries ( kite.bin kite )
|
#target_link_libraries ( kite.bin kite )
|
||||||
target_link_libraries ( pyKite kite
|
target_link_libraries ( pyKite kite
|
||||||
${CORIOLIS_PYTHON_LIBRARIES}
|
${CORIOLIS_PYTHON_LIBRARIES}
|
||||||
)
|
)
|
||||||
install ( TARGETS kite DESTINATION lib${LIB_SUFFIX} )
|
install ( TARGETS kite DESTINATION lib${LIB_SUFFIX} )
|
||||||
install ( TARGETS kite.bin DESTINATION bin )
|
# install ( TARGETS kite.bin DESTINATION bin )
|
||||||
install ( TARGETS pyKite DESTINATION ${PYTHON_SITE_PACKAGES} )
|
install ( TARGETS pyKite DESTINATION ${PYTHON_SITE_PACKAGES} )
|
||||||
|
|
||||||
install ( FILES ${includes}
|
install ( FILES ${includes}
|
||||||
${mocIncludes}
|
${mocIncludes}
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
|
// -*- mode: C++; explicit-buffer-name: "Configuration.cpp<kite>" -*-
|
||||||
// -*- C++ -*-
|
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,25 +11,19 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./Configuration.cpp" |
|
// | C++ Module : "./Configuration.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "vlsisapd/configuration/Configuration.h"
|
||||||
#include "vlsisapd/configuration/Configuration.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "crlcore/Utilities.h"
|
||||||
#include "crlcore/Utilities.h"
|
#include "kite/Configuration.h"
|
||||||
#include "kite/Configuration.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
@ -123,6 +111,10 @@ namespace Kite {
|
||||||
{ return _base->isGMetal(layer); }
|
{ return _base->isGMetal(layer); }
|
||||||
|
|
||||||
|
|
||||||
|
bool Configuration::isGContact ( const Layer* layer ) const
|
||||||
|
{ return _base->isGContact(layer); }
|
||||||
|
|
||||||
|
|
||||||
size_t Configuration::getDepth () const
|
size_t Configuration::getDepth () const
|
||||||
{ return _base->getDepth(); }
|
{ return _base->getDepth(); }
|
||||||
|
|
||||||
|
@ -281,4 +273,4 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
@ -15,14 +15,31 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "kite/DataNegociate.h"
|
#include "hurricane/Bug.h"
|
||||||
|
#include "hurricane/DebugSession.h"
|
||||||
|
#include "katabatic/AutoSegment.h"
|
||||||
|
#include "kite/DataNegociate.h"
|
||||||
|
#include "kite/RoutingEvent.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
using std::cerr;
|
||||||
|
using std::endl;
|
||||||
|
using std::map;
|
||||||
|
using std::multimap;
|
||||||
|
using std::make_pair;
|
||||||
using std::ostringstream;
|
using std::ostringstream;
|
||||||
|
using Hurricane::Bug;
|
||||||
|
using Hurricane::DebugSession;
|
||||||
|
using Hurricane::inltrace;
|
||||||
|
using Hurricane::ltracein;
|
||||||
|
using Hurricane::ltraceout;
|
||||||
|
using Hurricane::tab;
|
||||||
|
using Katabatic::KbHorizontal;
|
||||||
|
using Katabatic::KbPropagate;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
@ -30,12 +47,19 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
DataNegociate::DataNegociate ( TrackElement* trackSegment )
|
DataNegociate::DataNegociate ( TrackElement* trackSegment )
|
||||||
: _routingEvent(NULL)
|
: _trackSegment (trackSegment)
|
||||||
, _trackSegment(trackSegment)
|
, _childSegment (NULL)
|
||||||
, _cost (trackSegment)
|
, _routingEvent (NULL)
|
||||||
, _state (RipupPerpandiculars)
|
, _net (trackSegment->getNet())
|
||||||
, _stateCount (1)
|
, _state (RipupPerpandiculars)
|
||||||
//, _z (RoutingGauge::getLayerDepth(trackSegment->getLayer()))
|
, _stateCount (1)
|
||||||
|
, _terminals (0)
|
||||||
|
, _ripupCount (0)
|
||||||
|
, _leftMinExtend (DbU::Max)
|
||||||
|
, _rightMinExtend (DbU::Min)
|
||||||
|
, _attractors ()
|
||||||
|
, _perpandiculars ()
|
||||||
|
, _perpandicularFree(false)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,25 +67,164 @@ namespace Kite {
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
DbU::Unit DataNegociate::getWiringDelta ( DbU::Unit axis ) const
|
||||||
|
{
|
||||||
|
DbU::Unit attraction = 0;
|
||||||
|
for ( size_t i=0 ; i < _attractors.size() ; i++ ) {
|
||||||
|
if ( _attractors[i] > axis ) attraction += _attractors[i] - axis;
|
||||||
|
else attraction += axis - _attractors[i];
|
||||||
|
}
|
||||||
|
return attraction;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DataNegociate::update ()
|
void DataNegociate::update ()
|
||||||
{ _cost.update ( _trackSegment ); }
|
{
|
||||||
|
DebugSession::open( _trackSegment->getNet(), 148 );
|
||||||
|
|
||||||
|
ltrace(148) << "DataNegociate::update() - " << _trackSegment << endl;
|
||||||
|
ltracein(148);
|
||||||
|
|
||||||
|
vector<AutoSegment*> collapseds;
|
||||||
|
vector<AutoSegment*> perpandiculars;
|
||||||
|
map<DbU::Unit,int> attractorSpins;
|
||||||
|
|
||||||
|
_perpandiculars.clear();
|
||||||
|
AutoSegment::getTopologicalInfos( _trackSegment->base()
|
||||||
|
, collapseds
|
||||||
|
, perpandiculars
|
||||||
|
, _leftMinExtend
|
||||||
|
, _rightMinExtend
|
||||||
|
);
|
||||||
|
|
||||||
|
_terminals = AutoSegment::getTerminalCount( _trackSegment->base(), collapseds );
|
||||||
|
_attractors.clear();
|
||||||
|
_perpandiculars.clear();
|
||||||
|
_perpandicularFree = Interval(false);
|
||||||
|
|
||||||
|
ltrace(148) << "Extracting attractors from perpandiculars." << endl;
|
||||||
|
for ( size_t i=0 ; i < perpandiculars.size() ; i++ ) {
|
||||||
|
Interval interval;
|
||||||
|
TrackElement* perpandicular;
|
||||||
|
|
||||||
|
if (perpandiculars[i]->isCanonical()) {
|
||||||
|
perpandicular = Session::lookup( perpandiculars[i]->base() );
|
||||||
|
if (perpandicular) perpandicular->getCanonical( interval );
|
||||||
|
} else {
|
||||||
|
perpandicular = Session::lookup( perpandiculars[i]->getCanonical(interval)->base() );
|
||||||
|
}
|
||||||
|
if (not perpandicular) {
|
||||||
|
cerr << Bug( "Not a TrackSegment: %s\n (perpandicular: %s)"
|
||||||
|
//, getString((void*)perpandiculars[i]->getCanonical(interval)->base()).c_str()
|
||||||
|
, getString(perpandiculars[i]->getCanonical(interval)).c_str()
|
||||||
|
//, getString((void*)perpandiculars[i]->base()).c_str()
|
||||||
|
, getString(perpandiculars[i]).c_str()
|
||||||
|
) << endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RoutingEvent::getStage() == RoutingEvent::Repair)
|
||||||
|
perpandicular->base()->setFlagsOnAligneds( Katabatic::SegUnbound );
|
||||||
|
|
||||||
|
interval.inflate( DbU::lambda(-0.5) );
|
||||||
|
|
||||||
|
ltrace(148) << "| perpandicular: " << perpandiculars[i] << endl;
|
||||||
|
ltrace(148) << "| canonical: " << perpandicular << endl;
|
||||||
|
ltracein(148);
|
||||||
|
ltrace(148) << "Canonical // interval: " << interval << endl;
|
||||||
|
|
||||||
|
_perpandiculars.push_back( perpandicular );
|
||||||
|
if (perpandicular->getTrack()) {
|
||||||
|
Interval trackFree = perpandicular->getFreeInterval();
|
||||||
|
ltrace(148) << "Track Perpandicular Free: " << trackFree << endl;
|
||||||
|
|
||||||
|
_perpandicularFree.intersection( trackFree );
|
||||||
|
} else {
|
||||||
|
ltrace(148) << "Not in any track " << perpandicular << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interval.isPonctual()) {
|
||||||
|
ltrace(148) << "Punctual attractor @" << DbU::getValueString(interval.getVMin()) << endl;
|
||||||
|
_attractors.push_back( interval.getVMin() );
|
||||||
|
ltraceout(148);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (interval.getVMin() != _trackSegment->getAxis())
|
||||||
|
or AutoSegment::isTopologicalBound(perpandiculars[i]
|
||||||
|
,perpandicular->isHorizontal() ? KbHorizontal : 0
|
||||||
|
) ) {
|
||||||
|
map<DbU::Unit,int>::iterator iattractor = attractorSpins.find( interval.getVMin() );
|
||||||
|
if (iattractor == attractorSpins.end()) {
|
||||||
|
attractorSpins.insert( make_pair(interval.getVMin(),-1) );
|
||||||
|
} else {
|
||||||
|
iattractor->second -= 1;
|
||||||
|
}
|
||||||
|
ltrace(148) << "Left attractor @" << DbU::getValueString(interval.getVMin()) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (interval.getVMax() != _trackSegment->getAxis())
|
||||||
|
or AutoSegment::isTopologicalBound(perpandiculars[i]
|
||||||
|
,KbPropagate | (perpandicular->isHorizontal() ? KbHorizontal : 0)
|
||||||
|
) ) {
|
||||||
|
map<DbU::Unit,int>::iterator iattractor = attractorSpins.find( interval.getVMax() );
|
||||||
|
if (iattractor == attractorSpins.end()) {
|
||||||
|
attractorSpins.insert( make_pair(interval.getVMax(),1) );
|
||||||
|
} else {
|
||||||
|
iattractor->second += 1;
|
||||||
|
}
|
||||||
|
ltrace(148) << "Right attractor @" << DbU::getValueString(interval.getVMax()) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
ltraceout(148);
|
||||||
|
}
|
||||||
|
if ( not _trackSegment->isTerminal() and (_perpandiculars.size() < 2) )
|
||||||
|
cerr << Bug( "Less than two perpandiculars on %s.", getString(_trackSegment).c_str() ) << endl;
|
||||||
|
|
||||||
|
map<DbU::Unit,int>::iterator iattractor = attractorSpins.begin();
|
||||||
|
for ( ; iattractor != attractorSpins.end() ; iattractor++ ) {
|
||||||
|
if (iattractor->second != 0)
|
||||||
|
_attractors.push_back( iattractor->first );
|
||||||
|
}
|
||||||
|
|
||||||
|
ostringstream s;
|
||||||
|
s << "Attractors [";
|
||||||
|
for ( size_t i=0 ; i<_attractors.size() ; i++ ) {
|
||||||
|
if ( i ) s << ", ";
|
||||||
|
s << DbU::getValueString( _attractors[i] );
|
||||||
|
}
|
||||||
|
s << "]";
|
||||||
|
ltrace(148) << s.str() << endl;
|
||||||
|
ltrace(200) << "Perpandicular Free: " << _perpandicularFree << endl;
|
||||||
|
|
||||||
|
|
||||||
|
ltraceout(148);
|
||||||
|
DebugSession::close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
string DataNegociate::_getString () const
|
string DataNegociate::_getString () const
|
||||||
{
|
{
|
||||||
return "<" + _getTypeName() + " "
|
return "<" + _getTypeName() + " "
|
||||||
+ getString(_trackSegment)
|
+ getString(_trackSegment) + " "
|
||||||
+ ">";
|
+ getString(_terminals)
|
||||||
|
+ " [" + DbU::getValueString(_leftMinExtend)
|
||||||
|
+ ":" + DbU::getValueString(_rightMinExtend)
|
||||||
|
+ "]>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Record* DataNegociate::_getRecord () const
|
Record* DataNegociate::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = new Record ( getString(this) );
|
Record* record = new Record ( getString(this) );
|
||||||
record->add ( getSlot ( "_routingEvent", _routingEvent ) );
|
record->add( getSlot ( "_routingEvent" , _routingEvent ) );
|
||||||
record->add ( getSlot ( "_trackSegment", _trackSegment ) );
|
record->add( getSlot ( "_trackSegment" , _trackSegment ) );
|
||||||
record->add ( getSlot ( "_cost" , &_cost ) );
|
record->add( getSlot ( "_childSegment" , _childSegment ) );
|
||||||
//record->add ( getSlot ( "_z" , _z ) );
|
record->add( getSlot ( "_terminals" , _terminals ) );
|
||||||
|
record->add( getSlot ( "_ripupCount" , _ripupCount ) );
|
||||||
|
record->add( DbU::getValueSlot( "_leftMinExtend" , &_leftMinExtend ) );
|
||||||
|
record->add( DbU::getValueSlot( "_rightMinExtend", &_rightMinExtend ) );
|
||||||
|
record->add( getSlot ( "_net" , _net ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
@ -71,18 +234,17 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
ostringstream s;
|
ostringstream s;
|
||||||
switch ( data->_state ) {
|
switch ( data->_state ) {
|
||||||
case RipupPerpandiculars: s << "RipupPerpandiculars"; break;
|
case RipupPerpandiculars: s << "RipupPerpandiculars"; break;
|
||||||
case Minimize: s << "Minimize"; break;
|
case Minimize: s << "Minimize"; break;
|
||||||
case DogLeg: s << "DogLeg"; break;
|
case Dogleg: s << "Dogleg"; break;
|
||||||
case Desalignate: s << "Desalignate"; break;
|
case Slacken: s << "Slacken"; break;
|
||||||
case Slacken: s << "Slacken"; break;
|
case ConflictSolveByHistory: s << "ConflictSolveByHistory1"; break;
|
||||||
case ConflictSolve1: s << "ConflictSolve1"; break;
|
case ConflictSolveByPlaceds: s << "ConflictSolveByPlaceds"; break;
|
||||||
case ConflictSolve2: s << "ConflictSolve2"; break;
|
case LocalVsGlobal: s << "LocalVsGlobal"; break;
|
||||||
case LocalVsGlobal: s << "LocalVsGlobal"; break;
|
case MoveUp: s << "MoveUp"; break;
|
||||||
case MoveUp: s << "MoveUp"; break;
|
case MaximumSlack: s << "MaximumSlack"; break;
|
||||||
case MaximumSlack: s << "MaximumSlack"; break;
|
case Unimplemented: s << "Unimplemented"; break;
|
||||||
case Unimplemented: s << "Unimplemented"; break;
|
case Repair: s << "REPAIR"; break;
|
||||||
case Repair: s << "REPAIR"; break;
|
|
||||||
default:
|
default:
|
||||||
s << "Unknown(" << data->_state << ")"; break;
|
s << "Unknown(" << data->_state << ")"; break;
|
||||||
}
|
}
|
||||||
|
@ -91,4 +253,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,46 +12,41 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./GraphicKiteEngine.cpp" |
|
// | C++ Header : "./GraphicKiteEngine.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
#include <QAction>
|
||||||
#include <QAction>
|
#include <QMenu>
|
||||||
#include <QMenu>
|
#include <QMenuBar>
|
||||||
#include <QMenuBar>
|
#include <QApplication>
|
||||||
#include <QApplication>
|
#include <hurricane/Warning.h>
|
||||||
#include <hurricane/Warning.h>
|
#include <hurricane/Error.h>
|
||||||
#include <hurricane/Error.h>
|
#include <hurricane/Breakpoint.h>
|
||||||
#include <hurricane/Breakpoint.h>
|
#include <hurricane/DebugSession.h>
|
||||||
#include <hurricane/DebugSession.h>
|
#include <hurricane/Go.h>
|
||||||
#include <hurricane/Go.h>
|
#include <hurricane/Net.h>
|
||||||
#include <hurricane/Net.h>
|
#include <hurricane/Cell.h>
|
||||||
#include <hurricane/Cell.h>
|
#include <hurricane/UpdateSession.h>
|
||||||
#include <hurricane/UpdateSession.h>
|
#include <hurricane/viewer/Graphics.h>
|
||||||
#include <hurricane/viewer/Graphics.h>
|
#include <hurricane/viewer/CellWidget.h>
|
||||||
#include <hurricane/viewer/CellWidget.h>
|
#include <hurricane/viewer/CellViewer.h>
|
||||||
#include <hurricane/viewer/CellViewer.h>
|
#include <hurricane/viewer/ControllerWidget.h>
|
||||||
#include <hurricane/viewer/ControllerWidget.h>
|
#include <crlcore/Utilities.h>
|
||||||
#include <crlcore/Utilities.h>
|
#include <crlcore/AllianceFramework.h>
|
||||||
#include <crlcore/AllianceFramework.h>
|
#include <katabatic/GCell.h>
|
||||||
#include <katabatic/GCell.h>
|
#include <katabatic/GCellGrid.h>
|
||||||
#include <katabatic/GCellGrid.h>
|
#include <knik/Edge.h>
|
||||||
#include <knik/Edge.h>
|
#include <knik/Vertex.h>
|
||||||
#include <knik/Vertex.h>
|
#include <knik/KnikEngine.h>
|
||||||
#include <knik/KnikEngine.h>
|
#include <knik/GraphicKnikEngine.h>
|
||||||
#include <knik/GraphicKnikEngine.h>
|
#include <kite/GraphicKiteEngine.h>
|
||||||
#include <kite/GraphicKiteEngine.h>
|
//#include <kite/ConfigurationWidget.h>
|
||||||
//#include <kite/ConfigurationWidget.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using Hurricane::Error;
|
using Hurricane::Error;
|
||||||
using Hurricane::Warning;
|
using Hurricane::Warning;
|
||||||
|
@ -79,9 +69,7 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::initKatabaticAc ( CellWidget* widget )
|
void GraphicKiteEngine::initKatabaticAc ( CellWidget* widget )
|
||||||
{
|
{ }
|
||||||
//cerr << "GraphicKatabaticEngine::initKatabaticGo()" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::drawKatabaticAc ( CellWidget* widget
|
void GraphicKiteEngine::drawKatabaticAc ( CellWidget* widget
|
||||||
|
@ -95,11 +83,11 @@ namespace Kite {
|
||||||
|
|
||||||
void GraphicKiteEngine::initKatabaticGCell ( CellWidget* widget )
|
void GraphicKiteEngine::initKatabaticGCell ( CellWidget* widget )
|
||||||
{
|
{
|
||||||
widget->getDrawingPlanes().setPen ( Qt::NoPen );
|
widget->getDrawingPlanes().setPen( Qt::NoPen );
|
||||||
|
|
||||||
KiteEngine* kite = KiteEngine::get ( widget->getCell() );
|
KiteEngine* kite = KiteEngine::get( widget->getCell() );
|
||||||
if ( kite ) {
|
if ( kite ) {
|
||||||
kite->getGCellGrid()->setDensityMode ( Katabatic::GCellGrid::MaxDensity );
|
kite->getGCellGrid()->setDensityMode( Katabatic::GCellGrid::MaxDensity );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +103,7 @@ namespace Kite {
|
||||||
|
|
||||||
QPainter& painter = widget->getPainter();
|
QPainter& painter = widget->getPainter();
|
||||||
size_t density = (size_t)( gcell->getDensity() * 255.0 );
|
size_t density = (size_t)( gcell->getDensity() * 255.0 );
|
||||||
if ( density > 255 ) density = 255;
|
if (density > 255) density = 255;
|
||||||
|
|
||||||
painter.setBrush
|
painter.setBrush
|
||||||
( Graphics::getColorScale(ColorScale::Fire).getBrush(density,widget->getDarkening()) );
|
( Graphics::getColorScale(ColorScale::Fire).getBrush(density,widget->getDarkening()) );
|
||||||
|
@ -131,12 +119,12 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
Cell* cell = getCell ();
|
Cell* cell = getCell ();
|
||||||
|
|
||||||
KiteEngine* kite = KiteEngine::get ( cell );
|
KiteEngine* kite = KiteEngine::get( cell );
|
||||||
if ( not kite ) {
|
if (not kite) {
|
||||||
kite = KiteEngine::create ( cell );
|
kite = KiteEngine::create( cell );
|
||||||
kite->setPostEventCb ( boost::bind(&GraphicKiteEngine::postEvent,this) );
|
kite->setPostEventCb( boost::bind(&GraphicKiteEngine::postEvent,this) );
|
||||||
} else
|
} else
|
||||||
cerr << Warning("%s already has a Kite engine.",getString(cell).c_str()) << endl;
|
cerr << Warning( "%s already has a Kite engine.", getString(cell).c_str() ) << endl;
|
||||||
|
|
||||||
return kite;
|
return kite;
|
||||||
}
|
}
|
||||||
|
@ -146,13 +134,13 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
// Currently, only one framework is avalaible: Alliance.
|
// Currently, only one framework is avalaible: Alliance.
|
||||||
|
|
||||||
KiteEngine* kite = KiteEngine::get ( getCell() );
|
KiteEngine* kite = KiteEngine::get( getCell() );
|
||||||
if ( kite ) return kite;
|
if (kite) return kite;
|
||||||
|
|
||||||
kite = createEngine ();
|
kite = createEngine();
|
||||||
|
|
||||||
if ( not kite )
|
if (not kite)
|
||||||
throw Error("Failed to create Kite engine on %s.",getString(getCell()).c_str());
|
throw Error( "Failed to create Kite engine on %s.", getString(getCell()).c_str() );
|
||||||
|
|
||||||
return kite;
|
return kite;
|
||||||
}
|
}
|
||||||
|
@ -160,28 +148,28 @@ namespace Kite {
|
||||||
|
|
||||||
void GraphicKiteEngine::saveGlobalSolution ()
|
void GraphicKiteEngine::saveGlobalSolution ()
|
||||||
{
|
{
|
||||||
KiteEngine* kite = KiteEngine::get ( getCell() );
|
KiteEngine* kite = KiteEngine::get( getCell() );
|
||||||
if ( kite ) kite->saveGlobalSolution ();
|
if (kite) kite->saveGlobalSolution ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::loadGlobalSolution ()
|
void GraphicKiteEngine::loadGlobalSolution ()
|
||||||
{
|
{
|
||||||
KiteEngine* kite = getForFramework ();
|
KiteEngine* kite = getForFramework();
|
||||||
|
|
||||||
emit cellPreModificated ();
|
emit cellPreModificated();
|
||||||
kite->runGlobalRouter ( LoadGlobalSolution );
|
kite->runGlobalRouter( KtLoadGlobalRouting );
|
||||||
emit cellPostModificated ();
|
emit cellPostModificated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::globalRoute ()
|
void GraphicKiteEngine::globalRoute ()
|
||||||
{
|
{
|
||||||
KiteEngine* kite = getForFramework ();
|
KiteEngine* kite = getForFramework();
|
||||||
|
|
||||||
emit cellPreModificated ();
|
emit cellPreModificated();
|
||||||
kite->runGlobalRouter ( BuildGlobalSolution );
|
kite->runGlobalRouter( KtBuildGlobalRouting );
|
||||||
emit cellPostModificated ();
|
emit cellPostModificated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,73 +177,61 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
static KatabaticEngine::NetSet routingNets;
|
static KatabaticEngine::NetSet routingNets;
|
||||||
|
|
||||||
KiteEngine* kite = KiteEngine::get ( getCell() );
|
KiteEngine* kite = KiteEngine::get( getCell() );
|
||||||
if ( not kite ) {
|
if (not kite) {
|
||||||
throw Error("KiteEngine not created yet, run the global router first.");
|
throw Error( "KiteEngine not created yet, run the global router first." );
|
||||||
}
|
}
|
||||||
if ( cmess1.enabled() )
|
if (cmess1.enabled()) kite->printConfiguration();
|
||||||
kite->printConfiguration ();
|
|
||||||
|
|
||||||
|
emit cellPreModificated();
|
||||||
|
_viewer->clearToolInterrupt();
|
||||||
|
kite->loadGlobalRouting( Katabatic::EngineLoadGrByNet, routingNets );
|
||||||
|
emit cellPostModificated();
|
||||||
emit cellPreModificated ();
|
emit cellPreModificated ();
|
||||||
|
kite->balanceGlobalDensity ();
|
||||||
_viewer->clearToolInterrupt ();
|
kite->layerAssign ( Katabatic::EngineNoNetLayerAssign );
|
||||||
|
emit cellPostModificated();
|
||||||
kite->loadGlobalRouting ( Katabatic::LoadGrByNet, routingNets );
|
emit cellPreModificated();
|
||||||
emit cellPostModificated ();
|
kite->runNegociate();
|
||||||
|
emit cellPostModificated();
|
||||||
//Breakpoint::stop ( 0, "Point d'arret:<br> <b>LayerAssingByTrunk()</b><br>"
|
|
||||||
// "Assignment des layers, methode globale." );
|
|
||||||
emit cellPreModificated ();
|
|
||||||
kite->layerAssign ( Katabatic::NoNetLayerAssign );
|
|
||||||
emit cellPostModificated ();
|
|
||||||
|
|
||||||
//Breakpoint::stop ( 0, "Point d'arret:<br> <b>runNegociate()</b><br>"
|
|
||||||
// "Routage par Negociation." );
|
|
||||||
emit cellPreModificated ();
|
|
||||||
kite->runNegociate ();
|
|
||||||
emit cellPostModificated ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::finalize ()
|
void GraphicKiteEngine::finalize ()
|
||||||
{
|
{
|
||||||
emit cellPreModificated ();
|
emit cellPreModificated();
|
||||||
KiteEngine* kite = KiteEngine::get ( getCell() );
|
KiteEngine* kite = KiteEngine::get( getCell() );
|
||||||
if ( kite ) {
|
if (kite) {
|
||||||
kite->finalizeLayout ();
|
kite->finalizeLayout();
|
||||||
//kite->dumpMeasures ();
|
kite->destroy();
|
||||||
kite->destroy ();
|
|
||||||
}
|
}
|
||||||
emit cellPostModificated ();
|
emit cellPostModificated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::save ()
|
void GraphicKiteEngine::save ()
|
||||||
{
|
{
|
||||||
//KiteEngine* kite = KiteEngine::get ( getCell() );
|
Cell* cell = getCell();
|
||||||
//if ( kite ) {
|
AllianceFramework* af = AllianceFramework::get();
|
||||||
Cell* cell = getCell();
|
|
||||||
AllianceFramework* af = AllianceFramework::get ();
|
|
||||||
|
|
||||||
string name = getString(cell->getName()) + "_kite";
|
string name = getString(cell->getName()) + "_kite";
|
||||||
cell->setName ( name );
|
cell->setName( name );
|
||||||
af->saveCell ( cell, Catalog::State::Physical );
|
af->saveCell( cell, Catalog::State::Physical );
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::route ()
|
void GraphicKiteEngine::route ()
|
||||||
{
|
{
|
||||||
globalRoute ();
|
globalRoute();
|
||||||
detailRoute ();
|
detailRoute();
|
||||||
finalize ();
|
finalize ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GraphicKiteEngine::dumpMeasures ()
|
void GraphicKiteEngine::dumpMeasures ()
|
||||||
{
|
{
|
||||||
KiteEngine* kite = getForFramework ();
|
KiteEngine* kite = getForFramework();
|
||||||
if ( kite ) kite->dumpMeasures ();
|
if (kite) kite->dumpMeasures();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -263,19 +239,13 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
static unsigned int count = 0;
|
static unsigned int count = 0;
|
||||||
|
|
||||||
if ( not (count++ % 500) ) {
|
if (not (count++ % 500)) {
|
||||||
//UpdateSession::close ();
|
QApplication::processEvents();
|
||||||
|
|
||||||
//_viewer->getCellWidget()->refresh ();
|
if (_viewer->isToolInterrupted()) {
|
||||||
QApplication::processEvents ();
|
KiteEngine* kite = KiteEngine::get( getCell() );
|
||||||
|
if (kite) kite->setInterrupt( true );
|
||||||
//UpdateSession::open ();
|
_viewer->clearToolInterrupt();
|
||||||
|
|
||||||
if ( _viewer->isToolInterrupted() ) {
|
|
||||||
KiteEngine* kite = KiteEngine::get ( getCell() );
|
|
||||||
if ( kite ) kite->setInterrupt ( true );
|
|
||||||
|
|
||||||
_viewer->clearToolInterrupt ();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,122 +253,109 @@ namespace Kite {
|
||||||
|
|
||||||
void GraphicKiteEngine::addToMenu ( CellViewer* viewer )
|
void GraphicKiteEngine::addToMenu ( CellViewer* viewer )
|
||||||
{
|
{
|
||||||
assert ( _viewer == NULL );
|
assert( _viewer == NULL );
|
||||||
|
|
||||||
_viewer = viewer;
|
_viewer = viewer;
|
||||||
|
|
||||||
QMenu* prMenu = _viewer->findChild<QMenu*>("viewer.menuBar.placeAndRoute");
|
QMenu* prMenu = _viewer->findChild<QMenu*>("viewer.menuBar.placeAndRoute");
|
||||||
QMenu* stepMenu = _viewer->findChild<QMenu*>("viewer.menuBar.placeAndRoute.stepByStep");
|
QMenu* stepMenu = _viewer->findChild<QMenu*>("viewer.menuBar.placeAndRoute.stepByStep");
|
||||||
if ( !prMenu ) {
|
if (prMenu == NULL) {
|
||||||
QMenuBar* menuBar = _viewer->findChild<QMenuBar*>("viewer.menuBar");
|
QMenuBar* menuBar = _viewer->findChild<QMenuBar*>("viewer.menuBar");
|
||||||
if ( !menuBar ) {
|
if (menuBar == NULL) {
|
||||||
cerr << Warning("GraphicKiteEngine::addToMenu() - No MenuBar in parent widget.") << endl;
|
cerr << Warning( "GraphicKiteEngine::addToMenu() - No MenuBar in parent widget." ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
prMenu = menuBar->addMenu ( tr("P&&R") );
|
prMenu = menuBar->addMenu( tr("P&&R") );
|
||||||
prMenu->setObjectName ( "viewer.menuBar.placeAndRoute" );
|
prMenu->setObjectName( "viewer.menuBar.placeAndRoute" );
|
||||||
|
|
||||||
stepMenu = prMenu->addMenu ( tr("&Step by Step") );
|
stepMenu = prMenu->addMenu( tr("&Step by Step") );
|
||||||
stepMenu->setObjectName ( "viewer.menuBar.placeAndRoute.stepByStep" );
|
stepMenu->setObjectName( "viewer.menuBar.placeAndRoute.stepByStep" );
|
||||||
|
|
||||||
prMenu->addSeparator ();
|
prMenu->addSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
QAction* dRouteAction = _viewer->findChild<QAction*>("viewer.menuBar.placeAndRoute.detailedRoute");
|
QAction* dRouteAction = _viewer->findChild<QAction*>("viewer.menuBar.placeAndRoute.detailedRoute");
|
||||||
if ( dRouteAction )
|
if (dRouteAction)
|
||||||
cerr << Warning("GraphicKiteEngine::addToMenu() - Kite detailed router already hooked in.") << endl;
|
cerr << Warning( "GraphicKiteEngine::addToMenu() - Kite detailed router already hooked in." ) << endl;
|
||||||
else {
|
else {
|
||||||
stepMenu->addSeparator ();
|
stepMenu->addSeparator();
|
||||||
|
|
||||||
QAction* gRouteAction = new QAction ( tr("Kite - &Global Route"), _viewer );
|
QAction* gRouteAction = new QAction ( tr("Kite - &Global Route"), _viewer );
|
||||||
gRouteAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepBystep.globalRoute" );
|
gRouteAction->setObjectName( "viewer.menuBar.placeAndRoute.stepBystep.globalRoute" );
|
||||||
gRouteAction->setStatusTip ( tr("Run the <b>Knik</b> global router") );
|
gRouteAction->setStatusTip ( tr("Run the <b>Knik</b> global router") );
|
||||||
gRouteAction->setVisible ( true );
|
gRouteAction->setVisible ( true );
|
||||||
stepMenu->addAction ( gRouteAction );
|
stepMenu->addAction( gRouteAction );
|
||||||
|
|
||||||
QAction* gLoadSolutionAction = new QAction ( tr("Kite - &Load Global Routing"), _viewer );
|
QAction* gLoadSolutionAction = new QAction ( tr("Kite - &Load Global Routing"), _viewer );
|
||||||
gLoadSolutionAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepByStep.loadGlobalRouting" );
|
gLoadSolutionAction->setObjectName( "viewer.menuBar.placeAndRoute.stepByStep.loadGlobalRouting" );
|
||||||
gLoadSolutionAction->setStatusTip ( tr("Load a solution for the global routing (.kgr)") );
|
gLoadSolutionAction->setStatusTip ( tr("Load a solution for the global routing (.kgr)") );
|
||||||
gLoadSolutionAction->setVisible ( true );
|
gLoadSolutionAction->setVisible ( true );
|
||||||
stepMenu->addAction ( gLoadSolutionAction );
|
stepMenu->addAction( gLoadSolutionAction );
|
||||||
|
|
||||||
QAction* gSaveSolutionAction = new QAction ( tr("Kite - &Save Global Routing"), _viewer );
|
QAction* gSaveSolutionAction = new QAction ( tr("Kite - &Save Global Routing"), _viewer );
|
||||||
gSaveSolutionAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepByStep.saveGlobalRouting" );
|
gSaveSolutionAction->setObjectName( "viewer.menuBar.placeAndRoute.stepByStep.saveGlobalRouting" );
|
||||||
gSaveSolutionAction->setStatusTip ( tr("Save a global router solution (.kgr)") );
|
gSaveSolutionAction->setStatusTip ( tr("Save a global router solution (.kgr)") );
|
||||||
gSaveSolutionAction->setVisible ( true );
|
gSaveSolutionAction->setVisible ( true );
|
||||||
stepMenu->addAction ( gSaveSolutionAction );
|
stepMenu->addAction( gSaveSolutionAction );
|
||||||
|
|
||||||
dRouteAction = new QAction ( tr("Kite - &Detailed Route"), _viewer );
|
dRouteAction = new QAction ( tr("Kite - &Detailed Route"), _viewer );
|
||||||
dRouteAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepBystep.detailedRoute" );
|
dRouteAction->setObjectName( "viewer.menuBar.placeAndRoute.stepBystep.detailedRoute" );
|
||||||
dRouteAction->setStatusTip ( tr("Run the <b>Kite</b> detailed router") );
|
dRouteAction->setStatusTip ( tr("Run the <b>Kite</b> detailed router") );
|
||||||
dRouteAction->setVisible ( true );
|
dRouteAction->setVisible ( true );
|
||||||
stepMenu->addAction ( dRouteAction );
|
stepMenu->addAction( dRouteAction );
|
||||||
|
|
||||||
QAction* dFinalizeAction = new QAction ( tr("Kite - &Finalize Routing"), _viewer );
|
QAction* dFinalizeAction = new QAction( tr("Kite - &Finalize Routing"), _viewer );
|
||||||
dFinalizeAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepBystep.finalize" );
|
dFinalizeAction->setObjectName( "viewer.menuBar.placeAndRoute.stepBystep.finalize" );
|
||||||
dFinalizeAction->setStatusTip ( tr("Closing Routing") );
|
dFinalizeAction->setStatusTip ( tr("Closing Routing") );
|
||||||
dFinalizeAction->setVisible ( true );
|
dFinalizeAction->setVisible ( true );
|
||||||
stepMenu->addAction ( dFinalizeAction );
|
stepMenu->addAction( dFinalizeAction );
|
||||||
|
|
||||||
QAction* dDumpMeasuresAction = new QAction ( tr("Kite - Dump &Measures"), _viewer );
|
QAction* dDumpMeasuresAction = new QAction ( tr("Kite - Dump &Measures"), _viewer );
|
||||||
dDumpMeasuresAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepBystep.dumpMeasures" );
|
dDumpMeasuresAction->setObjectName( "viewer.menuBar.placeAndRoute.stepBystep.dumpMeasures" );
|
||||||
dDumpMeasuresAction->setStatusTip ( tr("Dumping Measurements on the disk") );
|
dDumpMeasuresAction->setStatusTip ( tr("Dumping Measurements on the disk") );
|
||||||
dDumpMeasuresAction->setVisible ( true );
|
dDumpMeasuresAction->setVisible ( true );
|
||||||
stepMenu->addAction ( dDumpMeasuresAction );
|
stepMenu->addAction( dDumpMeasuresAction );
|
||||||
|
|
||||||
QAction* dSaveAction = new QAction ( tr("Kite - &Save Design"), _viewer );
|
QAction* dSaveAction = new QAction ( tr("Kite - &Save Design"), _viewer );
|
||||||
dSaveAction->setObjectName ( "viewer.menuBar.placeAndRoute.stepBystep.save" );
|
dSaveAction->setObjectName( "viewer.menuBar.placeAndRoute.stepBystep.save" );
|
||||||
dSaveAction->setStatusTip ( tr("Save routed design (temporary hack)") );
|
dSaveAction->setStatusTip ( tr("Save routed design (temporary hack)") );
|
||||||
dSaveAction->setVisible ( true );
|
dSaveAction->setVisible ( true );
|
||||||
stepMenu->addAction ( dSaveAction );
|
stepMenu->addAction( dSaveAction );
|
||||||
|
|
||||||
QAction* routeAction = new QAction ( tr("Kite - &Route"), _viewer );
|
QAction* routeAction = new QAction ( tr("Kite - &Route"), _viewer );
|
||||||
routeAction->setObjectName ( "viewer.menuBar.placeAndRoute.route" );
|
routeAction->setObjectName( "viewer.menuBar.placeAndRoute.route" );
|
||||||
routeAction->setStatusTip ( tr("Route the design (global & detailed)") );
|
routeAction->setStatusTip ( tr("Route the design (global & detailed)") );
|
||||||
routeAction->setVisible ( true );
|
routeAction->setVisible ( true );
|
||||||
prMenu->addAction ( routeAction );
|
prMenu->addAction( routeAction );
|
||||||
|
|
||||||
connect ( gLoadSolutionAction, SIGNAL(triggered()), this, SLOT(loadGlobalSolution()) );
|
connect( gLoadSolutionAction, SIGNAL(triggered()), this, SLOT(loadGlobalSolution()) );
|
||||||
connect ( gSaveSolutionAction, SIGNAL(triggered()), this, SLOT(saveGlobalSolution()) );
|
connect( gSaveSolutionAction, SIGNAL(triggered()), this, SLOT(saveGlobalSolution()) );
|
||||||
connect ( gRouteAction , SIGNAL(triggered()), this, SLOT(globalRoute ()) );
|
connect( gRouteAction , SIGNAL(triggered()), this, SLOT(globalRoute ()) );
|
||||||
connect ( dRouteAction , SIGNAL(triggered()), this, SLOT(detailRoute ()) );
|
connect( dRouteAction , SIGNAL(triggered()), this, SLOT(detailRoute ()) );
|
||||||
connect ( dFinalizeAction , SIGNAL(triggered()), this, SLOT(finalize ()) );
|
connect( dFinalizeAction , SIGNAL(triggered()), this, SLOT(finalize ()) );
|
||||||
connect ( dSaveAction , SIGNAL(triggered()), this, SLOT(save ()) );
|
connect( dSaveAction , SIGNAL(triggered()), this, SLOT(save ()) );
|
||||||
connect ( dDumpMeasuresAction, SIGNAL(triggered()), this, SLOT(dumpMeasures ()) );
|
connect( dDumpMeasuresAction, SIGNAL(triggered()), this, SLOT(dumpMeasures ()) );
|
||||||
connect ( routeAction , SIGNAL(triggered()), this, SLOT(route ()) );
|
connect( routeAction , SIGNAL(triggered()), this, SLOT(route ()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
connect ( this, SIGNAL(cellPreModificated ()), _viewer->getCellWidget(), SLOT(cellPreModificate ()) );
|
connect( this, SIGNAL(cellPreModificated ()), _viewer->getCellWidget(), SLOT(cellPreModificate ()) );
|
||||||
connect ( this, SIGNAL(cellPostModificated()), _viewer->getCellWidget(), SLOT(cellPostModificate()) );
|
connect( this, SIGNAL(cellPostModificated()), _viewer->getCellWidget(), SLOT(cellPostModificate()) );
|
||||||
|
|
||||||
// ControllerWidget* controller = _viewer->getControllerWidget();
|
|
||||||
// ConfigurationWidget* setting = controller->getSettings()
|
|
||||||
// ->findChild<ConfigurationWidget*>("controller.tabSettings.setting.kite");
|
|
||||||
|
|
||||||
// if ( setting == NULL ) {
|
|
||||||
// setting = new ConfigurationWidget ();
|
|
||||||
// setting->setObjectName ( "controller.tabSettings.setting.kite" );
|
|
||||||
// setting->setConfiguration ( Configuration::getDefault() );
|
|
||||||
// controller->addSetting ( setting, "Kite" );
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Name& GraphicKiteEngine::getName () const
|
const Name& GraphicKiteEngine::getName () const
|
||||||
{
|
{ return KiteEngine::staticGetName(); }
|
||||||
return KiteEngine::staticGetName ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Cell* GraphicKiteEngine::getCell ()
|
Cell* GraphicKiteEngine::getCell ()
|
||||||
{
|
{
|
||||||
if ( !_viewer ) {
|
if (_viewer == NULL) {
|
||||||
throw Error ( "<b>Kite:</b> GraphicKiteEngine not bound to any Viewer." );
|
throw Error( "<b>Kite:</b> GraphicKiteEngine not bound to any Viewer." );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !_viewer->getCell() ) {
|
if (_viewer->getCell() == NULL) {
|
||||||
throw Error ( "<b>Kite:</b> No Cell is loaded into the Viewer." );
|
throw Error( "<b>Kite:</b> No Cell is loaded into the Viewer." );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,7 +365,7 @@ namespace Kite {
|
||||||
|
|
||||||
GraphicKiteEngine* GraphicKiteEngine::grab ()
|
GraphicKiteEngine* GraphicKiteEngine::grab ()
|
||||||
{
|
{
|
||||||
if ( !_references ) {
|
if (not _references) {
|
||||||
_singleton = new GraphicKiteEngine ();
|
_singleton = new GraphicKiteEngine ();
|
||||||
}
|
}
|
||||||
_references++;
|
_references++;
|
||||||
|
@ -419,8 +376,8 @@ namespace Kite {
|
||||||
|
|
||||||
size_t GraphicKiteEngine::release ()
|
size_t GraphicKiteEngine::release ()
|
||||||
{
|
{
|
||||||
_references--;
|
--_references;
|
||||||
if ( !_references ) {
|
if (not _references) {
|
||||||
delete _singleton;
|
delete _singleton;
|
||||||
_singleton = NULL;
|
_singleton = NULL;
|
||||||
}
|
}
|
||||||
|
@ -430,12 +387,12 @@ namespace Kite {
|
||||||
|
|
||||||
GraphicKiteEngine::GraphicKiteEngine ()
|
GraphicKiteEngine::GraphicKiteEngine ()
|
||||||
: GraphicTool()
|
: GraphicTool()
|
||||||
, _viewer(NULL)
|
, _viewer (NULL)
|
||||||
{
|
{
|
||||||
addDrawGo ( "Knik::Edge" , GraphicKnikEngine::initKnikEdges , GraphicKnikEngine::drawKnikEdges );
|
addDrawGo( "Knik::Edge" , GraphicKnikEngine::initKnikEdges , GraphicKnikEngine::drawKnikEdges );
|
||||||
addDrawGo ( "Knik::Vertex" , GraphicKnikEngine::initKnikVertex, GraphicKnikEngine::drawKnikVertex );
|
addDrawGo( "Knik::Vertex" , GraphicKnikEngine::initKnikVertex, GraphicKnikEngine::drawKnikVertex );
|
||||||
addDrawGo ( "Katabatic::Ac" , initKatabaticAc , drawKatabaticAc );
|
addDrawGo( "Katabatic::Ac" , initKatabaticAc , drawKatabaticAc );
|
||||||
addDrawGo ( "Katabatic::GCell", initKatabaticGCell, drawKatabaticGCell );
|
addDrawGo( "Katabatic::GCell", initKatabaticGCell, drawKatabaticGCell );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -443,4 +400,4 @@ namespace Kite {
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,13 +12,10 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./HorizontalTrack.cpp" |
|
// | C++ Module : "./HorizontalTrack.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include "kite/HorizontalTrack.h"
|
#include "kite/HorizontalTrack.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
@ -61,7 +53,7 @@ namespace Kite {
|
||||||
|
|
||||||
bool HorizontalTrack::isHorizontal () const { return true; }
|
bool HorizontalTrack::isHorizontal () const { return true; }
|
||||||
bool HorizontalTrack::isVertical () const { return false; }
|
bool HorizontalTrack::isVertical () const { return false; }
|
||||||
unsigned int HorizontalTrack::getDirection () const { return Constant::Horizontal; }
|
unsigned int HorizontalTrack::getDirection () const { return KbHorizontal; }
|
||||||
|
|
||||||
|
|
||||||
Point HorizontalTrack::getPosition ( DbU::Unit coordinate ) const
|
Point HorizontalTrack::getPosition ( DbU::Unit coordinate ) const
|
||||||
|
@ -81,4 +73,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
@ -15,31 +14,31 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
namespace bopts = boost::program_options;
|
namespace bopts = boost::program_options;
|
||||||
|
|
||||||
#include "vlsisapd/configuration/Configuration.h"
|
#include "vlsisapd/configuration/Configuration.h"
|
||||||
#include "hurricane/DebugSession.h"
|
#include "hurricane/DebugSession.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/Warning.h"
|
||||||
#include "hurricane/UpdateSession.h"
|
#include "hurricane/UpdateSession.h"
|
||||||
using namespace Hurricane;
|
using namespace Hurricane;
|
||||||
|
|
||||||
#include "crlcore/Utilities.h"
|
#include "crlcore/Utilities.h"
|
||||||
#include "crlcore/Banner.h"
|
#include "crlcore/Banner.h"
|
||||||
#include "crlcore/AllianceFramework.h"
|
#include "crlcore/AllianceFramework.h"
|
||||||
#include "crlcore/Hierarchy.h"
|
#include "crlcore/Hierarchy.h"
|
||||||
#include "crlcore/ToolBox.h"
|
#include "crlcore/ToolBox.h"
|
||||||
using namespace CRL;
|
using namespace CRL;
|
||||||
|
|
||||||
#include "knik/KnikEngine.h"
|
#include "knik/KnikEngine.h"
|
||||||
using namespace Knik;
|
using namespace Knik;
|
||||||
|
|
||||||
#include "kite/KiteEngine.h"
|
#include "kite/KiteEngine.h"
|
||||||
using namespace Kite;
|
using namespace Kite;
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,8 +144,8 @@ int main ( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
|
|
||||||
KatabaticEngine::NetSet routingNets;
|
KatabaticEngine::NetSet routingNets;
|
||||||
unsigned int globalFlags = (loadGlobal) ? Kite::LoadGlobalSolution
|
unsigned int globalFlags = (loadGlobal) ? Kite::KtLoadGlobalRouting
|
||||||
: Kite::BuildGlobalSolution;
|
: Kite::KtBuildGlobalRouting;
|
||||||
|
|
||||||
KiteEngine* kite = KiteEngine::create( cell );
|
KiteEngine* kite = KiteEngine::create( cell );
|
||||||
if (showConf) kite->printConfiguration();
|
if (showConf) kite->printConfiguration();
|
||||||
|
@ -154,9 +153,10 @@ int main ( int argc, char *argv[] )
|
||||||
kite->runGlobalRouter( globalFlags );
|
kite->runGlobalRouter( globalFlags );
|
||||||
if (saveGlobal) kite->saveGlobalSolution ();
|
if (saveGlobal) kite->saveGlobalSolution ();
|
||||||
|
|
||||||
kite->loadGlobalRouting( Katabatic::LoadGrByNet, routingNets );
|
kite->loadGlobalRouting ( Katabatic::EngineLoadGrByNet, routingNets );
|
||||||
kite->layerAssign ( Katabatic::NoNetLayerAssign );
|
kite->balanceGlobalDensity();
|
||||||
kite->runNegociate ();
|
kite->layerAssign ( Katabatic::EngineNoNetLayerAssign );
|
||||||
|
kite->runNegociate ();
|
||||||
kiteSuccess = kite->getToolSuccess();
|
kiteSuccess = kite->getToolSuccess();
|
||||||
kite->finalizeLayout ();
|
kite->finalizeLayout ();
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
@ -15,34 +15,32 @@
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
#include "hurricane/Warning.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/Bug.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/RoutingPad.h"
|
||||||
#include "hurricane/RoutingPad.h"
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Net.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "crlcore/Utilities.h"
|
||||||
#include "crlcore/Utilities.h"
|
#include "crlcore/AllianceFramework.h"
|
||||||
#include "crlcore/AllianceFramework.h"
|
#include "crlcore/Measures.h"
|
||||||
#include "crlcore/Measures.h"
|
#include "crlcore/Histogram.h"
|
||||||
#include "crlcore/Histogram.h"
|
#include "katabatic/AutoContact.h"
|
||||||
#include "katabatic/AutoContact.h"
|
#include "katabatic/GCellGrid.h"
|
||||||
#include "katabatic/GCellGrid.h"
|
#include "kite/DataNegociate.h"
|
||||||
|
#include "kite/TrackElement.h"
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/TrackMarker.h"
|
||||||
#include "kite/TrackElement.h"
|
#include "kite/TrackCost.h"
|
||||||
#include "kite/TrackMarker.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/TrackCost.h"
|
#include "kite/TrackSegment.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/TrackSegment.h"
|
#include "kite/RoutingEventQueue.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/RoutingEventHistory.h"
|
||||||
#include "kite/RoutingEventQueue.h"
|
#include "kite/RoutingEventLoop.h"
|
||||||
#include "kite/RoutingEventHistory.h"
|
#include "kite/NegociateWindow.h"
|
||||||
#include "kite/RoutingEventLoop.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/NegociateWindow.h"
|
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -57,69 +55,56 @@ namespace {
|
||||||
{
|
{
|
||||||
Interval intersect = segment->getCanonicalInterval();
|
Interval intersect = segment->getCanonicalInterval();
|
||||||
|
|
||||||
if ( not intersect.intersect(cost.getInterval()) ) return;
|
if (not intersect.intersect(cost.getInterval())) return;
|
||||||
|
|
||||||
if ( segment->isBlockage() or segment->isFixed() ) {
|
if (segment->isBlockage() or segment->isFixed()) {
|
||||||
ltrace(200) << "Infinite cost from: " << segment << endl;
|
ltrace(200) << "Infinite cost from: " << segment << endl;
|
||||||
cost.setInfinite ();
|
cost.setInfinite ();
|
||||||
cost.setOverlap ();
|
cost.setOverlap ();
|
||||||
cost.setHardOverlap ();
|
cost.setHardOverlap();
|
||||||
cost.setBlockage ();
|
cost.setBlockage ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cost.getInterval().getVMax() > intersect.getVMax() ) cost.setLeftOverlap();
|
if (cost.getInterval().getVMax() > intersect.getVMax()) cost.setLeftOverlap();
|
||||||
if ( cost.getInterval().getVMin() < intersect.getVMin() ) cost.setRightOverlap();
|
if (cost.getInterval().getVMin() < intersect.getVMin()) cost.setRightOverlap();
|
||||||
|
|
||||||
//cost.setLonguestOverlap ( intersect.getSize() );
|
if (not intersect.contains(cost.getInterval()))
|
||||||
//intersect.intersection ( cost.getInterval() );
|
intersect.intersection( cost.getInterval() );
|
||||||
|
|
||||||
if ( not intersect.contains(cost.getInterval()) )
|
|
||||||
intersect.intersection ( cost.getInterval() );
|
|
||||||
else {
|
else {
|
||||||
cost.setLonguestOverlap ( intersect.getSize() );
|
cost.setLonguestOverlap( intersect.getSize() );
|
||||||
cost.setGlobalEnclosed ();
|
cost.setGlobalEnclosed();
|
||||||
}
|
}
|
||||||
|
|
||||||
DataNegociate* data = segment->getDataNegociate ();
|
DataNegociate* data = segment->getDataNegociate();
|
||||||
if ( not data ) return;
|
if (not data) return;
|
||||||
|
|
||||||
cost.mergeRipupCount ( data->getRipupCount() );
|
cost.mergeRipupCount( data->getRipupCount() );
|
||||||
if ( segment->isLocal() ) {
|
if ( segment->isLocal() ) {
|
||||||
cost.mergeDataState ( data->getState() );
|
cost.mergeDataState( data->getState() );
|
||||||
if ( data->getState() >= DataNegociate::LocalVsGlobal ) {
|
if (data->getState() >= DataNegociate::LocalVsGlobal) {
|
||||||
ltrace(200) << "MaximumSlack/LocalVsGlobal for " << segment << endl;
|
ltrace(200) << "MaximumSlack/LocalVsGlobal for " << segment << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( segment->isGlobal() ) {
|
if (segment->isGlobal()) {
|
||||||
//if ( data->getState() >= DataNegociate::ConflictSolve1 ) {
|
cost.setOverlapGlobal();
|
||||||
cost.setOverlapGlobal();
|
if ( (cost.getFlags() & TrackCost::LocalAndTopDepth)
|
||||||
//}
|
and (data->getState() >= DataNegociate::MoveUp) ) {
|
||||||
if ( (cost.getFlags() & TrackCost::LocalAndTopDepth)
|
cost.setInfinite ();
|
||||||
and (data->getState() >= DataNegociate::MoveUp) ) {
|
cost.setOverlap ();
|
||||||
cost.setInfinite ();
|
cost.setHardOverlap();
|
||||||
cost.setOverlap ();
|
return;
|
||||||
cost.setHardOverlap ();
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ( data->getRipupCount() > 3 ) {
|
cost.setOverlap();
|
||||||
// ltrace(200) << "Infinite cost from: " << segment << endl;
|
if ( segment->isLocal()
|
||||||
// cost.setFixed ();
|
or (cost.isForGlobal() and (Session::getRoutingGauge()->getLayerDepth(segment->getLayer()) < 3)) )
|
||||||
// cost.setInfinite ();
|
cost.incTerminals( data->getTerminals()*100 );
|
||||||
// cost.setOverlap ();
|
|
||||||
// cost.setHardOverlap ();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
cost.setOverlap ();
|
|
||||||
if ( segment->isLocal() or (Session::getRoutingGauge()->getLayerDepth(segment->getLayer()) < 3) )
|
|
||||||
cost.incTerminals ( data->getCost().getTerminals()*100 );
|
|
||||||
|
|
||||||
ltrace(200) << "| Increment Delta: " << DbU::getValueString(intersect.getSize()) << endl;
|
ltrace(200) << "| Increment Delta: " << DbU::getValueString(intersect.getSize()) << endl;
|
||||||
cost.incDelta ( intersect.getSize() );
|
cost.incDelta( intersect.getSize() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,24 +114,22 @@ namespace {
|
||||||
RoutingGauge* rg = nw->getKiteEngine()->getRoutingGauge();
|
RoutingGauge* rg = nw->getKiteEngine()->getRoutingGauge();
|
||||||
|
|
||||||
forEach ( Net*, inet, nw->getCell()->getNets() ) {
|
forEach ( Net*, inet, nw->getCell()->getNets() ) {
|
||||||
if ( inet->getType() == Net::Type::POWER ) continue;
|
if (inet->getType() == Net::Type::POWER ) continue;
|
||||||
if ( inet->getType() == Net::Type::GROUND ) continue;
|
if (inet->getType() == Net::Type::GROUND) continue;
|
||||||
if ( inet->getType() == Net::Type::CLOCK ) continue;
|
if (inet->getType() == Net::Type::CLOCK ) continue;
|
||||||
if ( af->isBLOCKAGE(inet->getName()) ) continue;
|
if (af->isBLOCKAGE(inet->getName())) continue;
|
||||||
|
|
||||||
forEach ( RoutingPad*, irp, inet->getRoutingPads() ) {
|
forEach ( RoutingPad*, irp, inet->getRoutingPads() ) {
|
||||||
size_t depth = rg->getLayerDepth(irp->getLayer());
|
size_t depth = rg->getLayerDepth(irp->getLayer());
|
||||||
if ( depth > 0 ) continue;
|
if (depth > 0) continue;
|
||||||
if ( depth == 0 ) {
|
if (depth == 0)
|
||||||
TrackMarker::create ( *irp, 1 );
|
TrackMarker::create( *irp, 1 );
|
||||||
//TrackMarker::create ( *irp, 2 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of local namespace.
|
} // Anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
@ -167,6 +150,8 @@ namespace Kite {
|
||||||
using CRL::Histogram;
|
using CRL::Histogram;
|
||||||
using CRL::addMeasure;
|
using CRL::addMeasure;
|
||||||
using Katabatic::AutoContact;
|
using Katabatic::AutoContact;
|
||||||
|
using Katabatic::AutoSegmentLut;
|
||||||
|
using Katabatic::perpandicularTo;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
@ -207,111 +192,115 @@ namespace Kite {
|
||||||
void NegociateWindow::setGCells ( const Katabatic::GCellVector& gcells )
|
void NegociateWindow::setGCells ( const Katabatic::GCellVector& gcells )
|
||||||
{
|
{
|
||||||
_gcells = gcells;
|
_gcells = gcells;
|
||||||
//sort ( _gcells.begin(), _gcells.end(), Katabatic::GCell::CompareGCellById() );
|
|
||||||
|
|
||||||
loadRoutingPads ( this );
|
loadRoutingPads( this );
|
||||||
Session::revalidate ();
|
Session::revalidate();
|
||||||
|
|
||||||
TrackElement* segment;
|
TrackElement* segment;
|
||||||
TrackElementLut lut = Session::getKiteEngine()->_getTrackElementLut();
|
AutoSegmentLut lut = Session::getKiteEngine()->_getAutoSegmentLut();
|
||||||
TrackElementLut::iterator it = lut.begin ();
|
AutoSegmentLut::iterator it = lut.begin ();
|
||||||
for ( ; it != lut.end() ; it++ ) {
|
for ( ; it != lut.end() ; it++ ) {
|
||||||
segment = it->second;
|
segment = Session::lookup( it->second );
|
||||||
segment->getDataNegociate()->update();
|
if (segment) segment->getDataNegociate()->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
_statistics.setGCellsCount ( _gcells.size() );
|
_statistics.setGCellsCount( _gcells.size() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void NegociateWindow::addInsertEvent ( TrackElement* segment, unsigned int level )
|
void NegociateWindow::addRoutingEvent ( TrackElement* segment, unsigned int level )
|
||||||
{
|
{
|
||||||
DataNegociate* data = segment->getDataNegociate();
|
DataNegociate* data = segment->getDataNegociate();
|
||||||
if ( not data or not data->hasRoutingEvent() )
|
if (not data or not data->hasRoutingEvent())
|
||||||
_eventQueue.add ( segment, level );
|
_eventQueue.add( segment, level );
|
||||||
else
|
else
|
||||||
cerr << Bug("NegociateWidow::addInsertEvent(): Try to adds twice the same TrackElement event."
|
cerr << Bug( "NegociateWidow::addRoutingEvent(): Try to adds twice the same TrackElement event."
|
||||||
"\n %p:%s."
|
"\n %p:%s."
|
||||||
,(void*)segment->base()->base()
|
, (void*)segment->base()->base()
|
||||||
,getString(segment).c_str()
|
, getString(segment).c_str()
|
||||||
) << endl;
|
) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElement* NegociateWindow::addTrackSegment ( AutoSegment* autoSegment, bool loading )
|
TrackElement* NegociateWindow::createTrackSegment ( AutoSegment* autoSegment, unsigned int flags )
|
||||||
{
|
{
|
||||||
ltrace(200) << "NegociateWindow::addTrackSegment() - " << autoSegment << endl;
|
ltrace(200) << "NegociateWindow::createTrackSegment() - " << autoSegment << endl;
|
||||||
ltracein(159);
|
ltracein(159);
|
||||||
|
|
||||||
// Special case: fixed AutoSegments must not interfere with blockages.
|
// Special case: fixed AutoSegments must not interfere with blockages.
|
||||||
// Ugly: uses of getExtensionCap().
|
// Ugly: uses of getExtensionCap().
|
||||||
if ( autoSegment->isFixed() ) {
|
if (autoSegment->isFixed()) {
|
||||||
RoutingPlane* plane = Session::getKiteEngine()->getRoutingPlaneByLayer(autoSegment->getLayer());
|
RoutingPlane* plane = Session::getKiteEngine()->getRoutingPlaneByLayer(autoSegment->getLayer());
|
||||||
Track* track = plane->getTrackByPosition ( autoSegment->getAxis() );
|
Track* track = plane->getTrackByPosition( autoSegment->getAxis() );
|
||||||
size_t begin;
|
size_t begin;
|
||||||
size_t end;
|
size_t end;
|
||||||
Interval fixedSpan;
|
Interval fixedSpan;
|
||||||
Interval blockageSpan;
|
Interval blockageSpan;
|
||||||
|
|
||||||
autoSegment->getCanonical ( fixedSpan );
|
autoSegment->getCanonical( fixedSpan );
|
||||||
fixedSpan.inflate ( Session::getExtensionCap()-1 );
|
fixedSpan.inflate( Session::getExtensionCap()-1 );
|
||||||
|
|
||||||
track->getOverlapBounds ( fixedSpan, begin, end );
|
track->getOverlapBounds( fixedSpan, begin, end );
|
||||||
for ( ; (begin < end) ; begin++ ) {
|
for ( ; (begin < end) ; begin++ ) {
|
||||||
|
|
||||||
TrackElement* other = track->getSegment(begin);
|
TrackElement* other = track->getSegment(begin);
|
||||||
ltrace(200) << "| overlap: " << other << endl;
|
ltrace(200) << "| overlap: " << other << endl;
|
||||||
|
|
||||||
if ( not other->isBlockage() ) continue;
|
if (not other->isBlockage()) continue;
|
||||||
|
|
||||||
other->getCanonical ( blockageSpan );
|
other->getCanonical( blockageSpan );
|
||||||
blockageSpan.inflate(Session::getExtensionCap());
|
blockageSpan.inflate( Session::getExtensionCap() );
|
||||||
|
|
||||||
ltrace(200) << " fixed:" << fixedSpan << " vs. blockage:" << blockageSpan << endl;
|
ltrace(200) << " fixed:" << fixedSpan << " vs. blockage:" << blockageSpan << endl;
|
||||||
|
|
||||||
if ( not fixedSpan.intersect(blockageSpan) ) continue;
|
if (not fixedSpan.intersect(blockageSpan)) continue;
|
||||||
|
|
||||||
// Overlap between fixed & blockage.
|
// Overlap between fixed & blockage.
|
||||||
ltrace(200) << "* Blockage overlap: " << autoSegment << endl;
|
ltrace(200) << "* Blockage overlap: " << autoSegment << endl;
|
||||||
Session::destroyRequest ( autoSegment );
|
Session::destroyRequest( autoSegment );
|
||||||
|
|
||||||
cerr << Warning("Overlap between fixed %s and blockage at %s."
|
|
||||||
,getString(autoSegment).c_str(),getString(blockageSpan).c_str()) << endl;
|
|
||||||
|
|
||||||
|
cerr << Warning( "Overlap between fixed %s and blockage at %s."
|
||||||
|
, getString(autoSegment).c_str()
|
||||||
|
, getString(blockageSpan).c_str() ) << endl;
|
||||||
|
ltraceout(159);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Interval span;
|
Interval span;
|
||||||
autoSegment = autoSegment->getCanonical ( span );
|
autoSegment = autoSegment->getCanonical( span );
|
||||||
|
|
||||||
bool created;
|
bool created;
|
||||||
TrackElement* trackSegment = TrackSegment::create ( autoSegment, NULL, created );
|
TrackElement* trackSegment = TrackSegment::create( autoSegment, NULL, created );
|
||||||
|
|
||||||
if ( not loading )
|
if (not (flags & KtLoadingStage))
|
||||||
ltrace(159) << "* lookup: " << autoSegment << endl;
|
ltrace(159) << "* lookup: " << autoSegment << endl;
|
||||||
|
|
||||||
if ( created ) {
|
if (created) {
|
||||||
ltrace(159) << "* " << trackSegment << endl;
|
ltrace(159) << "* " << trackSegment << endl;
|
||||||
|
|
||||||
RoutingPlane* plane = Session::getKiteEngine()->getRoutingPlaneByLayer(autoSegment->getLayer());
|
RoutingPlane* plane = Session::getKiteEngine()->getRoutingPlaneByLayer(autoSegment->getLayer());
|
||||||
Track* track = plane->getTrackByPosition ( autoSegment->getAxis() );
|
Track* track = plane->getTrackByPosition ( autoSegment->getAxis() );
|
||||||
Interval uside = autoSegment->getAutoSource()->getGCell()->getUSide ( Constant::perpandicular(autoSegment->getDirection())/*, false */);
|
Interval uside = autoSegment->getAutoSource()->getGCell()->getSide( perpandicularTo(autoSegment->getDirection()) );
|
||||||
|
|
||||||
if ( track->getAxis() > uside.getVMax() ) track = track->getPrevious();
|
if (track->getAxis() > uside.getVMax()) track = track->getPreviousTrack();
|
||||||
if ( track->getAxis() < uside.getVMin() ) track = track->getNext();
|
if (track->getAxis() < uside.getVMin()) track = track->getNextTrack();
|
||||||
|
|
||||||
trackSegment->setAxis ( track->getAxis(), Katabatic::Realignate|Katabatic::AxisSet );
|
ltrace(159) << "* GCell U-side " << uside << endl;
|
||||||
trackSegment->invalidate ();
|
ltrace(159) << "* " << plane << endl;
|
||||||
|
ltrace(159) << "* " << track << endl;
|
||||||
|
|
||||||
if ( trackSegment->isFixed() ) {
|
trackSegment->setAxis( track->getAxis(), Katabatic::SegAxisSet );
|
||||||
Session::addInsertEvent ( trackSegment, track );
|
trackSegment->invalidate();
|
||||||
|
|
||||||
|
if (trackSegment->isFixed()) {
|
||||||
|
Session::addInsertEvent( trackSegment, track );
|
||||||
} else {
|
} else {
|
||||||
_segments.push_back ( trackSegment );
|
_segments.push_back( trackSegment );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( not created and not loading ) {
|
if (not created and not (flags & KtLoadingStage)) {
|
||||||
ltrace(200) << "TrackSegment already exists (and not in loading stage)." << endl;
|
ltrace(200) << "TrackSegment already exists (and not in loading stage)." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,19 +320,19 @@ namespace Kite {
|
||||||
Segment* segment;
|
Segment* segment;
|
||||||
TrackElement* trackSegment;
|
TrackElement* trackSegment;
|
||||||
|
|
||||||
vector<AutoContact*>* contacts = _gcells[igcell]->getContacts();
|
const vector<AutoContact*>& contacts = _gcells[igcell]->getContacts();
|
||||||
for ( size_t i=0 ; i<contacts->size() ; i++ ) {
|
for ( size_t i=0 ; i<contacts.size() ; i++ ) {
|
||||||
forEach ( Hook*, ihook, (*contacts)[i]->getBodyHook()->getSlaveHooks() ) {
|
forEach ( Hook*, ihook, contacts[i]->getBodyHook()->getSlaveHooks() ) {
|
||||||
Hook* sourceHook = dynamic_cast<Segment::SourceHook*>(*ihook);
|
Hook* sourceHook = dynamic_cast<Segment::SourceHook*>(*ihook);
|
||||||
if ( not sourceHook ) continue;
|
if (not sourceHook) continue;
|
||||||
|
|
||||||
segment = dynamic_cast<Segment*>(sourceHook->getComponent());
|
segment = dynamic_cast<Segment*>(sourceHook->getComponent());
|
||||||
trackSegment = Session::lookup ( segment );
|
trackSegment = Session::lookup( segment );
|
||||||
if ( trackSegment ) {
|
if (trackSegment) {
|
||||||
if ( accounteds.find(trackSegment) != accounteds.end() ) continue;
|
if (accounteds.find(trackSegment) != accounteds.end()) continue;
|
||||||
|
|
||||||
accounteds.insert ( trackSegment );
|
accounteds.insert( trackSegment );
|
||||||
gcellWL += DbU::getLambda ( trackSegment->getLength() );
|
gcellWL += DbU::getLambda( trackSegment->getLength() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -365,14 +354,14 @@ namespace Kite {
|
||||||
AutoSegment* autoSegment;
|
AutoSegment* autoSegment;
|
||||||
|
|
||||||
ltrace(149) << "AutoSegments from AutoContacts" << endl;
|
ltrace(149) << "AutoSegments from AutoContacts" << endl;
|
||||||
vector<AutoContact*>* contacts = gcell->getContacts();
|
const vector<AutoContact*>& contacts = gcell->getContacts();
|
||||||
for ( size_t i=0 ; i<contacts->size() ; i++ ) {
|
for ( size_t i=0 ; i<contacts.size() ; i++ ) {
|
||||||
forEach ( Component*, component, (*contacts)[i]->getSlaveComponents() ) {
|
forEach ( Component*, component, contacts[i]->getSlaveComponents() ) {
|
||||||
segment = dynamic_cast<Segment*>(*component);
|
segment = dynamic_cast<Segment*>(*component);
|
||||||
autoSegment = Session::base()->lookup ( segment );
|
autoSegment = Session::base()->lookup( segment );
|
||||||
ltrace(149) << autoSegment << endl;
|
ltrace(149) << autoSegment << endl;
|
||||||
if ( autoSegment and autoSegment->isCanonical() ) {
|
if (autoSegment and autoSegment->isCanonical()) {
|
||||||
addTrackSegment ( autoSegment, true );
|
createTrackSegment( autoSegment, KtLoadingStage );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -384,21 +373,21 @@ namespace Kite {
|
||||||
|
|
||||||
size_t NegociateWindow::_negociate ()
|
size_t NegociateWindow::_negociate ()
|
||||||
{
|
{
|
||||||
|
ltrace(500) << "Deter| NegociateWindow::_negociate()" << endl;
|
||||||
ltrace(150) << "NegociateWindow::_negociate() - " << _segments.size() << endl;
|
ltrace(150) << "NegociateWindow::_negociate() - " << _segments.size() << endl;
|
||||||
ltracein(149);
|
ltracein(149);
|
||||||
|
|
||||||
cmess1 << " o Negociation Stage." << endl;
|
cmess1 << " o Negociation Stage." << endl;
|
||||||
|
|
||||||
unsigned long limit = _kite->getEventsLimit();
|
unsigned long limit = _kite->getEventsLimit();
|
||||||
//unsigned long limit = 25586;
|
|
||||||
|
|
||||||
_eventHistory.clear();
|
_eventHistory.clear();
|
||||||
_eventQueue.load ( _segments );
|
_eventQueue.load( _segments );
|
||||||
|
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
RoutingEvent::setStage ( RoutingEvent::Negociate );
|
RoutingEvent::setStage( RoutingEvent::Negociate );
|
||||||
while ( not _eventQueue.empty() and not isInterrupted() ) {
|
while ( not _eventQueue.empty() and not isInterrupted() ) {
|
||||||
RoutingEvent* event = _eventQueue.pop ();
|
RoutingEvent* event = _eventQueue.pop();
|
||||||
|
|
||||||
if (tty::enabled()) {
|
if (tty::enabled()) {
|
||||||
cmess2 << " <event:" << tty::bold << setw(7) << setfill('0')
|
cmess2 << " <event:" << tty::bold << setw(7) << setfill('0')
|
||||||
|
@ -409,100 +398,67 @@ namespace Kite {
|
||||||
<< RoutingEvent::getProcesseds() << setfill(' ') << " "
|
<< RoutingEvent::getProcesseds() << setfill(' ') << " "
|
||||||
<< event->getEventLevel() << ":" << event->getPriority() << "> "
|
<< event->getEventLevel() << ":" << event->getPriority() << "> "
|
||||||
<< event->getSegment()
|
<< event->getSegment()
|
||||||
//<< "> @" << DbU::getValueString(event->getSegment()->getAxis())
|
|
||||||
//<< " id:" << event->getSegment()->getId()
|
|
||||||
//<< " " << event->getSegment()->getNet()->getName()
|
|
||||||
<< endl;
|
<< endl;
|
||||||
cmess2.flush();
|
cmess2.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
event->process ( _eventQueue, _eventHistory, _eventLoop );
|
event->process( _eventQueue, _eventHistory, _eventLoop );
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
if ( RoutingEvent::getProcesseds() >= limit ) setInterrupt ( true );
|
if (RoutingEvent::getProcesseds() >= limit) setInterrupt( true );
|
||||||
}
|
}
|
||||||
if (count and tty::enabled()) cmess1 << endl;
|
if (count and cmess2.enabled() and tty::enabled()) cmess1 << endl;
|
||||||
|
|
||||||
|
ltrace(500) << "Deter| Repair Stage" << endl;
|
||||||
cmess1 << " o Repair Stage." << endl;
|
cmess1 << " o Repair Stage." << endl;
|
||||||
|
|
||||||
ltrace(200) << "Loadind Repair queue." << endl;
|
ltrace(200) << "Loadind Repair queue." << endl;
|
||||||
RoutingEvent::setStage ( RoutingEvent::Repair );
|
RoutingEvent::setStage( RoutingEvent::Repair );
|
||||||
for ( size_t i=0 ; (i<_eventHistory.size()) and not isInterrupted() ; i++ ) {
|
for ( size_t i=0 ; (i<_eventHistory.size()) and not isInterrupted() ; i++ ) {
|
||||||
RoutingEvent* event = _eventHistory.getNth(i);
|
RoutingEvent* event = _eventHistory.getNth(i);
|
||||||
|
|
||||||
if ( not event->isCloned() and event->isUnimplemented() ) {
|
if (not event->isCloned() and event->isUnimplemented()) {
|
||||||
event->reschedule ( _eventQueue, 0 );
|
event->reschedule( _eventQueue, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_eventQueue.commit ();
|
_eventQueue.commit();
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
|
//_eventQueue.prepareRepair();
|
||||||
while ( not _eventQueue.empty() and not isInterrupted() ) {
|
while ( not _eventQueue.empty() and not isInterrupted() ) {
|
||||||
RoutingEvent* event = _eventQueue.pop ();
|
RoutingEvent* event = _eventQueue.pop();
|
||||||
|
|
||||||
if (tty::enabled()) {
|
if (tty::enabled()) {
|
||||||
cmess2 << " <repair.event:" << tty::bold << setw(7) << setfill('0')
|
cmess2 << " <repair.event:" << tty::bold << setw(7) << setfill('0')
|
||||||
<< RoutingEvent::getProcesseds() << setfill(' ') << tty::reset << ">" << tty::cr;
|
<< RoutingEvent::getProcesseds() << setfill(' ') << tty::reset << ">" << tty::cr;
|
||||||
cmess2.flush ();
|
cmess2.flush();
|
||||||
} else {
|
} else {
|
||||||
cmess2 << " <repair.event:" << setw(7) << setfill('0')
|
cmess2 << " <repair.event:" << setw(7) << setfill('0')
|
||||||
<< RoutingEvent::getProcesseds() << setfill(' ') << " "
|
<< RoutingEvent::getProcesseds() << setfill(' ') << " "
|
||||||
<< event->getEventLevel() << ":" << event->getPriority() << "> "
|
<< event->getEventLevel() << ":" << event->getPriority() << "> "
|
||||||
<< event->getSegment()
|
<< event->getSegment()
|
||||||
//<< "> @" << DbU::getValueString(event->getSegment()->getAxis())
|
|
||||||
//<< " id:" << event->getSegment()->getId()
|
|
||||||
//<< " " << event->getSegment()->getNet()->getName()
|
|
||||||
<< endl;
|
<< endl;
|
||||||
cmess2.flush();
|
cmess2.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
event->process ( _eventQueue, _eventHistory, _eventLoop );
|
event->process( _eventQueue, _eventHistory, _eventLoop );
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
if ( RoutingEvent::getProcesseds() >= limit ) setInterrupt ( true );
|
if (RoutingEvent::getProcesseds() >= limit ) setInterrupt( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
// {
|
if (count and cmess2.enabled() and tty::enabled()) cmess1 << endl;
|
||||||
// ltrace(200) << (void*)event << " ["
|
|
||||||
// << (event->isCloned ()?"C":"-")
|
|
||||||
// << (event->isDisabled ()?"d":"-")
|
|
||||||
// << (event->isUnimplemented()?"u":"-") << "] "
|
|
||||||
// << event->getSegment() << endl;
|
|
||||||
// if ( not event->isCloned() and event->isUnimplemented() ) {
|
|
||||||
// count++;
|
|
||||||
// event->setProcessed ( false );
|
|
||||||
// event->setMode ( RoutingEvent::Repair );
|
|
||||||
// event->process ( _eventQueue, _eventHistory, _eventLoop );
|
|
||||||
|
|
||||||
// if (tty::enabled()) {
|
|
||||||
// cmess1 << " <event:"
|
|
||||||
// << tty::bold << tty::fgcolor(tty::Red) << setw(7) << setfill('0')
|
|
||||||
// << RoutingEvent::getProcesseds() << setfill(' ') << tty::reset << ">" << tty::cr;
|
|
||||||
// cmess1.flush ();
|
|
||||||
// } else {
|
|
||||||
// cmess1 << " <event:" << setw(7) << setfill('0')
|
|
||||||
// << RoutingEvent::getProcesseds() << setfill(' ') << ">" << endl;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if (count and tty::enabled()) cmess1 << endl;
|
|
||||||
|
|
||||||
size_t eventsCount = _eventHistory.size();
|
size_t eventsCount = _eventHistory.size();
|
||||||
|
|
||||||
_eventHistory.clear();
|
_eventHistory.clear();
|
||||||
_eventQueue.clear();
|
_eventQueue.clear();
|
||||||
|
|
||||||
if ( RoutingEvent::getAllocateds() > 0 ) {
|
if (RoutingEvent::getAllocateds() > 0) {
|
||||||
cerr << Bug("%d events remains after clear.",RoutingEvent::getAllocateds()) << endl;
|
cerr << Bug( "%d events remains after clear.", RoutingEvent::getAllocateds() ) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ( _slowMotion && getCellWidget() ) {
|
_statistics.setEventsCount( eventsCount );
|
||||||
// Session::close ();
|
|
||||||
// getCellWidget()->refresh();
|
|
||||||
// Session::open ( _kiteEngine );
|
|
||||||
// }
|
|
||||||
|
|
||||||
_statistics.setEventsCount ( eventsCount );
|
|
||||||
ltraceout(149);
|
ltraceout(149);
|
||||||
|
|
||||||
return eventsCount;
|
return eventsCount;
|
||||||
|
@ -516,28 +472,30 @@ namespace Kite {
|
||||||
|
|
||||||
cmess1 << " o Running Negociate Algorithm" << endl;
|
cmess1 << " o Running Negociate Algorithm" << endl;
|
||||||
|
|
||||||
TrackElement::setOverlapCostCB ( NegociateOverlapCost );
|
TrackElement::setOverlapCostCB( NegociateOverlapCost );
|
||||||
RoutingEvent::resetProcesseds ();
|
RoutingEvent::resetProcesseds();
|
||||||
|
|
||||||
for ( size_t igcell=0 ; igcell<_gcells.size() ; ++igcell ) {
|
for ( size_t igcell=0 ; igcell<_gcells.size() ; ++igcell ) {
|
||||||
_createRouting ( _gcells[igcell] );
|
_createRouting( _gcells[igcell] );
|
||||||
}
|
}
|
||||||
Session::revalidate ();
|
Session::revalidate();
|
||||||
|
_kite->preProcess();
|
||||||
|
Session::revalidate();
|
||||||
|
|
||||||
getKiteEngine()->setMinimumWL ( computeWirelength() );
|
getKiteEngine()->setMinimumWL( computeWirelength() );
|
||||||
|
|
||||||
#if defined(CHECK_DATABASE)
|
#if defined(CHECK_DATABASE)
|
||||||
unsigned int overlaps = 0;
|
unsigned int overlaps = 0;
|
||||||
Session::getKiteEngine()->_check(overlaps,"after _createRouting(GCell*)");
|
Session::getKiteEngine()->_check( overlaps, "after _createRouting(GCell*)" );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_slowMotion = slowMotion;
|
_slowMotion = slowMotion;
|
||||||
_negociate ();
|
_negociate();
|
||||||
|
|
||||||
Session::get()->isEmpty();
|
Session::get()->isEmpty();
|
||||||
|
|
||||||
# if defined(CHECK_DATABASE)
|
# if defined(CHECK_DATABASE)
|
||||||
_kite->_check ( overlaps, "after negociation" );
|
_kite->_check( overlaps, "after negociation" );
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
ltraceout(149);
|
ltraceout(149);
|
||||||
|
@ -551,6 +509,7 @@ namespace Kite {
|
||||||
cmess1 << Dots::asSizet(" - Unique Events Total"
|
cmess1 << Dots::asSizet(" - Unique Events Total"
|
||||||
,(RoutingEvent::getProcesseds() - RoutingEvent::getCloneds())) << endl;
|
,(RoutingEvent::getProcesseds() - RoutingEvent::getCloneds())) << endl;
|
||||||
cmess1 << Dots::asSizet(" - # of GCells",_statistics.getGCellsCount()) << endl;
|
cmess1 << Dots::asSizet(" - # of GCells",_statistics.getGCellsCount()) << endl;
|
||||||
|
_kite->printCompletion();
|
||||||
|
|
||||||
addMeasure<size_t>( getCell(), "Events" , RoutingEvent::getProcesseds(), 12 );
|
addMeasure<size_t>( getCell(), "Events" , RoutingEvent::getProcesseds(), 12 );
|
||||||
addMeasure<size_t>( getCell(), "UEvents", RoutingEvent::getProcesseds()-RoutingEvent::getCloneds(), 12 );
|
addMeasure<size_t>( getCell(), "UEvents", RoutingEvent::getProcesseds()-RoutingEvent::getCloneds(), 12 );
|
||||||
|
@ -558,27 +517,27 @@ namespace Kite {
|
||||||
Histogram* densityHistogram = new Histogram ( 1.0, 0.1, 2 );
|
Histogram* densityHistogram = new Histogram ( 1.0, 0.1, 2 );
|
||||||
addMeasure<Histogram>( getCell(), "GCells Density Histogram", densityHistogram );
|
addMeasure<Histogram>( getCell(), "GCells Density Histogram", densityHistogram );
|
||||||
|
|
||||||
densityHistogram->setFileExtension ( ".density.histogram" );
|
densityHistogram->setFileExtension( ".density.histogram" );
|
||||||
densityHistogram->setMainTitle ( "GCell Densities" );
|
densityHistogram->setMainTitle ( "GCell Densities" );
|
||||||
densityHistogram->setTitle ( "Avg. Density", 0 );
|
densityHistogram->setTitle ( "Avg. Density", 0 );
|
||||||
densityHistogram->setTitle ( "Peak Density", 1 );
|
densityHistogram->setTitle ( "Peak Density", 1 );
|
||||||
densityHistogram->setColor ( "green", 0 );
|
densityHistogram->setColor ( "green", 0 );
|
||||||
densityHistogram->setColor ( "red" , 1 );
|
densityHistogram->setColor ( "red" , 1 );
|
||||||
|
|
||||||
const Katabatic::GCellVector* gcells = getKiteEngine()->getGCellGrid()->getGCellVector();
|
const Katabatic::GCellVector* gcells = getKiteEngine()->getGCellGrid()->getGCellVector();
|
||||||
|
|
||||||
getKiteEngine()->getGCellGrid()->setDensityMode ( Katabatic::GCellGrid::MaxHVDensity );
|
getKiteEngine()->getGCellGrid()->setDensityMode( Katabatic::GCellGrid::MaxHVDensity );
|
||||||
for ( size_t igcell=0 ; igcell<(*gcells).size() ; ++igcell ) {
|
for ( size_t igcell=0 ; igcell<(*gcells).size() ; ++igcell ) {
|
||||||
densityHistogram->addSample ( (*gcells)[igcell]->getDensity(), 0 );
|
densityHistogram->addSample( (*gcells)[igcell]->getDensity(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
getKiteEngine()->getGCellGrid()->setDensityMode ( Katabatic::GCellGrid::MaxDensity );
|
getKiteEngine()->getGCellGrid()->setDensityMode( Katabatic::GCellGrid::MaxDensity );
|
||||||
for ( size_t igcell=0 ; igcell<(*gcells).size() ; ++igcell ) {
|
for ( size_t igcell=0 ; igcell<(*gcells).size() ; ++igcell ) {
|
||||||
densityHistogram->addSample ( (*gcells)[igcell]->getDensity(), 1 );
|
densityHistogram->addSample( (*gcells)[igcell]->getDensity(), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
densityHistogram->normalize ( 0 );
|
densityHistogram->normalize( 0 );
|
||||||
densityHistogram->normalize ( 1 );
|
densityHistogram->normalize( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -587,7 +546,7 @@ namespace Kite {
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
|
|
||||||
os << "<" << _getTypeName() << ">";
|
os << "<" << _getTypeName() << ">";
|
||||||
return ( os.str() );
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -595,9 +554,9 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
Record* record = new Record ( _getString() );
|
Record* record = new Record ( _getString() );
|
||||||
|
|
||||||
record->add ( getSlot ( "_gcells", _gcells ) );
|
record->add( getSlot( "_gcells", _gcells ) );
|
||||||
return ( record );
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,39 +12,35 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./PreProcess.cpp" |
|
// | C++ Module : "./PreProcess.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include "hurricane/DebugSession.h"
|
||||||
#include <sstream>
|
#include "hurricane/Bug.h"
|
||||||
|
#include "hurricane/Warning.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/Name.h"
|
||||||
#include "hurricane/Net.h"
|
#include "hurricane/RoutingPad.h"
|
||||||
#include "hurricane/Name.h"
|
#include "hurricane/Horizontal.h"
|
||||||
#include "hurricane/RoutingPad.h"
|
#include "katabatic/AutoContactTerminal.h"
|
||||||
#include "katabatic/AutoContact.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/TrackElement.h"
|
||||||
#include "kite/TrackElement.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/NegociateWindow.h"
|
||||||
#include "kite/NegociateWindow.h"
|
#include "kite/Session.h"
|
||||||
#include "kite/Session.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Hurricane;
|
using namespace Hurricane;
|
||||||
using namespace CRL;
|
using namespace CRL;
|
||||||
using namespace Kite;
|
using namespace Kite;
|
||||||
|
using Katabatic::perpandicularTo;
|
||||||
|
using Katabatic::AutoContactTerminal;
|
||||||
|
|
||||||
|
|
||||||
void getPerpandiculars ( TrackElement* segment
|
void getPerpandiculars ( TrackElement* segment
|
||||||
|
@ -58,9 +49,6 @@ namespace {
|
||||||
, vector<TrackElement*>& perpandiculars
|
, vector<TrackElement*>& perpandiculars
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//AutoContact* to = segment->base()->getAutoSource();
|
|
||||||
//to = (to != from) ? to : segment->base()->getAutoTarget();
|
|
||||||
|
|
||||||
TrackElement* perpandicular;
|
TrackElement* perpandicular;
|
||||||
forEach ( Segment*, isegment, segment->base()->getAutoSource()->getSlaveComponents().getSubSet<Segment*>() ) {
|
forEach ( Segment*, isegment, segment->base()->getAutoSource()->getSlaveComponents().getSubSet<Segment*>() ) {
|
||||||
perpandicular = Session::lookup ( *isegment );
|
perpandicular = Session::lookup ( *isegment );
|
||||||
|
@ -108,21 +96,22 @@ namespace {
|
||||||
|
|
||||||
void propagateCagedConstraints ( TrackElement* segment, set<TrackElement*>& faileds )
|
void propagateCagedConstraints ( TrackElement* segment, set<TrackElement*>& faileds )
|
||||||
{
|
{
|
||||||
if ( not segment->isFixed() ) return;
|
if (not segment->isFixed()) return;
|
||||||
|
|
||||||
ltrace(200) << "Propagate caging: " << segment << endl;
|
ltrace(200) << "Propagate caging: " << segment << endl;
|
||||||
|
|
||||||
Track* track = segment->getTrack();
|
Track* track = segment->getTrack();
|
||||||
unsigned int direction = Session::getRoutingGauge()->getLayerDirection(segment->getLayer());
|
//unsigned int direction = Session::getRoutingGauge()->getLayerDirection(segment->getLayer());
|
||||||
|
unsigned int direction = segment->getDirection();
|
||||||
Katabatic::AutoContact* source = segment->base()->getAutoSource();
|
Katabatic::AutoContact* source = segment->base()->getAutoSource();
|
||||||
RoutingPad* rp = NULL;
|
RoutingPad* rp = NULL;
|
||||||
Interval uside = source->getGCell()->getUSide(direction);
|
Interval uside = source->getGCell()->getSide(direction);
|
||||||
DbU::Unit minConstraint = DbU::Min;
|
DbU::Unit minConstraint = DbU::Min;
|
||||||
DbU::Unit maxConstraint = DbU::Max;
|
DbU::Unit maxConstraint = DbU::Max;
|
||||||
vector<TrackElement*> perpandiculars;
|
vector<TrackElement*> perpandiculars;
|
||||||
|
|
||||||
if ( not track ) {
|
if ( not track ) {
|
||||||
cerr << Bug("%s is not inserted in a <Track>",getString(segment).c_str()) << endl;
|
cerr << Bug( "%s is not inserted in a <Track>", getString(segment).c_str() ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,30 +119,30 @@ namespace {
|
||||||
TrackElement* parallel;
|
TrackElement* parallel;
|
||||||
size_t i = segment->getIndex();
|
size_t i = segment->getIndex();
|
||||||
while ( i > 0 ) {
|
while ( i > 0 ) {
|
||||||
parallel = track->getSegment(--i);
|
parallel = track->getSegment( --i );
|
||||||
if ( not parallel ) continue;
|
if (not parallel) continue;
|
||||||
if ( parallel->getTargetU() < uside.getVMin() ) break;
|
if (parallel->getTargetU() < uside.getVMin()) break;
|
||||||
if ( parallel->getNet() == segment->getNet() ) continue;
|
if (parallel->getNet() == segment->getNet()) continue;
|
||||||
if ( not parallel->isFixed() ) continue;
|
if (not parallel->isFixed()) continue;
|
||||||
|
|
||||||
ltrace(200) << "Min Constraint from: " << parallel << endl;
|
ltrace(200) << "Min Constraint from: " << parallel << endl;
|
||||||
minConstraint = max ( minConstraint, parallel->getTargetU() );
|
minConstraint = max( minConstraint, parallel->getTargetU() );
|
||||||
}
|
}
|
||||||
|
|
||||||
i = segment->getIndex();
|
i = segment->getIndex();
|
||||||
while ( i < track->getSize()-1 ) {
|
while ( i < track->getSize()-1 ) {
|
||||||
parallel = track->getSegment(++i);
|
parallel = track->getSegment( ++i );
|
||||||
if ( not parallel ) continue;
|
if (not parallel) continue;
|
||||||
if ( parallel->getSourceU() > uside.getVMax() ) break;
|
if (parallel->getSourceU() > uside.getVMax()) break;
|
||||||
if ( parallel->getNet() == segment->getNet() ) continue;
|
if (parallel->getNet() == segment->getNet()) continue;
|
||||||
if ( not parallel->isFixed() ) continue;
|
if (not parallel->isFixed()) continue;
|
||||||
|
|
||||||
ltrace(200) << "Max Constraint from: " << parallel << endl;
|
ltrace(200) << "Max Constraint from: " << parallel << endl;
|
||||||
maxConstraint = min ( maxConstraint, parallel->getSourceU() );
|
maxConstraint = min( maxConstraint, parallel->getSourceU() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( minConstraint > maxConstraint ) {
|
if (minConstraint > maxConstraint) {
|
||||||
cerr << Bug("%s have too tight caging constraints.",getString(segment).c_str()) << endl;
|
cerr << Bug( "%s have too tight caging constraints.", getString(segment).c_str() ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( (minConstraint <= uside.getVMin()) and (maxConstraint >= uside.getVMax()) ) {
|
if ( (minConstraint <= uside.getVMin()) and (maxConstraint >= uside.getVMax()) ) {
|
||||||
|
@ -164,29 +153,29 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finding perpandiculars, by way of the source & target RoutingPad.
|
// Finding perpandiculars, by way of the source & target RoutingPad.
|
||||||
if ( source->getAnchor() ) {
|
if (source->getAnchor()) {
|
||||||
rp = dynamic_cast<RoutingPad*>(source->getAnchor());
|
rp = dynamic_cast<RoutingPad*>(source->getAnchor());
|
||||||
if ( rp ) {
|
if (rp) {
|
||||||
TrackElement* parallel;
|
TrackElement* parallel;
|
||||||
forEach ( Segment*, isegment, rp->getSlaveComponents().getSubSet<Segment*>() ) {
|
forEach ( Segment*, isegment, rp->getSlaveComponents().getSubSet<Segment*>() ) {
|
||||||
parallel = Session::lookup ( *isegment );
|
parallel = Session::lookup( *isegment );
|
||||||
ltrace(200) << "* " << parallel << endl;
|
ltrace(200) << "* " << parallel << endl;
|
||||||
|
|
||||||
if ( parallel->isFixed () ) continue;
|
if (parallel->isFixed ()) continue;
|
||||||
if ( parallel->isGlobal() ) continue;
|
if (parallel->isGlobal()) continue;
|
||||||
getPerpandiculars ( parallel, source, direction, perpandiculars );
|
getPerpandiculars( parallel, source, direction, perpandiculars );
|
||||||
getPerpandiculars ( parallel, segment->base()->getAutoTarget(), direction, perpandiculars );
|
getPerpandiculars( parallel, segment->base()->getAutoTarget(), direction, perpandiculars );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cerr << Bug("%s is not anchored on a <RoutingPad>\n (%s)"
|
cerr << Bug( "%s is not anchored on a <RoutingPad>\n (%s)"
|
||||||
,getString(source).c_str()
|
, getString(source).c_str()
|
||||||
,getString(source->getAnchor()).c_str()) << endl;
|
, getString(source->getAnchor()).c_str() ) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply caging constraints to perpandiculars.
|
// Apply caging constraints to perpandiculars.
|
||||||
ltracein(200);
|
ltracein(200);
|
||||||
if ( perpandiculars.size() == 0 ) {
|
if (perpandiculars.size() == 0) {
|
||||||
ltrace(200) << "No perpandiculars to " << segment << endl;
|
ltrace(200) << "No perpandiculars to " << segment << endl;
|
||||||
ltraceout(200);
|
ltraceout(200);
|
||||||
return;
|
return;
|
||||||
|
@ -195,10 +184,10 @@ namespace {
|
||||||
Interval constraints ( minConstraint, maxConstraint );
|
Interval constraints ( minConstraint, maxConstraint );
|
||||||
for ( size_t iperpand=0 ; iperpand<perpandiculars.size() ; iperpand++ ) {
|
for ( size_t iperpand=0 ; iperpand<perpandiculars.size() ; iperpand++ ) {
|
||||||
ltrace(200) << "Caged: " << constraints << " " << perpandiculars[iperpand] << endl;
|
ltrace(200) << "Caged: " << constraints << " " << perpandiculars[iperpand] << endl;
|
||||||
perpandiculars[iperpand]->base()->mergeUserConstraints ( constraints );
|
perpandiculars[iperpand]->base()->mergeUserConstraints( constraints );
|
||||||
if ( perpandiculars[iperpand]->base()->getUserConstraints().isEmpty() ) {
|
if (perpandiculars[iperpand]->base()->getUserConstraints().isEmpty()) {
|
||||||
ltrace(200) << "Cumulative caged constraints are too tight on " << perpandiculars[iperpand] << endl;
|
ltrace(200) << "Cumulative caged constraints are too tight on " << perpandiculars[iperpand] << endl;
|
||||||
findFailedPerpandiculars ( rp, direction, faileds );
|
findFailedPerpandiculars( rp, direction, faileds );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,81 +195,108 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void moveUpCaged ( TrackElement* segment )
|
||||||
|
{
|
||||||
|
DebugSession::open( segment->getNet(), 150 );
|
||||||
|
ltrace(150) << "::moveUpCaged() " << segment << endl;
|
||||||
|
ltracein(150);
|
||||||
|
|
||||||
|
//Configuration* configuration = Session::getConfiguration();
|
||||||
|
//const Layer* metal2 = configuration->getRoutingLayer( 1 );
|
||||||
|
//const Layer* metal3 = configuration->getRoutingLayer( 2 );
|
||||||
|
|
||||||
|
Katabatic::AutoContact* support = segment->base()->getAutoSource();
|
||||||
|
RoutingPad* rp = dynamic_cast<RoutingPad*>(support->getAnchor());
|
||||||
|
|
||||||
|
forEach( Component*, icomponent, rp->getSlaveComponents() ) {
|
||||||
|
Horizontal* baseSegment = dynamic_cast<Horizontal*>( *icomponent );
|
||||||
|
TrackElement* accessSegment = Session::lookup( baseSegment );
|
||||||
|
|
||||||
|
if (accessSegment and not accessSegment->isFixed()) {
|
||||||
|
accessSegment->moveUp( Katabatic::KbNoFlags );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ltraceout(150);
|
||||||
|
DebugSession::close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void protectCagedTerminals ( Track* track )
|
void protectCagedTerminals ( Track* track )
|
||||||
{
|
{
|
||||||
Configuration* configuration = Session::getConfiguration ();
|
ltrace(150) << "protectCagedTerminals() " << track << endl;
|
||||||
const Layer* metal2 = configuration->getRoutingLayer ( 1 );
|
ltracein(150);
|
||||||
const Layer* metal3 = configuration->getRoutingLayer ( 2 );
|
|
||||||
|
|
||||||
for ( size_t i=0 ; i<track->getSize() ; i++ ) {
|
DbU::Unit lastMovedUp = track->getMin();
|
||||||
TrackElement* segment = track->getSegment ( i );
|
unsigned int moveUpCount = 0;
|
||||||
|
|
||||||
|
Configuration* configuration = Session::getConfiguration();
|
||||||
|
const Layer* metal2 = configuration->getRoutingLayer( 1 );
|
||||||
|
const Layer* metal3 = configuration->getRoutingLayer( 2 );
|
||||||
|
Net* neighborNet = NULL;
|
||||||
|
|
||||||
|
if (track->getLayer() != metal2) {
|
||||||
|
ltraceout(150);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( size_t i=0 ; i<track->getSize() ; ++i ) {
|
||||||
|
TrackElement* segment = track->getSegment(i);
|
||||||
if ( segment and segment->isFixed() and segment->isTerminal() ) {
|
if ( segment and segment->isFixed() and segment->isTerminal() ) {
|
||||||
Interval freeInterval = track->getFreeInterval ( segment->getSourceU(), segment->getNet() );
|
Interval freeInterval = track->getFreeInterval( segment->getSourceU(), segment->getNet() );
|
||||||
|
|
||||||
if ( freeInterval.getSize() < DbU::lambda(30.0) ) {
|
//if (freeInterval.getSize() < DbU::lambda(5.0)*6) {
|
||||||
|
if ( (segment->getSourceU() - freeInterval.getVMin() < DbU::lambda(5.0)*3)
|
||||||
|
or (freeInterval.getVMax() - segment->getTargetU() < DbU::lambda(5.0)*3) ) {
|
||||||
cinfo << "Caged terminal: " << segment << endl;
|
cinfo << "Caged terminal: " << segment << endl;
|
||||||
if ( segment->getLayer() != metal2 ) continue;
|
if ( (segment->getLayer() != metal2)
|
||||||
if ( segment->getLength() >= DbU::lambda(5.0) ) continue;
|
or (segment->getLength() >= DbU::lambda(5.0))
|
||||||
|
or (segment->getNet() == neighborNet) ) {
|
||||||
|
neighborNet = segment->getNet();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (segment->getSourceU() - lastMovedUp < DbU::lambda(5.0)*4) {
|
||||||
|
++moveUpCount;
|
||||||
|
if (moveUpCount % 2 == 0) {
|
||||||
|
moveUpCaged( segment );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
moveUpCount = 0;
|
||||||
|
}
|
||||||
|
lastMovedUp = segment->getSourceU();
|
||||||
|
|
||||||
Katabatic::AutoContact* support = segment->base()->getAutoSource();
|
Katabatic::AutoContact* support = segment->base()->getAutoSource();
|
||||||
RoutingPad* rp = dynamic_cast<RoutingPad*>(support->getAnchor());
|
RoutingPad* rp = dynamic_cast<RoutingPad*>(support->getAnchor());
|
||||||
|
|
||||||
Katabatic::AutoContact* source
|
Katabatic::AutoContact* source
|
||||||
= Katabatic::AutoContact::fromRp ( support->getGCell()
|
= Katabatic::AutoContactTerminal::create( support->getGCell()
|
||||||
, rp
|
, rp
|
||||||
, metal3
|
, metal3
|
||||||
, rp->getSourcePosition()
|
, rp->getSourcePosition()
|
||||||
, DbU::lambda(1.0), DbU::lambda(1.0)
|
, DbU::lambda(1.0), DbU::lambda(1.0)
|
||||||
, true
|
);
|
||||||
);
|
source->setFlags( Katabatic::CntIgnoreAnchor );
|
||||||
|
|
||||||
Katabatic::AutoContact* target =
|
Katabatic::AutoContact* target =
|
||||||
Katabatic::AutoContact::fromRp ( support->getGCell()
|
Katabatic::AutoContactTerminal::create( support->getGCell()
|
||||||
, rp
|
, rp
|
||||||
, metal3
|
, metal3
|
||||||
, rp->getSourcePosition()
|
, rp->getSourcePosition()
|
||||||
, DbU::lambda(1.0), DbU::lambda(1.0)
|
, DbU::lambda(1.0), DbU::lambda(1.0)
|
||||||
, true
|
);
|
||||||
);
|
target->setFlags( Katabatic::CntIgnoreAnchor );
|
||||||
|
|
||||||
AutoSegment* segment = AutoSegment::create ( source
|
AutoSegment* fixedSegment = AutoSegment::create( source, target, Katabatic::KbVertical );
|
||||||
, target
|
fixedSegment->setFlags( Katabatic::SegFixed );
|
||||||
, Constant::Vertical
|
Session::getNegociateWindow()->createTrackSegment( fixedSegment, KtLoadingStage );
|
||||||
, AutoSegment::Local
|
|
||||||
, true
|
|
||||||
, false
|
|
||||||
);
|
|
||||||
segment->setFixed ( true );
|
|
||||||
Session::getNegociateWindow()->addTrackSegment ( segment, true );
|
|
||||||
|
|
||||||
#if DISABLED
|
|
||||||
// Force slackening.
|
|
||||||
bool breakFlag = false;
|
|
||||||
forEach ( Contact*, icontact, rp->getSlaveComponents().getSubSet<Contact*>() ) {
|
|
||||||
forEach ( Segment*, isegment, icontact->getSlaveComponents().getSubSet<Segment*>() ) {
|
|
||||||
TrackElement* trackSegment = Session::lookup(*isegment);
|
|
||||||
if ( not trackSegment or trackSegment->isFixed() ) continue;
|
|
||||||
|
|
||||||
if ( trackSegment->isHorizontal() ) {
|
|
||||||
ltrace(200) << "M2 to slacken for " << rp << endl;
|
|
||||||
breakFlag = true;
|
|
||||||
|
|
||||||
const vector<AutoSegment*>& dogLegs = Session::getDogLegs();
|
|
||||||
|
|
||||||
trackSegment->base()->makeDogLeg ( gcell->base(), true );
|
|
||||||
GCell::addTrackSegment ( gcell, dogLegs[1], true );
|
|
||||||
GCell::addTrackSegment ( gcell, dogLegs[2], true );
|
|
||||||
Session::revalidate ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( breakFlag ) break;
|
|
||||||
}
|
|
||||||
if ( breakFlag ) break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
neighborNet = segment->getNet();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ltraceout(150);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,17 +309,18 @@ namespace Kite {
|
||||||
using Hurricane::Bug;
|
using Hurricane::Bug;
|
||||||
using Hurricane::Net;
|
using Hurricane::Net;
|
||||||
using Hurricane::Name;
|
using Hurricane::Name;
|
||||||
|
using Katabatic::AutoSegmentLut;
|
||||||
|
|
||||||
|
|
||||||
void KiteEngine::preProcess ()
|
void KiteEngine::preProcess ()
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i<_routingPlanes.size() ; i++ ) {
|
for ( size_t i=0 ; i<_routingPlanes.size() ; ++i ) {
|
||||||
RoutingPlane* plane = _routingPlanes[i];
|
RoutingPlane* plane = _routingPlanes[i];
|
||||||
|
|
||||||
Track* track = plane->getTrackByIndex ( 0 );
|
Track* track = plane->getTrackByIndex( 0 );
|
||||||
while ( track ) {
|
while ( track ) {
|
||||||
protectCagedTerminals ( track );
|
protectCagedTerminals( track );
|
||||||
track = track->getNext ();
|
track = track->getNextTrack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Session::revalidate ();
|
Session::revalidate ();
|
||||||
|
@ -314,32 +331,17 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
set<TrackElement*> faileds;
|
set<TrackElement*> faileds;
|
||||||
|
|
||||||
TrackElementLut::iterator isegment = _trackSegmentLut.begin();
|
TrackElement* segment = NULL;
|
||||||
for ( ; isegment != _trackSegmentLut.end() ; isegment++ ) {
|
AutoSegmentLut::const_iterator isegment = _getAutoSegmentLut().begin();
|
||||||
if ( not isegment->second->isFixed() ) continue;
|
for ( ; isegment != _getAutoSegmentLut().end() ; isegment++ ) {
|
||||||
propagateCagedConstraints ( isegment->second, faileds );
|
segment = _lookup( isegment->second );
|
||||||
|
if (not segment or not segment->isFixed()) continue;
|
||||||
|
|
||||||
|
DebugSession::open( segment->getNet() );
|
||||||
|
propagateCagedConstraints( segment, faileds );
|
||||||
|
DebugSession::close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KiteEngine::_computeCagedConstraints ( Net* net, set<TrackElement*>& faileds )
|
} // Kite namespace.
|
||||||
{
|
|
||||||
TrackElement* segment = NULL;
|
|
||||||
|
|
||||||
forEach ( Segment*, isegment, net->getComponents().getSubSet<Segment*>() ) {
|
|
||||||
segment = Session::lookup ( *isegment );
|
|
||||||
if ( not segment ) continue;
|
|
||||||
|
|
||||||
segment->base()->resetUserConstraints();
|
|
||||||
}
|
|
||||||
|
|
||||||
forEach ( Segment*, isegment, net->getComponents().getSubSet<Segment*>() ) {
|
|
||||||
segment = Session::lookup ( *isegment );
|
|
||||||
if ( not segment ) continue;
|
|
||||||
|
|
||||||
propagateCagedConstraints ( segment, faileds );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,36 +12,32 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./ProtectRoutingPads.cpp" |
|
// | C++ Module : "./ProtectRoutingPads.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/Technology.h"
|
||||||
#include "hurricane/Technology.h"
|
#include "hurricane/BasicLayer.h"
|
||||||
#include "hurricane/BasicLayer.h"
|
#include "hurricane/RegularLayer.h"
|
||||||
#include "hurricane/RegularLayer.h"
|
#include "hurricane/Horizontal.h"
|
||||||
#include "hurricane/Horizontal.h"
|
#include "hurricane/Vertical.h"
|
||||||
#include "hurricane/Vertical.h"
|
#include "hurricane/RoutingPad.h"
|
||||||
#include "hurricane/RoutingPad.h"
|
#include "hurricane/Occurrence.h"
|
||||||
#include "hurricane/Occurrence.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/NetExternalComponents.h"
|
||||||
#include "hurricane/NetExternalComponents.h"
|
#include "crlcore/Catalog.h"
|
||||||
#include "crlcore/Catalog.h"
|
#include "katabatic/AutoContact.h"
|
||||||
#include "katabatic/AutoContact.h"
|
#include "katabatic/AutoSegment.h"
|
||||||
#include "katabatic/AutoSegment.h"
|
#include "katabatic/GCell.h"
|
||||||
#include "katabatic/GCell.h"
|
#include "katabatic/GCellGrid.h"
|
||||||
#include "katabatic/GCellGrid.h"
|
#include "katabatic/KatabaticEngine.h"
|
||||||
#include "katabatic/KatabaticEngine.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/TrackSegment.h"
|
||||||
#include "kite/TrackSegment.h"
|
#include "kite/TrackFixedSegment.h"
|
||||||
#include "kite/TrackFixedSegment.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -114,12 +105,12 @@ namespace {
|
||||||
transformation.applyOn ( bb );
|
transformation.applyOn ( bb );
|
||||||
//cinfo << "bb: " << bb << endl;
|
//cinfo << "bb: " << bb << endl;
|
||||||
|
|
||||||
if ( direction == Constant::Horizontal ) {
|
if ( direction == KbHorizontal ) {
|
||||||
DbU::Unit axisMin = bb.getYMin() - delta;
|
DbU::Unit axisMin = bb.getYMin() - delta;
|
||||||
DbU::Unit axisMax = bb.getYMax() + delta;
|
DbU::Unit axisMax = bb.getYMax() + delta;
|
||||||
|
|
||||||
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
||||||
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNext() ) {
|
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNextTrack() ) {
|
||||||
Horizontal* segment = Horizontal::create ( rp->getNet()
|
Horizontal* segment = Horizontal::create ( rp->getNet()
|
||||||
, segments[i]->getLayer()
|
, segments[i]->getLayer()
|
||||||
, track->getAxis()
|
, track->getAxis()
|
||||||
|
@ -134,7 +125,7 @@ namespace {
|
||||||
DbU::Unit axisMax = bb.getXMax() + delta;
|
DbU::Unit axisMax = bb.getXMax() + delta;
|
||||||
|
|
||||||
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
Track* track = plane->getTrackByPosition ( axisMin, Constant::Superior );
|
||||||
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNext() ) {
|
for ( ; track and (track->getAxis() <= axisMax) ; track = track->getNextTrack() ) {
|
||||||
Vertical* segment = Vertical::create ( rp->getNet()
|
Vertical* segment = Vertical::create ( rp->getNet()
|
||||||
, segments[i]->getLayer()
|
, segments[i]->getLayer()
|
||||||
, track->getAxis()
|
, track->getAxis()
|
||||||
|
@ -167,9 +158,6 @@ namespace Kite {
|
||||||
cmess1 << " o Protect external components not useds as RoutingPads." << endl;
|
cmess1 << " o Protect external components not useds as RoutingPads." << endl;
|
||||||
|
|
||||||
forEach ( Net*, inet, getCell()->getNets() ) {
|
forEach ( Net*, inet, getCell()->getNets() ) {
|
||||||
// cerr << *inet << " isSupply():" << (*inet)->isSupply()
|
|
||||||
// << " " << (*inet)->getType()
|
|
||||||
// << endl;
|
|
||||||
if ( (*inet)->isSupply() ) continue;
|
if ( (*inet)->isSupply() ) continue;
|
||||||
|
|
||||||
vector<RoutingPad*> rps;
|
vector<RoutingPad*> rps;
|
||||||
|
@ -185,4 +173,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2012-2012, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2012-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
@ -68,30 +68,30 @@ extern "C" {
|
||||||
DL_EXPORT(void) initKite () {
|
DL_EXPORT(void) initKite () {
|
||||||
trace << "initKite()" << endl;
|
trace << "initKite()" << endl;
|
||||||
|
|
||||||
PyKiteEngine_LinkPyType ();
|
PyKiteEngine_LinkPyType();
|
||||||
PyGraphicKiteEngine_LinkPyType ();
|
PyGraphicKiteEngine_LinkPyType();
|
||||||
|
|
||||||
PYTYPE_READY_SUB ( KiteEngine , ToolEngine );
|
PYTYPE_READY_SUB( KiteEngine , ToolEngine );
|
||||||
PYTYPE_READY_SUB ( GraphicKiteEngine, GraphicTool );
|
PYTYPE_READY_SUB( GraphicKiteEngine, GraphicTool );
|
||||||
|
|
||||||
|
|
||||||
PyObject* module = Py_InitModule ( "Kite", PyKite_Methods );
|
PyObject* module = Py_InitModule( "Kite", PyKite_Methods );
|
||||||
if ( module == NULL ) {
|
if (module == NULL) {
|
||||||
cerr << "[ERROR]\n"
|
cerr << "[ERROR]\n"
|
||||||
<< " Failed to initialize Kite module." << endl;
|
<< " Failed to initialize Kite module." << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF ( &PyTypeKiteEngine );
|
Py_INCREF( &PyTypeKiteEngine );
|
||||||
PyModule_AddObject ( module, "KiteEngine", (PyObject*)&PyTypeKiteEngine );
|
PyModule_AddObject( module, "KiteEngine", (PyObject*)&PyTypeKiteEngine );
|
||||||
Py_INCREF ( &PyTypeGraphicKiteEngine );
|
Py_INCREF( &PyTypeGraphicKiteEngine );
|
||||||
PyModule_AddObject ( module, "GraphicKiteEngine", (PyObject*)&PyTypeGraphicKiteEngine );
|
PyModule_AddObject( module, "GraphicKiteEngine", (PyObject*)&PyTypeGraphicKiteEngine );
|
||||||
|
|
||||||
PyObject* dictionnary = PyModule_GetDict(module);
|
PyObject* dictionnary = PyModule_GetDict( module );
|
||||||
PyObject* constant;
|
PyObject* constant;
|
||||||
|
|
||||||
LoadObjectConstant(dictionnary,BuildGlobalSolution,"BuildGlobalSolution");
|
LoadObjectConstant( dictionnary, KtBuildGlobalRouting, "KtBuildGlobalRouting" );
|
||||||
LoadObjectConstant(dictionnary,LoadGlobalSolution ,"LoadGlobalSolution" );
|
LoadObjectConstant( dictionnary, KtLoadGlobalRouting , "KtLoadGlobalRouting" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2010-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// +-----------------------------------------------------------------+
|
// +-----------------------------------------------------------------+
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,22 +11,17 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./RoutingEventHistory.cpp" |
|
// | C++ Module : "./RoutingEventHistory.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/Error.h"
|
#include "kite/RoutingEvent.h"
|
||||||
#include "kite/RoutingEvent.h"
|
#include "kite/RoutingEventHistory.h"
|
||||||
#include "kite/RoutingEventHistory.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::setw;
|
using std::setw;
|
||||||
using std::setfill;
|
using std::setfill;
|
||||||
|
@ -113,4 +102,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,16 +11,13 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./RoutingEventLoop.cpp" |
|
// | C++ Module : "./RoutingEventLoop.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "kite/RoutingEvent.h"
|
#include "kite/RoutingEvent.h"
|
||||||
#include "kite/RoutingEventLoop.h"
|
#include "kite/RoutingEventLoop.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
@ -91,4 +82,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,43 +1,32 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
// | Author : Jean-Paul CHAPUT |
|
// | Author : Jean-Paul CHAPUT |
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./RoutingEvent.cpp" |
|
// | C++ Module : "./RoutingEventQueue.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "hurricane/Bug.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/TrackSegment.h"
|
||||||
#include "kite/TrackElement.h"
|
#include "kite/RoutingEventQueue.h"
|
||||||
#include "kite/RoutingEventQueue.h"
|
#include "kite/Session.h"
|
||||||
#include "kite/Session.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using std::setw;
|
using std::setw;
|
||||||
|
@ -72,39 +61,35 @@ namespace Kite {
|
||||||
void RoutingEventQueue::load ( const vector<TrackElement*>& segments )
|
void RoutingEventQueue::load ( const vector<TrackElement*>& segments )
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i<segments.size() ; i++ ) {
|
for ( size_t i=0 ; i<segments.size() ; i++ ) {
|
||||||
if ( segments[i]->getDataNegociate()->getRoutingEvent() ) {
|
if (segments[i]->getDataNegociate()->getRoutingEvent()) {
|
||||||
cinfo << "[INFO] Already have a RoutingEvent - " << segments[i] << endl;
|
cinfo << "[INFO] Already have a RoutingEvent - " << segments[i] << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ( segments[i]->getTrack() ) {
|
if (segments[i]->getTrack()) {
|
||||||
cinfo << "[INFO] Already in Track - " << segments[i] << endl;
|
cinfo << "[INFO] Already in Track - " << segments[i] << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
RoutingEvent* event = RoutingEvent::create(segments[i]);
|
RoutingEvent* event = RoutingEvent::create(segments[i]);
|
||||||
event->updateKey ();
|
event->updateKey();
|
||||||
_events.insert ( event );
|
_events.insert( event );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RoutingEventQueue::add ( TrackElement* segment, unsigned int level )
|
void RoutingEventQueue::add ( TrackElement* segment, unsigned int level )
|
||||||
{
|
{
|
||||||
if ( segment->getTrack() ) {
|
if (segment->getTrack()) {
|
||||||
cinfo << "[INFO] Already in Track " << (void*)segment->base()->base()
|
cinfo << "[INFO] Already in Track " << (void*)segment->base()->base()
|
||||||
<< ":" << segment << endl;
|
<< ":" << segment << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RoutingEvent* event = RoutingEvent::create(segment);
|
RoutingEvent* event = RoutingEvent::create(segment);
|
||||||
event->setEventLevel ( level );
|
event->setEventLevel( level );
|
||||||
push ( event );
|
push( event );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RoutingEventQueue::push ( RoutingEvent* event )
|
|
||||||
{ _pushRequests.insert ( event ); }
|
|
||||||
|
|
||||||
|
|
||||||
void RoutingEventQueue::commit ()
|
void RoutingEventQueue::commit ()
|
||||||
{
|
{
|
||||||
ltrace(200) << "RoutingEventQueue::commit()" << endl;
|
ltrace(200) << "RoutingEventQueue::commit()" << endl;
|
||||||
|
@ -113,31 +98,25 @@ namespace Kite {
|
||||||
size_t addeds = _pushRequests.size();
|
size_t addeds = _pushRequests.size();
|
||||||
size_t before = _events.size();
|
size_t before = _events.size();
|
||||||
|
|
||||||
set<RoutingEvent*>::iterator ipushEvent = _pushRequests.begin();
|
RoutingEventSet::iterator ipushEvent = _pushRequests.begin();
|
||||||
for ( ; ipushEvent != _pushRequests.end() ; ipushEvent++ ) {
|
for ( ; ipushEvent != _pushRequests.end() ; ipushEvent++ ) {
|
||||||
(*ipushEvent)->updateKey ();
|
(*ipushEvent)->updateKey();
|
||||||
|
|
||||||
_topEventLevel = max ( _topEventLevel, (*ipushEvent)->getEventLevel() );
|
_topEventLevel = max( _topEventLevel, (*ipushEvent)->getEventLevel() );
|
||||||
_events.insert ( (*ipushEvent) );
|
_events.insert( (*ipushEvent) );
|
||||||
|
|
||||||
ltrace(200) << "| " << (*ipushEvent) << endl;
|
ltrace(200) << "| " << (*ipushEvent) << endl;
|
||||||
}
|
}
|
||||||
_pushRequests.clear ();
|
_pushRequests.clear();
|
||||||
#if defined(CHECK_ROUTINGEVENT_QUEUE)
|
#if defined(CHECK_ROUTINGEVENT_QUEUE)
|
||||||
_keyCheck ();
|
_keyCheck();
|
||||||
#endif
|
#endif
|
||||||
size_t after = _events.size();
|
size_t after = _events.size();
|
||||||
if ( after-before != addeds ) {
|
if (after-before != addeds) {
|
||||||
cerr << Bug("RoutingEventQueue::commit(): less than %d events pusheds (%d)."
|
cerr << Bug( "RoutingEventQueue::commit(): less than %d events pusheds (%d)."
|
||||||
,addeds,(after-before)) << endl;
|
, addeds,(after-before) ) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ( (RoutingEvent::getProcesseds() > 61246)
|
|
||||||
// and (RoutingEvent::getProcesseds() < 61256) ) {
|
|
||||||
// cerr << "RoutingEventQueue::commit()" << endl;
|
|
||||||
// dump ();
|
|
||||||
// }
|
|
||||||
|
|
||||||
ltraceout(200);
|
ltraceout(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,33 +130,20 @@ namespace Kite {
|
||||||
_keyCheck ();
|
_keyCheck ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( !_events.empty() ) {
|
if (not _events.empty()) {
|
||||||
size_t beforeSize = _events.size();
|
size_t beforeSize = _events.size();
|
||||||
|
|
||||||
ievent = _events.end();
|
ievent = _events.end();
|
||||||
ievent--;
|
ievent--;
|
||||||
event = (*ievent);
|
event = (*ievent);
|
||||||
_events.erase ( ievent );
|
_events.erase( ievent );
|
||||||
|
|
||||||
// if ( (RoutingEvent::getProcesseds() > 61246)
|
|
||||||
// and (RoutingEvent::getProcesseds() < 61256) ) {
|
|
||||||
// cerr << "Popped: " << event << endl;
|
|
||||||
// dump ();
|
|
||||||
// }
|
|
||||||
|
|
||||||
size_t afterSize = _events.size();
|
size_t afterSize = _events.size();
|
||||||
|
|
||||||
if ( afterSize+1 != beforeSize ) {
|
if (afterSize+1 != beforeSize) {
|
||||||
cerr << Bug("RoutingEventQueue::pop(): more than one event popped: %d."
|
cerr << Bug( "RoutingEventQueue::pop(): more than one event popped: %d."
|
||||||
,(beforeSize-afterSize)) << endl;
|
, (beforeSize-afterSize) ) << endl;
|
||||||
}
|
}
|
||||||
// size_t erased = _events.erase ( event );
|
|
||||||
// if ( erased != 1 ) {
|
|
||||||
// cerr << Bug("RoutingEventQueue::pop(): %d events matches key %p.",erased,event) << endl;
|
|
||||||
// #if defined(CHECK_ROUTINGEVENT_QUEUE)
|
|
||||||
// _keyCheck ();
|
|
||||||
// #endif
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return event;
|
return event;
|
||||||
|
@ -192,65 +158,59 @@ namespace Kite {
|
||||||
|
|
||||||
multiset<RoutingEvent*,RoutingEvent::Compare>::iterator ievent = _events.find(event);
|
multiset<RoutingEvent*,RoutingEvent::Compare>::iterator ievent = _events.find(event);
|
||||||
size_t count = _events.count(event);
|
size_t count = _events.count(event);
|
||||||
if ( count > 1 ) {
|
if (count > 1) {
|
||||||
cerr << Bug("RoutingEventQueue::repush(): %d events matches key %p.",count,event) << endl;
|
cerr << Bug("RoutingEventQueue::repush(): %d events matches key %p.",count,event) << endl;
|
||||||
#if defined(CHECK_ROUTINGEVENT_QUEUE)
|
#if defined(CHECK_ROUTINGEVENT_QUEUE)
|
||||||
_keyCheck ();
|
_keyCheck ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ievent != _events.end() ) {
|
if (ievent != _events.end()) {
|
||||||
// if ( (RoutingEvent::getProcesseds() > 61246)
|
_events.erase( ievent );
|
||||||
// and (RoutingEvent::getProcesseds() < 61256) ) {
|
|
||||||
// cerr << "Erasing: " << *ievent << endl;
|
|
||||||
// }
|
|
||||||
_events.erase ( ievent );
|
|
||||||
}
|
}
|
||||||
push ( event );
|
push ( event );
|
||||||
|
|
||||||
// if ( (RoutingEvent::getProcesseds() > 61246)
|
|
||||||
// and (RoutingEvent::getProcesseds() < 61256) ) {
|
|
||||||
// cerr << "After repush: " << event << endl;
|
|
||||||
// dump();
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RoutingEventQueue::repushInvalidateds ()
|
void RoutingEventQueue::repushInvalidateds ()
|
||||||
{
|
{
|
||||||
const vector<AutoSegment*>& invalidateds0 = Session::getInvalidateds();
|
const vector<AutoSegment*>& invalidateds0 = Session::getInvalidateds();
|
||||||
set<TrackElement*> invalidateds1;
|
TrackSegmentSet invalidateds1;
|
||||||
for ( size_t i=0 ; i<invalidateds0.size() ; i++ ) {
|
for ( size_t i=0 ; i<invalidateds0.size() ; i++ ) {
|
||||||
TrackElement* segment = Session::lookup ( invalidateds0[i] );
|
TrackSegment* segment = dynamic_cast<TrackSegment*>( Session::lookup(invalidateds0[i]) );
|
||||||
if ( segment )
|
if (segment)
|
||||||
invalidateds1.insert ( segment );
|
invalidateds1.insert( segment );
|
||||||
}
|
}
|
||||||
|
|
||||||
set<TrackElement*>::iterator isegment = invalidateds1.begin();
|
TrackSegmentSet::iterator isegment = invalidateds1.begin();
|
||||||
for ( ; isegment != invalidateds1.end() ; isegment++ ) {
|
for ( ; isegment != invalidateds1.end() ; isegment++ ) {
|
||||||
RoutingEvent* event = (*isegment)->getDataNegociate()->getRoutingEvent();
|
RoutingEvent* event = (*isegment)->getDataNegociate()->getRoutingEvent();
|
||||||
if ( event
|
if ( event
|
||||||
and not event->isUnimplemented()
|
and not event->isUnimplemented()
|
||||||
and not event->isDisabled ()
|
and not event->isDisabled ()
|
||||||
and not event->isProcessed () ) {
|
and not event->isProcessed () ) {
|
||||||
repush ( event );
|
repush( event );
|
||||||
} else {
|
|
||||||
// if ( (RoutingEvent::getProcesseds() > 61246)
|
|
||||||
// and (RoutingEvent::getProcesseds() < 61256) ) {
|
|
||||||
// cerr << "NOT repushed: " << event << endl;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RoutingEventQueue::prepareRepair ()
|
||||||
|
{
|
||||||
|
multiset<RoutingEvent*,RoutingEvent::Compare>::const_iterator ievent = _events.begin ();
|
||||||
|
for ( ; ievent != _events.end(); ++ievent ) {
|
||||||
|
(*ievent)->getSegment()->base()->toOptimalAxis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void RoutingEventQueue::clear ()
|
void RoutingEventQueue::clear ()
|
||||||
{
|
{
|
||||||
if ( not _events.empty() ) {
|
if (not _events.empty()) {
|
||||||
cerr << Bug("RoutingEvent queue is not empty, %d events remains."
|
cerr << Bug("RoutingEvent queue is not empty, %d events remains."
|
||||||
,_events.size()) << endl;
|
,_events.size()) << endl;
|
||||||
}
|
}
|
||||||
_events.clear ();
|
_events.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -316,4 +276,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,22 +12,17 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./RoutingPlane.cpp" |
|
// | C++ Module : "./RoutingPlane.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include "hurricane/Error.h"
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/Box.h"
|
#include "hurricane/Box.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
|
#include "crlcore/RoutingLayerGauge.h"
|
||||||
#include "crlcore/RoutingLayerGauge.h"
|
#include "kite/HorizontalTrack.h"
|
||||||
|
#include "kite/VerticalTrack.h"
|
||||||
#include "kite/HorizontalTrack.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/VerticalTrack.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/RoutingPlane.h"
|
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -48,7 +38,6 @@ namespace {
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using Hurricane::tab;
|
using Hurricane::tab;
|
||||||
|
@ -68,8 +57,21 @@ namespace Kite {
|
||||||
: _kite (kite)
|
: _kite (kite)
|
||||||
, _layerGauge(kite->getLayerGauge(depth))
|
, _layerGauge(kite->getLayerGauge(depth))
|
||||||
, _depth (depth)
|
, _depth (depth)
|
||||||
|
, _flags (0)
|
||||||
|
, _axisMin (0)
|
||||||
|
, _axisMax (0)
|
||||||
|
, _trackMin (0)
|
||||||
|
, _trackMax (0)
|
||||||
, _tracks ()
|
, _tracks ()
|
||||||
{ }
|
{
|
||||||
|
switch ( _layerGauge->getDirection() ) {
|
||||||
|
case Constant::Horizontal: _flags |= KbHorizontal; break;
|
||||||
|
case Constant::Vertical: _flags |= KbVertical; break;
|
||||||
|
default:
|
||||||
|
cerr << Error( "RoutingPlane::RoutingPlane() - Unknown plane direction from LayerGauge: %u"
|
||||||
|
, _layerGauge->getDirection() ) << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
RoutingPlane::~RoutingPlane ()
|
RoutingPlane::~RoutingPlane ()
|
||||||
|
@ -82,8 +84,8 @@ namespace Kite {
|
||||||
<< (void*)this << " " << this << endl;
|
<< (void*)this << " " << this << endl;
|
||||||
ltracein(90);
|
ltracein(90);
|
||||||
|
|
||||||
for ( size_t index = 0 ; index < _tracks.size() ; index++ )
|
for ( size_t index=0 ; index<_tracks.size() ; ++index )
|
||||||
_tracks[index]->destroy ();
|
_tracks[index]->destroy();
|
||||||
|
|
||||||
delete this;
|
delete this;
|
||||||
|
|
||||||
|
@ -95,40 +97,41 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
RoutingPlane* plane = new RoutingPlane ( kite, depth );
|
RoutingPlane* plane = new RoutingPlane ( kite, depth );
|
||||||
|
|
||||||
if ( !plane->_layerGauge )
|
if (not plane->_layerGauge)
|
||||||
throw Error ( badLayerGauge, depth, getString(kite->getRoutingGauge()).c_str() );
|
throw Error( badLayerGauge, depth, getString(kite->getRoutingGauge()).c_str() );
|
||||||
|
|
||||||
size_t trackNumber;
|
size_t trackNumber;
|
||||||
Box abutmentBox = kite->getCell()->getAbutmentBox();
|
Box abutmentBox = kite->getCell()->getAbutmentBox();
|
||||||
if ( plane->getLayerGauge()->getDirection() & Constant::Horizontal ) {
|
// HARD CODED.
|
||||||
plane->_trackMin = abutmentBox.getXMin () - DbU::lambda (2.0);
|
if (plane->getDirection() == KbHorizontal) {
|
||||||
plane->_trackMax = abutmentBox.getXMax () + DbU::lambda (2.0);
|
plane->_trackMin = abutmentBox.getXMin() - DbU::lambda(2.0);
|
||||||
plane->_axisMin = abutmentBox.getYMin ();
|
plane->_trackMax = abutmentBox.getXMax() + DbU::lambda(2.0);
|
||||||
plane->_axisMax = abutmentBox.getYMax ();
|
plane->_axisMin = abutmentBox.getYMin();
|
||||||
trackNumber = plane->computeTracksSize ();
|
plane->_axisMax = abutmentBox.getYMax();
|
||||||
|
trackNumber = plane->computeTracksSize();
|
||||||
} else {
|
} else {
|
||||||
plane->_trackMin = abutmentBox.getYMin () - DbU::lambda (2.0);
|
plane->_trackMin = abutmentBox.getYMin() - DbU::lambda(2.0);
|
||||||
plane->_trackMax = abutmentBox.getYMax () + DbU::lambda (2.0);
|
plane->_trackMax = abutmentBox.getYMax() + DbU::lambda(2.0);
|
||||||
plane->_axisMin = abutmentBox.getXMin ();
|
plane->_axisMin = abutmentBox.getXMin();
|
||||||
plane->_axisMax = abutmentBox.getXMax ();
|
plane->_axisMax = abutmentBox.getXMax();
|
||||||
trackNumber = plane->computeTracksSize ();
|
trackNumber = plane->computeTracksSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
plane->_tracks.reserve ( trackNumber );
|
plane->_tracks.reserve( trackNumber );
|
||||||
for ( size_t index = 0 ; index < trackNumber ; index++ ) {
|
for ( size_t index=0 ; index<trackNumber ; ++index ) {
|
||||||
if ( plane->getLayerGauge()->getDirection() & Constant::Horizontal ) {
|
if (plane->getDirection() == KbHorizontal) {
|
||||||
plane->_tracks.push_back ( HorizontalTrack::create ( plane, index ) );
|
plane->_tracks.push_back( HorizontalTrack::create( plane, index ) );
|
||||||
// Ugly: Direct uses of CellGauge (middle tracks 4 & 5 for local use).
|
// Ugly: Direct uses of CellGauge (middle tracks 4 & 5 for local use).
|
||||||
if ( depth == 1 ) {
|
if (depth == 1) {
|
||||||
switch ( index % 10 ) {
|
switch ( index%10 ) {
|
||||||
case 4:
|
case 4:
|
||||||
case 5:
|
case 5:
|
||||||
plane->_tracks.back()->setLocalAssigned ( true );
|
plane->_tracks.back()->setLocalAssigned( true );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
plane->_tracks.push_back ( VerticalTrack::create ( plane, index ) );
|
plane->_tracks.push_back( VerticalTrack::create( plane, index ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,30 +140,30 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
RoutingPlane* RoutingPlane::getTop () const
|
RoutingPlane* RoutingPlane::getTop () const
|
||||||
{ return getKiteEngine()->getRoutingPlaneByIndex ( getDepth()+1 ); }
|
{ return getKiteEngine()->getRoutingPlaneByIndex( getDepth()+1 ); }
|
||||||
|
|
||||||
|
|
||||||
RoutingPlane* RoutingPlane::getBottom () const
|
RoutingPlane* RoutingPlane::getBottom () const
|
||||||
{
|
{
|
||||||
if ( !getDepth() ) return NULL;
|
if (not getDepth()) return NULL;
|
||||||
return getKiteEngine()->getRoutingPlaneByIndex ( getDepth()-1 );
|
return getKiteEngine()->getRoutingPlaneByIndex( getDepth()-1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Track* RoutingPlane::getTrackByIndex ( size_t index ) const
|
Track* RoutingPlane::getTrackByIndex ( size_t index ) const
|
||||||
{
|
{
|
||||||
if ( index >= getTracksSize() ) return NULL;
|
if (index >= getTracksSize()) return NULL;
|
||||||
return _tracks[index];
|
return _tracks[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Track* RoutingPlane::getTrackByPosition ( DbU::Unit axis, unsigned int mode ) const
|
Track* RoutingPlane::getTrackByPosition ( DbU::Unit axis, unsigned int mode ) const
|
||||||
{
|
{
|
||||||
return getTrackByIndex ( getLayerGauge()->getTrackIndex ( getAxisMin()
|
return getTrackByIndex( getLayerGauge()->getTrackIndex( getAxisMin()
|
||||||
, getAxisMax()
|
, getAxisMax()
|
||||||
, axis
|
, axis
|
||||||
, mode
|
, mode
|
||||||
) );
|
) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,8 +171,8 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
bool coherency = true;
|
bool coherency = true;
|
||||||
|
|
||||||
for ( size_t i=0 ; i<_tracks.size() ; i++ ) {
|
for ( size_t i=0 ; i<_tracks.size() ; ++i ) {
|
||||||
coherency = _tracks[i]->_check(overlaps) and coherency;
|
coherency = _tracks[i]->check(overlaps) and coherency;
|
||||||
}
|
}
|
||||||
|
|
||||||
return coherency;
|
return coherency;
|
||||||
|
@ -179,7 +182,9 @@ namespace Kite {
|
||||||
string RoutingPlane::_getString () const
|
string RoutingPlane::_getString () const
|
||||||
{
|
{
|
||||||
return "<" + _getTypeName() + " @"
|
return "<" + _getTypeName() + " @"
|
||||||
+ getString(_depth) + " ["
|
+ getString(_depth) + " "
|
||||||
|
+ getString(getLayer()) + " [ "
|
||||||
|
+ ((getDirection() == KbHorizontal) ? " horizontal [" : " vertical [")
|
||||||
+ getString(_tracks.size()) + "/"
|
+ getString(_tracks.size()) + "/"
|
||||||
+ getString(_tracks.capacity())
|
+ getString(_tracks.capacity())
|
||||||
+ "]>";
|
+ "]>";
|
||||||
|
@ -189,17 +194,17 @@ namespace Kite {
|
||||||
Record* RoutingPlane::_getRecord () const
|
Record* RoutingPlane::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = new Record ( getString(this) );
|
Record* record = new Record ( getString(this) );
|
||||||
record->add ( getSlot ( "_kite" , _kite ) );
|
record->add( getSlot ( "_kite" , _kite ) );
|
||||||
record->add ( getSlot ( "_layerGauge" , _layerGauge ) );
|
record->add( getSlot ( "_layerGauge" , _layerGauge ) );
|
||||||
record->add ( getSlot ( "_depth" , &_depth ) );
|
record->add( getSlot ( "_depth" , &_depth ) );
|
||||||
record->add ( DbU::getValueSlot ( "_axisMin" , &_axisMin ) );
|
record->add( DbU::getValueSlot( "_axisMin" , &_axisMin ) );
|
||||||
record->add ( DbU::getValueSlot ( "_axisMax" , &_axisMax ) );
|
record->add( DbU::getValueSlot( "_axisMax" , &_axisMax ) );
|
||||||
record->add ( DbU::getValueSlot ( "_trackMin" , &_trackMin ) );
|
record->add( DbU::getValueSlot( "_trackMin" , &_trackMin ) );
|
||||||
record->add ( DbU::getValueSlot ( "_trackMax" , &_trackMax ) );
|
record->add( DbU::getValueSlot( "_trackMax" , &_trackMax ) );
|
||||||
record->add ( getSlot ( "_tracks" , &_tracks ) );
|
record->add( getSlot ( "_tracks" , &_tracks ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
|
// -*- mode: C++; explicit-buffer-name: "Session.cpp<kite>" -*-
|
||||||
// -*- C++ -*-
|
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,13 +11,11 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./Session.cpp" |
|
// | C++ Module : "./Session.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Bug.h"
|
||||||
|
#include "hurricane/Point.h"
|
||||||
#include "hurricane/Error.h"
|
#include "hurricane/Error.h"
|
||||||
#include "katabatic/GCellGrid.h"
|
#include "katabatic/GCellGrid.h"
|
||||||
#include "kite/Session.h"
|
#include "kite/Session.h"
|
||||||
|
@ -34,7 +26,6 @@
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
using namespace Kite;
|
using namespace Kite;
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,12 +34,11 @@ namespace {
|
||||||
" Session already open for %s (internal error).";
|
" Session already open for %s (internal error).";
|
||||||
|
|
||||||
|
|
||||||
} // End of local namespace.
|
} // Anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using Hurricane::tab;
|
using Hurricane::tab;
|
||||||
|
@ -57,39 +47,32 @@ namespace Kite {
|
||||||
using Hurricane::ltraceout;
|
using Hurricane::ltraceout;
|
||||||
using Hurricane::Error;
|
using Hurricane::Error;
|
||||||
using Hurricane::Bug;
|
using Hurricane::Bug;
|
||||||
|
using Hurricane::Point;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "Session".
|
// Class : "Session".
|
||||||
|
|
||||||
|
|
||||||
Session::Session ( KiteEngine* kite )
|
Session::Session ( KiteEngine* kite )
|
||||||
: Katabatic::Session(kite)
|
: Katabatic::Session(kite)
|
||||||
, _insertEvents()
|
, _insertEvents()
|
||||||
, _removeEvents()
|
, _removeEvents()
|
||||||
, _sortEvents ()
|
, _sortEvents ()
|
||||||
{
|
{ }
|
||||||
//_addCanonizeCb ( _computeCagedConstraints );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Session::_postCreate ()
|
void Session::_postCreate ()
|
||||||
{
|
{ Katabatic::Session::_postCreate(); }
|
||||||
Katabatic::Session::_postCreate ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Session::~Session ()
|
Session::~Session ()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
size_t Session::_preDestroy ()
|
void Session::_preDestroy ()
|
||||||
{
|
{
|
||||||
_isEmpty ();
|
_isEmpty();
|
||||||
|
Katabatic::Session::_preDestroy();
|
||||||
size_t count = Katabatic::Session::_preDestroy ();
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,16 +80,16 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
ltrace(110) << "Kite::Session::open()" << endl;
|
ltrace(110) << "Kite::Session::open()" << endl;
|
||||||
|
|
||||||
Session* session = Session::get ();
|
Session* session = Session::get();
|
||||||
if ( session ) {
|
if (session) {
|
||||||
if ( session->_getKiteEngine() != kite )
|
if (session->_getKiteEngine() != kite)
|
||||||
throw Error ( reopenSession, getString(session->getKiteEngine()).c_str() );
|
throw Error( reopenSession, getString(session->getKiteEngine()).c_str() );
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
session = new Session ( kite );
|
session = new Session ( kite );
|
||||||
session->_postCreate ();
|
session->_postCreate();
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
@ -120,14 +103,6 @@ namespace Kite {
|
||||||
{ return Session::getKiteEngine()->getConfiguration(); }
|
{ return Session::getKiteEngine()->getConfiguration(); }
|
||||||
|
|
||||||
|
|
||||||
void Session::link ( TrackElement* trackSegment )
|
|
||||||
{ Session::get("link(TrackElement*)")->_getKiteEngine()->_link(trackSegment); }
|
|
||||||
|
|
||||||
|
|
||||||
void Session::unlink ( TrackElement* trackSegment )
|
|
||||||
{ Session::get("unlink(TrackElement*)")->_getKiteEngine()->_unlink(trackSegment); }
|
|
||||||
|
|
||||||
|
|
||||||
TrackElement* Session::lookup ( Segment* segment )
|
TrackElement* Session::lookup ( Segment* segment )
|
||||||
{ return Session::get("Session::lookup(Segment*)")->_getKiteEngine()->_lookup(segment); }
|
{ return Session::get("Session::lookup(Segment*)")->_getKiteEngine()->_lookup(segment); }
|
||||||
|
|
||||||
|
@ -136,10 +111,6 @@ namespace Kite {
|
||||||
{ return Session::get("lookup(AutoSegment*)")->_getKiteEngine()->_lookup ( segment ); }
|
{ return Session::get("lookup(AutoSegment*)")->_getKiteEngine()->_lookup ( segment ); }
|
||||||
|
|
||||||
|
|
||||||
Katabatic::GCell* Session::lookup ( Katabatic::GCell* gcell )
|
|
||||||
{ return Session::get("lookup(Katabatic::GCell*)")->_getKiteEngine()->getGCellGrid()->getGCell(gcell->getIndex()); }
|
|
||||||
|
|
||||||
|
|
||||||
void Session::setInterrupt ( bool state )
|
void Session::setInterrupt ( bool state )
|
||||||
{ Session::get("setInterrupt()")->_getKiteEngine()->setInterrupt(state); }
|
{ Session::get("setInterrupt()")->_getKiteEngine()->setInterrupt(state); }
|
||||||
|
|
||||||
|
@ -166,115 +137,102 @@ namespace Kite {
|
||||||
|
|
||||||
size_t Session::_revalidate ()
|
size_t Session::_revalidate ()
|
||||||
{
|
{
|
||||||
|
ltrace(90) << "Kite::Session::_revalidate()" << endl;
|
||||||
|
ltracein(90);
|
||||||
|
|
||||||
set<Track*> packTracks;
|
set<Track*> packTracks;
|
||||||
|
|
||||||
for ( size_t i=0 ; i < _removeEvents.size() ; i++ ) {
|
for ( size_t i=0 ; i<_removeEvents.size() ; ++i ) {
|
||||||
if ( !_removeEvents[i]._segment->getTrack() ) continue;
|
if (not _removeEvents[i]._segment->getTrack()) continue;
|
||||||
|
|
||||||
packTracks.insert ( _removeEvents[i]._segment->getTrack() );
|
packTracks.insert( _removeEvents[i]._segment->getTrack() );
|
||||||
_removeEvents[i]._segment->detach ();
|
_removeEvents[i]._segment->detach();
|
||||||
}
|
}
|
||||||
_removeEvents.clear ();
|
_removeEvents.clear();
|
||||||
|
|
||||||
for ( set<Track*>::iterator it=packTracks.begin() ; it != packTracks.end() ; it++ )
|
for ( set<Track*>::iterator it=packTracks.begin() ; it != packTracks.end() ; ++it )
|
||||||
(*it)->pack ();
|
(*it)->doRemoval();
|
||||||
|
|
||||||
for ( size_t i=0 ; i < _insertEvents.size() ; i++ ) {
|
for ( size_t i=0 ; i<_insertEvents.size() ; ++i ) {
|
||||||
if ( _insertEvents[i]._segment ) {
|
if (_insertEvents[i]._segment) {
|
||||||
_insertEvents[i]._track->insert ( _insertEvents[i]._segment );
|
_insertEvents[i]._track->insert( _insertEvents[i]._segment );
|
||||||
}
|
}
|
||||||
if ( _insertEvents[i]._marker ) _insertEvents[i]._track->insert ( _insertEvents[i]._marker );
|
if (_insertEvents[i]._marker) _insertEvents[i]._track->insert( _insertEvents[i]._marker );
|
||||||
}
|
}
|
||||||
_insertEvents.clear ();
|
_insertEvents.clear();
|
||||||
|
|
||||||
// Check if to be destroyeds are not associateds with TrackSegments.
|
// Check if to be destroyeds are not associateds with TrackSegments.
|
||||||
const set<AutoSegment*>& destroyeds = getDestroyeds();
|
const set<AutoSegment*>& destroyeds = getDestroyeds();
|
||||||
set<AutoSegment*>::const_iterator idestroyed = destroyeds.begin();
|
set<AutoSegment*>::const_iterator idestroyed = destroyeds.begin();
|
||||||
for ( ; idestroyed != destroyeds.end() ; idestroyed++ ) {
|
for ( ; idestroyed != destroyeds.end() ; ++idestroyed ) {
|
||||||
if ( lookup(*idestroyed) ) {
|
if (lookup(*idestroyed)) {
|
||||||
throw Error("Destroyed AutoSegment is associated with a TrackSegment\n"
|
ltraceout(90);
|
||||||
" (%s)"
|
throw Error( "Destroyed AutoSegment is associated with a TrackSegment\n"
|
||||||
,getString(*idestroyed).c_str());
|
" (%s)"
|
||||||
|
, getString(*idestroyed).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t count = Katabatic::Session::_revalidate ();
|
size_t count = Katabatic::Session::_revalidate();
|
||||||
|
|
||||||
Interval span;
|
Interval span;
|
||||||
vector<TrackElement*> processeds;
|
const vector<AutoSegment*>& revalidateds = getRevalidateds();
|
||||||
const vector<AutoSegment*>& revalidateds = getRevalidateds ();
|
//const set<Net*>& netsModificateds = getNetsModificateds();
|
||||||
const set<Net*>& netsModificateds = getNetsModificateds ();
|
|
||||||
|
|
||||||
for ( size_t i=0 ; i<revalidateds.size() ; i++ ) {
|
for ( size_t i=0 ; i<revalidateds.size() ; ++i ) {
|
||||||
Net* currentNet = NULL;
|
if (not revalidateds[i]->isCanonical()) continue;
|
||||||
bool invalidEvent = false;
|
|
||||||
TrackElement* trackSegment = lookup ( revalidateds[i]->base() );
|
//Net* currentNet = NULL;
|
||||||
|
TrackElement* trackSegment = lookup( revalidateds[i] );
|
||||||
|
|
||||||
if ( trackSegment && !trackSegment->isRevalidated() ) {
|
if (trackSegment and trackSegment->isInvalidated()) {
|
||||||
if ( trackSegment->getNet() != currentNet ) {
|
trackSegment->revalidate();
|
||||||
currentNet = trackSegment->getNet();
|
|
||||||
invalidEvent = (netsModificateds.find(currentNet) != netsModificateds.end());
|
|
||||||
}
|
|
||||||
trackSegment->revalidate ( invalidEvent );
|
|
||||||
processeds.push_back ( trackSegment );
|
|
||||||
|
|
||||||
Track* track = trackSegment->getTrack();
|
|
||||||
if ( track ) {
|
|
||||||
track->forceSort ();
|
|
||||||
_sortEvents.insert ( track );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for ( size_t i=0 ; i<processeds.size() ; i++ )
|
_doglegReset();
|
||||||
processeds[i]->setRevalidated ( false );
|
|
||||||
|
|
||||||
# if defined(CHECK_DATABASE)
|
# if defined(CHECK_DATABASE)
|
||||||
unsigned int overlaps = 0;
|
unsigned int overlaps = 0;
|
||||||
# endif
|
# endif
|
||||||
for ( set<Track*>::iterator it=_sortEvents.begin()
|
for ( set<Track*>::iterator it=_sortEvents.begin() ; it!=_sortEvents.end() ; ++it ) {
|
||||||
; it != _sortEvents.end()
|
(*it)->doReorder();
|
||||||
; it++
|
|
||||||
) {
|
|
||||||
(*it)->sort ();
|
|
||||||
# if defined(CHECK_DATABASE)
|
# if defined(CHECK_DATABASE)
|
||||||
(*it)->_check ( overlaps, "Session::_revalidate() - track sorting." );
|
(*it)->check( overlaps, "Session::_revalidate() - track sorting." );
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
set<TrackElement*> faileds;
|
|
||||||
for ( set<Net*>::iterator inet=netsModificateds.begin() ; inet != netsModificateds.end() ; inet++ ) {
|
|
||||||
_getKiteEngine()->_computeCagedConstraints ( *inet, faileds );
|
|
||||||
}
|
|
||||||
|
|
||||||
# if defined(CHECK_DATABASE)
|
# if defined(CHECK_DATABASE)
|
||||||
for ( set<Track*>::iterator it=packTracks.begin() ; it != packTracks.end() ; it++ )
|
for ( set<Track*>::iterator it=packTracks.begin() ; it != packTracks.end() ; ++it )
|
||||||
(*it)->_check ( overlaps, "Session::_revalidate() - on packed track." );
|
(*it)->check( overlaps, "Session::_revalidate() - on packed track." );
|
||||||
|
|
||||||
//_getKiteEngine()->_showOverlap ();
|
//_getKiteEngine()->_showOverlap ();
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
_sortEvents.clear ();
|
_sortEvents.clear();
|
||||||
|
|
||||||
if ( not faileds.empty() ) {
|
#if THIS_IS_DISABLED
|
||||||
|
if (not faileds.empty()) {
|
||||||
set<TrackElement*>::iterator ifailed = faileds.begin();
|
set<TrackElement*>::iterator ifailed = faileds.begin();
|
||||||
Katabatic::GCellVector gcells;
|
Katabatic::GCellVector gcells;
|
||||||
for ( ; ifailed != faileds.end() ; ++ifailed ) {
|
for ( ; ifailed != faileds.end() ; ++ifailed ) {
|
||||||
(*ifailed)->getGCells ( gcells );
|
(*ifailed)->getGCells ( gcells );
|
||||||
(*ifailed)->makeDogLeg ( gcells[0] );
|
(*ifailed)->makeDogLeg( gcells[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
count += _revalidate ();
|
count += _revalidate();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ltraceout(90);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Session::_isEmpty () const
|
bool Session::_isEmpty () const
|
||||||
{
|
{
|
||||||
if ( !_insertEvents.empty() || !_removeEvents.empty() || !_sortEvents.empty() ) {
|
if ( not _insertEvents.empty() or not _removeEvents.empty() or not _sortEvents.empty() ) {
|
||||||
cerr << Bug(" Session::checkEmpty() failed :\n"
|
cerr << Bug( " Session::checkEmpty() failed :\n"
|
||||||
" %u inserts, %u removes and %u sort events remains."
|
" %u inserts, %u removes and %u sort events remains."
|
||||||
, _insertEvents.size()
|
, _insertEvents.size()
|
||||||
, _removeEvents.size()
|
, _removeEvents.size()
|
||||||
, _sortEvents .size() ) << endl;
|
, _sortEvents .size() ) << endl;
|
||||||
|
@ -287,17 +245,13 @@ namespace Kite {
|
||||||
|
|
||||||
void Session::_addInsertEvent ( TrackMarker* marker, Track* track )
|
void Session::_addInsertEvent ( TrackMarker* marker, Track* track )
|
||||||
{
|
{
|
||||||
_insertEvents.push_back ( Event(marker,track) );
|
_insertEvents.push_back( Event(marker,track) );
|
||||||
_addSortEvent ( track, true );
|
_addSortEvent( track, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Session::_addInsertEvent ( TrackElement* segment, Track* track )
|
void Session::_addInsertEvent ( TrackElement* segment, Track* track )
|
||||||
{
|
{
|
||||||
#if defined(CHECK_DETERMINISM)
|
|
||||||
cerr << "Order: Insert in @" << DbU::getValueString(track->getAxis())
|
|
||||||
<< " " << segment << endl;
|
|
||||||
#endif
|
|
||||||
ltrace(200) << "addInsertEvent() " << segment
|
ltrace(200) << "addInsertEvent() " << segment
|
||||||
<< "\n @" << track << endl;
|
<< "\n @" << track << endl;
|
||||||
|
|
||||||
|
@ -311,46 +265,46 @@ namespace Kite {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_insertEvents.push_back ( Event(segment,track) );
|
_insertEvents.push_back( Event(segment,track) );
|
||||||
_addSortEvent ( track, true );
|
_addSortEvent( track, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Session::_addRemoveEvent ( TrackElement* segment )
|
void Session::_addRemoveEvent ( TrackElement* segment )
|
||||||
{
|
{
|
||||||
if ( not segment->getTrack() ) {
|
if (not segment->getTrack()) {
|
||||||
cerr << Bug(" Kite::Session::addRemoveEvent() : %s is not in any Track."
|
cerr << Bug( " Kite::Session::addRemoveEvent() : %s is not in any Track."
|
||||||
,getString(segment).c_str()) << endl;
|
, getString(segment).c_str() ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ltrace(200) << "Ripup: @" << DbU::getValueString(segment->getAxis()) << " " << segment << endl;
|
ltrace(200) << "Ripup: @" << DbU::getValueString(segment->getAxis()) << " " << segment << endl;
|
||||||
_removeEvents.push_back ( Event(segment,segment->getTrack()) );
|
_removeEvents.push_back( Event(segment,segment->getTrack()) );
|
||||||
_addSortEvent ( segment->getTrack(), true );
|
_addSortEvent( segment->getTrack(), true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Session::_addMoveEvent ( TrackElement* segment, Track* track )
|
void Session::_addMoveEvent ( TrackElement* segment, Track* track )
|
||||||
{
|
{
|
||||||
if ( !segment->getTrack() ) {
|
if (not segment->getTrack()) {
|
||||||
cerr << Bug(" Kite::Session::addMoveEvent() : %s has no target Track."
|
cerr << Bug( " Kite::Session::addMoveEvent() : %s has no target Track."
|
||||||
,getString(segment).c_str()) << endl;
|
, getString(segment).c_str() ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_addRemoveEvent ( segment );
|
_addRemoveEvent( segment );
|
||||||
_addInsertEvent ( segment, track );
|
_addInsertEvent( segment, track );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Session::_addSortEvent ( Track* track, bool forced )
|
void Session::_addSortEvent ( Track* track, bool forced )
|
||||||
{
|
{
|
||||||
if ( !track ) {
|
if (not track ) {
|
||||||
cerr << Bug(" Kite::Session::addSortEvent() : no Track to sort.") << endl;
|
cerr << Bug( " Kite::Session::addSortEvent() : no Track to sort." ) << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( forced ) track->forceSort ();
|
if (forced) track->invalidate();
|
||||||
_sortEvents.insert ( track );
|
_sortEvents.insert( track );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -361,10 +315,10 @@ namespace Kite {
|
||||||
Record* Session::_getRecord () const
|
Record* Session::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = Session::_getRecord ();
|
Record* record = Session::_getRecord ();
|
||||||
record->add ( getSlot ( "_sortEvents" , &_sortEvents ) );
|
record->add( getSlot( "_sortEvents" , &_sortEvents ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,39 +12,32 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./Track.cpp" |
|
// | C++ Module : "./Track.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <sstream>
|
||||||
#include <cstdlib>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include "hurricane/Warning.h"
|
||||||
#include <algorithm>
|
#include "hurricane/Bug.h"
|
||||||
|
#include "hurricane/Layer.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "hurricane/Layer.h"
|
#include "kite/Track.h"
|
||||||
#include "hurricane/Net.h"
|
#include "kite/TrackMarker.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "kite/Track.h"
|
|
||||||
#include "kite/TrackMarker.h"
|
|
||||||
#include "kite/DataNegociate.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace CRL;
|
using namespace CRL;
|
||||||
using namespace Kite;
|
using namespace Kite;
|
||||||
|
|
||||||
|
|
||||||
struct isDetachedSegment {
|
struct isDetachedSegment {
|
||||||
bool operator() ( const TrackElement* s ) { return !s->getTrack(); };
|
bool operator() ( const TrackElement* s ) { return not s->getTrack(); };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,12 +45,11 @@ namespace {
|
||||||
{ return (*(v.begin()+i))->getSourceU(); }
|
{ return (*(v.begin()+i))->getSourceU(); }
|
||||||
|
|
||||||
|
|
||||||
} // End of local namespace.
|
} // Anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::lower_bound;
|
using std::lower_bound;
|
||||||
using std::remove_if;
|
using std::remove_if;
|
||||||
using std::sort;
|
using std::sort;
|
||||||
|
@ -81,7 +68,7 @@ namespace Kite {
|
||||||
// Class : "Track".
|
// Class : "Track".
|
||||||
|
|
||||||
|
|
||||||
const size_t Track::NPOS = (size_t)-1;
|
const size_t Track::npos = (size_t)-1;
|
||||||
|
|
||||||
|
|
||||||
Track::Track ( RoutingPlane* routingPlane, unsigned int index )
|
Track::Track ( RoutingPlane* routingPlane, unsigned int index )
|
||||||
|
@ -103,9 +90,7 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
Track::~Track ()
|
Track::~Track ()
|
||||||
{
|
{ ltrace(90) << "Track::~Track() - " << (void*)this << endl; }
|
||||||
ltrace(90) << "Track::~Track() - " << (void*)this << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Track::_preDestroy ()
|
void Track::_preDestroy ()
|
||||||
|
@ -114,10 +99,10 @@ namespace Kite {
|
||||||
ltracein(90);
|
ltracein(90);
|
||||||
|
|
||||||
for ( size_t i=0 ; i<_segments.size() ; i++ )
|
for ( size_t i=0 ; i<_segments.size() ; i++ )
|
||||||
if ( _segments[i] ) _segments[i]->detach();
|
if (_segments[i]) _segments[i]->detach();
|
||||||
|
|
||||||
for ( size_t i=0 ; i<_markers.size() ; i++ )
|
for ( size_t i=0 ; i<_markers.size() ; i++ )
|
||||||
if ( _markers[i] ) _markers[i]->destroy();
|
if (_markers[i]) _markers[i]->destroy();
|
||||||
|
|
||||||
ltraceout(90);
|
ltraceout(90);
|
||||||
}
|
}
|
||||||
|
@ -127,7 +112,7 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
ltrace(90) << "Track::destroy() - " << (void*)this << " " << this << endl;
|
ltrace(90) << "Track::destroy() - " << (void*)this << " " << this << endl;
|
||||||
|
|
||||||
Track::_preDestroy ();
|
Track::_preDestroy();
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,9 +133,20 @@ namespace Kite {
|
||||||
{ return _routingPlane->getBlockageLayer(); }
|
{ return _routingPlane->getBlockageLayer(); }
|
||||||
|
|
||||||
|
|
||||||
|
Track* Track::getNextTrack () const
|
||||||
|
{ return getRoutingPlane()->getTrackByIndex( getIndex()+1 ); }
|
||||||
|
|
||||||
|
|
||||||
|
Track* Track::getPreviousTrack () const
|
||||||
|
{
|
||||||
|
if (not getIndex()) return NULL;
|
||||||
|
return getRoutingPlane()->getTrackByIndex( getIndex()-1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElement* Track::getSegment ( size_t index ) const
|
TrackElement* Track::getSegment ( size_t index ) const
|
||||||
{
|
{
|
||||||
if ( (index == NPOS) || (index >= getSize()) ) return NULL;
|
if ( (index == npos) or (index >= getSize()) ) return NULL;
|
||||||
return _segments[index];
|
return _segments[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,12 +155,9 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
size_t begin;
|
size_t begin;
|
||||||
size_t end;
|
|
||||||
|
|
||||||
getIBounds ( position, begin, end, state );
|
|
||||||
|
|
||||||
if ( state & (MinTrackMin|MaxTrackMax) ) return NULL;
|
|
||||||
|
|
||||||
|
getBeginIndex( position, begin, state );
|
||||||
|
if (state & (BeginIsTrackMin|EndIsTrackMax)) return NULL;
|
||||||
return getSegment(begin);
|
return getSegment(begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,10 +165,10 @@ namespace Kite {
|
||||||
TrackElement* Track::getNext ( size_t& index, Net* net ) const
|
TrackElement* Track::getNext ( size_t& index, Net* net ) const
|
||||||
{
|
{
|
||||||
for ( index++ ; index < _segments.size() ; index++ ) {
|
for ( index++ ; index < _segments.size() ; index++ ) {
|
||||||
if ( _segments[index]->getNet() == net ) continue;
|
if (_segments[index]->getNet() == net) continue;
|
||||||
return _segments[index];
|
return _segments[index];
|
||||||
}
|
}
|
||||||
index = NPOS;
|
index = npos;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -183,15 +176,15 @@ namespace Kite {
|
||||||
|
|
||||||
TrackElement* Track::getPrevious ( size_t& index, Net* net ) const
|
TrackElement* Track::getPrevious ( size_t& index, Net* net ) const
|
||||||
{
|
{
|
||||||
for ( index-- ; index != NPOS ; index-- ) {
|
for ( index-- ; index != npos ; index-- ) {
|
||||||
if ( inltrace(148) ) {
|
if (inltrace(148)) {
|
||||||
cerr << tab << index << ":"; cerr.flush();
|
cerr << tab << index << ":"; cerr.flush();
|
||||||
cerr << _segments[index] << endl;
|
cerr << _segments[index] << endl;
|
||||||
}
|
}
|
||||||
if ( _segments[index]->getNet() == net ) continue;
|
if (_segments[index]->getNet() == net) continue;
|
||||||
return _segments[index];
|
return _segments[index];
|
||||||
}
|
}
|
||||||
index = NPOS;
|
index = npos;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -208,56 +201,59 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Track::getIBounds ( DbU::Unit position, size_t& begin, size_t& end, unsigned int& state ) const
|
void Track::getBeginIndex ( DbU::Unit position, size_t& begin, unsigned int& state ) const
|
||||||
{
|
{
|
||||||
if ( _segments.empty() ) {
|
if (_segments.empty()) {
|
||||||
state = EmptyTrack;
|
state = EmptyTrack;
|
||||||
begin = end = 0;
|
begin = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( position < _min ) {
|
if (position < _min) {
|
||||||
cerr << Warning ( " Position %s inferior to the lower bound of %s. Returning NPOS."
|
cerr << Warning( " Position %s inferior to the lower bound of %s. Returning npos."
|
||||||
, DbU::getValueString(position).c_str()
|
, DbU::getValueString(position).c_str()
|
||||||
, getString(this).c_str() ) << endl;
|
, getString(this).c_str() ) << endl;
|
||||||
state = BeforeFirst;
|
state = BeforeFirstElement;
|
||||||
begin = end = 0;
|
begin = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( position > _max ) {
|
if (position > _max) {
|
||||||
cerr << Warning ( " Position %s superior to the upper bound of %s. Returning NPOS."
|
cerr << Warning( " Position %s superior to the upper bound of %s. Returning npos."
|
||||||
, DbU::getValueString(position).c_str()
|
, DbU::getValueString(position).c_str()
|
||||||
, getString(this).c_str() ) << endl;
|
, getString(this).c_str() ) << endl;
|
||||||
state = AfterLast;
|
state = AfterLastElement;
|
||||||
begin = end = _segments.size() - 1;
|
begin = _segments.size()-1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<TrackElement*>::const_iterator lowerBound
|
vector<TrackElement*>::const_iterator lowerBound
|
||||||
= lower_bound ( _segments.begin(), _segments.end(), position, SourceCompare() );
|
= lower_bound( _segments.begin(), _segments.end(), position, SourceCompare() );
|
||||||
begin = end = lowerBound - _segments.begin();
|
begin = lowerBound - _segments.begin();
|
||||||
|
|
||||||
if ( begin < _segments.size() )
|
// This is suspicious.
|
||||||
for ( ; (begin > 0) && (_segments[begin-1]->getNet() == _segments[begin]->getNet()) ; --begin );
|
// I guess this has been written for the case of overlapping segments from the same
|
||||||
|
// net, we find the first one of the overlapped sets. But what if they are not overlapping
|
||||||
|
// but still from the same net?
|
||||||
|
if (begin < _segments.size())
|
||||||
|
for ( ; (begin > 0) and (_segments[begin-1]->getNet() == _segments[begin]->getNet()) ; --begin );
|
||||||
|
|
||||||
state = 0;
|
state = 0;
|
||||||
if ( (begin == 0) && (position < _segments[0]->getSourceU()) ) {
|
if ( (begin == 0) and (position < _segments[0]->getSourceU()) ) {
|
||||||
state = BeforeFirst;
|
state = BeforeFirstElement;
|
||||||
} else {
|
} else {
|
||||||
if ( begin ) end = begin -= 1;
|
if (begin) begin -= 1;
|
||||||
|
|
||||||
size_t usedBegin = begin;
|
size_t usedBegin = begin;
|
||||||
size_t usedEnd = begin;
|
Interval usedInterval = getOccupiedInterval( usedBegin );
|
||||||
Interval usedInterval = expandUsedInterval ( usedBegin, usedEnd );
|
|
||||||
|
|
||||||
if ( position < usedInterval.getVMax() )
|
if (position < usedInterval.getVMax())
|
||||||
state = Inside;
|
state = InsideElement;
|
||||||
else
|
else
|
||||||
if ( begin+1 == _segments.size() )
|
if (begin+1 == _segments.size())
|
||||||
state = AfterLast;
|
state = AfterLastElement;
|
||||||
else
|
else
|
||||||
state = Outside;
|
state = OutsideElement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,22 +261,20 @@ namespace Kite {
|
||||||
void Track::getOverlapBounds ( Interval interval, size_t& begin, size_t& end ) const
|
void Track::getOverlapBounds ( Interval interval, size_t& begin, size_t& end ) const
|
||||||
{
|
{
|
||||||
unsigned int iState;
|
unsigned int iState;
|
||||||
size_t iBegin;
|
|
||||||
size_t iEnd;
|
|
||||||
|
|
||||||
if ( _segments.empty()
|
if ( _segments.empty()
|
||||||
|| (interval.getVMax() <= _min)
|
or (interval.getVMax() <= _min)
|
||||||
|| (interval.getVMin() >= _max)) {
|
or (interval.getVMin() >= _max)) {
|
||||||
begin = end = NPOS;
|
begin = end = npos;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
getIBounds ( interval.getVMin(), begin, iEnd, iState );
|
getBeginIndex ( interval.getVMin(), begin, iState );
|
||||||
expandUsedInterval ( begin, iEnd );
|
getOccupiedInterval( begin );
|
||||||
|
|
||||||
getIBounds ( interval.getVMax(), iBegin, end, iState );
|
getBeginIndex( interval.getVMax(), end, iState );
|
||||||
while ( end < _segments.size() ) {
|
while ( end < _segments.size() ) {
|
||||||
if ( _segments[end++]->getSourceU() >= interval.getVMax() ) break;
|
if (_segments[end++]->getSourceU() >= interval.getVMax()) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,34 +296,32 @@ namespace Kite {
|
||||||
ltracein(148);
|
ltracein(148);
|
||||||
|
|
||||||
vector<TrackMarker*>::const_iterator lowerBound
|
vector<TrackMarker*>::const_iterator lowerBound
|
||||||
= lower_bound ( _markers.begin(), _markers.end(), interval.getVMin(), TrackMarker::Compare() );
|
= lower_bound( _markers.begin(), _markers.end(), interval.getVMin(), TrackMarker::Compare() );
|
||||||
size_t mbegin = lowerBound - _markers.begin();
|
size_t mbegin = lowerBound - _markers.begin();
|
||||||
|
|
||||||
for ( ; (mbegin < _markers.size())
|
for ( ; (mbegin < _markers.size())
|
||||||
&& (_markers[mbegin]->getSourceU() <= interval.getVMax()) ; mbegin++ ) {
|
and (_markers[mbegin]->getSourceU() <= interval.getVMax()) ; mbegin++ ) {
|
||||||
ltrace(148) << "| @" << DbU::getValueString(_axis) << _markers[mbegin] << endl;
|
ltrace(148) << "| @" << DbU::getValueString(_axis) << _markers[mbegin] << endl;
|
||||||
if ( _markers[mbegin]->getNet() != net ) {
|
if ( _markers[mbegin]->getNet() != net ) {
|
||||||
ltrace(148) << "* Mark: @" << DbU::getValueString(_axis) << " " << _markers[mbegin] << endl;
|
ltrace(148) << "* Mark: @" << DbU::getValueString(_axis) << " " << _markers[mbegin] << endl;
|
||||||
cost.incTerminals ( _markers[mbegin]->getWeight(this) );
|
cost.incTerminals( _markers[mbegin]->getWeight(this) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( begin == NPOS ) {
|
if (begin == npos) {
|
||||||
ltrace(148) << " begin == NPOS (after last TrackElement)." << endl;
|
ltrace(148) << " begin == npos (after last TrackElement)." << endl;
|
||||||
ltraceout(148);
|
ltraceout(148);
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ; begin < end ; begin++ ) {
|
for ( ; begin < end ; begin++ ) {
|
||||||
Interval overlap = interval.getIntersection ( _segments[begin]->getCanonicalInterval() );
|
Interval overlap = interval.getIntersection( _segments[begin]->getCanonicalInterval() );
|
||||||
//if ( not overlap.isEmpty() ) {
|
if ( _segments[begin]->getNet() == net ) {
|
||||||
if ( _segments[begin]->getNet() == net ) {
|
cost.incDeltaShared ( overlap.getSize() );
|
||||||
cost.incDeltaShared ( overlap.getSize() );
|
}
|
||||||
}
|
ltrace(190) << "| overlap: " << _segments[begin] << endl;
|
||||||
ltrace(190) << "| overlap: " << _segments[begin] << endl;
|
_segments[begin]->incOverlapCost( net, cost );
|
||||||
_segments[begin]->incOverlapCost ( net, cost );
|
if (cost.isInfinite()) break;
|
||||||
if ( cost.isInfinite() ) break;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ltraceout(148);
|
ltraceout(148);
|
||||||
|
@ -343,16 +335,14 @@ namespace Kite {
|
||||||
size_t begin;
|
size_t begin;
|
||||||
size_t end;
|
size_t end;
|
||||||
|
|
||||||
getOverlapBounds ( interval, begin, end );
|
getOverlapBounds( interval, begin, end );
|
||||||
|
|
||||||
return getOverlapCost ( interval, net, begin, end, flags );
|
return getOverlapCost( interval, net, begin, end, flags );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackCost Track::getOverlapCost ( TrackElement* segment, unsigned int flags ) const
|
TrackCost Track::getOverlapCost ( TrackElement* segment, unsigned int flags ) const
|
||||||
{
|
{ return getOverlapCost ( segment->getCanonicalInterval(), segment->getNet(), flags ); }
|
||||||
return getOverlapCost ( segment->getCanonicalInterval(), segment->getNet(), flags );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Track::getTerminalWeight ( Interval interval, Net* net, size_t& count, unsigned int& weight ) const
|
void Track::getTerminalWeight ( Interval interval, Net* net, size_t& count, unsigned int& weight ) const
|
||||||
|
@ -381,39 +371,25 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Track* Track::getNext () const
|
|
||||||
{
|
|
||||||
return getRoutingPlane()->getTrackByIndex ( getIndex()+1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Track* Track::getPrevious () const
|
|
||||||
{
|
|
||||||
if ( !getIndex() ) return NULL;
|
|
||||||
|
|
||||||
return getRoutingPlane()->getTrackByIndex ( getIndex()-1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
size_t Track::find ( const TrackElement* segment ) const
|
size_t Track::find ( const TrackElement* segment ) const
|
||||||
{
|
{
|
||||||
if ( !_segments.size() ) return NPOS;
|
if (_segments.empty()) return npos;
|
||||||
|
|
||||||
vector<TrackElement*>::const_iterator lowerBound
|
vector<TrackElement*>::const_iterator lowerBound
|
||||||
= lower_bound ( _segments.begin()
|
= lower_bound( _segments.begin()
|
||||||
, _segments.end()
|
, _segments.end()
|
||||||
, segment
|
, segment
|
||||||
, SegmentCompare()
|
, SegmentCompare()
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( lowerBound != _segments.end() ) {
|
if (lowerBound != _segments.end()) {
|
||||||
while ( segment->getSourceU() == (*lowerBound)->getSourceU() ) {
|
while ( segment->getSourceU() == (*lowerBound)->getSourceU() ) {
|
||||||
if ( *lowerBound == segment ) return (size_t)(lowerBound-_segments.begin());
|
if (*lowerBound == segment) return (size_t)(lowerBound-_segments.begin());
|
||||||
lowerBound++;
|
lowerBound++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NPOS;
|
return npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -423,13 +399,14 @@ namespace Kite {
|
||||||
size_t begin;
|
size_t begin;
|
||||||
size_t end;
|
size_t end;
|
||||||
|
|
||||||
if ( !_segments.size() ) return Interval(_min,_max);
|
if (_segments.empty()) return Interval(_min,_max);
|
||||||
|
|
||||||
getIBounds ( position, begin, end, state );
|
getBeginIndex( position, begin, state );
|
||||||
if ( (state == Inside) && (_segments[begin]->getNet() != net) )
|
if ( (state == InsideElement) and (_segments[begin]->getNet() != net) )
|
||||||
return Interval();
|
return Interval();
|
||||||
|
|
||||||
return expandFreeInterval ( begin, end, state, net );
|
end = begin;
|
||||||
|
return expandFreeInterval( begin, end, state, net );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -437,37 +414,34 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
DbU::Unit minFree = _min;
|
DbU::Unit minFree = _min;
|
||||||
|
|
||||||
if ( !(state & MinTrackMin) ) {
|
if (not (state & BeginIsTrackMin) ) {
|
||||||
if ( _segments[begin]->getNet() == net )
|
if (_segments[begin]->getNet() == net)
|
||||||
getPrevious ( begin, net );
|
getPrevious( begin, net );
|
||||||
|
|
||||||
if ( begin != NPOS ) {
|
if (begin != npos) {
|
||||||
size_t usedEnd;
|
minFree = getOccupiedInterval(begin).getVMax();
|
||||||
minFree = expandUsedInterval ( begin, usedEnd ).getVMax();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !(state & MaxTrackMax) ) {
|
if (not (state & EndIsTrackMax) ) {
|
||||||
if ( _segments[end]->getNet() == net ) {
|
if (_segments[end]->getNet() == net) {
|
||||||
getNext ( end, net );
|
getNext( end, net );
|
||||||
|
|
||||||
if ( end == NPOS ) {
|
if (end == npos) {
|
||||||
end = _segments.size() - 1;
|
end = _segments.size() - 1;
|
||||||
setMaximalFlags ( state, MaxTrackMax );
|
setMaximalFlags( state, EndIsTrackMax );
|
||||||
} else {
|
} else {
|
||||||
setMaximalFlags ( state, MaxSegmentMin );
|
setMaximalFlags( state, EndIsSegmentMin );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Interval ( minFree, getMaximalPosition(end,state) );
|
return Interval( minFree, getMaximalPosition(end,state) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Track::forceSort ()
|
void Track::invalidate ()
|
||||||
{
|
{ _segmentsValid = false; }
|
||||||
_segmentsValid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Track::insert ( TrackMarker* marker )
|
void Track::insert ( TrackMarker* marker )
|
||||||
|
@ -499,54 +473,53 @@ namespace Kite {
|
||||||
void Track::setSegment ( TrackElement* segment, size_t index )
|
void Track::setSegment ( TrackElement* segment, size_t index )
|
||||||
{
|
{
|
||||||
if ( index >= _segments.size() ) return;
|
if ( index >= _segments.size() ) return;
|
||||||
|
|
||||||
_segments[index] = segment;
|
_segments[index] = segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Track::_check ( unsigned int& overlaps, const char* message ) const
|
bool Track::check ( unsigned int& overlaps, const char* message ) const
|
||||||
{
|
{
|
||||||
bool coherency = true;
|
bool coherency = true;
|
||||||
bool holes = false;
|
bool holes = false;
|
||||||
|
|
||||||
if ( message ) cerr << " o Checking Track - " << message << endl;
|
if (message) cerr << " o Checking Track - " << message << endl;
|
||||||
ltrace(90) << "[CHECK] " << (void*)this << ":" << this << endl;
|
ltrace(90) << (void*)this << ":" << this << endl;
|
||||||
|
|
||||||
for ( size_t i=0 ; i<_segments.size() ; i++ ) {
|
for ( size_t i=0 ; i<_segments.size() ; i++ ) {
|
||||||
if ( _segments[i] ) {
|
if (_segments[i]) {
|
||||||
if ( i ) {
|
if (i) {
|
||||||
if ( _segments[i-1] == _segments[i] ) {
|
if (_segments[i-1] == _segments[i]) {
|
||||||
cerr << "[CHECK] incoherency at " << i << " "
|
cerr << "[CHECK] incoherency at " << i << " "
|
||||||
<< _segments[i] << " is duplicated. " << endl;
|
<< _segments[i] << " is duplicated. " << endl;
|
||||||
coherency = false;
|
coherency = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( !_segments[i]->getTrack() ) {
|
if (not _segments[i]->getTrack()) {
|
||||||
cerr << "[CHECK] incoherency at " << i << " "
|
cerr << "[CHECK] incoherency at " << i << " "
|
||||||
<< _segments[i] << " is detached." << endl;
|
<< _segments[i] << " is detached." << endl;
|
||||||
coherency = false;
|
coherency = false;
|
||||||
} else {
|
} else {
|
||||||
if ( _segments[i]->getTrack() != this ) {
|
if (_segments[i]->getTrack() != this) {
|
||||||
cerr << "[CHECK] incoherency at " << i << " "
|
cerr << "[CHECK] incoherency at " << i << " "
|
||||||
<< _segments[i] << " is in track "
|
<< _segments[i] << " is in track "
|
||||||
<< _segments[i]->getTrack() << endl;
|
<< _segments[i]->getTrack() << endl;
|
||||||
coherency = false;
|
coherency = false;
|
||||||
}
|
}
|
||||||
if ( _segments[i]->getIndex() != i ) {
|
if (_segments[i]->getIndex() != i) {
|
||||||
cerr << "[CHECK] incoherency at " << i << " "
|
cerr << "[CHECK] incoherency at " << i << " "
|
||||||
<< _segments[i] << " has bad index "
|
<< _segments[i] << " has bad index "
|
||||||
<< _segments[i]->getIndex() << endl;
|
<< _segments[i]->getIndex() << endl;
|
||||||
coherency = false;
|
coherency = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( _segments[i]->getAxis() != getAxis() ) {
|
if (_segments[i]->getAxis() != getAxis()) {
|
||||||
cerr << "[CHECK] incoherency at " << i << " "
|
cerr << "[CHECK] incoherency at " << i << " "
|
||||||
<< _segments[i] << " is not on Track axis "
|
<< _segments[i] << " is not on Track axis "
|
||||||
<< DbU::getValueString(getAxis()) << "." << endl;
|
<< DbU::getValueString(getAxis()) << "." << endl;
|
||||||
coherency = false;
|
coherency = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
coherency = _segments[i]->_check () and coherency;
|
coherency = _segments[i]->_check() and coherency;
|
||||||
} else {
|
} else {
|
||||||
cerr << "[CHECK] Hole at position " << i << "." << endl;
|
cerr << "[CHECK] Hole at position " << i << "." << endl;
|
||||||
holes = true;
|
holes = true;
|
||||||
|
@ -554,7 +527,7 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !holes )
|
if (not holes)
|
||||||
coherency = (checkOverlap(overlaps) == 0) and coherency;
|
coherency = (checkOverlap(overlaps) == 0) and coherency;
|
||||||
|
|
||||||
return coherency;
|
return coherency;
|
||||||
|
@ -563,7 +536,7 @@ namespace Kite {
|
||||||
|
|
||||||
DbU::Unit Track::getSourcePosition ( size_t i ) const
|
DbU::Unit Track::getSourcePosition ( size_t i ) const
|
||||||
{
|
{
|
||||||
if ( i == NPOS) return 0;
|
if ( i == npos) return 0;
|
||||||
|
|
||||||
return _segments[i]->getSourceU();
|
return _segments[i]->getSourceU();
|
||||||
}
|
}
|
||||||
|
@ -581,14 +554,14 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
Interval canonical;
|
Interval canonical;
|
||||||
|
|
||||||
switch ( state & MinMask ) {
|
switch ( state & BeginMask ) {
|
||||||
case MinTrackMin: return _min;
|
case BeginIsTrackMin: return _min;
|
||||||
case MinSegmentMin: return _segments[index]->getSourceU ();
|
case BeginIsSegmentMin: return _segments[index]->getSourceU ();
|
||||||
case MinSegmentMax: return _segments[index]->getTargetU ();
|
case BeginIsSegmentMax: return _segments[index]->getTargetU ();
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << Bug ( " Track::getMinimalPosition(size_t,unsigned int) :"
|
cerr << Bug( " Track::getMinimalPosition(size_t,unsigned int) :"
|
||||||
" invalid state value %ud.", state ) << endl;
|
" invalid state value %ud.", state ) << endl;
|
||||||
|
|
||||||
return _min;
|
return _min;
|
||||||
}
|
}
|
||||||
|
@ -598,104 +571,79 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
Interval canonical;
|
Interval canonical;
|
||||||
|
|
||||||
switch ( state & MaxMask ) {
|
switch ( state & EndMask ) {
|
||||||
case MaxTrackMax: return _max;
|
case EndIsTrackMax: return _max;
|
||||||
case MaxSegmentMin: return _segments[index ]->getSourceU ();
|
case EndIsSegmentMin: return _segments[index ]->getSourceU ();
|
||||||
case MaxNextSegmentMin: if ( index+1 >= getSize() ) return _max;
|
case EndIsNextSegmentMin: if (index+1 >= getSize()) return _max;
|
||||||
return _segments[index+1]->getSourceU ();
|
return _segments[index+1]->getSourceU ();
|
||||||
case MaxSegmentMax: return _segments[index ]->getTargetU ();
|
case EndIsSegmentMax: return _segments[index ]->getTargetU ();
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << Bug ( " Track::getMaximalPosition(size_t,unsigned int) :"
|
cerr << Bug( " Track::getMaximalPosition(size_t,unsigned int) :"
|
||||||
" invalid state value %ud.", state ) << endl;
|
" invalid state value %ud.", state ) << endl;
|
||||||
|
|
||||||
return _min;
|
return _min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Interval Track::expandUsedInterval ( size_t& begin, size_t& end ) const
|
Interval Track::getOccupiedInterval ( size_t& begin ) const
|
||||||
{
|
{
|
||||||
if ( begin == NPOS ) return Interval();
|
if (begin == npos) return Interval();
|
||||||
|
|
||||||
size_t seed = begin;
|
size_t seed = begin;
|
||||||
Net* owner = _segments[seed]->getNet();
|
Net* owner = _segments[seed]->getNet();
|
||||||
|
|
||||||
Interval expandInterval;
|
Interval segmentInterval;
|
||||||
Interval ownerInterval;
|
Interval mergedInterval;
|
||||||
_segments[seed]->getCanonical ( ownerInterval );
|
_segments[seed]->getCanonical( mergedInterval );
|
||||||
|
|
||||||
size_t i = seed;
|
size_t i = seed;
|
||||||
while ( --i != NPOS ) {
|
while ( --i != npos ) {
|
||||||
if ( _segments[i]->getNet() != owner ) break;
|
if (_segments[i]->getNet() != owner) break;
|
||||||
|
|
||||||
_segments[i]->getCanonical ( expandInterval );
|
_segments[i]->getCanonical ( segmentInterval );
|
||||||
if ( expandInterval.getVMax() >= ownerInterval.getVMin() ) {
|
if (segmentInterval.getVMax() >= mergedInterval.getVMin()) {
|
||||||
ownerInterval.merge ( expandInterval );
|
mergedInterval.merge( segmentInterval );
|
||||||
begin = i;
|
begin = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
end = i = seed;
|
i = seed;
|
||||||
while ( ++i < _segments.size() ) {
|
while ( ++i < _segments.size() ) {
|
||||||
if ( _segments[i]->getNet() != owner ) break;
|
if (_segments[i]->getNet() != owner) break;
|
||||||
|
|
||||||
_segments[i]->getCanonical ( expandInterval );
|
_segments[i]->getCanonical( segmentInterval );
|
||||||
if ( expandInterval.getVMin() > ownerInterval.getVMax() ) break;
|
if (segmentInterval.getVMin() > mergedInterval.getVMax()) break;
|
||||||
if ( expandInterval.getVMax() > ownerInterval.getVMax() ) end = i;
|
|
||||||
|
|
||||||
ownerInterval.merge ( expandInterval );
|
mergedInterval.merge( segmentInterval );
|
||||||
}
|
}
|
||||||
|
|
||||||
return ownerInterval;
|
return mergedInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t Track::pack ()
|
size_t Track::doRemoval ()
|
||||||
{
|
{
|
||||||
ltrace(148) << "Track::pack() - " << this << endl;
|
ltrace(148) << "Track::doRemoval() - " << this << endl;
|
||||||
ltracein(148);
|
ltracein(148);
|
||||||
|
|
||||||
size_t size = _segments.size();
|
size_t size = _segments.size();
|
||||||
|
|
||||||
vector<TrackElement*>::iterator beginRemove
|
vector<TrackElement*>::iterator beginRemove
|
||||||
= remove_if ( _segments.begin(), _segments.end(), isDetachedSegment() );
|
= remove_if( _segments.begin(), _segments.end(), isDetachedSegment() );
|
||||||
|
|
||||||
_segments.erase ( beginRemove, _segments.end() );
|
_segments.erase( beginRemove, _segments.end() );
|
||||||
|
|
||||||
# if 0
|
ltrace(148) << "After doRemoval " << this << endl;
|
||||||
size_t first = 0;
|
|
||||||
size_t last = 0;
|
|
||||||
bool erase = false;
|
|
||||||
|
|
||||||
while ( last < _segments.size() ) {
|
|
||||||
if ( _segments[last] ) {
|
|
||||||
if ( erase ) {
|
|
||||||
_segments.erase ( _segments.begin()+first, _segments.begin()+last );
|
|
||||||
|
|
||||||
erase = false;
|
|
||||||
last = first;
|
|
||||||
} else {
|
|
||||||
first = last;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
erase = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( erase )
|
|
||||||
_segments.erase ( _segments.begin()+first, _segments.end() );
|
|
||||||
# endif
|
|
||||||
|
|
||||||
ltrace(148) << "After packing " << this << endl;
|
|
||||||
ltraceout(148);
|
ltraceout(148);
|
||||||
|
|
||||||
return size - _segments.size();
|
return size - _segments.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Track::sort ()
|
void Track::doReorder ()
|
||||||
{
|
{
|
||||||
if ( !_segmentsValid ) {
|
if (not _segmentsValid ) {
|
||||||
std::sort ( _segments.begin(), _segments.end(), SegmentCompare() );
|
std::sort ( _segments.begin(), _segments.end(), SegmentCompare() );
|
||||||
for ( size_t i=0 ; i < _segments.size() ; i++ ) {
|
for ( size_t i=0 ; i < _segments.size() ; i++ ) {
|
||||||
_segments[i]->setIndex ( i );
|
_segments[i]->setIndex ( i );
|
||||||
|
@ -703,7 +651,7 @@ namespace Kite {
|
||||||
_segmentsValid = true;
|
_segmentsValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !_markersValid ) {
|
if (not _markersValid ) {
|
||||||
std::sort ( _markers.begin(), _markers.end(), TrackMarker::Compare() );
|
std::sort ( _markers.begin(), _markers.end(), TrackMarker::Compare() );
|
||||||
_markersValid = true;
|
_markersValid = true;
|
||||||
}
|
}
|
||||||
|
@ -719,10 +667,10 @@ namespace Kite {
|
||||||
if ( _segments[i]->getNet() == _segments[i+1]->getNet() ) {
|
if ( _segments[i]->getNet() == _segments[i+1]->getNet() ) {
|
||||||
if ( _segments[i]->getSourceU() == _segments[i+1]->getSourceU() ) {
|
if ( _segments[i]->getSourceU() == _segments[i+1]->getSourceU() ) {
|
||||||
if ( _segments[i]->getTargetU() < _segments[i+1]->getTargetU() ) {
|
if ( _segments[i]->getTargetU() < _segments[i+1]->getTargetU() ) {
|
||||||
cerr << Warning(" Invalid sorting length order in %s:\n%s \n%s "
|
cerr << Error(" Invalid sorting length order in %s:\n%s \n%s "
|
||||||
,getString(this).c_str()
|
,getString(this).c_str()
|
||||||
,getString(_segments[i ]).c_str()
|
,getString(_segments[i ]).c_str()
|
||||||
,getString(_segments[i+1]).c_str()) << endl;
|
,getString(_segments[i+1]).c_str()) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for ( j=i+1 ; (j<_segments.size()) && (_segments[i]->getNet() == _segments[j]->getNet()) ; j++ );
|
for ( j=i+1 ; (j<_segments.size()) && (_segments[i]->getNet() == _segments[j]->getNet()) ; j++ );
|
||||||
|
@ -732,10 +680,10 @@ namespace Kite {
|
||||||
|
|
||||||
if ( (j<_segments.size())
|
if ( (j<_segments.size())
|
||||||
&& (_segments[i]->getTargetU() > _segments[j]->getSourceU()) ) {
|
&& (_segments[i]->getTargetU() > _segments[j]->getSourceU()) ) {
|
||||||
cerr << Warning("Overlap in %s between:\n %s\n %s"
|
cerr << Error("Overlap in %s between:\n %s\n %s"
|
||||||
,getString(this).c_str()
|
,getString(this).c_str()
|
||||||
,getString(_segments[i]).c_str()
|
,getString(_segments[i]).c_str()
|
||||||
,getString(_segments[j]).c_str()) << endl;
|
,getString(_segments[j]).c_str()) << endl;
|
||||||
overlaps++;
|
overlaps++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -760,13 +708,13 @@ namespace Kite {
|
||||||
Record* Track::_getRecord () const
|
Record* Track::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = new Record ( _getString() );
|
Record* record = new Record ( _getString() );
|
||||||
record->add ( getSlot ( "_routingPlane", _routingPlane ) );
|
record->add ( getSlot ( "_routingPlane", _routingPlane ) );
|
||||||
record->add ( getSlot ( "_index" , &_index ) );
|
record->add ( getSlot ( "_index" , &_index ) );
|
||||||
record->add ( DbU::getValueSlot ( "_axis" , &_axis ) );
|
record->add ( DbU::getValueSlot ( "_axis" , &_axis ) );
|
||||||
record->add ( getSlot ( "_segments" , &_segments ) );
|
record->add ( getSlot ( "_segments" , &_segments ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,28 +12,19 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackCost.cpp" |
|
// | C++ Module : "./TrackCost.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include "kite/Track.h"
|
|
||||||
#include "kite/TrackCost.h"
|
|
||||||
#include "kite/Session.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include "kite/Track.h"
|
||||||
|
#include "kite/TrackCost.h"
|
||||||
|
#include "kite/Session.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
|
||||||
|
@ -46,7 +32,6 @@ namespace Kite {
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "TrackCost".
|
// Class : "TrackCost".
|
||||||
|
|
||||||
|
|
||||||
TrackCost::TrackCost ( Track* track
|
TrackCost::TrackCost ( Track* track
|
||||||
, const Interval& interval
|
, const Interval& interval
|
||||||
, size_t begin
|
, size_t begin
|
||||||
|
@ -79,7 +64,7 @@ namespace Kite {
|
||||||
, _ripupCount (0)
|
, _ripupCount (0)
|
||||||
{
|
{
|
||||||
TrackElement* neighbor;
|
TrackElement* neighbor;
|
||||||
if ( _begin != Track::NPOS ) {
|
if ( _begin != Track::npos ) {
|
||||||
neighbor = _track->getSegment(_begin);
|
neighbor = _track->getSegment(_begin);
|
||||||
if ( neighbor and (neighbor->getNet() != net) ) {
|
if ( neighbor and (neighbor->getNet() != net) ) {
|
||||||
DbU::Unit distance = interval.getVMin() - neighbor->getTargetU();
|
DbU::Unit distance = interval.getVMin() - neighbor->getTargetU();
|
||||||
|
@ -91,7 +76,7 @@ namespace Kite {
|
||||||
// _distanceToFixed += interval.getVMin() - neighbor->getTargetU();
|
// _distanceToFixed += interval.getVMin() - neighbor->getTargetU();
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
if ( _end != Track::NPOS ) {
|
if ( _end != Track::npos ) {
|
||||||
neighbor = _track->getSegment(_end);
|
neighbor = _track->getSegment(_end);
|
||||||
if ( neighbor and (neighbor->getNet() != net) ) {
|
if ( neighbor and (neighbor->getNet() != net) ) {
|
||||||
DbU::Unit distance = neighbor->getSourceU() - interval.getVMax();
|
DbU::Unit distance = neighbor->getSourceU() - interval.getVMax();
|
||||||
|
@ -190,6 +175,7 @@ namespace Kite {
|
||||||
s += "+" + getString(_ripupCount);
|
s += "+" + getString(_ripupCount);
|
||||||
s += ":" + getString((_dataState<<2)+_ripupCount);
|
s += ":" + getString((_dataState<<2)+_ripupCount);
|
||||||
s += " " + string ( (_blockage )?"b":"-" );
|
s += " " + string ( (_blockage )?"b":"-" );
|
||||||
|
s += string ( (_blockage )?"f":"-" );
|
||||||
s += string ( (_hardOverlap )?"h":"-" );
|
s += string ( (_hardOverlap )?"h":"-" );
|
||||||
s += string ( (_overlap )?"o":"-" );
|
s += string ( (_overlap )?"o":"-" );
|
||||||
s += string ( (_overlapGlobal )?"g":"-" );
|
s += string ( (_overlapGlobal )?"g":"-" );
|
||||||
|
@ -210,17 +196,22 @@ namespace Kite {
|
||||||
Record* TrackCost::_getRecord () const
|
Record* TrackCost::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = new Record ( _getString() );
|
Record* record = new Record ( _getString() );
|
||||||
record->add ( getSlot ( "_track" , _track ) );
|
record->add( getSlot ( "_track" , _track ) );
|
||||||
record->add ( getSlot ( "_begin" , &_begin ) );
|
record->add( getSlot ( "_begin" , &_begin ) );
|
||||||
record->add ( getSlot ( "_end" , &_end ) );
|
record->add( getSlot ( "_end" , &_end ) );
|
||||||
record->add ( getSlot ( "_interval" , &_interval ) );
|
record->add( getSlot ( "_interval" , &_interval ) );
|
||||||
record->add ( getSlot ( "_infinite" , _infinite ) );
|
record->add( getSlot ( "_infinite" , _infinite ) );
|
||||||
record->add ( getSlot ( "_overlap" , _overlap ) );
|
record->add( getSlot ( "_overlap" , _overlap ) );
|
||||||
record->add ( getSlot ( "_terminals", _terminals ) );
|
record->add( getSlot ( "_terminals" , _terminals ) );
|
||||||
record->add ( getSlot ( "_delta" , &_delta ) );
|
record->add( DbU::getValueSlot( "_delta" , &_delta ) );
|
||||||
|
record->add( DbU::getValueSlot( "_deltaShared" , &_deltaShared ) );
|
||||||
|
record->add( DbU::getValueSlot( "_deltaPerpand" , &_deltaPerpand ) );
|
||||||
|
record->add( DbU::getValueSlot( "_axisWeight" , &_axisWeight ) );
|
||||||
|
record->add( DbU::getValueSlot( "_distanceToFixed", &_distanceToFixed ) );
|
||||||
|
record->add( DbU::getValueSlot( "_longuestOverlap", &_longuestOverlap ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,60 +12,51 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackElement.cpp" |
|
// | C++ Module : "./TrackElement.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include <sstream>
|
||||||
#include <limits>
|
#include "hurricane/Bug.h"
|
||||||
#include <sstream>
|
#include "hurricane/Warning.h"
|
||||||
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Name.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "katabatic/AutoContact.h"
|
||||||
#include "hurricane/Net.h"
|
#include "katabatic/GCell.h"
|
||||||
#include "hurricane/Name.h"
|
#include "crlcore/RoutingGauge.h"
|
||||||
#include "katabatic/AutoContact.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "katabatic/GCell.h"
|
#include "kite/TrackElement.h"
|
||||||
#include "crlcore/RoutingGauge.h"
|
#include "kite/TrackCost.h"
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/TrackElement.h"
|
#include "kite/Session.h"
|
||||||
#include "kite/TrackCost.h"
|
#include "kite/RoutingEvent.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/NegociateWindow.h"
|
||||||
#include "kite/Session.h"
|
|
||||||
#include "kite/RoutingEvent.h"
|
|
||||||
#include "kite/NegociateWindow.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Hurricane;
|
using namespace Hurricane;
|
||||||
using namespace CRL;
|
using namespace CRL;
|
||||||
using namespace Kite;
|
using namespace Kite;
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
void dummyOverlapCost ( const TrackElement* segment, TrackCost& cost )
|
||||||
// Function : "DummyOverlapCost ()".
|
|
||||||
|
|
||||||
|
|
||||||
void DummyOverlapCost ( const TrackElement* segment, TrackCost& cost )
|
|
||||||
{
|
{
|
||||||
cerr << Warning("No overlapCost callback has been set (%s)."
|
cerr << Warning("No overlapCost callback has been set (%s)."
|
||||||
,getString(segment).c_str()) << endl;
|
,getString(segment).c_str()) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of local namespace.
|
} // Anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
using Hurricane::inltrace;
|
||||||
|
using Hurricane::ltracein;
|
||||||
|
using Hurricane::ltraceout;
|
||||||
|
using Hurricane::tab;
|
||||||
using Hurricane::Bug;
|
using Hurricane::Bug;
|
||||||
using Hurricane::Net;
|
using Hurricane::Net;
|
||||||
using Hurricane::Name;
|
using Hurricane::Name;
|
||||||
|
@ -78,144 +64,141 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "TrackElement::Compare".
|
// Comparison Classes.
|
||||||
|
|
||||||
|
|
||||||
bool TrackElement::Compare::operator() ( TrackElement* lhs, TrackElement* rhs )
|
|
||||||
{
|
|
||||||
return lhs->getArea() > rhs->getArea();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
|
||||||
// Class : "TrackElement::CompareByPosition".
|
|
||||||
//
|
//
|
||||||
// Return: lhs < rhs.
|
// Return: lhs < rhs.
|
||||||
|
|
||||||
|
|
||||||
bool TrackElement::CompareByPosition::operator() ( const TrackElement* lhs, const TrackElement* rhs ) const
|
bool Compare::operator() ( TrackElement* lhs, TrackElement* rhs )
|
||||||
|
{ return lhs->getFreedomDegree() > rhs->getFreedomDegree(); }
|
||||||
|
|
||||||
|
|
||||||
|
bool CompareByPosition::operator() ( const TrackElement* lhs, const TrackElement* rhs ) const
|
||||||
{
|
{
|
||||||
if ( lhs == rhs ) return false;
|
if (lhs == rhs) return false;
|
||||||
|
|
||||||
if ( lhs->isBlockage() xor rhs->isBlockage() )
|
if (lhs->isBlockage() xor rhs->isBlockage()) return lhs->isBlockage();
|
||||||
return lhs->isBlockage();
|
|
||||||
|
|
||||||
if ( lhs->getLength() < rhs->getLength() ) return true;
|
if (lhs->getLength() < rhs->getLength()) return true;
|
||||||
if ( lhs->getLength() > rhs->getLength() ) return false;
|
if (lhs->getLength() > rhs->getLength()) return false;
|
||||||
|
|
||||||
if ( lhs->isHorizontal() xor rhs->isHorizontal() )
|
if (lhs->isHorizontal() xor rhs->isHorizontal()) return rhs->isHorizontal();
|
||||||
return rhs->isHorizontal();
|
|
||||||
|
|
||||||
if ( lhs->getAxis() > rhs->getAxis() ) return true;
|
if (lhs->getAxis() > rhs->getAxis()) return true;
|
||||||
if ( lhs->getAxis() < rhs->getAxis() ) return false;
|
if (lhs->getAxis() < rhs->getAxis()) return false;
|
||||||
|
|
||||||
if ( lhs->getSourceU() > rhs->getSourceU() ) return true;
|
if (lhs->getSourceU() > rhs->getSourceU()) return true;
|
||||||
if ( lhs->getSourceU() < rhs->getSourceU() ) return false;
|
if (lhs->getSourceU() < rhs->getSourceU()) return false;
|
||||||
|
|
||||||
if ( lhs->isBlockage() and rhs->isBlockage() ) return false;
|
if (lhs->isBlockage() and rhs->isBlockage()) return false;
|
||||||
|
|
||||||
//return lhs->getNet()->getName() < rhs->getNet()->getName();
|
|
||||||
return lhs->getId() < rhs->getId();
|
return lhs->getId() < rhs->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "SegmentObserver".
|
||||||
|
|
||||||
|
|
||||||
|
void SegmentObserver::notify ( unsigned int flags )
|
||||||
|
{
|
||||||
|
TrackElement* segment = getOwner();
|
||||||
|
switch ( flags ) {
|
||||||
|
case AutoSegment::Invalidate:
|
||||||
|
if (not segment->isInvalidated()) {
|
||||||
|
ltrace(200) << "::notify() <Invalidate> on " << segment << endl;
|
||||||
|
segment->invalidate();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case AutoSegment::Revalidate:
|
||||||
|
// Revalidation must be delayed until *all* the AutoSegments have been revalidated.
|
||||||
|
// if (segment->isInvalidated()) {
|
||||||
|
// ltrace(200) << "::notify() <Revalidate> on " << segment << endl;
|
||||||
|
// segment->revalidate( true );
|
||||||
|
// }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "TrackElement".
|
// Class : "TrackElement".
|
||||||
|
|
||||||
|
|
||||||
SegmentOverlapCostCB* TrackElement::_overlapCostCallback = DummyOverlapCost;
|
SegmentOverlapCostCB* TrackElement::_overlapCostCallback = dummyOverlapCost;
|
||||||
|
|
||||||
|
|
||||||
SegmentOverlapCostCB* TrackElement::setOverlapCostCB ( SegmentOverlapCostCB* cb )
|
SegmentOverlapCostCB* TrackElement::setOverlapCostCB ( SegmentOverlapCostCB* cb )
|
||||||
{
|
{
|
||||||
SegmentOverlapCostCB* oldCb = _overlapCostCallback;
|
SegmentOverlapCostCB* oldCb = _overlapCostCallback;
|
||||||
|
|
||||||
_overlapCostCallback = cb;
|
_overlapCostCallback = cb;
|
||||||
|
|
||||||
return oldCb;
|
return oldCb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Former inline functions.
|
// Wrapped AutoSegment Functions.
|
||||||
AutoSegment* TrackElement::base () const { return NULL; }
|
AutoSegment* TrackElement::base () const { return NULL; }
|
||||||
bool TrackElement::isBipoint () const { return false; }
|
bool TrackElement::isFixed () const { return false; }
|
||||||
bool TrackElement::isCreated () const { return false; }
|
bool TrackElement::isLocal () const { return true; }
|
||||||
bool TrackElement::isFixed () const { return false; }
|
bool TrackElement::isGlobal () const { return not isLocal(); }
|
||||||
bool TrackElement::isBlockage () const { return false; }
|
bool TrackElement::isBipoint () const { return false; }
|
||||||
bool TrackElement::isStrap () const { return false; }
|
bool TrackElement::isTerminal () const { return false; }
|
||||||
bool TrackElement::isSlackenStrap () const { return false; }
|
bool TrackElement::isStrongTerminal ( unsigned int ) const { return false; }
|
||||||
bool TrackElement::isLocal () const { return true; }
|
bool TrackElement::isStrap () const { return false; }
|
||||||
bool TrackElement::isGlobal () const { return not isLocal(); }
|
bool TrackElement::isSlackened () const { return false; }
|
||||||
bool TrackElement::isLocked () const { return false; }
|
bool TrackElement::isDogleg () const { return false; }
|
||||||
bool TrackElement::isTerminal () const { return false; }
|
// Predicates.
|
||||||
bool TrackElement::isDogleg () const { return false; }
|
bool TrackElement::canSlacken () const { return false; }
|
||||||
bool TrackElement::isRevalidated () const { return false; }
|
bool TrackElement::canPivotUp ( float ) const { return false; };
|
||||||
bool TrackElement::isRouted () const { return true; }
|
bool TrackElement::canPivotDown ( float ) const { return false; };
|
||||||
bool TrackElement::isSlackened () const { return false; }
|
bool TrackElement::canMoveUp ( float, unsigned int ) const { return false; };
|
||||||
bool TrackElement::isSlackenDogLeg () const { return false; }
|
bool TrackElement::canDogleg () { return false; };
|
||||||
bool TrackElement::hasSourceDogLeg () const { return false; }
|
bool TrackElement::canDogleg ( Interval ) { return false; };
|
||||||
bool TrackElement::hasTargetDogLeg () const { return false; }
|
bool TrackElement::canDogleg ( Katabatic::GCell*, unsigned int ) { return false; };
|
||||||
bool TrackElement::allowOutsideGCell () const { return false; }
|
// Accessors.
|
||||||
bool TrackElement::canGoOutsideGCell () const { return false; }
|
unsigned long TrackElement::getId () const { return 0; }
|
||||||
bool TrackElement::canRipple () const { return false; }
|
unsigned long TrackElement::getFreedomDegree () const { return 0; }
|
||||||
unsigned long TrackElement::getId () const { return 0; }
|
float TrackElement::getMaxUnderDensity ( unsigned int ) const { return 0.0; };
|
||||||
unsigned long TrackElement::getArea () const { return 0; }
|
unsigned int TrackElement::getDoglegLevel () const { return 0; }
|
||||||
unsigned int TrackElement::getDogLegLevel () const { return 0; }
|
TrackElement* TrackElement::getParent () const { return NULL; }
|
||||||
unsigned int TrackElement::getDogLegOrder () const { return 0; }
|
Interval TrackElement::getSourceConstraints () const { return Interval(); }
|
||||||
Interval TrackElement::getSourceConstraints () const { return Interval(); }
|
Interval TrackElement::getTargetConstraints () const { return Interval(); }
|
||||||
Interval TrackElement::getTargetConstraints () const { return Interval(); }
|
DataNegociate* TrackElement::getDataNegociate ( unsigned int ) const { return NULL; }
|
||||||
DataNegociate* TrackElement::getDataNegociate ( unsigned int ) const { return NULL; }
|
TrackElements TrackElement::getPerpandiculars () { return new TrackElements_Perpandiculars(NULL); }
|
||||||
TrackElements TrackElement::getCollapsedPerpandiculars () { return new TrackElements_CollapsedPerpandicular(NULL); }
|
void TrackElement::invalidate () { }
|
||||||
void TrackElement::setAllowOutsideGCell ( bool ) { }
|
TrackElement* TrackElement::getCanonical ( Interval& i ) { i=Interval(getSourceU(),getTargetU()); return this; }
|
||||||
void TrackElement::setLock ( bool ) { }
|
TrackElement* TrackElement::getSourceDogleg () { return NULL; }
|
||||||
void TrackElement::setRevalidated ( bool ) { }
|
TrackElement* TrackElement::getTargetDogleg () { return NULL; }
|
||||||
void TrackElement::invalidate () { }
|
// Mutators.
|
||||||
void TrackElement::setCanRipple ( bool ) { }
|
void TrackElement::setTrack ( Track* track ) { _track = track; }
|
||||||
void TrackElement::setSourceDogLeg ( bool ) { }
|
void TrackElement::updateFreedomDegree () { }
|
||||||
void TrackElement::setTargetDogLeg ( bool ) { }
|
void TrackElement::setDoglegLevel ( unsigned int ) { }
|
||||||
TrackElement* TrackElement::getCanonical ( Interval& i ) { i=Interval(getSourceU(),getTargetU()); return this; }
|
void TrackElement::swapTrack ( TrackElement* ) { }
|
||||||
bool TrackElement::canSlacken () const { return false; }
|
void TrackElement::reschedule ( unsigned int ) { }
|
||||||
|
void TrackElement::detach () { }
|
||||||
|
void TrackElement::revalidate () { }
|
||||||
bool TrackElement::canDesalignate () const { return false; }
|
void TrackElement::setAxis ( DbU::Unit, unsigned int flags ) { }
|
||||||
bool TrackElement::canPivotUp ( float ) const { return false; };
|
TrackElement* TrackElement::makeDogleg () { return NULL; }
|
||||||
bool TrackElement::canPivotDown ( float ) const { return false; };
|
TrackElement* TrackElement::makeDogleg ( Interval, unsigned int& ) { return NULL; }
|
||||||
bool TrackElement::canMoveUp ( float, unsigned int ) const { return false; };
|
TrackElement* TrackElement::makeDogleg ( Katabatic::GCell*, TrackElement*&, TrackElement*& ) { return NULL; }
|
||||||
float TrackElement::getMaxUnderDensity ( unsigned int ) const { return 0.0; };
|
void TrackElement::_postDoglegs ( TrackElement*&, TrackElement*& ) { }
|
||||||
bool TrackElement::canDogLeg () { return false; };
|
bool TrackElement::moveAside ( unsigned int ) { return false; }
|
||||||
bool TrackElement::canDogLeg ( Interval ) { return false; };
|
bool TrackElement::slacken ( unsigned int ) { return false; }
|
||||||
bool TrackElement::canDogLegAt ( Katabatic::GCell*, unsigned int ) { return false; };
|
bool TrackElement::moveUp ( unsigned int ) { return false; }
|
||||||
TrackElement* TrackElement::getSourceDogLeg () { return NULL; }
|
bool TrackElement::moveDown ( unsigned int ) { return false; }
|
||||||
TrackElement* TrackElement::getTargetDogLeg () { return NULL; }
|
#if THIS_IS_DISABLED
|
||||||
TrackElement* TrackElement::getParent () const { return NULL; }
|
void TrackElement::desalignate () { }
|
||||||
void TrackElement::dataInvalidate () { }
|
#endif
|
||||||
void TrackElement::eventInvalidate () { }
|
bool TrackElement::_check () const { return true; }
|
||||||
void TrackElement::setArea () { }
|
|
||||||
void TrackElement::setRouted ( bool ) { }
|
|
||||||
void TrackElement::setTrack ( Track* track ) { _track = track; }
|
|
||||||
void TrackElement::setDogLegLevel ( unsigned int ) { }
|
|
||||||
void TrackElement::setDogLegOrder ( unsigned int ) { }
|
|
||||||
void TrackElement::swapTrack ( TrackElement* ) { }
|
|
||||||
void TrackElement::reschedule ( unsigned int ) { }
|
|
||||||
void TrackElement::detach () { }
|
|
||||||
void TrackElement::revalidate ( bool invalidEvent ) { }
|
|
||||||
void TrackElement::setAxis ( DbU::Unit, unsigned int flags ) { }
|
|
||||||
void TrackElement::slacken () { }
|
|
||||||
bool TrackElement::moveUp ( unsigned int ) { return false; }
|
|
||||||
bool TrackElement::moveDown ( unsigned int ) { return false; }
|
|
||||||
bool TrackElement::moveAside ( bool onLeft ) { return false; }
|
|
||||||
TrackElement* TrackElement::makeDogLeg () { return NULL; }
|
|
||||||
TrackElement* TrackElement::makeDogLeg ( Interval, bool& leftDogleg ) { return NULL; }
|
|
||||||
TrackElement* TrackElement::makeDogLeg ( Katabatic::GCell* ) { return NULL; }
|
|
||||||
TrackElement* TrackElement::_postDogLeg ( Katabatic::GCell* ) { return NULL; }
|
|
||||||
void TrackElement::_postModify () { }
|
|
||||||
void TrackElement::desalignate () { }
|
|
||||||
bool TrackElement::_check () const { return true; }
|
|
||||||
|
|
||||||
|
|
||||||
TrackElement::TrackElement ( Track* track )
|
TrackElement::TrackElement ( Track* track )
|
||||||
: _track(track)
|
: _flags (0)
|
||||||
, _index((size_t)-1)
|
, _track (track)
|
||||||
|
, _index ((size_t)-1)
|
||||||
|
, _sourceU (0)
|
||||||
|
, _targetU (0)
|
||||||
|
, _observer(this)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,50 +224,38 @@ namespace Kite {
|
||||||
TrackElement* TrackElement::getNext () const
|
TrackElement* TrackElement::getNext () const
|
||||||
{
|
{
|
||||||
size_t dummy = _index;
|
size_t dummy = _index;
|
||||||
return _track->getNext ( dummy, getNet() );
|
return _track->getNext( dummy, getNet() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElement* TrackElement::getPrevious () const
|
TrackElement* TrackElement::getPrevious () const
|
||||||
{
|
{
|
||||||
size_t dummy = _index;
|
size_t dummy = _index;
|
||||||
return _track->getPrevious ( dummy, getNet() );
|
return _track->getPrevious( dummy, getNet() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Interval TrackElement::getFreeInterval () const
|
Interval TrackElement::getFreeInterval () const
|
||||||
{
|
{
|
||||||
if ( !_track ) return Interval(false);
|
if (not _track) return Interval(false);
|
||||||
|
|
||||||
size_t begin = _index;
|
size_t begin = _index;
|
||||||
size_t end = _index;
|
size_t end = _index;
|
||||||
return _track->expandFreeInterval ( begin, end, Track::Inside, getNet() );
|
return _track->expandFreeInterval( begin, end, Track::InsideElement, getNet() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t TrackElement::getGCells ( vector<GCell*>& gcells ) const
|
size_t TrackElement::getGCells ( Katabatic::GCellVector& gcells ) const
|
||||||
{
|
{
|
||||||
vector<GCell*>().swap ( gcells );
|
vector<GCell*>().swap( gcells );
|
||||||
return gcells.size();
|
return gcells.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t TrackElement::getPerpandicularsBound ( set<TrackElement*>& bounds )
|
|
||||||
{
|
|
||||||
bounds.clear ();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int TrackElement::getOrder () const
|
|
||||||
{ return numeric_limits<unsigned int>::max(); }
|
|
||||||
|
|
||||||
|
|
||||||
void TrackElement::incOverlapCost ( Net* net, TrackCost& cost ) const
|
void TrackElement::incOverlapCost ( Net* net, TrackCost& cost ) const
|
||||||
{
|
{
|
||||||
if ( not _track or (getNet() == net) ) return;
|
if (not _track or (getNet() == net)) return;
|
||||||
|
_overlapCostCallback( this, cost );
|
||||||
_overlapCostCallback ( this, cost );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,17 +264,20 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
string TrackElement::_getString () const
|
string TrackElement::_getString () const
|
||||||
{ return "<" + _getTypeName() + ">"; }
|
{ return "<"+_getTypeName()+">"; }
|
||||||
|
|
||||||
|
|
||||||
Record* TrackElement::_getRecord () const
|
Record* TrackElement::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = new Record ( _getString() );
|
Record* record = new Record( _getString() );
|
||||||
record->add ( getSlot ( "_track", _track ) );
|
record->add( getSlot( "_flags", _track ) );
|
||||||
record->add ( getSlot ( "_index", _index ) );
|
record->add( getSlot( "_track", _track ) );
|
||||||
|
record->add( getSlot( "_index", _index ) );
|
||||||
|
record->add( DbU::getValueSlot( "_sourceU", &_sourceU ) );
|
||||||
|
record->add( DbU::getValueSlot( "_targetU", &_targetU ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,10 +12,7 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackElements.cpp" |
|
// | C++ Module : "./TrackElements.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Bug.h"
|
||||||
|
@ -31,7 +23,6 @@
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using Hurricane::tab;
|
using Hurricane::tab;
|
||||||
using Hurricane::inltrace;
|
using Hurricane::inltrace;
|
||||||
|
@ -43,20 +34,20 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "TrackElements_CollapsedPerpandicular".
|
// Class : "TrackElements_Perpandiculars".
|
||||||
|
|
||||||
|
|
||||||
TrackElements_CollapsedPerpandicular::Locator::Locator ( TrackElement* segment )
|
TrackElements_Perpandiculars::Locator::Locator ( TrackElement* segment )
|
||||||
: TrackElementHL ()
|
: TrackElementHL ()
|
||||||
, _locator (segment->base())
|
, _locator (segment->base())
|
||||||
, _element (NULL)
|
, _element (NULL)
|
||||||
{
|
{
|
||||||
ltrace(80) << "TrackElements_CollapsedPerpandicular::Locator::Locator()" << endl;
|
ltrace(80) << "TrackElements_Perpandiculars::Locator::Locator()" << endl;
|
||||||
ltrace(80) << " " << segment << endl;
|
ltrace(80) << " " << segment << endl;
|
||||||
|
|
||||||
Interval bounds;
|
Interval bounds;
|
||||||
if ( _locator.isValid() ) {
|
if ( _locator.isValid() ) {
|
||||||
_element = Session::lookup ( _locator.getElement()->getCanonical(bounds)->base() );
|
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||||
if ( !_element ) {
|
if ( !_element ) {
|
||||||
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
||||||
progress ();
|
progress ();
|
||||||
|
@ -65,20 +56,20 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElement* TrackElements_CollapsedPerpandicular::Locator::getElement () const
|
TrackElement* TrackElements_Perpandiculars::Locator::getElement () const
|
||||||
{ return _element; }
|
{ return _element; }
|
||||||
|
|
||||||
|
|
||||||
void TrackElements_CollapsedPerpandicular::Locator::progress ()
|
void TrackElements_Perpandiculars::Locator::progress ()
|
||||||
{
|
{
|
||||||
ltrace(80) << "TrackElements_CollapsedPerpandicular::Locator::progress()" << endl;
|
ltrace(80) << "TrackElements_Perpandiculars::Locator::progress()" << endl;
|
||||||
|
|
||||||
Interval bounds;
|
Interval bounds;
|
||||||
while ( _locator.isValid() ) {
|
while ( _locator.isValid() ) {
|
||||||
_locator.progress ();
|
_locator.progress ();
|
||||||
|
|
||||||
if ( _locator.isValid() ) {
|
if ( _locator.isValid() ) {
|
||||||
_element = Session::lookup ( _locator.getElement()->getCanonical(bounds)->base() );
|
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||||
if ( !_element ) {
|
if ( !_element ) {
|
||||||
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
||||||
continue;
|
continue;
|
||||||
|
@ -90,32 +81,32 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElementHL* TrackElements_CollapsedPerpandicular::Locator::getClone () const
|
TrackElementHL* TrackElements_Perpandiculars::Locator::getClone () const
|
||||||
{ return new Locator(*this); }
|
{ return new Locator(*this); }
|
||||||
|
|
||||||
|
|
||||||
bool TrackElements_CollapsedPerpandicular::Locator::isValid () const
|
bool TrackElements_Perpandiculars::Locator::isValid () const
|
||||||
{ return _locator.isValid(); }
|
{ return _locator.isValid(); }
|
||||||
|
|
||||||
|
|
||||||
TrackElementHC* TrackElements_CollapsedPerpandicular::getClone () const
|
TrackElementHC* TrackElements_Perpandiculars::getClone () const
|
||||||
{ return new TrackElements_CollapsedPerpandicular(*this); }
|
{ return new TrackElements_Perpandiculars(*this); }
|
||||||
|
|
||||||
|
|
||||||
TrackElementHL* TrackElements_CollapsedPerpandicular::getLocator () const
|
TrackElementHL* TrackElements_Perpandiculars::getLocator () const
|
||||||
{ return new Locator(_segment); }
|
{ return new Locator(_segment); }
|
||||||
|
|
||||||
|
|
||||||
string TrackElements_CollapsedPerpandicular::Locator::_getString () const
|
string TrackElements_Perpandiculars::Locator::_getString () const
|
||||||
{
|
{
|
||||||
string s = "<TrackElements_CollapsedPerpandicular::Locator>";
|
string s = "<TrackElements_Perpandiculars::Locator>";
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string TrackElements_CollapsedPerpandicular::_getString () const
|
string TrackElements_Perpandiculars::_getString () const
|
||||||
{
|
{
|
||||||
string s = "<TrackElements_CollapsedPerpandicular "
|
string s = "<TrackElements_Perpandiculars "
|
||||||
+ getString(_segment)
|
+ getString(_segment)
|
||||||
+ ">";
|
+ ">";
|
||||||
return s;
|
return s;
|
||||||
|
@ -132,8 +123,8 @@ namespace Kite {
|
||||||
|
|
||||||
bool TrackElements_UniqCanonical::accept ( TrackElement* segment ) const
|
bool TrackElements_UniqCanonical::accept ( TrackElement* segment ) const
|
||||||
{
|
{
|
||||||
if ( _canonicals.find(segment) == _canonicals.end() ) {
|
if (_canonicals.find(segment) == _canonicals.end()) {
|
||||||
_canonicals.insert ( segment );
|
_canonicals.insert( segment );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,4 +136,4 @@ namespace Kite {
|
||||||
{ return "<TrackElements_UniqCanonical>"; }
|
{ return "<TrackElements_UniqCanonical>"; }
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,41 +12,34 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackFixedSegment.cpp" |
|
// | C++ Module : "./TrackFixedSegment.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include "hurricane/Bug.h"
|
||||||
#include <sstream>
|
#include "hurricane/Warning.h"
|
||||||
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Name.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/RegularLayer.h"
|
||||||
#include "hurricane/Net.h"
|
#include "hurricane/Technology.h"
|
||||||
#include "hurricane/Name.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/RegularLayer.h"
|
#include "hurricane/Horizontal.h"
|
||||||
#include "hurricane/Technology.h"
|
#include "hurricane/Vertical.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "katabatic/AutoContact.h"
|
||||||
#include "hurricane/Horizontal.h"
|
#include "katabatic/GCellGrid.h"
|
||||||
#include "hurricane/Vertical.h"
|
#include "crlcore/RoutingGauge.h"
|
||||||
#include "katabatic/AutoContact.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "katabatic/GCellGrid.h"
|
#include "kite/TrackFixedSegment.h"
|
||||||
#include "crlcore/RoutingGauge.h"
|
#include "kite/TrackCost.h"
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/Track.h"
|
||||||
#include "kite/TrackFixedSegment.h"
|
#include "kite/Session.h"
|
||||||
#include "kite/TrackCost.h"
|
#include "kite/RoutingEvent.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/NegociateWindow.h"
|
||||||
#include "kite/Session.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/RoutingEvent.h"
|
|
||||||
#include "kite/NegociateWindow.h"
|
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using Hurricane::inltrace;
|
using Hurricane::inltrace;
|
||||||
using Hurricane::ltracein;
|
using Hurricane::ltracein;
|
||||||
|
@ -80,79 +68,81 @@ namespace Kite {
|
||||||
TrackFixedSegment::TrackFixedSegment ( Track* track, Segment* segment )
|
TrackFixedSegment::TrackFixedSegment ( Track* track, Segment* segment )
|
||||||
: TrackElement (NULL)
|
: TrackElement (NULL)
|
||||||
, _segment (segment)
|
, _segment (segment)
|
||||||
, _isBlockage (segment->getNet() == _blockageNet)
|
|
||||||
{
|
{
|
||||||
Box boundingBox = segment->getBoundingBox();
|
Box boundingBox = segment->getBoundingBox();
|
||||||
|
|
||||||
if ( track ) {
|
unsigned int flags = TElemFixed | ((segment->getNet() == _blockageNet) ? TElemBlockage : 0);
|
||||||
|
setFlags( flags );
|
||||||
|
|
||||||
|
if (track) {
|
||||||
unsigned int depth = track->getDepth();
|
unsigned int depth = track->getDepth();
|
||||||
Technology* technology = DataBase::getDB()->getTechnology();
|
Technology* technology = DataBase::getDB()->getTechnology();
|
||||||
const Layer* layer1 = track->getLayer()->getBlockageLayer();
|
const Layer* layer1 = track->getLayer()->getBlockageLayer();
|
||||||
RegularLayer* layer2 = dynamic_cast<RegularLayer*>(technology->getLayer(layer1->getMask()));
|
RegularLayer* layer2 = dynamic_cast<RegularLayer*>(technology->getLayer(layer1->getMask()));
|
||||||
if ( layer2 ) {
|
if ( layer2 ) {
|
||||||
//DbU::Unit extention = layer2->getExtentionCap();
|
//DbU::Unit extention = layer2->getExtentionCap();
|
||||||
if ( track->getDirection() == Constant::Horizontal ) {
|
if (track->getDirection() == KbHorizontal) {
|
||||||
Interval uside = track->getKiteEngine()->getGCellGrid()->getUSide ( Constant::Horizontal );
|
Interval uside = track->getKiteEngine()->getGCellGrid()->getUSide( KbHorizontal );
|
||||||
|
|
||||||
_sourceU = max ( boundingBox.getXMin(), uside.getVMin());
|
_sourceU = max( boundingBox.getXMin(), uside.getVMin());
|
||||||
_targetU = min ( boundingBox.getXMax(), uside.getVMax());
|
_targetU = min( boundingBox.getXMax(), uside.getVMax());
|
||||||
|
|
||||||
Katabatic::GCell* gcell = track->getKiteEngine()->getGCellGrid()->getGCell ( Point(_sourceU,track->getAxis()) );
|
Katabatic::GCell* gcell = track->getKiteEngine()->getGCellGrid()->getGCell( Point(_sourceU,track->getAxis()) );
|
||||||
Katabatic::GCell* end = track->getKiteEngine()->getGCellGrid()->getGCell ( Point(_targetU,track->getAxis()) );
|
Katabatic::GCell* end = track->getKiteEngine()->getGCellGrid()->getGCell( Point(_targetU,track->getAxis()) );
|
||||||
Katabatic::GCell* right = NULL;
|
Katabatic::GCell* right = NULL;
|
||||||
Interval guside = gcell->getUSide ( Constant::Horizontal /*, true*/ );
|
Interval guside = gcell->getSide( KbHorizontal );
|
||||||
Interval segside ( boundingBox.getXMin(), boundingBox.getXMax() );
|
Interval segside ( boundingBox.getXMin(), boundingBox.getXMax() );
|
||||||
|
|
||||||
if ( gcell ) {
|
if (gcell) {
|
||||||
while ( gcell and (gcell != end) ) {
|
while ( gcell and (gcell != end) ) {
|
||||||
right = gcell->getRight();
|
right = gcell->getRight();
|
||||||
if ( right == NULL ) break;
|
if (right == NULL) break;
|
||||||
|
|
||||||
guside = gcell->getUSide ( Constant::Horizontal /*, true*/ );
|
guside = gcell->getSide( KbHorizontal );
|
||||||
Interval usedLength = guside.getIntersection ( segside );
|
Interval usedLength = guside.getIntersection( segside );
|
||||||
|
|
||||||
gcell->addBlockage ( depth, usedLength.getSize() );
|
gcell->addBlockage ( depth, usedLength.getSize() );
|
||||||
//gcell->addBlockedAxis ( depth, track->getAxis() );
|
//gcell->addBlockedAxis( depth, track->getAxis() );
|
||||||
gcell = right;
|
gcell = right;
|
||||||
}
|
}
|
||||||
if ( end ) {
|
if (end) {
|
||||||
guside = gcell->getUSide ( Constant::Horizontal /*, true*/ );
|
guside = gcell->getSide( KbHorizontal );
|
||||||
Interval usedLength = guside.getIntersection ( segside );
|
Interval usedLength = guside.getIntersection( segside );
|
||||||
|
|
||||||
end->addBlockage ( depth, usedLength.getSize() );
|
end->addBlockage ( depth, usedLength.getSize() );
|
||||||
//end->addBlockedAxis ( depth, track->getAxis() );
|
//end->addBlockedAxis( depth, track->getAxis() );
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
cerr << Warning("TrackFixedSegment(): TrackFixedElement outside GCell grid.") << endl;
|
cerr << Warning("TrackFixedSegment(): TrackFixedElement outside GCell grid.") << endl;
|
||||||
} else {
|
} else {
|
||||||
Interval uside = track->getKiteEngine()->getGCellGrid()->getUSide ( Constant::Vertical );
|
Interval uside = track->getKiteEngine()->getGCellGrid()->getUSide( KbVertical );
|
||||||
|
|
||||||
_sourceU = max ( boundingBox.getYMin(), uside.getVMin());
|
_sourceU = max( boundingBox.getYMin(), uside.getVMin());
|
||||||
_targetU = min ( boundingBox.getYMax(), uside.getVMax());
|
_targetU = min( boundingBox.getYMax(), uside.getVMax());
|
||||||
|
|
||||||
Katabatic::GCell* gcell = track->getKiteEngine()->getGCellGrid()->getGCell ( Point(track->getAxis(),_sourceU) );
|
Katabatic::GCell* gcell = track->getKiteEngine()->getGCellGrid()->getGCell( Point(track->getAxis(),_sourceU) );
|
||||||
Katabatic::GCell* end = track->getKiteEngine()->getGCellGrid()->getGCell ( Point(track->getAxis(),_targetU) );
|
Katabatic::GCell* end = track->getKiteEngine()->getGCellGrid()->getGCell( Point(track->getAxis(),_targetU) );
|
||||||
Katabatic::GCell* up = NULL;
|
Katabatic::GCell* up = NULL;
|
||||||
Interval guside = gcell->getUSide ( Constant::Vertical /*, true*/ );
|
Interval guside = gcell->getSide( KbVertical );
|
||||||
Interval segside ( boundingBox.getYMin(), boundingBox.getYMax() );
|
Interval segside ( boundingBox.getYMin(), boundingBox.getYMax() );
|
||||||
if ( gcell ) {
|
if (gcell) {
|
||||||
while ( gcell and (gcell != end) ) {
|
while ( gcell and (gcell != end) ) {
|
||||||
up = gcell->getUp();
|
up = gcell->getUp();
|
||||||
if ( up == NULL ) break;
|
if (up == NULL) break;
|
||||||
|
|
||||||
guside = gcell->getUSide ( Constant::Vertical /*, true*/ );
|
guside = gcell->getSide( KbVertical );
|
||||||
Interval usedLength = guside.getIntersection ( segside );
|
Interval usedLength = guside.getIntersection( segside );
|
||||||
|
|
||||||
gcell->addBlockage ( depth, usedLength.getSize() );
|
gcell->addBlockage ( depth, usedLength.getSize() );
|
||||||
//gcell->addBlockedAxis ( depth, track->getAxis() );
|
//gcell->addBlockedAxis( depth, track->getAxis() );
|
||||||
gcell = up;
|
gcell = up;
|
||||||
}
|
}
|
||||||
if ( end ) {
|
if ( end ) {
|
||||||
guside = gcell->getUSide ( Constant::Vertical /*, true*/ );
|
guside = gcell->getSide( KbVertical /*, true*/ );
|
||||||
Interval usedLength = guside.getIntersection ( segside );
|
Interval usedLength = guside.getIntersection( segside );
|
||||||
|
|
||||||
end->addBlockage ( depth, usedLength.getSize() );
|
end->addBlockage ( depth, usedLength.getSize() );
|
||||||
//end->addBlockedAxis ( depth, track->getAxis() );
|
//end->addBlockedAxis( depth, track->getAxis() );
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
cerr << Warning("TrackFixedSegment(): TrackFixedElement outside GCell grid.") << endl;
|
cerr << Warning("TrackFixedSegment(): TrackFixedElement outside GCell grid.") << endl;
|
||||||
|
@ -163,7 +153,7 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
void TrackFixedSegment::_postCreate ()
|
void TrackFixedSegment::_postCreate ()
|
||||||
{ TrackElement::_postCreate (); }
|
{ TrackElement::_postCreate(); }
|
||||||
|
|
||||||
|
|
||||||
TrackFixedSegment::~TrackFixedSegment ()
|
TrackFixedSegment::~TrackFixedSegment ()
|
||||||
|
@ -173,7 +163,7 @@ namespace Kite {
|
||||||
void TrackFixedSegment::_preDestroy ()
|
void TrackFixedSegment::_preDestroy ()
|
||||||
{
|
{
|
||||||
ltrace(90) << "TrackFixedSegment::_preDestroy() - " << (void*)this << endl;
|
ltrace(90) << "TrackFixedSegment::_preDestroy() - " << (void*)this << endl;
|
||||||
TrackElement::_preDestroy ();
|
TrackElement::_preDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -182,27 +172,28 @@ namespace Kite {
|
||||||
if ( not _blockageNet ) _blockageNet = Session::getBlockageNet();
|
if ( not _blockageNet ) _blockageNet = Session::getBlockageNet();
|
||||||
|
|
||||||
TrackFixedSegment* trackFixedSegment = NULL;
|
TrackFixedSegment* trackFixedSegment = NULL;
|
||||||
if ( track ) {
|
if (track) {
|
||||||
trackFixedSegment = new TrackFixedSegment ( track, segment );
|
trackFixedSegment = new TrackFixedSegment ( track, segment );
|
||||||
trackFixedSegment->_postCreate ();
|
trackFixedSegment->_postCreate();
|
||||||
Session::addInsertEvent ( trackFixedSegment, track );
|
|
||||||
|
|
||||||
ltrace(190) << "Adding: " << segment << " on " << track << endl;
|
ltrace(190) << "Adding: " << segment << " on " << track << endl;
|
||||||
ltrace(200) << "TrackFixedSegment::create(): " << trackFixedSegment << endl;
|
ltrace(200) << "TrackFixedSegment::create(): " << trackFixedSegment << endl;
|
||||||
|
|
||||||
|
Session::addInsertEvent( trackFixedSegment, track );
|
||||||
|
|
||||||
}
|
}
|
||||||
return trackFixedSegment;
|
return trackFixedSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AutoSegment* TrackFixedSegment::base () const { return NULL; }
|
AutoSegment* TrackFixedSegment::base () const { return NULL; }
|
||||||
bool TrackFixedSegment::isFixed () const { return true; }
|
|
||||||
bool TrackFixedSegment::isBlockage () const { return _isBlockage; }
|
|
||||||
DbU::Unit TrackFixedSegment::getAxis () const { return getTrack()->getAxis(); }
|
DbU::Unit TrackFixedSegment::getAxis () const { return getTrack()->getAxis(); }
|
||||||
bool TrackFixedSegment::isHorizontal () const { return getTrack()->isHorizontal(); }
|
bool TrackFixedSegment::isHorizontal () const { return getTrack()->isHorizontal(); }
|
||||||
bool TrackFixedSegment::isVertical () const { return getTrack()->isVertical(); }
|
bool TrackFixedSegment::isVertical () const { return getTrack()->isVertical(); }
|
||||||
|
bool TrackFixedSegment::isFixed () const { return true; }
|
||||||
unsigned int TrackFixedSegment::getDirection () const { return getTrack()->getDirection(); }
|
unsigned int TrackFixedSegment::getDirection () const { return getTrack()->getDirection(); }
|
||||||
const Layer* TrackFixedSegment::getLayer () const { return _segment->getLayer(); }
|
const Layer* TrackFixedSegment::getLayer () const { return _segment->getLayer(); }
|
||||||
Interval TrackFixedSegment::getFreeInterval ( bool useOrder ) const { return Interval(); }
|
Interval TrackFixedSegment::getFreeInterval () const { return Interval(); }
|
||||||
|
|
||||||
|
|
||||||
unsigned long TrackFixedSegment::getId () const
|
unsigned long TrackFixedSegment::getId () const
|
||||||
|
@ -215,7 +206,7 @@ namespace Kite {
|
||||||
Net* TrackFixedSegment::getNet () const
|
Net* TrackFixedSegment::getNet () const
|
||||||
{
|
{
|
||||||
Net* realNet = _segment->getNet();
|
Net* realNet = _segment->getNet();
|
||||||
if ( realNet->isSupply() or realNet->isClock() )
|
if (realNet->isSupply() or realNet->isClock())
|
||||||
return _blockageNet;
|
return _blockageNet;
|
||||||
return realNet;
|
return realNet;
|
||||||
}
|
}
|
||||||
|
@ -224,14 +215,14 @@ namespace Kite {
|
||||||
TrackElement* TrackFixedSegment::getNext () const
|
TrackElement* TrackFixedSegment::getNext () const
|
||||||
{
|
{
|
||||||
size_t dummy = _index;
|
size_t dummy = _index;
|
||||||
return _track->getNext ( dummy, getNet() );
|
return _track->getNext( dummy, getNet() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackElement* TrackFixedSegment::getPrevious () const
|
TrackElement* TrackFixedSegment::getPrevious () const
|
||||||
{
|
{
|
||||||
size_t dummy = _index;
|
size_t dummy = _index;
|
||||||
return _track->getPrevious ( dummy, getNet() );
|
return _track->getPrevious( dummy, getNet() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,7 +238,7 @@ namespace Kite {
|
||||||
+ " " + DbU::getValueString(_targetU-_sourceU)
|
+ " " + DbU::getValueString(_targetU-_sourceU)
|
||||||
+ " [" + ((_track) ? getString(_index) : "npos") + "] "
|
+ " [" + ((_track) ? getString(_index) : "npos") + "] "
|
||||||
+ "F"
|
+ "F"
|
||||||
+ ((_isBlockage) ? "B" : "-");
|
+ ((isBlockage()) ? "B" : "-");
|
||||||
s1.insert ( s1.size()-1, s2 );
|
s1.insert ( s1.size()-1, s2 );
|
||||||
|
|
||||||
return s1;
|
return s1;
|
||||||
|
@ -256,11 +247,10 @@ namespace Kite {
|
||||||
|
|
||||||
Record* TrackFixedSegment::_getRecord () const
|
Record* TrackFixedSegment::_getRecord () const
|
||||||
{
|
{
|
||||||
Record* record = TrackElement::_getRecord ();
|
Record* record = TrackElement::_getRecord();
|
||||||
record->add ( getSlot ( "_segment", _segment ) );
|
record->add( getSlot( "_segment", _segment ) );
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,35 +12,28 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackMarker.cpp" |
|
// | C++ Module : "./TrackMarker.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
#include <iomanip>
|
#include "hurricane/Bug.h"
|
||||||
#include <sstream>
|
#include "hurricane/Warning.h"
|
||||||
|
#include "hurricane/RoutingPad.h"
|
||||||
#include "hurricane/Bug.h"
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/Warning.h"
|
#include "hurricane/Name.h"
|
||||||
#include "hurricane/RoutingPad.h"
|
#include "crlcore/RoutingGauge.h"
|
||||||
#include "hurricane/Net.h"
|
#include "katabatic/GCell.h"
|
||||||
#include "hurricane/Name.h"
|
#include "kite/TrackMarker.h"
|
||||||
#include "crlcore/RoutingGauge.h"
|
#include "kite/Track.h"
|
||||||
#include "katabatic/GCell.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/TrackMarker.h"
|
#include "kite/Session.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/RoutingEvent.h"
|
||||||
#include "kite/RoutingPlane.h"
|
#include "kite/KiteEngine.h"
|
||||||
#include "kite/Session.h"
|
|
||||||
#include "kite/RoutingEvent.h"
|
|
||||||
#include "kite/KiteEngine.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using std::ostringstream;
|
using std::ostringstream;
|
||||||
|
@ -101,7 +89,7 @@ namespace Kite {
|
||||||
Track* track = rp->getTrackByPosition ( trackSpan.getVMin() );
|
Track* track = rp->getTrackByPosition ( trackSpan.getVMin() );
|
||||||
while ( track && (track->getAxis() <= trackSpan.getVMax()) ) {
|
while ( track && (track->getAxis() <= trackSpan.getVMax()) ) {
|
||||||
Session::addInsertEvent ( this, track );
|
Session::addInsertEvent ( this, track );
|
||||||
track = track->getNext ();
|
track = track->getNextTrack();
|
||||||
_refcount++;
|
_refcount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,7 +127,6 @@ namespace Kite {
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,12 +12,7 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./TrackSegmentCost.cpp" |
|
// | C++ Module : "./TrackSegmentCost.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,22 +12,17 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./Tracks.cpp" |
|
// | C++ Module : "./Tracks.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "kite/Track.h"
|
||||||
#include "kite/Track.h"
|
#include "kite/Tracks.h"
|
||||||
#include "kite/Tracks.h"
|
#include "kite/RoutingPlane.h"
|
||||||
#include "kite/RoutingPlane.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
using std::cerr;
|
using std::cerr;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
using Hurricane::tab;
|
using Hurricane::tab;
|
||||||
|
@ -56,8 +46,8 @@ namespace Kite {
|
||||||
|
|
||||||
_track = routingPlane->getTrackByPosition ( _constraints.getVMin() );
|
_track = routingPlane->getTrackByPosition ( _constraints.getVMin() );
|
||||||
|
|
||||||
if ( _track && (_track->getAxis() < _constraints.getVMin()) ) _track = _track->getNext();
|
if ( _track and (_track->getAxis() < _constraints.getVMin()) ) _track = _track->getNextTrack();
|
||||||
if ( _track && (_track->getAxis() > _constraints.getVMax()) ) _track = NULL;
|
if ( _track and (_track->getAxis() > _constraints.getVMax()) ) _track = NULL;
|
||||||
|
|
||||||
ltrace(147) << "_track: " << _track << endl;;
|
ltrace(147) << "_track: " << _track << endl;;
|
||||||
}
|
}
|
||||||
|
@ -87,8 +77,8 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
if ( !_track ) return;
|
if ( !_track ) return;
|
||||||
|
|
||||||
_track = _track->getNext ();
|
_track = _track->getNextTrack();
|
||||||
if ( _track && (_track->getAxis() > _constraints.getVMax()) ) _track = NULL;
|
if ( _track and (_track->getAxis() > _constraints.getVMax()) ) _track = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -170,12 +160,12 @@ namespace Kite {
|
||||||
if ( _maxTrack->getAxis() > _constraints.getVMax() ) _maxTrack = NULL;
|
if ( _maxTrack->getAxis() > _constraints.getVMax() ) _maxTrack = NULL;
|
||||||
|
|
||||||
if ( _minTrack && !_maxTrack ) {
|
if ( _minTrack && !_maxTrack ) {
|
||||||
_minTrack = _minTrack->getPrevious ();
|
_minTrack = _minTrack->getPreviousTrack();
|
||||||
if ( _minTrack->getAxis() < _constraints.getVMin() ) _minTrack = NULL;
|
if (_minTrack->getAxis() < _constraints.getVMin()) _minTrack = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _maxTrack && !_minTrack ) {
|
if ( _maxTrack && !_minTrack ) {
|
||||||
_maxTrack = _maxTrack->getNext ();
|
_maxTrack = _maxTrack->getNextTrack();
|
||||||
if ( _maxTrack->getAxis() > _constraints.getVMax() ) _maxTrack = NULL;
|
if ( _maxTrack->getAxis() > _constraints.getVMax() ) _maxTrack = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +227,7 @@ namespace Kite {
|
||||||
if ( _onMin ) {
|
if ( _onMin ) {
|
||||||
_onMin = (_maxTrack == NULL);
|
_onMin = (_maxTrack == NULL);
|
||||||
if ( _minTrack ) {
|
if ( _minTrack ) {
|
||||||
_minTrack = _minTrack->getPrevious();
|
_minTrack = _minTrack->getPreviousTrack();
|
||||||
|
|
||||||
if ( _minTrack ) {
|
if ( _minTrack ) {
|
||||||
if ( _minTrack->getAxis() < _optimal.getVMin() ) _inMinOptimal = false;
|
if ( _minTrack->getAxis() < _optimal.getVMin() ) _inMinOptimal = false;
|
||||||
|
@ -248,7 +238,7 @@ namespace Kite {
|
||||||
} else {
|
} else {
|
||||||
_onMin = (_minTrack != NULL);
|
_onMin = (_minTrack != NULL);
|
||||||
if ( _maxTrack ) {
|
if ( _maxTrack ) {
|
||||||
_maxTrack = _maxTrack->getNext();
|
_maxTrack = _maxTrack->getNextTrack();
|
||||||
|
|
||||||
if ( _maxTrack ) {
|
if ( _maxTrack ) {
|
||||||
if ( _maxTrack->getAxis() > _optimal.getVMax() ) _inMaxOptimal = false;
|
if ( _maxTrack->getAxis() > _optimal.getVMax() ) _inMaxOptimal = false;
|
||||||
|
@ -326,4 +316,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Katabatic namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2009, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
|
@ -17,13 +12,10 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./VerticalTrack.cpp" |
|
// | C++ Module : "./VerticalTrack.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include "kite/VerticalTrack.h"
|
#include "kite/VerticalTrack.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
@ -62,7 +54,7 @@ namespace Kite {
|
||||||
|
|
||||||
bool VerticalTrack::isHorizontal () const { return false; }
|
bool VerticalTrack::isHorizontal () const { return false; }
|
||||||
bool VerticalTrack::isVertical () const { return true; }
|
bool VerticalTrack::isVertical () const { return true; }
|
||||||
unsigned int VerticalTrack::getDirection () const { return Constant::Vertical; }
|
unsigned int VerticalTrack::getDirection () const { return KbVertical; }
|
||||||
|
|
||||||
|
|
||||||
Point VerticalTrack::getPosition ( DbU::Unit coordinate ) const
|
Point VerticalTrack::getPosition ( DbU::Unit coordinate ) const
|
||||||
|
@ -80,4 +72,4 @@ namespace Kite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
|
@ -1,34 +1,24 @@
|
||||||
|
// -*- mode: C++; explicit-buffer-name: "Configuration.h<kite>" -*-
|
||||||
// -*- C++ -*-
|
|
||||||
//
|
//
|
||||||
// This file is part of the Coriolis Software.
|
// This file is part of the Coriolis Software.
|
||||||
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
// Copyright (c) UPMC 2008-2013, All Rights Reserved
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | C O R I O L I S |
|
// | C O R I O L I S |
|
||||||
// | K i t e - D e t a i l e d R o u t e r |
|
// | K i t e - D e t a i l e d R o u t e r |
|
||||||
// | |
|
// | |
|
||||||
// | Author : Jean-Paul CHAPUT |
|
// | Author : Jean-Paul CHAPUT |
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./Configuration.h" |
|
// | C++ Header : "./kite/Configuration.h" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __KITE_CONFIGURATION__
|
#ifndef KITE_CONFIGURATION_H
|
||||||
#define __KITE_CONFIGURATION__
|
#define KITE_CONFIGURATION_H
|
||||||
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include "katabatic/Configuration.h"
|
||||||
#include "katabatic/Configuration.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Kite {
|
namespace Kite {
|
||||||
|
@ -47,7 +37,6 @@ namespace Kite {
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "Kite::Configuration".
|
// Class : "Kite::Configuration".
|
||||||
|
|
||||||
|
|
||||||
class Configuration : public Katabatic::Configuration {
|
class Configuration : public Katabatic::Configuration {
|
||||||
public:
|
public:
|
||||||
typedef boost::function< void(void) > PostEventCb_t;
|
typedef boost::function< void(void) > PostEventCb_t;
|
||||||
|
@ -68,6 +57,7 @@ namespace Kite {
|
||||||
~Configuration ();
|
~Configuration ();
|
||||||
// Decorateds.
|
// Decorateds.
|
||||||
virtual bool isGMetal ( const Layer* ) const;
|
virtual bool isGMetal ( const Layer* ) const;
|
||||||
|
virtual bool isGContact ( const Layer* ) const;
|
||||||
virtual size_t getDepth () const;
|
virtual size_t getDepth () const;
|
||||||
virtual size_t getAllowedDepth () const;
|
virtual size_t getAllowedDepth () const;
|
||||||
virtual size_t getLayerDepth ( const Layer* ) const;
|
virtual size_t getLayerDepth ( const Layer* ) const;
|
||||||
|
@ -137,10 +127,10 @@ namespace Kite {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Kite namespace.
|
} // Kite namespace.
|
||||||
|
|
||||||
|
|
||||||
INSPECTOR_P_SUPPORT(Kite::Configuration);
|
INSPECTOR_P_SUPPORT(Kite::Configuration);
|
||||||
|
|
||||||
|
|
||||||
#endif // __KITE_CONFIGURATION__
|
#endif // KITE_CONFIGURATION_H
|
||||||
|
|