<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
Configuration file(s) control the operation of the Opti*Pro modules. These files are analogous in operation to the Pro/ENGINEER "config.pro" files. This appendix describes location, operation, and syntax of the Opti*Pro configuration files.
Configuration files are processed when required by Opti*Pro. For example, they can be modified after exporting a part, even if Pro/ENGINEER and Opti*Pro are still running. The new settings will apply to subsequent exports.

''File Processing Order''

The order of processing of the files is:

#The file "optipro.sup" in the directory "<//proeloadpoint//>/text" is processed first. Any configuration option set in this file can not be superseded by an entry in another configuration file.
#The file "optipro.cfg" located in the user's start-up directory is then processed. This file may be for a specific project.
#The file "optipro.cfg" located in the user's home directory is processed next. This file would contain options pertinent to the user's general work.
#The file "optipro.cfg" in the directory "<//proeloadpoint//>/text" is then processed. This will contain all options for the site that can be overridden by the user.
#Finally, where appropriate, default values will be used for variables which can be specified but are not.
To add a PPI, an entry must be made in both files.

In "optipro_ppi.mnu", to add another item to the menu, eight lines must be added to the file. This is most easily accomplished by copying the last eight lines of the current file and editing the new lines to include the PPI name and help string. The PPI name known to the software is on the "Label" and "Help" lines. In the file below, after copying the last eight lines, change 'THICK' to the new PPI name and change "Part thickness" to the desired help string.

In "ppi.fmt", add a line corresponding to the "optipro_ppi.mnu" file. The PPI name must be identical to the item name known to the software.
Processing of pre-programmed input (PPI) variables can be controlled by modifying files as described below. These files control both the PPI shown in interactive menus as well as those exported.

Two files, "ppi.fmt" and "optipro_ppi.mnu", are used to specify the PPI. The file "ppi.fmt" controls the display and formatting of each of the PPI. The menu file that displays the PPI options for the user is "optipro_ppi.mnu".

As shipped, both files contain all known PPI. They can be modified to process only those PPI needed for use at a given installation. Alternatively, new PPI can be defined.
The most typical modification is to change which PPI are displayed and exported; the "ppi.fmt"option VISIBLE (values YES or NO) is used for this purpose.
When used in batch mode, Opti*Pro must be started when the Pro/ENGINEER session is started. Opti*Pro batch may use the non-graphical mode of Pro/ENGINEER.

To have Opti*Pro start when Pro/ENGINEER is started, the files oppart//nn//.dat and optassy//nn//.dat must have the line which starts with 'delay_start' be 'delay_start false'. Alternatively, these files can be copied and the copied file be edited.

To start Pro/ENGINEER in non-graphical mode, enter the command to start Pro/E, (e.g. proe) followed by '-g:no_graphics' or '/g:no_graphics'. The complete line should look similar to:

//{{{proe -g:no_graphics arguments}}}//

The following is a list of command line arguments and their meanings:

|!Argument|!Meaning|
|+A//assy_file_name//	|Assembly file name|
|+L//log_file_name//	|Log file name (processing log)|
|+O//directory//	|Output file directory name|
|+P//part_file_name//    	|Part model name|
|+S//suspend//	|Suspend file name|
The command line argument "+A//assembly_file_name//" will request that geometric and PPI data be extracted from parts in //assembly_file_name// and be placed in the appropriate output files. This option is available only with Opti*Pro/Assembly. To process assemblies not in the current directory, use the config.pro options search_path or search_path_file.

The command line argument "+L//log_file_name//" will request that a log file be created. For each file processed, the file will contain one line that includes the object name, completion status, and possibly an error message.

The command line argument "+O//directory//" will request that the output files be placed in //directory//. The configuration option "output_directory" can also be used.

The command line argument "+P//part_file_name//" will request that geometric and PPI data be extracted from the file //part_file_name// and be placed in the file //part_file_name//.igs. To process assemblies not in the current directory, use the config.pro options search_path or search_path_file.

The command line argument "+S//suspend//" tells the software that the file //suspend// contains a list of objects to be processed with one object per line. Optionally, pre-programmed inputs can be included as shown in the example:

//<html><span style="font-size: 13px">Suspend File Example</span></html>//
!
wrkcntr=wrkcntr1
grain = n
//part_file_name1//.prt wrkcntr=wrkcntr2 cost=3
//part_file_name2//.prt
//asm_file_name1//.asm
!
Bend lines in sheet metal features are represented by datum axes. Opti*Pro allows processing of bend lines.

Several configuration options control bend line processing. Options allow for automatically selecting the bend lines to be processed.

To specify the axes which are to be processed, [[item_name |item_name]] statements are required. The last field on the item_name statement is a regular expression selecting the bend lines. (See the example below.)

To specify the layers on which the bend lines are exported, a  [[layer|Layer Names and Numbers]] statement is required for each item_name statement.

To use these options in the //''optipro.cfg''// file, the following lines in the file are necessary:

//allow bendline 
item_name bendline 
layer// 

//<html><span style="font-size: 13px">
Bend Line Example:</span></html>//
!
//allow bendline yes
item_name bendline A_[0-9]*F
item_name bendline A_[0-9]*B
layer A_[0-9]*F 3 0 0
layer A_[0-9]*B 4 0 0//

Instruct Opti*Pro/Part that bend lines (sheet metal feature datum axes) whose names match the regular expression "A_[0-9]*F" (e.g. ~A_3F, ~A_49F) are to be exported on layer 3, font 0 and color 0. Similarly, bend lines whose names match "A_[0-9]*B" (e.g. ~A_4B, ~A_27B) are to be exported on layer 4, font 0 and color 0.
!
This option is for use with Opti*Pro/Assembly. Component parts to be exported from the assembly are selected using one or more of the selection criteria:

Name_prefix: All parts having a name which is some characters followed by the assembly name will be selected for export.
Name_suffix: All parts whose names are composed of the assembly name and one or more following characters will be selected for export.
Part_parameter: Opti*Pro/Assembly will select parts based upon a parameter of the specified name and optional values.

To use these options in the //''optipro.cfg''// file, the following lines in the file are necessary:

//assembly_component_selection 
part_parameter//

//<html><span style="font-size: 13px"> Component Selection Example Using Assembly Name Suffix</span></html>//
!
//assembly_component_selection name_suffix//

Instructs Opti*Pro/Assembly to select from the assembly named 'ABCD' parts with names '~ABCD_123' and '~ABCD_456'. Parts with names '123' and '~ABC_1' would not be selected.
!

//<html><span style="font-size: 13px">Component Selection Example Using Parameter</span></html>//
!
//assembly_component_selection part_parameter
part_parameter vendor//

Instruct Opti*Pro/Assembly select all parts containing the part parameter 'vendor' to be selected.
!
The following table shows the correspondence between Pro/ENGINEER version names and the version number used by Opti*Pro.

|!Version Name | !Version Number (nn) |
|Wildfire 4.0 | 27 |
|Wildfire 5.0 | 28 |

Based upon the choices made, the installation program creates the appropriate files in the directories "optipro\text\dat". The files "oppart//nn//.dat" and "opassy//nn//.dat" describe Opti*Pro to Pro/ENGINEER. To tell Pro/ENGINEER where Opti*Pro resides, copy lines from the "config.pro" files in this directory to your "config.pro" file.

Processing of the pre-programmed inputs (PPI) can be controlled by changing two text files. Both of these files are located under the "\//jerand//\optipro\text\usascii" directory. These two files are "ppi.fmt" and "optipro_ppi.mnu". The first file, ppi.fmt, determines the format, range of values, and visibility of each pre-programmed input. To make a PPI visible and exportable, set "VISIBLE=YES". The "optipro_ppi.mnu" contains the menu item name for each PPI and the one line help string.

For further information on the format, modification, or addition of ~PPIs, please refer to Appendix B.

Opti*Pro can invoke Optimation's ~NCExpert. Set the system environment variable ~OPTIPRO_NCEXPERT_PATH to the fully qualified path to the ~NCExpert command. If this variable is set, the ~NCExpert command will be available in the Opti*Pro menu.
The Jerand License Manager is based on the [[Reprise License Manager|http://www.reprisesoftware.com/support/end-users.php]]. A link to the RLM ~End-User manual is installed in C:\Program Files\Jerand\RLM\documentation.

Another environment variable affects the licensing behavior of Opti*Pro. This variable is optional but setting it may improve license availability when multiple users are accessing a limited number of licenses. Under normal operation, a license is taken when Opti*Pro starts and released when the program stops. However, to take and release a license only when the "Export" function is used, set the system environment variable ~JERAND_LIC_DEFER with value of "DEFER."

Obtaining Licenses

The following steps describe how to obtain licenses for Opti*Pro.
#To generate a hostid, use the command //{{{rlmhostid}}}//. It is located by default either in the folder C:\Program Files\Jerand\RLM\i486_nt\obj (32 bit) or C:\Program Files\Jerand\RLM\x86e_win64\obj (64 bit).
#Send the server hostid to Jerand (email: licenses@jerand.com, fax: 1-317-875-6612, or voice: 1-317-875-6087 or 1-888-4JERAND). Jerand will supply the license file by e-mail.
The format of this manual is similar to the manuals which accompany Pro/ENGINEER. The following conventions have been used throughout this manual:

:''Boldface''
::Indicates a menu option. However, it will appear in bold type only when the name refers to the actual option.
:UPPERCASE
::Indicates the name of a menu.
://{{{keyboard}}}//
::Information to be entered using the keyboard appears in this font: //{{{enter this.}}}//
::Characters between the <> symbol indicate a specific key on the keyboard.
://Reference//	
::When referencing other sections of this document or other documentation, the reference will be in italics.
://''Emphasis''//	 
::Information being emphasized will appear in bold italics.
:Mouse
::All mouse clicks assume a mouse configured for right hand operation.
Cosmetic features may be processed by Opti*Pro/Part. Special processing is done for those cosmetic features containing text entities in the section. Substitution will be performed for some text strings when the output file is generated. If the section text is "&parameter", where parameter is the name of a valid part parameter, the value of the parameter will be used. If the section text is "&model_name" or "rel_model_name()", the model name (part name) will be substituted.

A layer statement is required to specify the layer on which the cosmetic marking is exported.

To process cosmetic feature geometry, use these options in the //''optipro.cfg''// file:

//allow cosmetic 
layer OPTI*~PRO_DEFAULT_COSMETIC//


//<html><span style="font-size: 13px">Cosmetic Geometry Example</span></html>//
!
//allow cosmetic yes
layer OPTI*~PRO_DEFAULT_COSMETIC 3 0 0//

Instruct Opti*Pro/Part that cosmetic geometry is to be exported on layer 3, font 0 and color 0. 
!

To process cosmetic feature text, use these options in the //''optipro.cfg''// file:

//allow cosmetic 
layer OPTI*~PRO_DEFAULT_COSMETIC_TEXT//

//<html><span style="font-size: 13px">Cosmetic Text Example</span></html>//
!
//allow cosmetic yes
layer OPTI*~PRO_DEFAULT_COSMETIC_TEXT 4 0 0//

Instruct Opti*Pro/Part that cosmetic text is to be exported on layer 4, font 0 and color 0.
!
//''default_value''// (no default), ''TODAY[+n]''

The default value from the list of values presented in the previous VALUES statement or a value between the minimum and maximum allowable. A default value of TODAY sets the value to today's date in the Optimation format (YYMMDD). If the optional +n (e.g. +2) is present, the date is set to n days past the current date.

//<html><span style="font-size: 13px">DEFAULT Example</span></html>//
!
//{{{DEFAULT=N}}}//
//{{{DEFAULT=13}}}//
!
Datum curve features may be processed by Opti*Pro/Part. [[Layer |Layer Names and Numbers]] statements are required to specify the layers on which the datum curves are to be exported.

To process datum curve feature geometry, use these options in the //''optipro.cfg''// file:

//allow datumcurve 
layer//


//<html><span style="font-size: 13px">Datum Curve Example</span></html>//
!
//allow datumcurve yes
layer OPTI*~PRO_DEFAULT_DATUMCURVE 3 0 0//

Instruct Opti*Pro/Part that datum curve geometry is to be exported on layer 3, font 0 and color 0.
!

Download the software from [[Jerand's web site | http://jerand.com/sw.html]]. Select each product (License Manager and Opti*Pro) desired for the desired operating system and save to disk. Extract each download into its own folder.

Dynamic text marking, also referred to as marking, places into the output file geometry for marking text characters.

Several configuration options control marking. Options allow for specifying the font, the geometry used to locate the marking, and the text string to be marked. During the export step, the user must select references to locate the marking.

To specify the layers on which the marking is exported, [[layer|Layer Names and Numbers]] statements for the layers OPTI*~PRO_DEFAULT_MARKING and OPTI*~PRO_DEFAULT_MARKING_TEXT are used.

A character font must be specified with the marking_font configuration option. A font consists of a Pro/ENGINEER section file for each character, which may be marked, and a section file (template) describing the placement of the characters. One or more fonts can be present. Each font is in a sub-directory whose name is the font name. The font sub-directories are in a directory named "font" which is a sub-directory of the directory specified by the text_dir entry in the optipro*.dat file.

Specify the template to be used with the marking_template configuration option. A template locates the characters to be marked. The template is a Pro/ENGINEER section file consisting of coordinate systems. Origin of the template is determined by the first coordinate system. Characters are then placed on subsequent coordinate systems within the template section.

Text to be marked is specified using the marking_ text configuration option. The string represents a valid right hand side of a relation and is converted to a string.

When the part geometry is exported, the user specifies two perpendicular edges to locate the text. The marking_selection_type and marking_selection_name configuration options control the geometry, which may be selected for the orientation. The part model must contain this feature and it must be placed on the surface being exported.

To use these options in the //''optipro.cfg''// file, the following lines in the file are necessary:

//allow marking 
marking_font 
marking_template 
marking_selection_type 
marking_selection_name 
marking_text// 

//<html><span style="font-size: 13px">Dynamic Text Marking Example</span></html>//
!
//allow marking yes
marking_font font1
marking_template template1 
marking_selection_type UDF
marking_selection_name PN
marking_text part_number+"_"+rev_level//
 
Instruct Opti*Pro/Part that the result of the evaluation of the relation "part_number+"_"+rev_level" will be marked using the character set in font "font1", located by the template "template1" and that the text will be located by the user selecting horizontal and vertical references from the UDF named "pn".
!
//<html><span style="font-size: 13px">Example file "optipro.cfg"</span></html>//
!
{{{!}}}<br />{{{! File: optipro.cfg}}}<br />{{{! Sample file}}}<br />{{{!}}}<br />{{{! Lines starting with ! or # are comments}}}<br />{{{! All lines are case-insensitive}}}<br />{{{!}}}<br />{{{! Specify order to determine orientation for export}}}<br />{{{! Options:}}}<br />{{{!	view (view name)}}}<br />{{{!	csys (coordinate system)}}}<br />{{{!	xyz (use part edges)}}}<br />{{{! options are accumulated over multiple lines & files, and tried in the}}}<br />{{{! order they are encountered.}}}<br />{{{!}}}<br />{{{!view_csys_priority view,csys,surface,xyz}}}<br />{{{view_csys_priority view}}}<br />{{{!}}}<br />{{{! Specify one or more view names}}}<br />{{{view BURN}}}<br />{{{view front, top}}}<br />{{{!}}}<br />{{{! Specify one or more cysts names}}}<br />{{{csys csys0}}}<br />{{{!}}}<br />{{{! Specify one or more surface names}}}<br />{{{!surface named_surf}}}<br />{{{surface first}}}<br />{{{!}}}<br />{{{! Specify flat pattern type}}}<br />{{{! Options:}}}<br />{{{!		generic,}}}<br />{{{!		instance, (flat pattern as specified in family table)}}}<br />{{{!		flat_pattern (last feature is flat pattern or unbend)}}}<br />{{{flat_pattern_type flat_pattern}}}<br />{{{! If instance, specify flat pattern prefix(es) and/or suffix(es)}}}<br />{{{flat_pattern_prefix fl_}}}<br />{{{!flat_pattern_suffix _flat}}}<br />{{{!flat_pattern_template ___* FLP*}}}<br />{{{!flat_pattern_template (......).* $1_F}}}<br />{{{!flat_pattern_template ([A-Z][0-9]).* $1_F}}}<br />{{{!flat_pattern_template ([A-Z])..([0-9][A-Z]).* FLAT_$2$1}}}<br />{{{!}}}<br />{{{! Specify layer numbers for layer names}}}<br />{{{! One or more layer names may specify the same layer number}}}<br />{{{! Maps from the layer name in Pro/E (or one of the special default names}}}<br />{{{! defined below) to the layer id in the IGES output file.}}}<br />{{{!layer layer_name layer_id layer_font layer_color}}}<br />{{{layer OPTI*PRO_DEFAULT_GEOMETRY 1 0 0}}}<br />{{{layer OPTI*PRO_DEFAULT_PPI 2 0 0}}}<br />{{{layer TAP-10-24 10 0 0}}}<br />{{{layer TAP-12-24 12 0 0}}}<br />{{{!}}}<br />
{{{! Specify if output file to be created if part not flat}}}<br />{{{! Allowable values: true, yes, false, no (true = yes, false = no)}}}<br />
{{{!export_not_flat no prevents file from being exported}}}<br />{{{export_not_flat no}}}<br />{{{!}}}<br />{{{! Output directory and filename}}}<br />{{{! Specify directory where exported files are placed}}}<br />{{{!output_directory /output_dir/}}}<br />{{{! Specify how output filname is generated}}}<br />{{{output_filename object_name}}}<br />{{{!output_filename parameter parameter_name}}}<br />{{{!}}}<br />{{{! Assembly component selection}}}<br />{{{!assembly_component_selection name_prefix}}}<br />{{{!assembly_component_selection name_suffix}}}<br />{{{assembly_component_selection sheet_metal}}}<br />{{{!assembly_component_selection part_parameter}}}<br />{{{!}}}<br />{{{!Assembly component selection based on part parameter name}}}<br />{{{part_parameter IN_HOUSE}}}<br />{{{!}}}<br />
{{{!Assembly component selection based on part parameter name and values}}}<br />{{{part_parameter vendor=JERAND,OPTIMATION}}}
!
//<html><span style="font-size: 13px">Example file "ppi.fmt"</span></html>//
!
{{{NAME=PARTNO		TYPE=A32	FUNCTION=PPI_GET_OBJECT_NAME	VISIBLE=PART.}}}
{{{! Get raw material name from Pro/ENGINEER SETUP/MATERIAL}}}
{{{NAME=RAWMAT		TYPE=A32	FUNCTION=PPI_GET_MATERIAL_NAME}}}
{{{VISIBLE=PART.}}}
{{{! Get raw material name from Pro/ENGINEER parameter named MTL}}}
{{{!NAME=RAWMAT		TYPE=A32	PARAMETER=MTL	FUNCTION=PPI_GET_STRING	VISIBLE=PART.}}}
{{{NAME=GRAIN		TYPE=YN	FUNCTION=PPI_GET_YN	VISIBLE=PART.}}}
{{{NAME=WORKCTR	TYPE=A5	FUNCTION=PPI_GET_STRING	VISIBLE=PART.}}}
{{{NAME=REVISIN	TYPE=A5	FUNCTION=PPI_GET_STRING	VISIBLE=PART.}}}
{{{! COMCUT for contour}}}
{{{NAME=COMCUTC	TYPE=A6	FUNCTION=PPI_GET_MENU_NO}}}
{{{RESOURCE=ppi_comcut_contour.res	VALUES=N,P,O,E,I,S;}}}
{{{DEFAULT=N	VISIBLE=NO.}}}
{{{! COMCUT for strip/snip}}}
{{{NAME=COMCUTS	TYPE=A6	FUNCTION=PPI_GET_MENU_NO}}}
{{{RESOURCE=ppi_comcut_strip.res	VALUES=N,L,R;	DEFAULT=N	VISIBLE=NO.}}}
{{{! COMCUT for punch hit}}}
{{{NAME=COMCUTP	TYPE=A6	FUNCTION=PPI_GET_MENU_NO}}}
{{{RESOURCE=ppi_comcut_punch.res	VALUES=N,L,R,T,B;	DEFAULT=N	VISIBLE=NO.}}}
{{{NAME=MIRROR		TYPE=YN	FUNCTION=PPI_GET_YN		VISIBLE=NO.}}}
{{{NAME=RESTRCT	TYPE=YN	FUNCTION=PPI_GET_YN		VISIBLE=NO.}}}
{{{! 180 for one sides}}}
{{{NAME=180		TYPE=A1	FUNCTION=PPI_GET_MENU_NO	RESOURCE=ppi_180_one.res	VALUES=N,L,A;}}}	{{{DEFAULT=N	VISIBLE=PART.}}}
{{{! 180 for multiple sides}}}
{{{NAME=180M		TYPE=A1	FUNCTION=PPI_GET_MENU_NO}}}
{{{RESOURCE=ppi_180_multiple.res	VALUES=N,L,R,A,B;	DEFAULT=N	VISIBLE=PART.}}}
{{{NAME=TOOL		TYPE=A20	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=DIECLR		TYPE=REAL	FUNCTION=PPI_GET_REAL}}}
{{{MIN=0.0000	MAX=9.9999	VISIBLE=NO.}}}
{{{NAME=ORIEN		TYPE=REAL	FUNCTION=PPI_GET_REAL}}}
{{{MIN=0.000	MAX=360.000	VISIBLE=NO.}}}
{{{NAME=ROTATE		TYPE=REAL	FUNCTION=PPI_GET_REAL}}}
{{{MIN=-360.000	MAX=360.000	VISIBLE=PART.}}}
{{{NAME=ALTMAT		TYPE=YN	FUNCTION=PPI_GET_YN	DEFAULT=YES	VISIBLE=NO.}}}
{{{NAME=GANGFRM	TYPE=INT	FUNCTION=PPI_GET_INT}}}
{{{MIN=0	MAX=9999	DEFAULT=1	VISIBLE=PART.}}}
{{{NAME=MAXRUN		TYPE=INT	FUNCTION=PPI_GET_INT}}}
{{{MIN=0	MAX=999999	VISIBLE=NO.}}}
{{{NAME=NAMLOC		TYPE=A25	VISIBLE=NO.}}}
{{{NAME=CLASS		TYPE=A1	FUNCTION=PPI_GET_MENU	RESOURCE=ppi_class.res}}}
{{{VALUES=1,2,3;	DEFAULT=2	VISIBLE=PART.}}}
{{{NAME=MINSPC		TYPE=YN	FUNCTION=PPI_GET_YN		DEFAULT=YES	VISIBLE=PART.}}}
{{{NAME=NOPIERC	TYPE=INT	FUNCTION=PPI_GET_INT	MIN=1	MAX=999	VISIBLE=NO.}}}
{{{NAME=AREA		TYPE=REAL	FUNCTION=PPI_GET_REAL}}}
{{{MIN=0.0	MAX=9999999.9999	VISIBLE=NO.}}}
{{{NAME=KERFSD		TYPE=A1	FUNCTION=PPI_GET_MENU	RESOURCE=ppi_kerf.res	DEFAULT=L	VALUES=L,R;}}}	{{{VISIBLE=NO.}}}
{{{NAME=NUMHOL		TYPE=INT	FUNCTION=PPI_GET_INT	MIN=0	MAX=5	VISIBLE=NO.}}}
{{{NAME=HOLE		TYPE=A28	VISIBLE=NO.}}}
{{{NAME=OFFSET		TYPE=A28	VISIBLE=NO.}}}
{{{NAME=TPATH		TYPE=REAL	FUNCTION=PPI_GET_REAL}}}
{{{MIN=0.0	MAX=999999999.99	VISIBLE=NO.}}}
{{{NAME=BIAS		TYPE=A1	FUNCTION=PPI_GET_MENU	RESOURCE=ppi_bias.res}}}
{{{VALUES=N,P;	VISIBLE=NO.}}}
{{{NAME=SYMQTY		TYPE=A18	VISIBLE=NO.}}}
{{{NAME=MATCHTY	TYPE=A4	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TEXT		TYPE=A20	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TXT16		TYPE=A70	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TXT17		TYPE=A70	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TXT18		TYPE=A70	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TXT19		TYPE=A70	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=TXT20		TYPE=A70	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
{{{NAME=SCALE		TYPE=INT	FUNCTION=PPI_GET_INT	MIN=0	MAX=99999}}}
{{{VISIBLE=NO.}}}
{{{NAME=ORDERNO	TYPE=A30	PARAMETER=DESCRIPTION	FUNCTION=PPI_GET_STRING	VISIBLE=PART,ASSEMBLY.}}}
{{{NAME=ORDDATE	TYPE=INT	FUNCTION=PPI_GET_INT	MIN=0	MAX=999999	DEFAULT=TODAY+1}}}
{{{VISIBLE=PART,ASSEMBLY.}}}
{{{NAME=ORDQTY		TYPE=INT	FUNCTION=PPI_GET_INT	MIN=1	MAX=999999	DEFAULT=1}}}	{{{VISIBLE=PART,ASSEMBLY.}}}
{{{NAME=ORDPRI		TYPE=INT	FUNCTION=PPI_GET_INT	MIN=0	MAX=3	VISIBLE=PART,ASSEMBLY.}}}
{{{NAME=PRTMIR		TYPE=A32	FUNCTION=PPI_GET_STRING	VISIBLE=NO.}}}
!
//<html><span style="font-size: 13px">Example PPI Menu File</span></html>//
!
{{{Opti*Pro.PPI Label}}}
{{{&PPI}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI Help}}}
{{{Opti*Pro: Work with pro-programmed inputs}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.Show#All Label}}}
{{{Show All}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.Show#All Help}}}
{{{Show all PPI (Pro-Programmed Inputs)}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.PARTNO Label}}}
{{{PARTNO}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.PARTNO Help}}}
{{{Part number}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.RAWMAT Label}}}
{{{RAWMAT}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.RAWMAT Help}}}
{{{Raw material name}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.GRAIN Label}}}
{{{GRAIN}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.GRAIN Help}}}
{{{Grain constraint}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.WORKCTR Label}}}
{{{WORKCTR}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.WORKCTR Help}}}
{{{Work center}}}
{{{#}}}
{{{#}}]
{{{Opti*Pro.PPI.REVISIN Label}}}
{{{REVISIN}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.REVISIN Help}}}
{{{Revision level}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.COMCUTC Label}}}
{{{COMCUTC}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.COMCUTC Help}}}
{{{Common cut for contour}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.COMCUTS Label}}}
{{{COMCUTS}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.COMCUTS Help}}}
{{{Common cut for strip/snip}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.COMCUTP Label}}}
{{{COMCUTP}}}
{{{#}}]
{{{#}}}
{{{Opti*Pro.PPI.COMCUTP Help}}}
{{{Common cut for punch}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MIRROR Label}}}
{{{MIRROR}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MIRROR Help}}}
{{{Able to mirror part}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.RESTRCT Label}}}
{{{RESTRCT}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.RESTRCT Help}}}
{{{{Restricted part}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.R180 Label}}}
{{{R180}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.R180 Help}}}
{{{Part may be rotated 180 degrees}}} 
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.R180M Label}}}
{{{R180M}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.R180M Help}}}
{{{Part may be rotated 180 degrees}}} 
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TOOL Label}}}
{{{TOOL}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TOOL Help}}}
{{{Tool name}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.DIECLR Label}}}
{{{DIECLR}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.DIECLR Help}}}
{{{Die clearance}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORIEN Label}}}
{{{ORIEN}}]
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORIEN Help}}}
{{{Tool orientation}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ROTATE Label}}}
{{{ROTATE}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ROTATE Help}}}
{{{Rotation}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ALTMAT Label}}}
{{{ALTMAT}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ALTMAT Help}}}
{{{Alternate material allowed}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.GANGFRM Label}}}
{{{GANGFRM}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.GANGFRM Help}}}
{{{Parts per gang}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MAXRUN Label}}}
{{{MAXRUN}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MAXRUN Help}}}
{{{Maximum run quantity}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NAMLOC Label}}}
{{{NAMLOC}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NAMLOC Help}}}
{{{Name location and orientation}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.CLASS Label}}}
{{{CLASS}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.CLASS Help}}}
{{{Part classification}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MINSPC Label}}}
{{{MINSPC}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MINSPC Help}}}
{{{Minimum spacing allowed}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NOPIERC Label}}}
{{{NOPIERC}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NOPIERC Help}}}
{{{Number of pierces}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.AREA Label}}}
{{{AREA}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.AREA Help}}}
{{{Part area}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.KERFSD Label}}}
{{{KERFSD}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.KERFSD Help}}}
{{{Kerf side}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NUMHOL Label}}}
{{{NUMHOL}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.NUMHOL Help}}}
{{{Number of holes}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.HOLE Label}}}
{{{HOLE}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.HOLE Help}}}
{{{Hole information}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.OFFSET Label}}}
{{{OFFSET}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.OFFSET Help}}}
{{{Offset information}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TPATH Label}}}
{{{TPATH}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TPATH Help}}}
{{{Tool path length}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.BIAS Label}}}
{{{BIAS}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.BIAS Help}}}
{{{Bias}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.SYMQTY Label}}}
{{{SYMQTY}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.SYMQTY Help}}}
{{{Symmetry quantities}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MATCHTY Label}}}
{{{MATCHTY}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.MATCHTY Help}}}
{{{Strip/snip match type}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TEXT Label}}}
{{{TEXT}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TEXT Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT16 Label}}}
{{{TXT16}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT16 Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT17 Label}}}
{{{TXT17}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT17 Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT18 Label}}}
{{{TXT18}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT18 Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT19 Label}}}
{{{TXT19}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT19 Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT20 Label}}}
{{{TXT20}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.TXT20 Help}}}
{{{Text labeling}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.SCALE Label}}}
{{{SCALE}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.SCALE Help}}}
{{{Text labeling scale percentage}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDERNO Label}}}
{{{ORDERNO}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDERNO Help}}}
{{{Order number}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDDATE Label}}}
{{{ORDDATE}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDDATE Help}}}
{{{Order due date}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDQTY Label}}}
{{{ORDQTY}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDQTY Help}}}
{{{Order quantity}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDPRI Label}}}
{{{ORDPRI}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.ORDPRI Help}}}
{{{Order priority}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.PRTMIR Label}}}
{{{PRTMIR}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.PRTMIR Help}}}
{{{Part name to automatically create second part which is mirror image of original}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.THICK Label}}}
{{{THICK}}}
{{{#}}}
{{{#}}}
{{{Opti*Pro.PPI.THICK Help}}}
{{{Part thickness}}}
{{{#}}}
{{{#}}}
!
Opti*Pro/Part allows for an output file to be generated for a part that is not flat. It also can prevent output files from being generated if the selected part is not precisely flat. The flatness_tolerance statement in the //''optipro.cfg''// file controls the measurement tolerance.

#The default option is to prevent an export file from being generated in the case a part is not flat. The following line may be in the //''optipro.cfg''// file to state this explicitly: //{{{export_not_flat no}}}//
#If the user would instead allow non-flat parts to be exported, the following should be placed in the //''optipro.cfg''// file: //{{{export_not_flat yes}}}//

<<<
Note: Only one of the two options may be used. If both are placed in the optipro.cfg file, only the first will affect Opti*Pro's operation.
<<<
The ''Export'' option exports data for the selected parts to individual files.
The ''Export'' option exports the part data to a file. All edge data for the selected surface and all PPI data will be stored in a new file.

The edges that are exported are found by looking at a reference surface and all surfaces that are co-planar to it. Only the edges //''not shared''// between these surfaces are exported: the //''outline''// of the set of co-planar faces is output.

The acceptable types of edges are lines, arcs, ellipses, and B-splines.

There are four steps in this procedure:

On pressing the ''Export'' option the user will be prompted for a file name in which to save the IGES and PPI data. The file ''part_name''.igs will be stored in the output directory specified in the configuration file //''optipro.cfg''//. (See option [[output_directory|Output Directory]].) If no output directory is specified, all exported files will be saved in Pro/ENGINEER's current working directory.

The export surface must be determined. The configuration options in the configuration file //''optipro.cfg''// determine which surfaces are exported and how these surfaces are oriented.

<<<
Note:	If a valid orientation and base surface cannot be determined from the options in the configuration file, the message 'Export Failed' will appear in the message window, and the export will stop.
<<<

Next, Opti*Pro/Part checks to make sure that the part is flat. If the part is not flat, the export will fail unless the ''export_not_flat'' option is set to 'yes' or 'true' in the //''optipro.cfg''// configuration file. (See [[Export Options]] for more on this option.)

If the part passes the previous check, all appropriate edges are exported to the output file, along with all pre-programmed input data. If Opti*Pro/Part cannot write to the specified output directory, the export will fail.

<<<
Note: The ''export_not_flat'' option can be set to 'no' or 'false' to ensure that no non-flat parts are exported accidentally.
<<<
''~PPI_GET_INT''
Prompts the user to type in an integer number.

''~PPI_GET_MATERIAL_NAME''
Extracts the material from the part.

''~PPI_GET_MENU''
Prompts the user to select from the menu named in the MENU statement. The items of the VALUES statement correspond sequentially to the MENU items.

''~PPI_GET_MENU_NO''
Prompts the user to select from the menu named in the MENU statement. The items of the VALUES statement correspond sequentially to the MENU items. One of these values is N, which stands for "no." If N is selected, all of the other possible values will be unselected.

''~PPI_GET_OBJECT_NAME''
Extract the name of the Pro/ENGINEER part or assembly.

''~PPI_GET_PARAMETER_VALUE''
Extract the value of the parameter.

''~PPI_GET_REAL''
Prompts the user to type in a real number.

''~PPI_GET_STRING''
Prompts the user to type in a string.

''~PPI_GET_YN''
Prompts the user to select Yes or No from a menu.

Specifies the function used to obtain the PPI value, from either the Pro/ENGINEER object (''~PPI_GET_MATERIAL_NAME'' and ''~PPI_GET_OBJECT_NAME'') or the user.

<html><span style="font-size: 13px">FUNCTION Example</span></html>//
!
//{{{FUNCTION=PPI_GET_OBJECT_NAME}}}//
!
The ''Flat Check'' option in the main Opti*Pro menu checks the current part to be sure that it is flat. First, Opti*Pro selects a 'base' surface; a surface that Opti*Pro will use as a reference for Flat Check calculations. This surface is generally the largest surface in the part, or can be set using the options in the //''optipro.cfg''// configuration file. (See [[Orientation Priority]].) Once this surface has been determined, the Flat Check routine examines the part for flatness.

A part is considered to be 'flat' if all other faces or surfaces are either parallel or perpendicular to the determined surface at all points.

If both of these conditions are met, then the part is considered to be 'flat'. Otherwise, the message 'Part is NOT flat' will appear in the message window at the bottom of the screen.

This process may take several seconds.
This option is for use mainly in the batch mode of Opti*Pro/Part and in both interactive and batch modes for Opti*Pro/Assembly. When running Opti*Pro/Part interactively, the currently displayed part will be exported. However, if running batch files with the software, the flat pattern options allow the program to recognize and use various instances or suppressed features for correct export.

There are three options for this configuration.

#Flat Pattern: The program will be alerted that there may be either a flat pattern or unbend feature as the last feature in the part and that the feature may be suppressed. Opti*Pro/Part will resume the feature, if necessary, before the part is exported.
#Generic: Opti*Pro will use the generic part for export.
#Instance: Opti*Pro will use a specific instance of the part's family table for export.
The instances are identified by prefix(es) and/or suffix(es), and/or template(s). For example, if the generic part was named 'sheet.prt', and the prefix is 'fl_', the instance retrieved would be 'fl_sheet'. The user can enter into the //''optipro.cfg''// any prefix or suffix.

To use these options in the //''optipro.cfg file''//, the following lines in the file are necessary:

//flat_pattern_type flat_pattern_prefix prefix flat_pattern_suffix suffix flat_pattern_template suffix//

//<html><span style="font-size: 13px">Flat Pattern Type Example 1</span></html>//
!
//{{{flat_pattern_type instance flat_pattern_suffix _flat}}}// 

Instructs Opti*Pro/Part to find an instance of the current part whose name is partname_flat. 
!

//<html><span style="font-size: 13px">Flat Type Example 2</span></html>//
!
//{{{flat_pattern_type flat_pattern}}}// 

Instructs Opti*Pro to resume the flat pattern feature in the part before exporting.
!
Opti*Pro configuration files are case insensitive. Blanks, commas, or tabs may delimit fields. Comment lines are indicated by either a '!' or a '#' in the first column on the line. When multiple values are allowed, they may be placed on one or more statements.
The options for choosing what PPI to include and display are specified in the "ppi.fmt" file. Each PPI item is described on a line ending with a period followed by a carriage return. Each PPI item has a NAME, TYPE, and associated FUNCTION. If desired, MENU, VALUES, DEFAULT, MIN, and MAX statements can be used to collect and limit the input. PPI can be VISIBLE or not.
Two methods are available to specify the direction of the grain. The first method uses a coordinate system whose name has been set to "GRAIN". Grain direction is then specified by the x-axis of this coordinate system. The second method uses a cosmetic line with the feature name set to "GRAIN". Grain direction is specified by the line.

To control how the grain direction is exported, a [[layer|Layer Names and Numbers]] statement must be included. The default layer name "OPTI*~PRO_DEFAULT_GRAIN" may be used.
Copy the license file to the default folder C:\Program Files\Jerand\RLM\license.
The following steps describe how to install Opti*Pro and the Jerand License Manager.

<<<
Note:	Administrator privileges are needed for the installation of the license manager. All other products can be installed with user privileges.
<<<

For each product to be installed, run 'setup.exe' from the folder into which the files were extracted. A product directory will be created under the folder specified. For example, when installing Opti*Pro, choosing the default folder C:\Program Files\Jerand will create a folder C:\Program Files\Jerand\optipro for the software.

When installing Opti*Pro, you will need the host name of the license server and the port which the license manager is using. The default port number is 5053.


Opti*Pro/Part can be used interactively in either sheet metal or part modes while Opti*Pro/Assembly can be used interactively in assembly mode.

If either Opti*Pro/Part or Opti*Pro/Assembly is set to start automatically, the ''Opti*Pro'' menu item appears on the menu bar. Items on the ''Opti*Pro'' menu are enabled based upon the type of object (e.g. part, assembly, drawing) in the current window.


<html><span style="font-size: 16px">Starting and Stopping Opti*Pro</span></html>

Opti*Pro can be started and stopped either automatically or manually.

Statements in the files //''oppartnn.dat''// and //''opassynn.dat''// control when Opti*Pro can start and stop with respect to the Pro/ENGINEER session (see "[[Configuring Opti*Pro]]"). If the Opti*Pro module is not running, use the ''Tools/Auxiliary Application/Start'' command at any time during the Pro/ENGINEER session to start it. To stop the module and release the license, use the ''Tools/Auxiliary Application/Stop'' command at any time during the session while Opti*Pro is running.

If the environment variable ~JERAND_LIC_DEFER has a value of "DEFER", Opti*Pro will start. Otherwise, if there is a license available for use, then the Opti*Pro module will start. If there are no licenses available, then Opti*Pro will refuse to start, and a message will appear in the message window stating that no licenses were available for use.

An Opti*Pro/Part license may be active when either Opti*Pro/Part or Opti*Pro/Assembly is running. An Opti*Pro/Assembly license is active when Opti*Pro/Assembly is running.

<html><span style="font-size: 16px">Opti*Pro/Part Main Menu Structure</span></html>

Opti*Pro/Part enables up to five items on the Opti*Pro menu: ''Export'', ''Flat Check'', ''~NCExpert'', ''PPI'', and ''Support Info''.

<<tabs tabsClass
Export "Export" [[Export Pro/Part]] 
"Flat Check" "Flat Check Pro/Part"  [[Flat Check Pro/Part]]
NCExpert "~NCExpert Pro/Part" [[NCExpert Pro/Part]]
PPI "PPI Pro/Part" [[PPI Pro/Part]]
"Support Info" "Support Info Pro/Part" [[Support Info Pro/Part]]

>>

<html><span style="font-size: 16px">Opti*Pro/Assembly Main Menu Structure</span></html>

Opti*Pro/Assembly enables four items on the Opti*Pro menu: ''Export'', ''~NCExpert'', ''PPI'', and ''Support Info''.

<<tabs tabsClass
Export "Export" [[Export Pro/Assembly]] 
NCExpert "~NCExpert Pro/Assembly" [[NCExpert Pro/Assembly]]
PPI "PPI Pro/Assembly" [[PPI Pro/Assembly]]
"Support Info" "Support Info Pro/Assembly" [[Support Info Pro/Assembly]]

>>
This manual describes the Opti*Pro for Pro/ENGINEER family of products consisting of Opti*Pro/Part and Opti*Pro/Assembly.

Opti*Pro/Part provides an interface from Pro/ENGINEER sheet metal mode or part mode to the Optimation family of CAM products.

Opti*Pro/Part operates on a Pro/ENGINEER part that is flat or for which a flat pattern exists. Configuration options inform the software about the part's orientation, how flat patterns are defined, layer definitions, and pre-programmed input.

Opti*Pro/Assembly provides an interface from Pro/ENGINEER assembly mode.

Opti*Pro/Assembly operates on a Pro/ENGINEER assembly model. Based upon user configuration options, it decides which parts in the assembly will be exported.

Opti*Pro modules can be invoked either interactively or non-interactively. The interactive user interface maintains the Pro/ENGINEER look and feel.

When Opti*Pro/Part is invoked interactively, the designer retrieves the flat part. He can then determine if the part is indeed flat. Pre-programmed input (PPI) can be assigned; part number and material are extracted from the model. Finally, the part geometry and PPI are exported to the Optimation products.

Opti*Pro/Part can be invoked non-interactively by utilizing a non-graphics session of Pro/ENGINEER. Opti*Pro first retrieves the specified flat parts. It then extracts PPI from the part model and assigns PPI from the suspend file. Finally, the part geometry and PPI are exported to the Optimation product.
Item specifications tell the program how to interpret certain features including threads and user defined features (~UDFs). The types of items currently supported are: bend lines, counterbores, countersinks, punches, tools, and threads. The statement must include the item type and a unique item name. For bend lines, the item name may be a regular expression.

To control how each item is exported, [[layer|Layer Names and Numbers]] statements may be included for each item name. The layer name must be the same as the item name.

To use these options in the //''optipro.cfg''// file, the following lines in the file are necessary:

//{{{item_name}}}// 

//<html><span style="font-size: 13px">Item Specification Example</span></html>//
!
//{{{item_name thread 1-4_20-UNC-2A}}}//

Instructs Opti*Pro/Part that the UDF named "1-4_20-~UNC-2A" is a thread.
!
Opti*Pro/Part allows the user to specify various layers and specific id numbers in the //''optipro.cfg''// file so that these id numbers may be exported with geometric information and pre-programmed inputs (PPI's). The 'named' layers are mapped from the layer 'name' of Pro/ENGINEER to a layer number of IGES so that the id number can be exported with the exported IGES files. To include layer names and layer ids, the following information is needed:

#Layer Name
#Layer id number
#Layer font
#Layer color
It is possible for a layer 'name' to have more than one layer id number. That is, a Pro/ENGINEER layer can be mapped to more than one layer number.

Several default layers are in the supplied //''optipro.cfg''// example file.

//<html><span style="font-size: 13px">
Layer Names and Numbers Example:</span></html>//
!
//{{{layer GEOM 19 3 8}}}//

Instructs Opti*Pro to export a layer in the Pro/ENGINEER model named "GEOM" to layer number 19, font number 3, and color number 8.
!
//''maximum_value''// (no default)

The highest possible value for the PPI being described.

//<html><span style="font-size: 13px">MAX Example</span></html>//
!
//{{{MAX=9.9999}}}//
!
//''minimum_value''// (no default)

The lowest possible value for the PPI being described.

//<html><span style="font-size: 13px">MIN Example</span></html>//
!
//{{{MIN=0}}}//
!
[[Table of Contents]]
''//~PPI_name//'' (no default)
This names the PPI to be displayed or formatted as specified by the rest of the line.

//<html><span style=13px font>NAME Example</span></html>//
!
//{{{NAME=PARTNO}}}//
!
When the ''~NCExpert'' menu item is selected, the ''Export'' processing is performed and then a batch or script file is invoked. Typically, Optimation's ~NCExpert module is started. The batch file is specified by the environment variable '~OPTIPRO_NCEXPERT_PATH'. If this variable is not set, the menu item will not be displayed. The name of the output file created by the export processing is passed as the first argument.
When the ~NCExpert menu item is selected, the Export processing is performed and then a batch or script file is invoked. Typically, Optimation's ~NCExpert module is started. The batch file name is specified by the environment variable '~OPTIPRO_NCEXPERT_PATH'. If this variable is not set, the menu item will not be displayed. The name of the output file created by the export processing is passed as the first argument.
The following steps describe how to obtain licenses for Opti*Pro.
#To generate a hostid, use the command  //{{{rlmhostid}}}//. It is located in the default folder C:\Program Files\Jerand\RLM\i486_nt\obj (32 bit) or C:\Program Files\Jerand\RLM\x86e_win64\obj (64 bit).
#Send the hostid to Jerand (email: licenses@jerand.com, fax: 1-317-875-6612, or voice: 1-317-875-6087 or 1-888-4JERAND). Jerand will supply the license file by e-mail.
Orientation priority gives Opti*Pro/Part instructions on how to orient the part during the export process. There are five methods that Opti*Pro may use to determine orientation.

#Orient Using View Names. A preferred method. The user must create the view name(s) in the Pro/ENGINEER model, and the names of these views must be entered into the optipro.cfg file (see example below).
#Using Coordinate System. Once a coordinate system has been created in the part, Opti*Pro/Part can swiftly orient the part with respect to that coordinate system. The 'z' direction should be normal to the base surface and the xy-plane should be parallel to the base surface. The user must enter the name of that coordinate system into the optipro.cfg file (see example below).
#Orient Using Surface Names. The user must assign names to surface(s) in the Pro/ENGINEER model, and the names of these surfaces must be entered into the optipro.cfg file (see example below).
#Orient Using Current Orientation. The user must interactively orient the Pro/ENGINEER model on the screen.
#Use part dimensions. First, Opti*Pro finds the largest surface on the part. Then, the longest edge on that surface is assigned to be the 'x' direction. Next, the normal of that surface is assigned to be the 'z' direction. Using this technique, Opti*Pro/Part can quickly and easily orient any part. This is the default selection. However, the procedure is not perfect.

The exported surfaces will have the following properties:
#The surfaces will be parallel to the screen.
#The exported surfaces will have an outward normal that points out of the screen.
#The largest surface that satisfies (1) and (2) will be the 'base' surface. The base surface and all surfaces that are co-planar to it will be exported.

To use these options in the //''optipro.cfg''// file, the following lines in the file are necessary:

//{{{view_csys_priority view csys surface xyz screen}}}//

For //view_csys_priority//, the user can choose between (a) view, (b) csys, (c) surface, (d) xyz, (e) screen, or any desired combination.

//<html><span style="font-size: 13px">Orientation Priority Example</span></html>//
!
//view_csys_priority view,csys 
view FRONT 
csys ~CS0 
view TOP//

Instruct Opti*Pro to orient in the following order:
#the view whose name is "FRONT"
#the view whose name is "TOP"
#the coordinate system whose name is "~CS0"

<<<
Note:	This tells Opti*Pro to look for //all// views first, then //all// coordinate systems
<<<
!

''<html><span style="font-size: 16px">Opti*Pro/Part's Part Orientation Processing</span></html>''

In the above example, Opti*Pro/Part would first search for a view named FRONT for orientation. If no such view was found, it would then look for a view named TOP. If this was not found, it would attempt to find the coordinate system ~CS0.

''<html><span style="font-size: 16px">Notes on 'xyz' selections</span></html>''

In the previous example, the option //xyz// was not selected. If Opti*Pro/Part had been unable to find FRONT, TOP, or ~CS0, then a warning message would have been displayed, and the export would have failed. In order to have Opti*Pro orient using the xyz default, the 'xyz' trigger must be stated in the //view_csys_priority// line of //''optipro.cfg''//.

If no //view_csys_priority// line is in the //''optipro.cfg''// file, then the software will use the 'xyz' orientation by default.
The user may specify the directory to which output files will be written. By specifying the output directory, the current working directory need not become exceedingly cluttered with many output files. To control this option with Opti*Pro/Part, the following must be placed into the //''optipro.cfg''// file:

//{{{output_directory /output_dir/}}}//

where output_dir refers to the name of the output directory. This directory must exist on the user's file system. If the directory is not created before export is attempted, an error message will appear and no export will be done.

The full path to the output directory should be included. If the full path name of the output directory is not included, then the current working directory within Pro/ENGINEER will be the parent directory for the output directory.

If no output directory is specified, then all outputs will be written to the current Pro/ENGINEER working directory.

//<html><span style="font-size: 13px">Output Directory Absolute Path Example</span></html>//
!
//{{{output_directory f:\work\opti\project1\output\}}}//

Instructs Opti*Pro that the output directory will //''always''// be f:\work\opti\project1\output\.
!

//<html><span style="font-size: 13px">Output Directory Relative Path Example</span></html>//
!

//{{{output_directory output}}}//
Pro/ENGINEER working directory: e:\projects\project1\main

Instructs Opti*Pro to use the output directory e:\projects\project1\main\output.

In this example, the output directory will be relative to the Pro/ENGINEER working directory. If the user changes working directories in Pro/ENGINEER, then a new directory must be created for output. If an invalid directory is specified, an error message will appear and no export will take place.
!
The user may specify the name of the output file using one of three methods. All output files use the ".igs" extension. The output file name may be either the object (part) name, the value of a parameter, or the result of a relation. By default, the output file name is the name of the Pro/ENGINEER part.

//<html><span style="font-size: 13px">Output File Name Using Parameter Example</span></html>//
!
//{{{output_filename parameter part_number}}}//

Instructs Opti*Pro to name the output file using the value of the parameter "part_number".
!

//<html><span style="font-size: 13px">Output File Name Using Relation Example</span></html>// (relation)
!
//{{{output_filename relation part_number+"_"+rev_level}}}//

Instructs Opti*Pro to name the output file using the result of evaluating the relation.
!
//''parameter_name''// (no default)
This specifies the model parameter used to set the initial value of the PPI.

//<html><span style="font-size: 13px">PARAMETER Example</span></html>//
!
//{{{PARAMETER=MATERIAL}}}//
!
When the PPI menu item is selected, a listing of all current ~Pre-Programmed Inputs will be shown. The user may then select each item individually in order to change the values of these inputs.

The ''Show All'' item at the bottom of the PPI menu will bring up a message window that displays all the PPI's and their current values.

The ''Reset All'' item at the bottom of the PPI menu will reset all values.

<<<
Note: The PPI variable "GANGFRM" in the assembly contains the quantity of the assembly required for the order. This value is multiplied by the number of occurrences of each part in order to determine the total number required for each part; this value is placed in the "GANGFRM" variable for each part. "GANGFRM" must be visible for this function to work.
<<<
When the PPI menu item is selected, a listing of all current ~Pre-Programmed Inputs will be shown. The user may then select each item individually in order to change the values of these inputs.

The ''Show All'' item at the top of the PPI menu will bring up a message window that displays all the PPI's and their current values.

The ''Reset All'' item at the top of the PPI menu will reset all values.


<div id='header'>
<div id='titleLine'>
<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='sidebar'>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div><div id="licensePanel">
<a rel="license" href="http://shared.snapgrid.com/gtd_tiddlywiki.html#RevisionHistory" target="_new">GTDTW Version <span macro="version"></span></a>
<a rel="license" href="http://www.tiddlywiki.com" target="_new">
TiddlyWiki is published by Jeremy Ruston at Osmosoft under a BSD open source license</a>
<a rel="license" href="http://snapgrid.com" target="_new">GTD TiddlyWiki is a modification by Nathan Bowers at Snapgrid under the same license terms.</a>
<a rel="license" href="http://davidco.com" target="_new">"Getting Things Done" is &#169; David Allen at Davidco. Davidco has no affiliation with TiddlyWiki or GTD TiddlyWiki.</a></div></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
//''relation_right_hand_side''// (no default)
This specifies the right hand side of a relation used to set the initial value of the PPI.

//<html><span style="font-size: 13px">RELATION Example</span></html>//
!
//{{{RELATION=MATERIAL+"-"+THK}}}//
!
''resource_name'' (no default)

The name of the resource file to be used by Pro/ENGINEER for prompting the user. The resource names used here are supplied already. You can add other resources by putting .res files in the optipro\text\usascii\resource directory. Each RESOURCE statement must have a corresponding VALUES statement. Any combination of the items may be selected, except that if ''~PPI_GET_MENU_NO'' was used and N ("no") is selected, all other items will be unselected.

<html><span style="font-size: 13px">RESOURCE Example</span></html>//
!
//{{{RESOURCE=ppi_comcut_contour.res}}}//
!
User Guide
Opti*Pro^^<html><span style="font-size: 12px">TM</span></html>^^ for Pro/ENGINEER^^<html><span style="font-size: 12px">®</span></html>^^
/***
!GTD Style
http://tiddlystyles.com/#theme:GTD

!Generic rules /%==================================================================== %/
***/
/*{{{*/
body {
 background: #464646 url('http://shared.snapgrid.com/images/tiddlywiki/bodygradient.png') repeat-x top fixed;
 color: #000;
 font: .82em/1.25em "Bitstream Vera Sans", Verdana, Helvetica, Arial, sans-serif;
/*"Lucida Sans Unicode", "Lucida Grande","Trebuchet MS", */
}
/*}}}*/
/***
!Header rules /%====================================================================== %/
***/
/*{{{*/
#contentWrapper
{
 margin: 0 auto;
width: 59em;
position: relative;
}

#header
{
 color: #fff;
 padding: 1.5em 1em .6em 0;
}

#siteTitle {

 font-size: 2.3em;
 margin: 0;
}

#siteSubtitle {
 font-size: 1em;
 padding-left: .8em;;
}

#titleLine{
 background: transparent;
 padding: 0;
}

#titleLine a {
 color: #cf6;
}

#titleLine a:hover {
 background: transparent;
}
/*}}}*/
/***
!Sidebar rules /%====================================================================== %/
***/
/*{{{*/
#sidebar{
 left: 0;
width: 18em;
 margin: .9em .9em 0 0;
 color: #000;
 background: transparent;
}
/*}}}*/
/***
!Main menu rules /%=================================================================== %/
***/
/*{{{*/
#mainMenu{
 position: static;
 width: auto;

 background: #600;
 border-right: 3px solid #500;
padding: 0;
 text-align: left;
 font-size: 1em;
}

#mainMenu h1{
 padding: 5px;
 margin: 0;
 font-size: 1em;
 font-weight: bold;
 background: transparent;
 color: #fff;
}

#mainMenu ul{
 padding: 0;
 margin: 0;
 list-style: none;
}

#mainMenu h1 a,
#mainMenu li a,
#mainMenu li a.button{
 display: block;
 padding: 0 5px 0 10px;
border: 0;
 border-bottom: 1px solid #500;
 border-top: 1px solid #900;
margin: 0;
}

#mainMenu a,
#mainMenu a.button{
 height: 22px;
height: 1.83em;
 line-height: 22px;
 color: #fff;
 background: #700;
margin-left: 1em;
}

#mainMenu a:hover,
#mainMenu a.button:hover {
 background: #b00;
 color: #fff;
}
/*}}}*/
/***
!Sidebar options rules /%============================================================ %/
***/
/*{{{*/
#sidebarOptions {
 background: #eeb;
 border-right: 3px solid #bb8;
 color: #B4C675;
 padding: .5em 0;
}

#sidebarOptions a {
 color: #700;
 margin: .2em .8em;
 padding: 0;
 border: 0;
}

#sidebarOptions a:hover, #sidebarOptions a:active {
 color: #fff;
 background: #700;
 border: 0;
}

#sidebarOptions input{
 margin: 2px 10px;
 border: 1px inset #333;
padding: 0;
}

#sidebarOptions .sliderPanel {
 background: #fff;
 color: #000;
 padding: 5px 10px;
 font-size: .9em;
}

#sidebarOptions .sliderPanel a{
 font-weight: normal;
 margin: 0;
}

#sidebarOptions .sliderPanel a:link,#sidebarOptions .sliderPanel a:visited {
 color: #700;
}

#sidebarOptions .sliderPanel a:hover,#sidebarOptions .sliderPanel a:active {
 color: #fff;
 background: #700;
}
/*}}}*/
/***
!Sidebar tabs rules /%===================================================================== %/
***/
/*{{{*/
#sidebarTabs {
 background: transparent;
 border-right: 3px solid #740;
 border-bottom: 3px solid #520;
 border: 0;
 padding: 0;
}

#contentWrapper #sidebarTabs a,
#contentWrapper #displayArea .tabContents a{
 color: #fff;
}

#contentWrapper #sidebarTabs a:hover,
#contentWrapper #displayArea .tabContents a:hover {
 background: #000;
 color: #fff;
}

#contentWrapper #sidebarTabs a:active,
#contentWrapper #displayArea .tabContents a:active{
 color: #000;
}



#contentWrapper .tabSelected {
 background: #960;
}

#contentWrapper .tabUnselected{
 background: #660;
}

#contentWrapper #sidebar .tabset{
 background: #eeb;
 border-right: 3px solid #bb8;
 padding: 0 0 0 .75em;
}

#contentWrapper .tabContents{
font-size: .95em;
background: #960;
border:0;
 border-right: 3px solid #740;
 border-bottom: 3px solid #520;
 padding: .75em;
}

#contentWrapper .tabContents{
 width: auto;
}

#contentWrapper #sidebarTabs .tabContents .tabset,
#contentWrapper .tabContents .tabset{
 border: 0;
 padding: 0;
 background: transparent;
}

#contentWrapper .tabContents .tabSelected,
#contentWrapper .tabContents .tabContents {
 background: #700;
 border: 0;
}

#contentWrapper .tabContents .tabUnselected {
 background: #440;
}

#contentWrapper .tabset a {
 color: #fff;
 padding: .2em .7em;
 margin: 0 .17em 0 0;
 height: 2em;
position: static;
}

#contentWrapper .tabset a:hover {
 background: #000;
 color: #fff;
}

#contentWrapper .tabset a:active {
 color: #000;
}

#contentWrapper .tabContents ul{
 margin: 0;
 padding: 0;
 list-style: none;
}

#contentWrapper .tabContents .tabContents ul{
 color: #eeb;
}

.tabContents ul a,
.tabContents ul .button{
 color: #fff;
 display: block;
 padding: .1em 0 .1em .7em;
 background: transparent;
 border: 0;
}

.tabContents ul a:hover {
 color: #fff;
 background: #000;
}
/*}}}*/
/***
!License panel rules /%==================================================================== %/
***/
/*{{{*/
#licensePanel {
 padding: 0px 1em;
 font-size: .9em;
}

#licensePanel a {
 color: #960;
 display: block;
 margin-top: .9em;
}

#licensePanel a:hover {
 color: #fff;
 background: transparent;
}
/*}}}*/
/***
!Popup rules /%================================================================= %/
***/
/*{{{*/
.popup {
 font-size: .8em;
 padding: 0em;
 background: #333;
 border: 1px solid #000;
}

.popup hr {
 margin: 1px 0 0 0;
 visibility: hidden;
}

.popup li.disabled {
 color: #666;
}

.popup li a,
.popup li a:visited{
 color: #000;
 border: .1em outset #cf6;
 background: #cf6;
}

.popup li a:hover {
border: .1em outset #cf6;
 background: #ef9;
 color: #000;
}
/*}}}*/
/***
!Message area rules /%================================================================= %/
***/
/*{{{*/
#messageArea{
 font-size: .9em;
 padding: .4em;
 background: #FFE72F;
 border-right: .25em solid #da1;
 border-bottom: .25em solid #a80;

position: fixed;
 top: 10px;
 right: 10px;
 color: #000;
}

#contentWrapper #messageArea a{
 color: #00e;
 text-decoration: none;
}

#contentWrapper #messageArea a:hover{
 color: #00e;
 text-decoration: underline;
 background: transparent;
}

#contentWrapper #messageArea .messageToolbar a.button{
 border: 1px solid #da1;
}

#contentWrapper #messageArea .messageToolbar a.button:hover{
 color: #00e;
 text-decoration: none;
 border: 1px solid #000;
 background: #fff;
}



/*}}}*/
/***
!Tiddler display rules /%================================================================== %/
***/
/*{{{*/
#displayArea {
 width: 39.75em;
 margin: 0 0 0 17em;
}

.tiddler {
 margin: 0 0 .9em 0;
 padding: 0 1em;
 border-right: .25em solid #aaa;
 border-bottom: .25em solid #555;
 background: #fff;
}

.title {
 font-size: 1.5em;
 font-weight: bold;
 color: #900;
}

.toolbar {
 font-size: .8em;
 padding: .5em 0;
}

.toolbar .button{
 padding: .1em .3em;
 color: #000;

 border: .1em outset #cf6;
 background: #cf6;
margin: .1em;
}

.toolbar .button:hover {
 background: #ef9;
 color: #000;
}

.toolbar .button:active {
 background: #ff0;
}

/*}}}*/
/***
!Viewer rules /% ------------------------------------------------------------------------------------------ %/
***/
/*{{{*/
.viewer {
 line-height: 1.4em;
 font-size: 1em;
}

.viewer a:link, .viewer a:visited {
 color: #15b;
}

.viewer a:hover {
 color: #fff;
 background: #000;
}

.viewer .button{
 background: transparent;
 border-top: 1px solid #eee;
 border-left: 1px solid #eee;
 border-bottom: 1px solid #000;
 border-right: 1px solid #000;
}

.viewer .button:hover{
 background: #eee;
 color: #000;
}

.viewer .button:active{
 background: #ccc;
 border-bottom: 1px solid #eee;
 border-right: 1px solid #eee;
 border-top: 1px solid #111;
 border-left: 1px solid #111;
}


.viewer blockquote {
 border-left: 3px solid #777;
 margin: .3em;
 padding: .3em;
}

.viewer pre{
 background: #fefefe;
 border: 1px solid #f1f1f1;
}

.viewer pre, .viewer code{
 color: #000;
}

.viewer ul {
 padding-left: 30px;
}

.viewer ol {
 padding-left: 30px;
}
ul{
list-style-type: asquare;
}
ol{ 
 list-style-type: decimal;
}

ol ol{ 
 list-style-type: lower-alpha;
}

ol ol ol{ 
 list-style-type: lower-roman;
}

.viewer ul, .viewer ol, .viewer p {
 margin: .0;
}

.viewer li {
 margin: .2em 0;
}

h1,h2,h3,h4,h5,h6 {
 color: #000;
 font-weight: bold;
 background: #eee;
 padding: 2px 10px;
 margin: 5px 0;
}

.viewer h1 {font-size: 1.3em;}
.viewer h2 {font-size: 1.2em;}
.viewer h3 {font-size: 1.1em;}
.viewer h4 {font-size: 1em;}
.viewer h5 { font-size: .9em;}
.viewer h6 { font-size: .8em;}

.viewer table {
 border: 2px solid #303030;
 font-size: 11px;
 margin: 10px 0;
}

.viewer th, .viewer thead td{
 color: #000;
 background: #eee;
 border: 1px solid #aaa;
 padding: 0 3px;
}

.viewer td {
 border: 1px solid #aaa;
 padding: 0 3px;
}

.viewer caption {
 padding: 3px;
}

.viewer hr {
 border: none;
 border-top: dotted 1px #777;
 height: 1px;
 color: #777;
 margin: 7px 0;
}

.viewer
{
 margin: .5em 0 0 0;
 padding: .5em 0;
 border-top: 1px solid #ccc;
}

.highlight {
 color: #000;
 background: #ffe72f;
}
/*}}}*/
/***
!Editor rules /% ----------------------------------------------------------------------------------------- %/
***/
/*{{{*/
.editor {
 font-size: .8em;
 color: #402C74;
 padding: .3em 0;
}

.editor input, .editor textarea {
 font: 1.1em/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;
 margin: 0;
 border: 1px inset #333;
 padding: 2px 0;
}

.editor textarea {
 height: 42em;
 width: 100%;
}

input:focus, textarea:focus
{
 background: #ffe;
 border: 1px solid #000;
}
.footer
{
 padding: .5em 0;
 margin: .5em 0;
 border-top: 1px solid #ddd;
 color: #555;
 text-align: center; 
}
/*}}}*/
/***
!IE Display hacks /% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%/
***/
/*{{{*/
body{
 _text-align: center;
}

#contentWrapper
{
/* _width: 770px; CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */
 _text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */ 
}

#messageArea{
 _position: absolute;
}
/*}}}*/
The ''Support Info'' displays support information (including sales, technical, license, and documentation) in an information window.
The ''Support Info'' displays support information (including sales, technical, license, and documentation) in an information window.
''//A number//, YN, REAL, INT'' (no default)
This describes the data type of the PPI. ''//A number//'' is an alphanumeric string containing the number of characters specified (i.e., A32 is a 32 character string). YN specifies a yes or no variable. REAL is a real valued number. INT is an integer.

//<html><span style="font-size: 13px">TYPE Example</span></html>//
!
//{{{TYPE=A32}}}//
//{{{TYPE=YN}}}//
//{{{TYPE=REAL}}}//
//{{{TYPE=INT}}}//
!
#Chapter 1-Introduction to Opti*Pro for Pro/ENGINEER
##[[Introduction]]
##[[Conventions]]
#Chapter 2-Installing Opti*Pro for Pro/ENGINEER
##[[Downloading Software]]
##[[Installing Opti*Pro and License Manager Files]]
##[[Configuring Opti*Pro Licensing]]
##[[Obtaining Licenses]]
##[[Installing Licenses]]
##[[Configuring Opti*Pro]]
#Chapter 3-Using Opti*Pro for Pro/ENGINEER
##[[Interactive Mode]]
##[[Batch Mode]]
#Chapter 4-Opti*Pro Configuration Options Usage
##[[Bend Lines]]
##[[Component Selection]]
##[[Cosmetic Marking]]
##[[Datum Curves]]
##[[Dynamic Text Marking]]
##[[Export Options]]
##[[Flat Pattern Type]]
##[[Grain]]
##[[Item Specification]]
##[[Layer Names and Numbers]]
##[[Orientation Priority]]
##[[Output Directory]]
##[[Output File Name]]
#APPENDIX ~A-Opti*Pro Configuration Options
##[[Introduction|Appendix A-Introduction]]
##[[Operation|Appendix A-Operation]]
##Syntax
###[[General Information]]
###[[allow]]
###[[assembly_component_selection]]
###[[csys]]
###[[export_not_flat]]
###[[flat_pattern_prefix]]
###[[flat_pattern_suffix]]
###[[flat_pattern_template]]
###[[flat_pattern_type]]
###[[flatness_tolerance]]
###[[item_name]]
###[[layer]]
###[[marking_font]]
###[[marking_selection_name]]
###[[marking_selection_type]]
###[[marking_template]]
###[[marking_text]]
###[[output_directory]]
###[[output_filename]]
###[[part_parameter]]
###[[ppi_relation_filename]]
###[[surface]]
###[[text_output_type]]
###[[view]]
###[[view_csys_priority]]
##[[Example Configuration File]]
#APPENDIX ~B-Customizing ~Pre-Programmed Input
##[[Introduction|Appendix B-Introduction]]
##[[Modification of PPIs|Appendix B-Modification of PPIs]]
##[[Addition of a PPI|Appendix B-Addition of a PPI]]
##Syntax
###[[General Information for Customization]]
###[[NAME]]
###[[TYPE]]
###[[PARAMETER]]
###[[RELATION]]
###[[FUNCTION]]
###[[RESOURCE]]
###[[VALUES]]
###[[DEFAULT]]
###[[MIN]]
###[[MAX]]
###[[VISIBLE]]
##Example Files
###[[Example PPI Format File]]
###[[Example PPI Menu File]]
<<search UserGuide [term]>>
//''list_of_values''// (no default)

A list of values corresponding to the menu items. Values whose menu items were selected will be used as PPI. For example, if the user selects the second and third items in the menu, then the second and third items in the list will be passed as the PPI. Commas separate the items and a semicolon follows the last value. Each VALUES statement must have a corresponding MENU statement.

//<html><span style="font-size: 13px">VALUES Example</span></html>//
!
//{{{VALUES=N,P,O,E,I,S;}}}//
!
''YES, NO, PART, ASSEMBLY'' (no default) Sets whether the PPI information will be displayed on the menu and exported in the file. Furthermore, if ''PART'' or ''ASSEMBLY'' is specified, the PPI will be processed only in the specified mode. 

//<html><span style="font-size: 13px">VISIBLE Example 1</span></html>// 
!
//{{{VISIBLE=YES}}}//
!
''bendline yes,no'' (no default)
''bottom yes,no'' (no default)
''cosmetic yes,no'' (no default)
''countersink yes,no'' (no default)
''datumcurve yes,no'' (no default)
''form yes,no'' (no default)
''marking yes,no'' (no default)
''pocket yes,no'' (no default)
''ream yes,no'' (no default)
''tool yes,no'' (no default)
''thread yes,no'' (no default)

This statement is used to specify which special processing is to be allowed. One or more allow statements can be used. If an allow statement for an option is not present, the special processing for the option will not occur. In addition to the option yes and no, true and false may be used.

The allow bendline statement allows datum axes representing sheet metal bend lines to be processed.

The allow bottom statement allows features on the bottom of the part to be processed. These features include countersinks and forms.

The allow cosmetic statement allows processing of cosmetic features. Construction lines and circles are not processed. The cosmetic features must be in the same plane as that being used to set the front face of the part.

The allow countersink statement allows the part to contain countersinks. The countersink may or may not have a corresponding hole. For the purpose of checking the part flatness, countersinks are considered to be flat. The location and size of the countersink are exported.

The allow datumcurve statement allows processing of datum curve features. The datum curve features must be in the same plane as that being used to set the front face of the part.

The allow form statement allows the part to contain form features. For the purpose of checking the part flatness, forms are considered to be flat. The form contour on the side punched is exported.

The allow marking statement allows Opti*Pro to create geometry for part marking.

The allow pocket statement allows pockets in the part to be exported. Pockets may be any shape and may include counterbores. Pockets may also be nested.

The allow ream statement allows the pre-drill for the ream to be exported.

The allow tool statement allows the part to contain special tool definitions.

The allow thread statement allows the threads in the part to be exported.

//<html><span style="font-size: 13px">Allow Example</span></html>//
!
{{{allow pocket yes}}}
!
//''name_prefix, name_suffix, sheet_metal, part_parameter''// (no default)

Component parts are selected from the assembly according to one or more of the specified options. This option is available with Opti*Pro/Assembly.

When //''name_prefix''// is specified, part names containing the assembly name with one or more leading characters will be selected; for example, if the assembly name is 'ABCD', then parts '1ABCD' and '22ABCD' would be selected for export.

When //''name_suffix''// is specified, the part names containing the assembly name with one or more trailing characters will be selected; for example, if the assembly name is 'ABCD', then parts '~ABCD1' and '~ABCD_22' would be selected for export.

When //''sheet_metal''// is specified, only Pro/ENGINEER sheet metal parts will be selected.

When //''part_parameter''// is specified, the parts will be selected if they have defined a part parameter with a specified name and optional value. See the [[part_parameter]] option.

//<html><span style="font-size: 13px">Example</span></html>//
!
//{{{assembly_component_selection name_suffix}}}//
!
//''coordinate_system_name''// (no default)

Coordinate system names are used to orient the part when the csys option of view_csys_priority is used. Coordinate system names are examined in the order they are processed in the "optipro.cfg" files. Coordinate system names are processed until one matches a coordinate system name in the model; this coordinate is then used to orient the part. One or more coordinate system names can be placed on one csys statement. Multiple csys statements can be used.

//<html><span style="font-size: 13px">Csys Example</span></html>//
!
//{{{csys cs0, cs1}}}//
!
''no'' (default), ''yes''

This configuration parameter controls whether parts that are not flat will be exported. If this statement is not included, the default action is to export only parts that are flat. Values of "yes" or "true" will allow non-flat parts to be exported. Values of "no" or "false" allow only flat parts to be exported.

//<html><span style="font-size: 13px">Export_not_flat Example</span></html>//
!
//{{{export_not_flat yes}}}//
!
//''prefix''// (no default)

This configuration option specifies the prefix(es) used to identify flat patterns. The prefix(es) is prepended to the part or instance name to generate the name of the corresponding flat pattern. One or more flat_pattern_prefix statements can be included.

<html><span style="font-size: 13px">Flat_pattern_prefix Example</span></html>
!
//{{{flat_pattern_prefix fl_}}}//
!
//''suffix''// (no default)

This configuration option specifies the suffix(es) used to identify flat patterns. The suffix(es) is appended to the part or instance name to generate the name of the corresponding flat pattern. One or more flat_pattern_suffix statements can be included.

//<html><span style="font-size: 13px">Flat_pattern_suffix Example</span></html>//
!
//{{{flat_pattern_suffix _flat1}}}//
!
''source_pattern destination_pattern'' (no defaults)

This configuration option specifies how to transform the bent part name to the flat pattern name. If the part name matches the source_pattern template, then the destination_pattern template is used to generate the name of the corresponding flat pattern. One or more flat_pattern_template statements can be included.

The source_pattern is an extended regular expression. Each string matched in the source_pattern is noted in the destination string as "$n" where n is the string number.

//<html><span style="font-size: 13px">Flat_pattern_template Example</span></html>//
!
Part name """"___"""123" has a flat pattern "~FLP123". Use the statement //{{{flat_pattern_template ___* FLP*}}}// 
Part name "~D12AB" has a flat pattern "~D12_F". Use the statement //{{{flat_pattern_template ([A-Z][0-9][0-9]).* $1_F FLP*}}}//
!
''flat_pattern, generic, instance, none'' (default)

This configuration option specifies how flat patterns are created from the model.

A value of //''flat_pattern''// instructs the software to look at the last part feature, and if it is a suppressed 'flat pattern' feature or a 'unbend' feature, to resume the feature in order to create the flat pattern.

A value of //''generic''// says that the generic model or the part itself is flat.

A value of //''instance''// instructs the software to look in the family table for an instance whose name matches the requested name after applying a prefix or suffix.

A value of //''none''// causes the basic part to be used.

//<html><span style="font-size: 13px">Flat_pattern_type Example</span></html>//
!
//{{{Flat_pattern_type instance}}}//
!
//''tolerance (default 0.5)''//

Specifies angular tolerance (degrees) for two planes to be considered co-planar or normal.

//<html><span style="font-size: 13px">Flatness_tolerance Example</span></html>//
!
//{{{flatness_tolerance 0.1}}}//
!
''bendline //item_name//'' (no default)
''cbore //item_name//'' (no default)
''csink //item_name//'' (no default)
''punch //item_name//'' (no default)
''tool //item_name//'' (no default)
''thread //item_name//'' (no default)

The item_name statement is used to specify how items (typically user defined features) are to be considered. One or more item_name statements can be used.

The item_name bendline statement identifies the named item as being a datum axis representing a sheet metal bend line. The item name is a regular expression to select the axes to be processed. A layer statement is required in which the layer name is the same as the item_name.

The item_name cbore statement identifies the named item as being a counterbore containing a hole. The counterbore may be exported on one layer while the hole is exported on another.

The item_name csink statement identifies the named item as being a countersink with an optional hole. The countersink may be exported on one layer while the hole is exported on another.

The item_name punch statement identifies the named item as being a punch.

The item_name tool statement identifies the named item as containing a special tool specification. The tool name is specified as a text string feature parameter with a parameter name ~OPTIPRO_TOOL.

The item_name thread statement identifies the named item as being a threaded hole. The thread information may be exported on one layer while the hole is exported on another. The thread must be either a cosmetic thread feature or a cylindrical datum surface. For Imperial (English) threads, the feature parameters ~THREADS_PER_INCH (string or numeric), FORM (string), CLASS (string), PLACEMENT (string, "B" is internal), and METRIC (yes/no) are required. For Metric threads, the feature parameters ~THREADS_PER_INCH, CLASS, PLACEMENT, and METRIC are required. The parameter HAND, indicating right or left hand thread is optional; if not specified, the default value is "right".

//<html><span style="font-size: 13px">Item_name Example</span></html>//
!
//{{{item_name thread 1-4_20_UNC_2A}}}//
!
//''layer_name layer_number font_number color_number''//

Specifies feature layers and how they are exported. If the Pro/ENGINEER feature is on the named layer, its edges will be exported on a layer with the specified layer number, font number, and color number. The layer number, font number and color number must each be greater than or equal to 0.

Several layer names have been reserved for special processing. These layer names start with "OPTI*~PRO_DEFAULT_".

OPTI*~PRO_DEFAULT_CBORE_DRILL: If this layer is specified, the edges for the drill corresponding to a counterbore will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CBORE_DRILL' is included.

OPTI*~PRO_DEFAULT_COSMETIC: If this layer is specified, the edges for cosmetic features will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_COSMETIC' is included.

OPTI*~PRO_DEFAULT_COSMETIC_TEXT: If this layer is specified, the text section entities for cosmetic features will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_COSMETIC_TEXT' is included.

OPTI*~PRO_DEFAULT_CSINK_DRILL: If this layer is specified, the edges for the drill corresponding to a countersink on the top of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_DRILL' is included.

OPTI*~PRO_DEFAULT_CSINK_DRILL_B: If this layer is specified, the edges for the drill corresponding to a countersink on the bottom of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_DRILL_B' is included.

OPTI*~PRO_DEFAULT_CSINK_GEOM: If this layer is specified, the edges for the countersink on the top of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_GEOM' is included.

OPTI*~PRO_DEFAULT_CSINK_GEOM_B: If this layer is specified, the edges for the countersink on the bottom of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_GEOM_B' is included.

OPTI*~PRO_DEFAULT_CSINK_TEXT: If this layer is specified, the text description of the countersink on the top of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_TEXT' is included.

OPTI*~PRO_DEFAULT_CSINK_TEXT_B: If this layer is specified, the text description of the countersink on the bottom of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_CSINK_TEXT_B' is included.

OPTI*~PRO_DEFAULT_DATUMCURVE: If this layer is specified, the datum curve features on the top of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_ DATUMCURVE is included. Note that cross hatching is not processed.

OPTI*~PRO_DEFAULT_FORM: If this layer is specified, the edges for the form feature on the top of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_FORM' is included.

OPTI*~PRO_DEFAULT_FORM_B: If this layer is specified, the edges for the form feature on the bottom of the part will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_FORM_B' is included.

OPTI*~PRO_DEFAULT_GEOMETRY: All edges will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_GEOMETRY' is included.

OPTI*~PRO_DEFAULT_GEOMETRY_NOS: Features which are not on a named layer will have their edges exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_GEOMETRY_NOS' is included.

OPTI*~PRO_DEFAULT_GRAIN: If this layer is specified, the line indicating the grain direction will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_GRAIN' is included.

OPTI*~PRO_DEFAULT_MARKING: If this layer is specified, the geometry created for marking will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_MARKING' is included.

OPTI*~PRO_DEFAULT_MARKING_TEXT: If this layer is specified, the text section entities created for marking will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_MARKING_TEXT' is included.

OPTI*~PRO_DEFAULT_PPI: The layer for pre-programmed input has been assigned a layer name 'OPTI*~PRO_DEFAULT_PPI'.

OPTI*~PRO_DEFAULT_PUNCH: If this layer is specified, the punch information will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_PUNCH' is included.

OPTI*~PRO_DEFAULT_REAM_DRILL: If this layer is specified, the edges for the drill corresponding to a reamed hole will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_REAM_DRILL' is included.

OPTI*~PRO_DEFAULT_THREAD: If this layer is specified, the thread information for a tapped hole will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_THREAD' is included.

OPTI*~PRO_DEFAULT_TOOL: If this layer is specified, the tool information will be exported on the specified layer/font/color if the default layer name 'OPTI*~PRO_DEFAULT_TOOL' is included.

//<html><span style="font-size: 13px">Layer Example</span></html>
!
//{{{layer HOLE 12, 1, 2}}}//
//{{{layer OPTI*PRO_DEFAULT_GEOMETRY 1 0 0}}}//
//{{{layer OPTI*PRO_DEFAULT_PPI 2 0 0}}}//
!
//''font_name''// (no default)

Specifies the name of the font used for marking. The font_name directory is a sub-directory to the "font" directory which is a sub-directory of the directory specified by the text_dir entry in the optipro*.dat file.

//<html><span style="font-size: 13px">Marking_font Example</span></html>//
!
//{{{marking_font font1}}}//
!
//''selection_name''// (no default)

Used in conjunction with marking_selection_type, this option specifies the entity name of the geometry entity to be used for locating the marking data.

//<html><span style="font-size: 13px">Marking_selection_name Example</span></html>// 
!
Use the UDF named "PN" to locate the marking data.
//{{{marking_selection_type udf}}}//	
//{{{marking_selection_name pn}}}//
!
''udf'' (no default)

Specifies the geometry entity type to be used to locate the marking data.

//<html><span style="font-size: 13px">Marking_selection_type Example</span></html>//
!
//{{{marking_selection_type udf}}}//
!
//''current_directory''// (no default)

Specifies the name of the Pro/ENGINEER section to be used as a template for characters to be marked.

<html><span style="font-size: 13px">Marking_template Example</span></html>//
!
//{{{marking_template template}}}//
!
//''text''// (no default)

Specifies the text to be used for marking. The text can be any valid Pro/ENGINEER relation. If the result of the evaluation is of type boolean, the text will be either "TRUE" or "FALSE".

<html><span style="font-size: 13px">Marking_text Example</span></html>//
!
//{{{marking_text part_number+"_"+rev_level}}}//
!
//''current_directory''// (default)

Specifies the name of the directory into which the output files are placed. It is suggested that this be a fully qualified file name. Otherwise, the output directory will be relative to the current Pro/ENGINEER directory.

//<html><span style="font-size: 13px">Output_directory Example</span></html>//
!
//{{{output_directory c:\users\opti\parts2do}}}//
!
''object_name'' (default)
''parameter //parameter_name//''
''relation //relation//''

Specifies how the exported file is named. The 'object_name' option causes the exported file to be named using the Pro/ENGINEER object name. The 'parameter' option causes the exported file to be named using the string value from the parameter named '//parameter_name//'. The 'relation' option causes the exported file to be named using the result of evaluating the right hand side of the relation.

//<html><span style="font-size: 13px">Output_filename Example</span></html>//
!
//{{{output_filename relation part_number+"_"+rev_level}}}//
!
//''parameter_name parameter_value''// (no default)

Component parts are selected from the assembly according to assembly_component_selection part_parameter. This option specifies the names of the part parameters and optional values. This option is available with Opti*Pro/Assembly.

//<html><span style="font-size: 13px">Part_parameter Example</span></html>//
!
//{{{part_parameter in_house}}}//
//{{{part_parameter vendor=JERAND,OPTIMATION}}}//
!
''all //file_name//''
''assembly //file_name//''
''other //file_name//''
''sheet_metal //file_name//''
''solid_part //file_name//''

Specifies the name of a file containing relations to be evaluated before use in PPI parameters. Multiple ppi_relation_filename statements may be used. For Pro/ENGINEER version 2000i2, only the ''all'' option is available. ''all'' specifies that the relations are applied to all object types. ''assembly'' specifies that the relations are applied to only assemblies. ''sheet_metal'' and ''solid_part'' specifies that the relations are applied to sheet metal or solid parts respectively. Finally, ''other'' specifies that the relations are applied to objects which are neither assemblies, sheet metal parts, nor solid parts.

//<html><span style="font-size: 13px">Ppi_relation_filename Example</span></html>//
!
//{{{ppi_relation_filename sheet_metal rawmat.rel}}}//
!
''//surface name//, first'' (no default)

Surface names are used to orient the part when the surface option of view_csys_priority is used. Surface names are examined in the order they are processed in the "optipro.cfg" files. Surface names are processed until one matches a surface name in the model; this surface is becomes the x-y plane and the longest edge of the surface is oriented along the x-axis. One or more surface names can be placed on one surface statement. Multiple surface statements can be used. The reserved surface name "first" selects the first surface in the part; for sheet metal parts, this is the "green" surface. Similarly, the reserved surface name "second" selects the "white" surface..

//<html><span style="font-size: 13px">Surface Example</span></html>//
!
//{{{surface burn, front}}}//
!
''stroke, character'' (no default)

This option controls how text is specified in the output file. When ''stroke'' is used, the text will be represented as the lines and arcs which compose the characters in the text string. When ''character'' is used, the text will be represented as characters; subsequent processing will determine the appearance of the text.

//<html><span style="font-size: 13px">Text_output_type Example</span></html>//
!
//{{{text_output_type stroke}}}//
!
//''view name''// (no default)

View names are used to orient the part when the view option of view_csys_priority is used. View names are examined in the order they are processed in the "optipro.cfg" files. View names are processed until one matches a view name in the model; this view is then used to orient the part. One or more view names can be placed on one view statement. Multiple view statements can be used.

//<html><span style="font-size: 13px">View Example</span></html>//
!
//{{{view burn, front}}}//
!
''view, csys, screen, surface, xyz'' (no default)

Controls the order used to determine part orientation. If either view, csys or surface are specified, then either all view names, all coordinate system, or all surface names are examined to determine if the part can be oriented. The value of 'screen' uses the currently displayed orientation. The value of 'xyz' will always cause the part to be oriented such that the largest surface is in the x-y plane and the longest edge of the largest surface is along the x axis.

//<html><span style="font-size: 13px">View_csys_priority Example</span></html>//
!
//{{{View_csys_priority view, csys, xyz}}}//
//{{{View_csys_priority view}}}//
!