0% found this document useful (0 votes)
2K views687 pages

Jlinkug

Tutorial pro/engineer
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views687 pages

Jlinkug

Tutorial pro/engineer
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 687

Parametric Technology Corporation

Pro/ENGINEER® Wildfire® 5.0


J-Link User’s Guide

March 2010
Copyright © 2009 Parametric Technology Corporation and/or Its Subsidiary Companies. All Rights
Reserved.
User and training guides and related documentation from Parametric Technology Corporation and its
subsidiary companies (collectively "PTC") are subject to the copyright laws of the United States and other
countries and are provided under a license agreement that restricts copying, disclosure, and use of such
documentation. PTC hereby grants to the licensed software user the right to make copies in printed form of
this documentation if provided on software media, but only for internal/personal use and in accordance with
the license agreement under which the applicable software is licensed. Any copy made shall include the PTC
copyright notice and any other proprietary notice provided by PTC. Training materials may not be copied
without the express written consent of PTC. This documentation may not be disclosed, transferred, modified,
or reduced to any form, including electronic media, or transmitted or made publicly available by any means
without the prior written consent of PTC and no authorization is granted to make copies for such purposes.
Information described herein is furnished for general information only, is subject to change without notice,
and should not be construed as a warranty or commitment by PTC. PTC assumes no responsibility or
liability for any errors or inaccuracies that may appear in this document.

The software described in this document is provided under written license agreement, contains valuable
trade secrets and proprietary information, and is protected by the copyright laws of the United States and
other countries. It may not be copied or distributed in any form or medium, disclosed to third parties, or used
in any manner not provided for in the software licenses agreement except with written prior approval from
PTC.

UNAUTHORIZED USE OF SOFTWARE OR ITS DOCUMENTATION CAN RESULT IN CIVIL DAMAGES


AND CRIMINAL PROSECUTION. PTC regards software piracy as the crime it is, and we view offenders
accordingly. We do not tolerate the piracy of PTC software products, and we pursue (both civilly and
criminally) those who do so using all legal means available, including public and private surveillance
resources. As part of these efforts, PTC uses data monitoring and scouring technologies to obtain and
transmit data on users of illegal copies of our software. This data collection is not performed on users of
legally licensed software from PTC and its authorized distributors. If you are using an illegal copy of our
software and do not consent to the collection and transmission of such data (including to the United States),
cease using the illegal version, and contact PTC to obtain a legally licensed copy.

For Important Copyright, Trademark, Patent, Licensing and Data Collection Information: For
Windchill products, select About Windchill at the bottom of the product page. For InterComm products, on
the Help main page, click the link for Copyright 20xx. For other products, click Help > About on the main
menu of the product.

UNITED STATES GOVERNMENT RESTRICTED RIGHTS LEGEND


This document and the software described herein are Commercial Computer Documentation and Software,
pursuant to FAR 12.212(a)-(b) (OCT'95) or DFARS 227.7202-1(a) and 227.7202-3(a) (JUN'95), and are
provided to the US Government under a limited commercial license only. For procurements predating the
above clauses, use, duplication, or disclosure by the Government is subject to the restrictions set forth in
subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software Clause at DFARS 252.227
7013 (OCT'88) or Commercial Computer Software-Restricted Rights at FAR 52.227 19(c)(1)-(2) (JUN'87), as
applicable. 01162009

Parametric Technology Corporation, 140 Kendrick Street, Needham, MA 02494 USA


Contents

About This Guide i


Purpose....................................................................................................................... ii
Audience ..................................................................................................................... ii
Contents...................................................................................................................... ii
Prerequisites .............................................................................................................. iv
Documentation ........................................................................................................... iv
Conventions......................................................................................................... iv
Software Product Concerns and Documentation Comments...................................... v
Chapter 1: Setting Up J-Link 1-1
Setting Up Your Machine ........................................................................................ 1-2
Setting Up a Synchronous J-Link Program ............................................................. 1-2
Standalone Applications ................................................................................... 1-2
Registering a J-Link Application ....................................................................... 1-4
Setting Up a Model Program ............................................................................ 1-5
Start and Stop Methods.................................................................................... 1-7
Chapter 2: Java Programming Considerations 2-1
Use of the JDK in J-Link Applications ..................................................................... 2-2
Java Overview......................................................................................................... 2-3
Java Keywords........................................................................................................ 2-4
Java Data Types ..................................................................................................... 2-6
Event Handling........................................................................................................ 2-6
Comments............................................................................................................... 2-7
Chapter 3: Overview of J-Link 3-1
Class Types ............................................................................................................ 3-2
Pro/ENGINEER-Related Interfaces .................................................................. 3-2

Contents - i
Compact Data Classes...................................................................................... 3-4
Unions ............................................................................................................... 3-5
Sequences ........................................................................................................ 3-6
Arrays ................................................................................................................ 3-7
Enumeration Classes ........................................................................................ 3-9
Action Listeners............................................................................................... 3-10
Utilities............................................................................................................. 3-12
Creating Applications............................................................................................. 3-14
Importing Packages......................................................................................... 3-14
Exception Handling ......................................................................................... 3-15
Chapter 4: J-Link Programming Considerations 4-1
J-Link Thread Restrictions ....................................................................................... 4-2
Optional Arguments to J-Link Methods.................................................................... 4-2
Optional Returns for J-Link Methods................................................................. 4-3
Parent-Child Relationships Between J-Link Objects ............................................... 4-3
Run-Time Type Identification in J-Link ................................................................... 4-4
Chapter 5: The J-Link Online Browser 5-1
Online Documentation — J-Link APIWizard ............................................................ 5-2
Installing the APIWizard .................................................................................... 5-2
Starting the APIWizard ...................................................................................... 5-2
Web Browser Environments.............................................................................. 5-3
Loading the Swing Class Library....................................................................... 5-3
Automatic Index Tree Updating......................................................................... 5-6
APIWizard Interface .......................................................................................... 5-6
Chapter 6: Session Objects 6-1
Overview of Session Objects................................................................................... 6-2
Getting the Session Object ..................................................................................... 6-2
Getting Session Information .............................................................................. 6-2
Directories................................................................................................................ 6-5
Configuration Options........................................................................................ 6-5
Macros............................................................................................................... 6-6
Colors and Line Styles ...................................................................................... 6-7
Accessing the Pro/ENGINEER Interface ................................................................. 6-7
The Text Message File...................................................................................... 6-8
Writing a Message Using a Message Pop-up Dialog Box................................. 6-9
Accessing the Message Window..................................................................... 6-10
Message Classification.................................................................................... 6-11
Displaying Feature Parameters....................................................................... 6-13
File Dialogs...................................................................................................... 6-14

Contents - ii J-Link User’s Guide


Customizing the Pro/ENGINEER Navigation Area ......................................... 6-17
Chapter 7: Selection 7-1
Interactive Selection................................................................................................ 7-2
Accessing Selection Data ....................................................................................... 7-4
Controlling Selection Display ............................................................................ 7-5
Programmatic Selection .......................................................................................... 7-6
Selection Buffer....................................................................................................... 7-7
Introduction to Selection Buffers....................................................................... 7-7
Reading the Contents of the Selection Buffer .................................................. 7-8
Removing the Items of the Selection Buffer ..................................................... 7-9
Adding Items to the Selection Buffer ................................................................ 7-9
Chapter 8: Menus, Commands, and Pop-up Menus 8-1
Introduction ............................................................................................................. 8-2
Menu Bar Definitions............................................................................................... 8-2
Creating New Menus and Buttons .......................................................................... 8-2
Finding Pro/ENGINEER commands ................................................................. 8-6
Access Listeners for Commands ...................................................................... 8-6
Bracket Listeners for Commands ..................................................................... 8-8
Designating Commands........................................................................................ 8-12
Command Icons ............................................................................................. 8-12
Designating the Command ............................................................................. 8-13
Placing the Toolbar Button ............................................................................. 8-14
Pop-up Menus....................................................................................................... 8-15
Adding a Pop-up Menu to the Graphics Window............................................ 8-15
Using the Trail File to Determine Existing Pop-up Menu Names ................... 8-16
Listening for Pop-up Menu Initialization.......................................................... 8-16
Accessing the Pop-up Menus......................................................................... 8-17
Adding Content to the Pop-up Menus ............................................................ 8-17
Chapter 9: Models 9-1
Overview of Model Objects ..................................................................................... 9-2
Getting a Model Object ........................................................................................... 9-2
Model Descriptors ................................................................................................... 9-3
Retrieving Models ................................................................................................... 9-4
Model Information ................................................................................................... 9-6
Model Operations.................................................................................................... 9-9
Running ModelCHECK ......................................................................................... 9-10
Custom Checks .............................................................................................. 9-12
Chapter 10: Drawings 10-1
Overview of Drawings in J-Link............................................................................. 10-2

Contents - iii
Creating Drawings from Templates ....................................................................... 10-2
Drawing Creation Errors.................................................................................. 10-3
Obtaining Drawing Models..................................................................................... 10-6
Drawing Information............................................................................................... 10-6
Drawing Operations ............................................................................................... 10-7
Drawing Sheets ................................................................................................... 10-10
Drawing Sheet Information............................................................................ 10-10
Drawing Sheet Operations ............................................................................ 10-11
Drawing Views ..................................................................................................... 10-15
Creating Drawing Views ................................................................................ 10-15
Obtaining Drawing Views .............................................................................. 10-20
Drawing View Information ............................................................................. 10-21
Drawing Views Operations ............................................................................ 10-25
Drawing Dimensions............................................................................................ 10-26
Obtaining Drawing Dimensions ..................................................................... 10-26
Creating Drawing Dimensions....................................................................... 10-27
Drawing Dimensions Information .................................................................. 10-30
Drawing Dimensions Operations................................................................... 10-32
Drawing Tables.................................................................................................... 10-37
Creating Drawing Cells.................................................................................. 10-38
Selecting Drawing Tables and Cells.............................................................. 10-38
Creating Drawing Tables............................................................................... 10-39
Retrieving Drawing Tables ............................................................................ 10-39
Drawing Tables Information .......................................................................... 10-40
Drawing Tables Operations........................................................................... 10-41
Drawing Table Segments .............................................................................. 10-47
Repeat Regions............................................................................................. 10-48
Detail Items.......................................................................................................... 10-49
Listing Detail Items ........................................................................................ 10-49
Creating a Detail Item.................................................................................... 10-50
Detail Entities....................................................................................................... 10-51
Instructions .................................................................................................... 10-51
Detail Entities Information ............................................................................. 10-55
Detail Entities Operations.............................................................................. 10-55
OLE Objects ........................................................................................................ 10-56
Detail Notes ......................................................................................................... 10-56
Instructions .................................................................................................... 10-56
Detail Notes Information................................................................................ 10-61
Details Notes Operations .............................................................................. 10-62
Detail Groups....................................................................................................... 10-63

Contents - iv J-Link User’s Guide


Instructions ................................................................................................... 10-63
Detail Groups Information............................................................................. 10-64
Detail Groups Operations ............................................................................. 10-64
Detail Symbols .................................................................................................... 10-66
Detail Symbol Definitions.............................................................................. 10-66
Detail Symbol Instances ............................................................................... 10-74
Detail Symbol Groups................................................................................... 10-84
Detail Attachments .............................................................................................. 10-87
Free Attachment ........................................................................................... 10-88
Parametric Attachment ................................................................................. 10-88
Offset Attachment......................................................................................... 10-89
Unsupported Attachment.............................................................................. 10-90
Chapter 11: Solid 11-1
Getting a Solid Object ........................................................................................... 11-2
Solid Information ................................................................................................... 11-2
Solid Operations.................................................................................................... 11-3
Solid Units ............................................................................................................. 11-5
Types of Unit Systems.................................................................................... 11-6
Accessing Individual Units .............................................................................. 11-7
Modifying Individual Units ............................................................................... 11-9
Creating a New Unit ....................................................................................... 11-9
Accessing Systems of Units ......................................................................... 11-10
Modifying Systems of Units .......................................................................... 11-10
Creating a New System of Units................................................................... 11-11
Conversion to a New Unit System ................................................................ 11-11
Mass Properties .................................................................................................. 11-12
Annotations ......................................................................................................... 11-14
Cross Sections .................................................................................................... 11-15
Materials.............................................................................................................. 11-15
Accessing Material Types............................................................................. 11-17
Accessing Material Properties ...................................................................... 11-18
Accessing User-defined Material Properties ................................................ 11-21
Chapter 12: Windows and Views 12-1
Windows................................................................................................................ 12-2
Getting a Window Object................................................................................ 12-2
Window Operations ........................................................................................ 12-3
Embedded Browser............................................................................................... 12-4
Views..................................................................................................................... 12-4
Getting a View Object..................................................................................... 12-5

Contents - v
View Operations .............................................................................................. 12-5
Coordinate Systems and Transformations ............................................................ 12-6
Coordinate Systems ........................................................................................ 12-6
Transformations .............................................................................................. 12-8
Chapter 13: ModelItem 13-1
Solid Geometry Traversal ...................................................................................... 13-2
Getting ModelItem Objects .................................................................................... 13-2
ModelItem Information ........................................................................................... 13-3
Layer Objects......................................................................................................... 13-4
Getting Layer Objects...................................................................................... 13-4
Layer Operations............................................................................................. 13-4
Chapter 14: Features 14-1
Access to Features ................................................................................................ 14-2
Feature Information ............................................................................................... 14-3
Feature Operations................................................................................................ 14-4
Feature Groups and Patterns ................................................................................ 14-6
Changes To Feature Groups........................................................................... 14-7
User Defined Features........................................................................................... 14-8
Read Access to Groups and User Defined Features ...................................... 14-9
Creating Features from UDFs................................................................................ 14-9
Creating UDFs............................................................................................... 14-10
Creating Interactively Defined UDFs ............................................................. 14-11
Creating a Custom UDF ................................................................................ 14-11
Chapter 15: Datum Features 15-1
Datum Plane Features........................................................................................... 15-2
Datum Axis Features ............................................................................................. 15-6
General Datum Point Features .............................................................................. 15-7
Datum Coordinate System Features ..................................................................... 15-9
Chapter 16: Geometry Evaluation 16-1
Geometry Traversal ............................................................................................... 16-2
Geometry Terms ............................................................................................. 16-2
Traversing the Geometry of a Solid Block....................................................... 16-3
Curves and Edges ................................................................................................. 16-3
The t Parameter .............................................................................................. 16-3
Curve and Edge Types.................................................................................... 16-4
Evaluation of Curves and Edges ..................................................................... 16-5
Solid Edge Geometry ...................................................................................... 16-6
Curve Descriptors............................................................................................ 16-6
Contours ................................................................................................................ 16-7

Contents - vi J-Link User’s Guide


Surfaces ................................................................................................................ 16-8
UV Parameterization ...................................................................................... 16-8
Surface Types ................................................................................................ 16-9
Surface Information ...................................................................................... 16-10
Evaluation of Surfaces.................................................................................. 16-10
Surface Descriptors ...................................................................................... 16-12
Axes, Coordinate Systems, and Points............................................................... 16-12
Evaluation of ModelItems ............................................................................. 16-12
Interference ......................................................................................................... 16-13
Analyzing Interference Information ............................................................... 16-14
Analyzing Interference Volume..................................................................... 16-15
Chapter 17: Dimensions and Parameters 17-1
Overview ............................................................................................................... 17-2
The ParamValue Object........................................................................................ 17-2
Accessing a ParamValue Object .................................................................... 17-2
Accessing the ParamValue Value .................................................................. 17-3
Parameter Objects ................................................................................................ 17-3
Creating and Accessing Parameters .............................................................. 17-4
Parameter Selection Options.......................................................................... 17-5
Parameter Information .................................................................................... 17-7
Parameter Restrictions ................................................................................... 17-9
Dimension Objects .............................................................................................. 17-13
Getting Dimensions ...................................................................................... 17-13
Dimension Information.................................................................................. 17-13
Dimension Tolerances.................................................................................. 17-14
Chapter 18: Relations 18-1
Accessing Relations.............................................................................................. 18-2
Adding a Customized Function to the Relations Dialog Box in Pro/ENGINEER... 18-4
Relation Function Options .............................................................................. 18-5
Relation Function Listeners ............................................................................ 18-6
Chapter 19: Assemblies and Components 19-1
Structure of Assemblies and Assembly Objects ................................................... 19-2
Assembly Components................................................................................... 19-4
Regenerating an Assembly Component......................................................... 19-8
Creating a Component Path ........................................................................... 19-8
Component Path Information.......................................................................... 19-8
Assembling Components ...................................................................................... 19-9
Constraint Attributes ..................................................................................... 19-11
Assembling a Component Parametrically..................................................... 19-11

Contents - vii
Redefining and Rerouting Assembly Components .............................................. 19-14
Exploded Assemblies .......................................................................................... 19-20
Skeleton Models .................................................................................................. 19-21
Chapter 20: Family Tables 20-1
Working with Family Tables................................................................................... 20-2
Accessing Instances........................................................................................ 20-2
Accessing Columns......................................................................................... 20-3
Accessing Cell Information.............................................................................. 20-4
Creating Family Table Instances ........................................................................... 20-5
Creating Family Table Columns ............................................................................ 20-5
Chapter 21: Action Listeners 21-1
J-Link Action Listeners........................................................................................... 21-2
Creating an ActionListener Implementation........................................................... 21-2
Action Sources....................................................................................................... 21-3
Types of Action Listeners ...................................................................................... 21-4
Session Level Action Listeners ....................................................................... 21-4
UI Command Action Listeners......................................................................... 21-5
Model Level Action listeners............................................................................ 21-5
Solid Level Action Listeners ............................................................................ 21-8
Feature Level Action Listeners...................................................................... 21-10
Cancelling an ActionListener Operation .............................................................. 21-11
Chapter 22: Interface 22-1
Exporting Files and 2D Models............................................................................. 22-2
Export Instructions........................................................................................... 22-3
Exporting Drawing Sheets............................................................................... 22-5
Exporting to PDF and U3D .................................................................................... 22-6
Exporting 3D Geometry ....................................................................................... 22-13
Export Instructions......................................................................................... 22-14
Export Utilities ............................................................................................... 22-17
Shrinkwrap Export ............................................................................................... 22-18
Setting Shrinkwrap Options........................................................................... 22-19
Surface Subset Options ................................................................................ 22-21
Faceted Solid Options ................................................................................... 22-22
Merged Solid Options.................................................................................... 22-24
VRML Representation ................................................................................... 22-25
Importing Files ..................................................................................................... 22-26
Import Instructions......................................................................................... 22-26
Importing 2D Models ..................................................................................... 22-28
Importing 3D Geometry ....................................................................................... 22-29

Contents - viii J-Link User’s Guide


Plotting Files........................................................................................................ 22-32
Printing Files ....................................................................................................... 22-33
Printer Options.............................................................................................. 22-34
Placement Options ....................................................................................... 22-37
Model Options .............................................................................................. 22-39
Plotter Configuration File (PCF) Options ...................................................... 22-40
Solid Operations.................................................................................................. 22-41
Window Operations............................................................................................. 22-43
Chapter 23: Simplified Representations 23-1
Overview ............................................................................................................... 23-2
Retrieving Simplified Representations .................................................................. 23-3
Creating and Deleting Simplified Representations................................................ 23-4
Extracting Information About Simplified Representations ..................................... 23-5
Modifying Simplified Representations ................................................................... 23-8
Adding Items to and Deleting Items from a Simplified Representation .......... 23-8
Simplified Representation Utilities......................................................................... 23-9
Chapter 24: Asynchronous Mode 24-1
Overview ............................................................................................................... 24-2
Setting up an Asynchronous J-Link Application ............................................. 24-2
Simple Asynchronous Mode ................................................................................. 24-4
Starting and Stopping Pro/ENGINEER ................................................................. 24-4
Connecting to a Pro/ENGINEER Process............................................................. 24-7
Connecting Via Connection ID ....................................................................... 24-8
Status of a Pro/ENGINEER Process .............................................................. 24-9
Getting the Session Object............................................................................. 24-9
Full Asynchronous Mode....................................................................................... 24-9
Troubleshooting Asynchronous J-Link ................................................................ 24-14
Chapter 25: Task Based Application Libraries 25-1
Managing Application Arguments ......................................................................... 25-2
Modifying Arguments...................................................................................... 25-3
Launching a Pro/Toolkit DLL................................................................................. 25-4
Creating J-Link Task Libraries .............................................................................. 25-6
Launching Tasks from J-Link Task Libraries......................................................... 25-7
Chapter 26: Graphics 26-1
Overview ............................................................................................................... 26-2
Getting Mouse Input.............................................................................................. 26-2
Drawing a Mouse Box .................................................................................... 26-3
Displaying Graphics .............................................................................................. 26-3
Controlling Graphics Display .......................................................................... 26-4

Contents - ix
Displaying Text in the Graphics Window......................................................... 26-7
Controlling Text Fonts ..................................................................................... 26-8
Display Lists and Graphics .................................................................................... 26-8
Chapter 27: External Data 27-1
External Data ......................................................................................................... 27-2
Introduction to External Data........................................................................... 27-2
Compatibility with Pro/TOOLKIT ..................................................................... 27-3
Accessing External Data ................................................................................. 27-3
Storing External Data ...................................................................................... 27-4
Initializing Data Objects................................................................................... 27-4
Retrieving External Data ................................................................................. 27-5
Exceptions ............................................................................................................. 27-9
Chapter 28: Windchill Connectivity APIs 28-1
Introduction ............................................................................................................ 28-2
Non-Interactive Mode Operations ................................................................... 28-2
Accessing a Windchill Server from a Pro/ENGINEER Session ............................ 28-2
Accessing Information Before Registering a Server........................................ 28-3
Registering and Activating a Server ................................................................ 28-4
Accessing Information From a Registered Server........................................... 28-5
Information on Servers in Session .................................................................. 28-6
Accessing Workspaces.......................................................................................... 28-6
Creating and Modifying the Workspace .......................................................... 28-7
Workflow to Register a Server ............................................................................... 28-8
Aliased URL........................................................................................................... 28-9
Server Operations................................................................................................ 28-10
Save .............................................................................................................. 28-11
Upload ........................................................................................................... 28-12
CheckIn ......................................................................................................... 28-13
Retrieval ........................................................................................................ 28-15
Checkout and Download ............................................................................... 28-15
Undo Checkout.............................................................................................. 28-18
Import and Export.......................................................................................... 28-18
File Copy ....................................................................................................... 28-21
Server Object Status ..................................................................................... 28-22
Object Lock Status ........................................................................................ 28-22
Delete Objects............................................................................................... 28-24
Conflicts During Server Operations............................................................... 28-24
Utility APIs ........................................................................................................... 28-37
Sample Batch Workflow....................................................................................... 28-38

Contents - x J-Link User’s Guide


Appendix A: Summary of Technical Changes A-1
Critical Technical Changes ..................................................................................... A-2
pfcDetail.DetailSymbolInstItem.GetInstructions ............................................... A-2
Printing Instructions .......................................................................................... A-2
No-Resolve Mode ............................................................................................. A-3
New Methods .......................................................................................................... A-3
Drawings........................................................................................................... A-3
3D Export.......................................................................................................... A-4
Datum Features................................................................................................ A-4
Export to PDF ................................................................................................... A-7
Family Tables ................................................................................................... A-8
Printing Files..................................................................................................... A-8
User Interface ................................................................................................. A-11
Utility............................................................................................................... A-11
Pro/ENGINEER Window ................................................................................ A-12
Superseded Methods ............................................................................................ A-12
Miscellaneous Technical Changes........................................................................ A-12
3D Import Formats.......................................................................................... A-13
Datum Features Properties ............................................................................ A-13
Export Formats ............................................................................................... A-14
Obsolete Data Exchange Formats ................................................................. A-15
Appendix B: Sample Applications B-1
Installing J-Link ....................................................................................................... B-2
Sample Applications................................................................................................ B-2
InstallTest ......................................................................................................... B-2
InstallTest ......................................................................................................... B-4
jlinkexamples .................................................................................................... B-6
jlinkasyncexamples........................................................................................... B-6
Parameter Editor .............................................................................................. B-6
Round Checker Utility ....................................................................................... B-8
Save Check Utility ............................................................................................ B-9
Appendix C: Java Options and Debugging C-1
Supported Java Virtual Machine Versions .............................................................. C-2
Overriding the Java command used by Synchronous J-Link .................................. C-2
Debugging a Synchronous Mode Application ......................................................... C-3
CLASSPATH Variables........................................................................................... C-3
Synchronous Mode........................................................................................... C-3
JAVA Options for Asynchronous Mode ............................................................ C-4

Contents - xi
Appendix D: Digital Rights Management D-1
Introduction ............................................................................................................. D-2
Implications of DRM on J-Link ................................................................................ D-2
Exception Types............................................................................................... D-2
Copy Permission to Interactively Open Models................................................ D-5
Additional DRM Implications................................................................................... D-6
Appendix E: Geometry Traversal E-1
Example 1............................................................................................................... E-2
Example 2............................................................................................................... E-2
Example 3............................................................................................................... E-3
Example 4............................................................................................................... E-4
Example 5............................................................................................................... E-5
Appendix F: Geometry Representations F-1
Surface Parameterization ....................................................................................... F-2
Plane ................................................................................................................ F-3
Cylinder ............................................................................................................ F-3
Cone................................................................................................................. F-4
Torus ................................................................................................................ F-5
General Surface of Revolution ......................................................................... F-6
Ruled Surface................................................................................................... F-6
Tabulated Cylinder ........................................................................................... F-7
Coons Patch..................................................................................................... F-8
Fillet Surface .................................................................................................... F-8
Spline Surface .................................................................................................. F-9
NURBS Surface ............................................................................................. F-10
Cylindrical Spline Surface .............................................................................. F-11
Edge and Curve Parameterization........................................................................ F-13
Line................................................................................................................. F-13
Arc .................................................................................................................. F-14
Spline ............................................................................................................. F-14
NURBS........................................................................................................... F-15
Appendix G: J-Link Classes G-1
List of J-Link Classes.............................................................................................. G-2

Contents - xii J-Link User’s Guide


About This Guide

This section contains information about the contents and


conventions of this user guide.

Topic Page

Purpose ii
Audience ii
Contents ii
Prerequisites iv
Documentation iv
Software Product Concerns and Documentation Comments v

About This Guide - i


Purpose
This manual describes how to use J-Link, a Java language toolkit
for Pro/ENGINEER. J-Link makes possible the development of
Java programs that access the internal components of a
Pro/ENGINEER session, to customize Pro/ENGINEER models.

Audience
This manual is intended for experienced Pro/ENGINEER users who
are already familiar with Java or another object-oriented language.

Contents
This manual contains the following chapters and appendixes:

Chapter 1 , Setting Up J-Link—Describes how to set up your


environment so you can run J-Link.
Chapter 2, Java Programming Considerations—An overview of
the Java programming language.
Chapter 3, Overview of J-Link—Describes the fundamentals of
Pro/J.Link.
Chapter 4, J-Link Programming Considerations—Tips and
considerations for use when developing applications for J-Link
Chapter 5, The J-Link Online Browser—Describes how to use
the online browser provided with J-Link
Chapter 6, Session Objects—Describes how to program on the
session level using J-Link.
Chapter 7, Selection—Describes using Interactive Selection in
J-Link.
Chapter 8, Menus, Commands, and Pop-up Menus—Describes
how to create and modify menus, commands, and pop-up menus
in the Pro/ENGINEER user interface using J-Link.
Chapter 9, Models—Describes how to program on the model
level using J-Link.
Chapter 10, Drawings—Describes how to program drawing
functions using J-Link.
Chapter 11, Solid—Describes how to program with solids using
J-Link.

ii - About This Guide J-Link User’s Guide


Chapter 12, Windows and Views—Describes how to access
Pro/ENGINEER windows and saved views using J-Link.
Chapter 13, ModelItem—Describes the J-Link methods that
enable you to access and manipulate ModelItems.
Chapter 14, Features—Describes how to program on the
feature level using J-Link.
Chapter 15, Datum Features—Describes methods for reading

About This Guide


the properties of Datum features.
Chapter 16, Geometry Evaluation—Describes geometry
representation, and how to evaluate geometry using J-Link.
Chapter 17, Dimensions and Parameters—Describes the J-Link
methods and classes that affect dimensions and parameters.
Chapter 18, Relations—Describes how to access relations on all
models and model items in Pro/ENGINEER using J-Link.
Chapter 19, Assemblies and Components—Describes the J-Link
methods that access the Pro/ENGINEER assembly.
Chapter 20, Family Tables—Describes how to use J-Link
classes and methods to access and manipulate family table
information.
Chapter 21, Action Listeners—Describes the J-Link methods
that enable you to use action listeners.
Chapter 22, Interface—Describes various ways of importing
and exporting files.
Chapter 23, Simplified Representations—Allows you to use a
simple reproduction of a complicated subassembly to reduce
regeneration time.
Chapter 24, Asynchronous Mode—A multi-process mode where
J-Link and Pro/ENGINEER can perform concurrent operations.
Chapter 25, Task Based Application Libraries—Describes how
applications created using the different Pro/ENGINEER API
products are interoperable.
Chapter 26, Graphics—Covers J-Link Graphics including
displaying lists, displaying text and using the mouse.
Chapter 27, External Data—Describes how to use external data
in J-Link.
Chapter 28, Windchill Connectivity APIs—Describes the J-Link
APIs that support Windchill servers and server operations in a
connected Pro/ENGINEER session.

About This Guide - iii


Appendix A, Summary of Technical Changes—Contains a list of
new and enhanced capabilities for J-Link under
Pro/ENGINEER Wildfire 5.0.
Appendix B, Sample Applications—Lists the sample
applications provided with J-Link.
Appendix C, Java Options and Debugging—Describes how to
control the procedure used by Pro/ENGINEER to invoke J-Link
applications.
Appendix D, Digital Rights Management—Describes
implications of DRM on J-Link applications.
Appendix E, Geometry Traversal—Illustrates the relationships
between faces, contours, and edges.
Appendix F, Geometry Representations—Describes the
geometry representations of the data used by J-Link.
Appendix G, J-Link Classes—Lists and briefly describes the
classes that make up the J-Link interface.

Prerequisites
This manual assumes you have the following knowledge:

• Pro/ENGINEER
• The syntax and language structure of Java.

Documentation
The documentation for J-Link includes the following:

• J-Link User’s Guide.


• An online browser that describes the syntax of the J-Link
methods and provides a link to the online version of this
manual. The online version of the documentation is updated
more frequently than the printed version. If there are any
discrepancies, the online version is the correct one.

Conventions
The following table lists conventions and terms used throughout
this book.

iv - About This Guide J-Link User’s Guide


Convention Description
# The pound sign (#) is the convention used for
a UNIX prompt.
UPPERCASE Pro/ENGINEER-type menu name (for
example, PART).

About This Guide


Boldface Windows-type menu name or menu or dialog
box option (for example, View), or utility.
Boldface font is also used for keywords,
J-Link methods, names of dialog box
buttons, and Pro/ENGINEER commands.
Monospace Code samples appear in courier font
(Courier) like this. Java aspects (methods, classes,
data types, object names, and so on) also
appear in Courier font.
Emphasis Important information appears in italics like
this. Italic font is also used for file names
and uniform resource locators (URLs).
Mode An environment in Pro/ENGINEER in which
you can perform a group of closely related
functions (Drawing, for example).
Model An assembly, part, drawing, format, layout,
case study, sketch, and so on.
Solid A part or an assembly.

Notes:
• Important information that should not be overlooked
appears in notes like this.
• All references to mouse clicks assume the use of a
right-handed mouse.

Software Product Concerns and


Documentation Comments
For resources and services to help you with PTC software products,
see the PTC Customer Service Guide. It includes instructions for
using the World Wide Web or fax transmissions for customer
support.

About This Guide - v


In regard to documentation, PTC welcomes your suggestions and
comments. You can send feedback in the following ways:

• Send comments electronically to doc-webhelp@ptc.com.


• Fill out and mail the PTC Documentation Survey in the
customer service guide.

vi - About This Guide J-Link User’s Guide


1
Setting Up J-Link

This chapter describes how to set up your environment so you can


run J-Link.

Topic Page

Setting Up Your Machine 1-2


Setting Up a Synchronous J-Link Program 1-3

1-1
Setting Up Your Machine
See Java Options and Debugging for more information about
supported Java Virtual Machines and how to setup
Pro/ENGINEER.

Setting Up a Synchronous J-Link Program


A synchronous J-Link application is started and managed by
Pro/ENGINEER. Control belongs to either Pro/ENGINEER or the
application, but not both at the same time.

An asynchronous application is started independent of


Pro/ENGINEER with the option to start or connect to
Pro/ENGINEER processes. Refer to chapter "Asynchronous Mode"
for details on setting up an asynchronous application.

You can run synchronous J-Link programs as standalone


applications or model-specific programs. Most of the required
settings for these two programs are independent of the programs
themselves. This enables you to convert an application program to a
model program, or vice versa.

Standalone Applications
You can start the J-Link application independently at any time,
regardless of which models are in session. A registry file contains
key information regarding the execution of the program.

Using application programs you can make additions to the


Pro/ENGINEER user interface, gather or change data associated
with the models in session, or add session-level ActionListener
routines. See the chapter Action Listeners for more information on
ActionListeners.

Registry File
A registry file contains Pro/ENGINEER-specific information about
the standalone application you want to load.

The registry file called protk.dat is a simple text file, where each
line consists of one predefined keyword followed by a value. The
standard form of the protk.dat file is as follows:
name java_demo
startup java
java_app_class MyJavaApp

1-2 J-Link User’s Guide


java_app_start start
java_app_stop stop
allow_stop true
delay_start true
text_dir <path to text directory used by
message and menu related commands>
end

The fields of the registry file are as follows:

Setting Up J-Link
• name—Assigns a unique name to this J-Link application. The
name identifies the application when there is more than one in
the protk.dat file. The maximum size of the name is 31
characters for the name, plus the end-of-string character.
• startup—Specifies the method to be used by Pro/ENGINEER to
communicate with the application. For J-Link applications, set
startup to “java.”
• java_app_class—Specifies the fully qualified package and name
of a Java class. This class contains the J-Link application’s
start and stop methods (described below).
• java_app_classpath—An optional field to specify the full path to
the J-Link application classes and archives (including the
J-Link archive pfc.jar). Refer to the section "CLASSPATH
Variables" section for more information on the other available
mechanisms to set the CLASSPATH. This field has a character
limit of 2047 wide characters (wchar_t).
• java_app_start—Specifies the start method of your program.
See the section Start and Stop Methods on page 1 - 7 for more
information.
• java_app_stop—Specifies the stop method of your program. See
the section Start and Stop Methods on page 1 - 7 for more
information.
• allow_stop—Stops the application during the session if it is set
to true. If this field is missing or set to false, you cannot stop the
application, regardless of how it was started.
• delay_start—Enables you to choose when to start the J-Link
application if it is set to true. Pro/ENGINEER does not start the
J-Link application during startup. If this field is missing or is
set to false, the J-Link application starts automatically.

Setting Up J-Link 1-3


• text_dir—Specifies the location of the text directory that
contains the language-specific directories. The
language-specific directories contain the message files, menu
files, resource files and UI bitmaps in the language supported
by the J-Link application. The files must be located under a
directory called "text" or "text/<language>", if localized
messages are used in the application. This field has a character
limit of 2047 wide characters (wchar_t).
• end—Indicates the end of the description of the J-Link
application. You can define multiple J-Link applications in the
registry files. All these applications are started by
Pro/ENGINEER.

Registering a J-Link Application


Registering a J-Link application means providing information
about the files that form the J-Link application to Pro/ENGINEER.
To do this, create a small text file, called the J-Link “registry file,”
that Pro/ENGINEER will find and read.

Pro/ENGINEER searches for the registry file in the following order:

1. A file called protk.dat or prodev.dat in the current directory


2. A file named in a “PROTKDAT”, “PRODEVDAT”, or
“TOOLKIT_REGISTRY_FILE” statement in the
Pro/ENGINEER configuration file
3. A file called protk.dat or prodev.dat in the directory
<Pro/ENGINEER>/<MACHINE>/text/<LANGUAGE>
4. A file called protk.dat or prodev.dat in the directory
<Pro/ENGINEER>/text
In the last two options, the variables are as follows:

• <Pro/ENGINEER>—The Pro/ENGINEER loadpoint (not the


J-Link loadpoint)
• <MACHINE>—The machine-specific subdirectory such as
i486_nt
• <LANGUAGE>—The language of Pro/ENGINEER with which
the J-Link application is used such as “usascii” (English),
“german”, or “japanese”

1-4 J-Link User’s Guide


If more than one registry file having the same filename exists in
this search path, J-Link stops searching after finding the first
instance of the file and starts all the J-Link applications specified in
it. If more than one registry file having different filenames exists in
this search path, Pro/ENGINEER stops searching after finding one
instance of each of them and starts all the J-Link applications
specified in them.

Option 1 is used normally during development, because the J-Link

Setting Up J-Link
application is seen only if you start Pro/ENGINEER from the
specific directory that contains protk.dat. or protk.dev.

Option 2 or 4 is recommended when making an end-user


installation, because it makes sure that the registry file is found
irrespective of thedirectory used to start Pro/ENGINEER.

Option 3 enables you to have a different registry file for each


platform, and for each Pro/ENGINEER language. This is more
commonly used for J-Link applications that have a platform
dependent setup.

Starting and Stopping a Standalone Application


If the delay_start field in the registry file is set to false, the J-Link
application starts automatically when you start Pro/ENGINEER.
Otherwise start the program by following these steps:

1. From the Pro/ENGINEER toolbar, select Utilities > Auxiliary


Applications.
2. Choose the name of the application.
3. Click Start.
• Start - activates start method
• Stop - activates stop method
If the allow_stop field in the registry file is set to true, you can click
Stop in the Auxiliary Applications dialog box to stop the
application. Click Start to restart it. If the allow_stop field is set to
false, the program runs until the Pro/ENGINEER session ends.

Setting Up a Model Program


A model program is a J-Link program specific to a particular solid
model, that is part or assembly. Pro/ENGINEER activates the start
method for a program when it loads the part into memory and
activates the stop method when it erases the part from memory.

Setting Up J-Link 1-5


Using model programs you can add programming logic to the
interaction with a solid model. You can create a dialog box to drive
the regeneration of a part or create model-specific utilities to
generate reports or engineering information from a model. As Java
programs are platform independent, the same model program runs
on any UNIX or Windows installation of Pro/ENGINEER.

To setupa a model program you need to:

• Associate and run a J-Link application with a model


• Create a JAR file for Model-Program Dependency

Associating and Running a J-Link Application with a Model


1. Load the solid model that you want to associate and run with
the J-Link application.
2. From the PART or ASSEMBLY menu, select Tools > Program
> J-Link.
3. If the application is stored in a Java archive (JAR) file, click
Add File in the Model Programs dialog box and add the JAR
file to the list of Java archive files. If the application is stored in
a .class file proceed to the next step.
4. Click Add and enter the following information in the Java
Application Properties dialog box:
• Application Name—A unique name for this J-Link
application. The maximum size of the name is 31 characters
for the name, plus the end-of-string character.
• Class Name—The Java class that contains the start and
stop methods for the J-Link application. This class must
reside in a JAR file you have added to the list or in a
directory that is part of your CLASSPATH.
• Start Method Name—The method in the Class Name
class that will be called whenever the model is loaded into a
session.
• Stop Method Name—The method in the Class Name
class that will be called whenever the model is erased.
The J-Link application immediately attempts to run. If it cannot
start successfully an exception condition is listed in the Status
column of the Model Programs dialog box.

1-6 J-Link User’s Guide


JAR File Needed for Model-Program Dependency
Although individual class files are associated with a model, there is
no dependency between the model and the program. Therefore,
Pro/INTRALINK and Windchill are not able to recognize the
relationship between the class files and the model. To create a
dependency, include all the class files and the source code in a Java
archive file (jar file). JAR files are created through the command
jar, which is a part of the standard Java Development Kit (JDK)

Setting Up J-Link
package.

To create a JAR file use a command similar to the following


command string:
jar cvf0 myjar.jar *.java *.class

Note: You must use the command-line switch 0 (zero) because


JAVA cannot read classes from compressed JAR files.
You can add JAR files to, or remove them from, a model by using
the buttons on the left side of the model program interface. All the
JAR files for the model program must be placed in the
Pro/ENGINEER search path.

Note: When naming a J-Link model program JAR file, you


must use lower case.

Start and Stop Methods


All synchronous J-Link programs must have a static start and stop
method regardless of whether they will run standalone or as model
programs. You can give these methods any name you want because
you identify them in the registry file or in the model program setup.
Pro/ENGINEER automatically calls these methods upon starting or
stopping a program. All methods that you want to call in a
particular program must be called in the start and stop methods, or
you must use the start method to register listeners to react to
events in the Pro/ENGINEER interface.

For example:
public static void startMyProgram() {
runMyUtilities();
configureMyModels();
addMyUI();
}

public static void stop() {


cleanupModels();
outputToPrinterFiles();

Setting Up J-Link 1-7


}

J-Link start and stop methods must be public, static, return void
and take no arguments. You can configure applications based on
the Pro/ENGINEER version and build or custom command line
arguments using methods described in the Session chapter.

1-8 J-Link User’s Guide


2
Java Programming
Considerations

This chapter contains a brief overview of the Java programming


language. None of the information provided in this chapter is
specific to J-Link.

Topic Page

Use of the JDK in J-Link Applications 2-2


Java Overview 2-3
Java Keywords 2-4
Java Data Types 2-4
Event Handling 2-6
Comments 2-7

2-1
Use of the JDK in J-Link Applications
Sun Microsystems provides a large number of objects and methods
with the Java Development Kit (JDK). These objects and methods
include the following:

• Utilities and methods for a large volume of common


programming tasks—Java has APIs for manipulating data,
creating vectors (expandable arrays), responding to events,
creating queues, and creating hash tables.
• Methods for file manipulation—The java.io API contains
objects that enable you to read and write data to and from files.
• Creation of Web-enabled applets—The java.applet API
enables quick creation of a Java applet for use in an HTML
page.
• Access to user interface components—The java.awt and
“Swing” APIs allow creation of simple and complex user
interfaces.
• Java Database Connectivity (JDBC)—JDBC provides
interaction with database objects
For information on specific classes and methods in the Java API’s,
visit the Sun Web site at the following URL:

http://java.sun.com/reference/docs

Examples in this guide usually do not use classes from the Java
API beyond the ones found in the package java.lang. Most of the
other packages can be used to improve a J-Link program, but they
are not absolutely necessary to create the program.

2-2 J-Link User’s Guide


Java Overview
Java is an object-oriented programming language that offers
portability across multiple platforms.

Note: The Java Overview presented here describes technical


information known to be true for Java version 1.1.5.
Later Java versions may render some of this

Java Programming
information incorrect or obsolete.

Considerations
Java offers the following benefits:

• Inheritance—One of the fundamental concepts of an


object-oriented language is inheritance. A subclass inherits
variables and methods not only from the class above it but also
from all of its ancestors. Consider the following code:
class A {
public A() {
// Constructor of class A
}
}

class B extends A {
public B() {
//A is a superclass of B, B is a subclass of A.
}
}

Java does not support multiple inheritance. But


implementation of an interface is a way around this restriction.
For example:
interface A {
public void doNothing();
// Only the declaration of a method
}

// Constructor of B
class B implements A {
// Implementation of this method
public void doNothing() {
}
}

• Polymorphism—You can substitute a derived class whenever


its base class is required.

Java Programming Considerations 2-3


• Method overriding and overloading—You can redefine a
superclass method with an exact signature and return type. In
addition, you can define methods or constructors with different
signatures.
• Platform-independent interpreter—Java is
architecture-neutral. When you compile a Java program, the
compiler translates your program into platform-independent
instructions called Java bytecodes. You then use an interpreter
to parse each Java bytecode and run it on the computer. Your
Java program is compiled only once, but is interpreted each
time you run it.
Java bytecodes are like machine code instructions for the Java
Virtual Machine (JVM).
• High performance—Java is a high-performance language
that is dynamic—you can load Java classes into a running Java
interpreter.
• No pointers—Java does not allow you to use pointers to
directly reference memory locations. However, all object
references are, in effect, pointers, because they refer to a
location in memory that contains an object. Therefore, setting
one object equal to another does not create a new version of the
object. For example:
String mystring = yourstring;

In this example, a new String object is not created.


• Garbage collection—Java does not require you to free
memory after you are finished with it. The garbage collection
routines within the JVM recognize data that is no longer used
and automatically free the memory.
• No preprocessors—Java does not include a command
preprocessor like C or C++. Therefore, you cannot declare global
constants as you do in C. Instead, you can declare a field within
an object to be static and final, which effectively declares that
field to be constant.

Java Keywords
This section describes the Java keywords most commonly used
when using J-Link.

The following keywords specify the accessibility to data:

2-4 J-Link User’s Guide


• public—Accessible from the class, subclass, package, and
world.
• private—Accessible only from the class.
• protected—Accessible from the class, subclass, and package.
• package—Accessible from the class and package. This is the
default access.

Java Programming
The following keywords describe variables or methods:

Considerations
• static—The method or variable is not attached to a particular
object, but to an entire class.
The advantage of a static method is that you do not need to
define an instance of the class in order to use the method.
• final—Specifies that the class, method, or field will not be
modified by another object.
A static final declaration identifies a constant.
• new—Creates instances of various classes. The following
statement shows an example of instantiation:
String mystring = new String ("This is my string.");

Except for single objects, you cannot use the new keyword to
initialize J-Link objects. You can use new to construct objects
that do not explicitly belong to J-Link (that is, Java API
objects).
• instanceof—The Java instanceof operator is a way to
determine whether a particular object can be correctly cast to a
specified class. The instanceof operator produces a Boolean
value that identifies whether the object is a member of that
class. The typical use is as follows:
if (<objectname> instanceof <classname>)

In J-Link this operator should be used to distinguish between


various levels of inheritance.

Java Programming Considerations 2-5


Java Data Types
Java allows primitive types to be wrapped inside of classes. These
wrappers are used to provide an object definition for every type of
data within Java. In J-Link, certain methods take a wrapped object
argument instead of a primitive type. You can convert one to the
other by creating a new instance, as in the following example:
boolean yes_or_no = true;
Boolean yes_or_no_object = new Boolean (yes_or_no);
Integer seven = new Integer (7);

The following table lists the type wrappers provided by Java.

Data Type Java Wrapper


Class
int Integer
float Float
double Double
char Character
byte Byte
boolean Boolean
— String

Note: Java represents character strings only as objects, not as


arrays of characters. There is no corresponding
primitive string type.
The following keywords specify the implementation types:

native—A method implemented in another language (usually C or


C++) that can be called from Java

abstract—A method or class that has no implementation

Event Handling
Java implements listeners and adapters to notify you of certain
events. There are three kinds of listeners:

• ActionListener—Waits for a specified action, such as clicking on


a button in a dialog box

2-6 J-Link User’s Guide


• ItemListener—Waits for a specified item, such as a checked
check box
• FocusListener—Waits for a specified keyboard or mouse focus
event on a component
Java exceptions enable you to test for and handle certain events. To
create event handling, use the following keywords:

Java Programming
try—Execute a control block using predeclared exception

Considerations
handlers.
• catch—Specify the exceptions to “catch” in a try block.
• finally—Specify a control block to be applied after a try block,
regardless of whether an exception is handled by a catch clause
within the try block.
• throw—Immediately send control to a handler for that specific
exception.

Comments
Java provides three different types of comment characters:
C++-style, C-style, and javadoc-style.

As in the C++ language, two double slashes (//) are used to specify a
one-line comment. For example:
.
.
.
// This method retrieves the value of the dimension.
.
.
.

Java also supports C-style comment characters (/* */). All the text
within these characters is considered a comment. For example:
.
.
.
{
/* Open the file input.txt with read-only
access. */

inStream = new RandomAccessFile ("input.txt", "r");


.
.
.

Java Programming Considerations 2-7


Java also supports documentation comments for javadoc, a tool
that automatically creates Web pages from your code. See the URL
http://java.sun.com/products/jdk/javadoc/index.html for more
information on javadoc.

Documentation comments are delimited by the characters “/**” and


“*/”. For example:
/** The following code example shows how to create a
* random-access file. The program reads a line from
* one file (input.txt) and writes it to another file
* (output.txt).
*/
.
.
.

2-8 J-Link User’s Guide


3
Overview of J-Link

This chapter provides an overview of J-Link.

Topic Page

Class Types 3-2


Creating Applications 3 - 14

3-1
Class Types
J-Link is made up of a number classes in many packages. The
following are the eight main classes.

• Pro/ENGINEER-Related Interfaces—Contain unique


methods and attributes that are directly related to the
functions in Pro/ENGINEER.
• Compact Data Classes—Classes containing data needed as
arguments to some J-Link methods. See the section, Compact
Data Classes, for additional information.
• Union Classes—A class with a potential for multiple types of
values. See the section Union Classes for additional
information.
• Sequence Classes—Expandable arrays of objects or
primitive data types. See the section Sequences for more
information.
• Array Classes—Arrays that are limited to a certain size. See
the section Arrays for more information.
• Enumeration Classes—Defines enumerated types. See the
section Enumeration Classes for more information.
• ActionListener Classes—Enables you to specify programs
that will run only if certain events in Pro/ENGINEER take
place. See the Action Listeners section for more information.
• Utility Classes—Contains static methods used to initialize
certain J-Link objects. See the Utilities section for more
information.
Each class shares specific rules regarding initialization, attributes,
methods, inheritance, or exceptions. The following seven sections
describe these classes in detail.

Pro/ENGINEER-Related Interfaces
The Pro/ENGINEER-related interfaces contain methods that
directly manipulate objects in Pro/ENGINEER. Examples of these
objects include models, features, and parameters.

Initialization
You cannot construct one of these objects using the Java keyword
new. Some objects that represent Pro/ENGINEER objects cannot
be created directly but are returned by a Get or Create method.

3-2 User’s Guide


For example, pfcSession.Session.GetCurrentModel returns a
Model object set to the current model and
pfcModelItem.ParameterOwner.CreateParam returns a
newly created Parameter object for manipulation.

Attributes
Attributes within Pro/ENGINEER-related objects are not directly

Overview of J-Link
accessible, but can be accessed through Get and Set methods.
These methods are of the following types:
Attribute name: int XYZ
Methods: int GetXYZ();
void SetXYZ (int i);

Some attributes that have been designated as read can only be


accessed by the Get method.

Methods
You must start Methods from the object in question and you must
first initialize that object. For example, the following calls are
illegal:
Window window;

window.Activate(); // The window has not yet been


initialized.

Repaint(); // There is no invoking object.

The following calls are legal:


Session session = pfcGlobal.GetProESession();
Window window = session.GetCurrentWindow();
// You have initialized the window object.
window.Activate()
window.Repaint()

Inheritance
All Pro/ENGINEER related objects are defined as interfaces so that
they can inherit methods from other interfaces. To use these
methods, call them directly (no casting is needed). For example:
public interface Feature
extends jxobject,
pfcModelItem.ParameterOwner,
pfcObject.Parent,
pfcObject.Object,

Overview of J-Link 3-3


pfcModelItem.ModelItem

Feature myfeature; // Previously initialized

String name = myfeature.GetName();// GetName is in the


// class ModelItem.

However, if you have a reverse situation, you need to explicitly cast


the object. For example:
ModelItem item; // You know this is a Feature -- perhaps
// you previously checked its type.

int number = ((Feature)item).GetNumber();


// GetNumber() is a Feature method.

Exceptions
Almost every J-Link method can throw an exception of type
com.ptc.cipjava.jxthrowable. Surround each method you use
with a try-catch-finally block to handle any exceptions that are
generated. See the Exceptions section for more information.

Compact Data Classes


Compact data classes are data-only classes. They are used, as
needed, for arguments and return values for some J-Link methods.
They do not represent actual objects in Pro/ENGINEER.

Initialization
You can create instances of these classes using a static create
method.
Example: pfcModel.BOMExportIntructions_Create()

This static method usually belongs to the utility class in the specific
package that the compact data class belong to.

Attributes
Attributes within compact data related classes are not directly
accessible, but can be accessed through Get and Set methods.
These methods are of the following types:
Attribute name: int XYZ
Methods: int GetXYZ();
void SetXYZ (int i);

3-4 User’s Guide


Methods
You must start Methods from the object in question and you must
first initialize that object. For example, the following calls are
illegal:
SelectionOptions options;

options.SetMaxNumSels(); // The object has not been

Overview of J-Link
initialized.
SetOptionsKeywords(); // There is no invoking object

Inheritance
Compact objects can inherit methods from other compact interfaces.
To use these methods, call them directly (no casting needed).

Exceptions
Almost every J-Link method can throw an exception of type
com.ptc.cipjava.jxthrowable. Surround each method you use
with a try-catch-finally block to handle any exceptions that are
generated.

Unions
Unions are interface-like objects. Every union has a discriminator
method with the pre-defined name Getdiscr( ). This method returns
a value identifying the type of data that the union objects holds. For
each union member, a pair of (Get/Set) methods is used to access
the different data types. It is illegal to call any Get method except
the one that matches the value returned from Getdiscr( ). However,
any Set method can be called. This switches the discriminator to
the new value.

The following is an example of a J-Link union:

class ParamValue
{
public:
ParamValueType Getdiscr ();
String GetStringValue ();
void SetStringValue (String value);
int GetIntValue ();
void SetIntValue (int value);
boolean GetBoolValue ();
void SetBoolValue (boolean value);
double GetDoubleValue ();
void SetDoubleValue (double value);

Overview of J-Link 3-5


int GetNoteId ();
void SetNoteId (int value);
};

Sequences
Sequences are expandable arrays of primitive data types or objects
in J-Link. All sequence classes have the same methods for adding to
and accessing the array. Sequence classes are identified by a plural
name, or the suffix “seq”.

Initialization
You cannot construct one of these objects using the Java keyword
new. Static create methods for each list type are available. For
example, pfcModel.Models.create() returns an empty Models
sequence object for you to fill in.

Attributes
The attributes within sequence objects must be accessed using
methods.

Methods
Sequence objects always contain the same methods: get, set,
getarraysize, insert, insertseq, removerange, and create.
Methods must be invoked from an initialized object of the correct
type, except for the static create method, which is invoked from the
sequence class.

Inheritance
Sequence classes do not inherit from any other J-Link classes.
Therefore, you cannot cast sequence objects to any other type of
J-Link object, including other sequences. For example, if you have a
list of model items that happen to be features, you cannot make the
following call:
Features features = (Features) modelitems;

To construct this array of features, you must insert each member of


the list separately while casting it to a Feature.

3-6 User’s Guide


Exceptions
If you try to get or remove an object beyond the last object in the
sequence, the exception cipjava.XNoAttribute is thrown.

Example Code: Sequence Class


The following example code shows the sequence class

Overview of J-Link
com.ptc.pfc.pfcModel.Models.
package com.ptc.pfc.pfcModel;

public class Models extends jxobject_i


{

public int getarraysize() throws jxthrowable

public Model get (int idx) throws jxthrowable

public void set (


int idx,
Model value
) throws jxthrowable

public void removerange (


int frominc,
int toexcl
) throws jxthrowable

public void insert (


int atidx,
Model value
) throws jxthrowable
public void insertseq (
int atidx,
pfcModel.Models value
) throws jxthrowable

public static pfcModel.Models create() throws jxthrowable


}

Arrays
Arrays are groups of primitive types or objects of a specified size.
An array can be one or two dimensional. The following array classes
are in the pfcBase package: Matrix3D, Point2D, Point3D,
Outline2D, Outline3D, UVVector, UVParams, Vector2D, and
Vector3D. See the online reference documentation to determine
the exact size of these arrays.

Overview of J-Link 3-7


Initialization
You cannot construct one of these objects using the Java keyword
new. Static creation methods are available for each array type. For
example, the method pfcBase.Point2D.create returns an empty
Point2D array object for you to fill in.

Attributes
The attributes within array objects must be accessed using
methods.

Methods
Array objects always contain the same methods: get, set, and
create. Methods must be invoked from an initialized object of the
correct type, except for the create method, which is invoked from
the name of the array class.

Inheritance
Array classes do not inherit from any other J-Link classes.

Exceptions
If you try to access an object that is not within the size of the array,
the exception cipjava.XNoAttribute is thrown.

Example Code - Array Class


The following example code shows the array class
com.ptc.pfc.pfcBase.Point2D.
package com.ptc.pfc.pfcBase;

public class Point2D extends jxobject_i


{
public double get (int idx0) throws jxthrowable

public void set (


int idx0,
double value
) throws jxthrowable

public static Point2D create() throws jxthrowable


};

3-8 User’s Guide


Enumeration Classes
In J-Link, enumeration classes are used in the same way that an
enum is used in C or C++. An enumeration class defines a limited
number of static final instances which correspond to the members
of the enumeration. Each static final instance has a corresponding
static final integer constant. In the FeatureType enumeration
class the static instance FEATTYPE_HOLE has as it’s integer

Overview of J-Link
equivalent _FEATTYPE_HOLE . Enumeration classes in J-Link
generally have names of the form XYZType or XYZStatus.

Enumeration instances are passes whenever a method requires you


to choose among multiple options. Use the integer constants where
an int is required (such as cases in a switch statement).

Initialization
You cannot construct one of these objects. You simply use the name
of the static instance or static integer constant.

Attributes
An enumeration class is made up of constant integer attributes and
static instances of the enumerated class type. Related integers and
instances have the same name, except the integer attribute begins
with an underscore (_). The names of these attributes are all
uppercase and describe what the attribute represents. For example:

• PARAM_INTEGER—An instance of the ParamValueType


enumeration class that is used to indicate that a parameter
stores an integer value. The corresponding integer is
_PARAM_INTEGER.
• ITEM_FEATURE—An instance of the ModelItemType
enumeration class that is used to indicate that a model item is a
feature. The corresponding integer is_ ITEM_FEATURE.
An enumeration class always has an integer attribute named
“__Last”, which is one more than the highest acceptable numerical
value for that enumeration class.

Methods
Enumeration classes have one method that you are likely to use:

• getValue—Returns the integer value of an enumeration


instance.

Overview of J-Link 3-9


Inheritance
Enumeration classes do not inherit from any other J-Link classes.

Exceptions
Enumeration classes do not throw exceptions.

Example Code: Enumeration Class


The following example code shows the enumeration class
com.ptc.pfc.pfcBase.Placement.
package com.ptc.pfc.pfcBase;

public final class Placement


{
public static final int _PLACE_INSIDE = 0;

public static final Placement PLACE_INSIDE =


new Placement (_PLACE_INSIDE);

public static final int _PLACE_ON_BOUNDARY = 1;

public static final Placement PLACE_ON_BOUNDARY =


new Placement (_PLACE_ON_BOUNDARY);

public static final int _PLACE_OUTSIDE = 2;

public static final Placement PLACE_OUTSIDE =


new Placement (_PLACE_OUTSIDE);

public static final int __Last = 3;

public static Placement FromInt (int value)

public int getValue()


};

Action Listeners
Use ActionListeners in J-Link to assign programmed reactions
to events that occur within Pro/ENGINEER. J-Link defines a set of
action listener interfaces that can be implement enabling
Pro/ENGINEER to call your J-Link application when specific
events occur. These interfaces are designed to respond to events
from action sources in Pro/ENGINEER. Examples of action sources
include the session, user-interface commands, models, solids,
parameters, and features.

3 - 10 User’s Guide
Initialization
For each of its defined ActionListener interfaces, J-Link
provides a corresponding default implementation class. For
example, the SolidActionListener interface has a
corresponding DefaultSolidActionListener implementation.
All of the default action listener classes override every listener
method with an empty method.

Overview of J-Link
You must use the default implementation to construct applications.
You cannot directly implement the SolidActionListener
interface, as this interface will be missing the routing used
internally by J-Link

You implement an action listener class by inheriting the


appropriate default class and overriding the methods that respond
to specific events. For the other events, Pro/ENGINEER calls the
empty methods inherited from the default class.

Construct your ActionListener classes using the Java keyword


new. Then assign your ActionListener to an ActionSource
using the AddActionListener() method of the action source.

Attributes
Action listeners do not have any accessible attributes.

Methods
You must override the methods you need in the default class to
create an ActionListener object correctly. The methods you
create can call other methods in the ActionListener class or in
other classes.

Inheritance
All J-Link ActionListener objects inherit from the interface
pfcBase.ActionListener.

Exceptions
Action listeners cause methods to be called outside of your
application start and stop methods. Therefore, you must include
exception-handling code inside the ActionListener
implementation if you want to respond to exceptions. In some
methods called before an event, propagating an exception out of
your method will cancel the impending event.

Overview of J-Link 3 - 11
Example Code: Listener Class
The following example code shows part of the
SolidActionListener interface.
package com.ptc.pfc.pfcSolid;

public interface SolidActionListener extends


jxobject,
com.ptc.pfc.pfcBase.ActionListener

{
void OnBeforeRegen (
com.ptc.pfc.pfcSolid.Solid Sld,
com.ptc.pfc.pfcFeature.Feature /* optional */ StartFeature
) throws jxthrowable;

void OnAfterRegen (
com.ptc.pfc.pfcSolid.Solid Sld,
com.ptc.pfc.pfcFeature.Feature /* optional */ StartFeature,
boolean WasSuccessful
) throws jxthrowable;

void OnBeforeUnitConvert (
com.ptc.pfc.pfcSolid.Solid Sld,
boolean ConvertNumbers
) throws jxthrowable;

void OnAfterUnitConvert (
com.ptc.pfc.pfcSolid.Solid Sld,
boolean ConvertNumbers
) throws jxthrowable;
};

Utilities
Each package in J-Link has one class that contains special static
methods used to create and access some of the other classes in the
package. These utility classes have the same name as the package,
such as pfcModel.pfcModel.

Initialization
Because the utility packages have only static methods, you do not
need to initialize them. Simply access the methods through the
name of the class, as follows:
ParamValue pv = pfcModelItem.CreateStringParamValue
("my_param");

3 - 12 User’s Guide
Attributes
Utilities do not have any accessible attributes.

Methods
Utilities contain only static methods used for initializing certain

Overview of J-Link
J-Link objects.

Inheritance
Utilities do not inherit from any other J-Link classes.

Exceptions
Methods in utilities can throw jxthrowable type exceptions.

Sample Utility Class


The following code example shows the utility class
com.ptc.pfc.pfcGlobal.pfcGlobal.
package com.ptc.pfc.pfcGlobal;

public class pfcGlobal


{
public static pfcSession.Session GetProESession()
throws jxthrowable
public static stringseq GetProEArguments()
throws jxthrowable
public static string GetProEVersion()
throws jxthrowable
public static string GetProEBuildCode()
throws jxthrowable
}

Overview of J-Link 3 - 13
Creating Applications
The following sections describe how to create applications. The
topics are as follows:

• Importing Packages
• Application Hierarchy
• Exception Handling

Importing Packages
To use pfc code in your application you must import the necessary
packages. Import each class or package with a statement similar to
the following:
For the Parameter class only:

import com.ptc.pfc.pfcModelItem.Parameter;

For the package pfcBase (all classes):

import com.ptc.pfc.pfcBase.*;

You might also need to import the methods in com.ptc.cipjava,


which contains the underlying J-Link structure, including
exceptions and certain sequences.. Use the following statement:
import com.ptc.cipjava.*;

Application Hierarchy
The rules of object orientation require a certain hierarchy of object
creation when you start a J-Link application. The pfc method
invoked must be pfcGlobal.GetProESession, which returns a
handle to the current session of Pro/ENGINEER.

The application must iterate down to the level of object you want to
access. For example, to list all the datum axes contained in the hole
features in all models in session, do the following:

1. Get a handle to the session:


pfcGlobal.GetProESession();
2. Get the models that are active in the session:
session.ListModels();
3. Get the feature model items in each model:

3 - 14 User’s Guide
model.ListModelItems
(ModelItemType.ITEM_FEATURE);
4. Filter out the features of type hole:
feature.GetFeatureType();
5. Get the subitems in each feature that are axes:
feature.ListSubItems

Overview of J-Link
(ModelItemType.ITEM_AXIS);

Exception Handling
Nearly all J-Link methods are declared as throwing the
jxthrowable exception, as shown here in the declaration of
Model.CreateLayer().
com.ptc.pfc.pfcLayer.Layer CreateLayer (
String Name
) throws jxthrowable;

In fact, the jxthrowable exception is never actually thrown. It is


the parent class of all the exceptions that are thrown by J-Link
methods and satisfies Java’s requirement that a method’s
declaration include the exceptions that it throws.

The following figure organizes the J-Link exceptions into three


categories to facilitate the discussion that follows.

Overview of J-Link 3 - 15
Figure 3-1: J-Link Exception Classes

java.lang.Exception

com.ptc.cipjava.jxthrowable

XInvalidArrayDimIndex XPFC

XInvalidArrayIndex XInAMethod

XInvalidDictIndex XBadGetParamValue

XNegativeIndex XInvalidEnumValue

XLicense XUnimplemented

XCannotConnect XUnknownModelExtension

XConnectionClosed XToolkitError

XFlushFailed Pro/TOOLKIT Errors

XBadArgument
XMsgStringTooLong

XNativeException XBadOutlineExcludeType

Other, Internal errors XEmptyString

cipjava exceptions XNegativeNumber

XNumberTooLarge

XSequenceTooLong

XStringTooLong

PFC exceptions

3 - 16 User’s Guide
cipjava Exceptions
The cipjava exceptions are thrown by classes in the
com.ptc.cipjava package. With the exception of the intseq,
realseq, boolseq, and stringseq classes, these classes are only
used internally.

The following table describes these exceptions.

Overview of J-Link
Exception Purpose
XInvalidArrayDimIndex, Illegal index value used when
XInvalidArrayIndex, accessing a cipjava array,
XInvalidDictIndex, sequence, or dictionary. (The J-Link
XNegativeIndex interface does not currently include
any dictionary classes.)
XLicense Licensing error (license does not
exist, lost, server down, etc.)
XMsgStringTooLong Communication synchronization
problem between Pro/ENGINEER
and J-Link application. Restart the
J-Link application.
XNativeException Unknown exception occurred in
another language. This usually
signals a serious error (such as
division by zero or class not found)
that is related to the J-Link
application.
XCannotConnect, Communication problems between
XConnectionClosed, Pro/ENGINEER and the J-Link
XFlushFailed application.
Other, internal errors Internal assertions that should not
append and which need not be
caught individually.

PFC Exceptions
The PFC exceptions are thrown by the classes that make up
J-Link’s public interface. The following table describes these
exceptions.

Exception Purpose
XBadExternalData An attempt to read contents of an
external data object which has been
terminated.

Overview of J-Link 3 - 17
Exception Purpose
XBadGetArgValue Indicates attempt to read the wrong
type of data from the ArgValue union.
XBadGetExternalData Indicates attempt to read the wrong
type of data from the ExternalData
union.
XBadGetParamValue Indicates attempt to read the wrong
type of data from the ParamValue
union.
XBadOutlineExcludeType Indicates an invalid type of item was
passed to the outline calculation
method.
XCancelProEAction This exception type will not be thrown
by J-Link methods, but you may
instantiate and throw this from certain
ActionListener methods to cancel the
corresponding action in
Pro/ENGINEER.
XCannotAccess The contents of a J-Link object cannot
be accessed in this situation.
XEmptyString An empty string was passed to a method
that does not accept this type of input.
XInvalidEnumValue Indicates an invalid value for a specified
enumeration class.
XInvalidFileName Indicates a file name passed to a method
was incorrectly structured.
XInvalidFileType Indicates a model descriptor contained
an invalid file type for a requested
operation.
XInvalidModelItem Indicates that the item requested to be
used is no longer usable (for example, it
may have been deleted).
XInvalidSelection Indicates that the Selection passed is
invalid or is missing a needed piece of
information. For example, its
component path, drawing view, or
parameters.
XJLinkApplicationException Contains the details when an attempt to
call code in an external J-Link
application failed due to an exception.

3 - 18 User’s Guide
Exception Purpose
XJLinkApplicationInactive Unable to operate on the requested
JLinkApplication object because it has
been shut down.
XJLinkTaskExists Indicates that a J-Link task with the
given name already exists in session.
XJLinkTaskNotFound Indicates that the J-Link task with the

Overview of J-Link
given name could not be found and run.
XModelNotInSession Indicates that the model is no longer in
session; it may have been erased or
deleted.
XNegativeNumber Numeric argument was negative.
XNumberTooLarge Numeric argument was too large.
XProEWasNotConnected The Pro/ENGINEER session is not
available so the operation failed.
XSequenceTooLong Sequence argument was too long.
XStringTooLong String argument was too long.
XUnimplemented Indicates unimplemented method.
XUnknownModelExtension Indicates that a file extension does not
match a known Pro/ENGINEER model
type.

Pro/TOOLKIT Errors
The XToolkitError exception provides access to error codes from
Pro/TOOLKIT functions that J-Link uses internally and to the
names of the functions returning such errors. XToolkitError is
the exception you are most likely to encounter because J-Link is
built on top of Pro/TOOLKIT. The following table lists the integer
values that can be returned by the
XToolkitError.GetErrorCode() method and shows the
corresponding Pro/TOOLKIT constant that indicates the cause of
the error. Each specific XToolkitError exception is represented by
an appropriately named child class, allowing you to catch specific
exceptions you need to handle separately.

XToolkitError Child Class Pro/TOOLKIT Error #


XToolkitGeneralError PRO_TK_GENERAL_ERROR -1
XToolkitBadInputs PRO_TK_BAD_INPUTS -2
XToolkitUserAbort PRO_TK_USER_ABORT -3

Overview of J-Link 3 - 19
XToolkitError Child Class Pro/TOOLKIT Error #
XToolkitNotFound PRO_TK_E_NOT_FOUND -4
XToolkitFound PRO_TK_E_FOUND -5
XToolkitLineTooLong PRO_TK_LINE_TOO_LONG -6
XToolkitContinue PRO_TK_CONTINUE -7
XToolkitBadContext PRO_TK_BAD_CONTEXT -8
XToolkitNotImplemented PRO_TK_NOT_IMPLEMENTED -9
XToolkitOutOfMemory PRO_TK_OUT_OF_MEMORY -10
XToolkitCommError PRO_TK_COMM_ERROR -11
XToolkitNoChange PRO_TK_NO_CHANGE -12
XToolkitSuppressedParents PRO_TK_SUPP_PARENTS -13
XToolkitPickAbove PRO_TK_PICK_ABOVE -14
XToolkitInvalidDir PRO_TK_INVALID_DIR -15
XToolkitInvalidFile PRO_TK_INVALID_FILE -16
XToolkitCantWrite PRO_TK_CANT_WRITE -17
XToolkitInvalidType PRO_TK_INVALID_TYPE -18
XToolkitInvalidPtr PRO_TK_INVALID_PTR -19
XToolkitUnavailableSection PRO_TK_UNAV_SEC -20
XToolkitInvalidMatrix PRO_TK_INVALID_MATRIX -21
XToolkitInvalidName PRO_TK_INVALID_NAME -22
XToolkitNotExist PRO_TK_NOT_EXIST -23
XToolkitCantOpen PRO_TK_CANT_OPEN -24
XToolkitAbort PRO_TK_ABORT -25
XToolkitNotValid PRO_TK_NOT_VALID -26
XToolkitInvalidItem PRO_TK_INVALID_ITEM -27
XToolkitMsgNotFound PRO_TK_MSG_NOT_FOUND -28
XToolkitMsgNoTrans PRO_TK_MSG_NO_TRANS -29
XToolkitMsgFmtError PRO_TK_MSG_FMT_ERROR -30
XToolkitMsgUserQuit PRO_TK_MSG_USER_QUIT -31
XToolkitMsgTooLong PRO_TK_MSG_TOO_LONG -32
XToolkitCantAccess PRO_TK_CANT_ACCESS -33
XToolkitObsoleteFunc PRO_TK_OBSOLETE_FUNC -34
XToolkitNoCoordSystem PRO_TK_NO_COORD_SYSTEM -35

3 - 20 User’s Guide
XToolkitError Child Class Pro/TOOLKIT Error #
XToolkitAmbiguous PRO_TK_E_AMBIGUOUS -36
XToolkitDeadLock PRO_TK_E_DEADLOCK -37
XToolkitBusy PRO_TK_E_BUSY -38
XToolkitInUse PRO_TK_E_IN_USE -39
XToolkitNoLicense PRO_TK_NO_LICENSE -40

Overview of J-Link
XToolkitBsplUnsuitableDegree PRO_TK_BSPL_UNSUITABLE_ -41
DEGREE
XToolkitBsplNonStdEndKnots PRO_TK_BSPL_NON_STD_END_ -42
KNOTS
XToolkitBsplMultiInnerKnots PRO_TK_BSPL_MULTI_INNER_ -43
KNOTS
XToolkitBadSrfCrv PRO_TK_BAD_SRF_CRV -44
XToolkitEmpty PRO_TK_EMPTY -45
XToolkitBadDimAttach PRO_TK_BAD_DIM_ATTACH -46
XToolkitNotDisplayed PRO_TK_NOT_DISPLAYED -47
XToolkitCantModify PRO_TK_CANT_MODIFY -48
XToolkitCheckoutConflict PRO_TK_CHECKOUT_CONFLICT -49
XToolkitCreateViewBadSheet PRO_TK_CRE_VIEW_BAD_SHEET -50
XToolkitCreateViewBadModel PRO_TK_CRE_VIEW_BAD_MODEL -51
XToolkitCreateViewBadParent PRO_TK_CRE_VIEW_BAD_ -52
PARENT
XToolkitCreateViewBadType PRO_TK_CRE_VIEW_BAD_TYPE -53
XToolkitCreateViewBadExplode PRO_TK_CRE_VIEW_BAD_ -54
EXPLODE
XToolkitUnattachedFeats PRO_TK_UNATTACHED_FEATS -55
XToolkitRegenerateAgain PRO_TK_REGEN_AGAIN -56
XToolkitDrawingCreateErrors PRO_TK_DWGCREATE_ERRORS -57
XToolkitUnsupported PRO_TK_UNSUPPORTED -58
XToolkitNoPermission PRO_TK_NO_PERMISSION -59
XToolkitAuthenticationFailure PRO_TK_AUTHENTICATION_FAIL -60
URE
XToolkitAppNoLicense PRO_TK_APP_NO_LICENSE -92
XToolkitAppExcessCallbacks PRO_TK_APP_XS_CALLBACKS -93
XToolkitAppStartupFailed PRO_TK_APP_STARTUP_FAIL -94

Overview of J-Link 3 - 21
XToolkitError Child Class Pro/TOOLKIT Error #
XToolkitAppInitialization PRO_TK_APP_INIT_FAIL -95
Failed
XToolkitAppVersionMismatch PRO_TK_APP_VERSION_ -96
MISMATCH
XToolkitAppCommunication PRO_TK_APP_COMM_FAILURE -97
Failure
XToolkitAppNewVersion PRO_TK_APP_NEW_VERSION -98

The exception XProdevError represents a general error that


occurred while executing a Pro/DEVELOP function and is
equivalent to an XZToolkit general Error.

The exception XExternalDataError and it’s children are thrown


from External Data methods. See the chapter on External Data for
more information.

Approaches to J-Link Exception Handling


To deal with the exceptions generated by J-Link methods surround
each method with a try-catch-finally block. For example:
try {
JLinkObject.DoSomething()
}
catch (jxthrowable x) {
// Respond to the exception.
}

Rather than catching the generic exception, you can set up your
code to respond to specific exception types, using multiple catch
blocks to respond to different situations, as follows:
try
{
Object.DoSomething()
}
catch (XToolkitError x)
{
// Respond based on the error code.
x.GetErrorCode();
}
catch (XStringTooLong x)
{
// Respond to the exception.
}
catch (jxthrowable x) // Do not forget to check for
// an unexpected error!

3 - 22 User’s Guide
{
// Respond to the exception.
}

If you do not want to surround every block of code with a try


statement, you can declare your methods to throw the
jxthrowable object. For example:
public class MyClass {

Overview of J-Link
public void MyMethod() throws jxthrowable
{
// Includes Pro/J.Link function calls
}
}

However, you must surround any calls to MyMethod() with a try


block.

Overview of J-Link 3 - 23
4
J-Link Programming
Considerations

This chapter contains information needed to develop an application


using J-Link.

Topic Page

J-Link Thread Restrictions 4-2


Optional Arguments to J-Link Methods 4-2
Parent-Child Relationships Between J-Link Objects 4-3
Run-Time Type Identification in J-Link 4-4

4-1
J-Link Thread Restrictions
When you run a synchronous J-Link program, you should configure
your program so it does not interfere with the main thread of the
Pro/ENGINEER program. Because the Java API allows you to run
with multiple threads, you should be cautious of using certain Java
routines in your program.

The most obvious restriction involves the use of Java language user
interfaces. Any Java window that you create must be a dialog box
that is blocking (or modal).

Creating a nonblocking frame causes a new thread to begin, which


can have unexpected results when running with Pro/ENGINEER.
For example, you can use the javax.swing.JDialog class and set
modal true. You cannot use javax.swing.JWindow, however,
because it starts a thread.

Optional Arguments to J-Link Methods


Many methods in J-Link are shown in the online documentation as
having optional arguments.

For example, the pfcModelItem.ModelItemOwner.ListItems


method takes an optional Type argument.
public interface ModelItemOwner extends
jxobject

{
com.ptc.pfc.pfcModelItem.ModelItems ListItems (
com.ptc.pfc.pfcModelItem.ModelItemType
/* optional */ Type
) throws jxthrowable;
}
You can pass the Java keyword null in place of any such optional
argument. In addition, a return value of null is possible for returns
that are declared optional. The J-Link methods that take optional
arguments provide default handling for null parameters as is
described in the online documentation.

4-2 J-Link User’s Guide


Note:
• If a J-Link method takes an optional primitive type, such as
an int or boolean, the argument will actually be a Java
wrapper class, so that it may be set to null.
• You can only pass null in place of arguments that are
shown in the documentation to be optional.

J-Link Programming
Optional Returns for J-Link Methods

Considerations
Some methods in J-Link may have an optional return. Usually
these correspond to lookup methods that may or may not find an
object to return. For example, the
pfcSession.BaseSession.GetModel method returns an optional
model:
public interface Session
{
/*optional*/ com.ptc.pfc.pfcModel.ModelGetModel
(java.lang.String Name,
com.ptc.pfc.pfcModel.ModelType Type);
}
J-Link might return null in certain cases where these methods are
called. You must use appropriate error checking in your application
code.

Parent-Child Relationships Between J-Link


Objects
Some J-Link objects inherit from either the interface
com.ptc.pfc.pfcObject.Parent or
com.ptc.pfc.pfcObject.Child. These interfaces are used to
maintain a relationship between the two objects. This has nothing
to do with Java inheritance. In J-Link, the Child is owned by the
Parent.

J-Link Programming Considerations 4-3


Methods Introduced:

• pfcObject.Child.GetDBParent
The method GetDBParent returns the owner of the child object.
Because the object is returned as a
com.ptc.pfc.pfcObject.Parent object, the application
developer must down cast the return to the appropriate class. The
following table lists parent/child relationships in J-Link.

Parent Child
Session Model
Session Window
Model ModelItem
Solid Feature
Model Parameter
Model ExternalDataAccess
Display DisplayList2D/3D
Part Material
Model View
Model2D View2D
Solid XSection
Session Dll (Pro/TOOLKIT)
Session Application (J-Link)

Run-Time Type Identification in J-Link


J-Link and the Java language provides several methods to identify
the type of an object. Each has its adavantages and disadvantages.

Many J-Link classes provide read access to a type enum (for


example, the Feature class has a GetFeatType method, returning
a FeatureType enumeration value representing the type of the
feature). Based upon the type, a user can downcast the Feature
object to a particular subtype, such as ComponentFeat, which is an
assembly component.

4-4 J-Link User’s Guide


5
The J-Link Online Browser

This chapter describes how to use the online browser provided with
J-Link.

Topic Page

Online Documentation — J-Link APIWizard 5-2

5-1
Online Documentation — J-Link APIWizard
J-Link provides an online browser called the J-Link APIWizard
that displays detailed documentation. This browser displays
information from the J-Link User’s Guide and API specifications
derived from J-Link header file data.

The J-Link APIWizard contains the following items:

• Definitions of J-Link packages and their hierarchical


relationships
• Definitions of J-Link classes and interfaces
• Descriptions of J-Link methods
• Declarations of data types used by J-Link methods
• The J-Link User’s Guide, which you can browse by topic or by
class
• Code examples for J-Link methods (taken from the sample
applications provided as part of the J-Link installation)
Read the Release Notes and README file for the most up-to-date
information on documentation changes.

Note: The J-Link User’s Guide is also available in PDF


format. This file is located at:
<proe_loadpoint>/jlink/jlinkug.pdf

Installing the APIWizard


The Pro/ENGINEER installation procedure automatically installs
the J-Link APIWizard. The files reside in a directory under the
Pro/ENGINEER load point. The location for the J-Link APIWizard
files is:
<proe_loadpoint>/jlink/jlinkdoc

Starting the APIWizard


Start the J-Link APIWizard by pointing your browser to:
<proe_loadpoint>/jlink/jlinkdoc/index.html

Your web browser will display the J-Link APIWizard data in a new
window.

5-2 J-Link User’s Guide


Web Browser Environments
The APIWizard supports Netscape Navigator version 4 and later,
and Internet Explorer version 5 and later.

For APIWizard use with Internet Explorer, the recommended


browser environment requires installation of the Java2 plug-in.

For Netscape Navigator, the recommended browser environment

The J-Link Online


requires installation of the Java Swing foundation class. If this
class is not loaded on your computer, the APIWizard can load it for

Browser
you. This takes several minutes, and is not persistant between
sessions. See Loading the Swing Class Library for the procedure on
loading Swing permanently.

Loading the Swing Class Library


If you access the APIWizard with Internet Explorer, download and
install Internet Explorer’s Java2 plug-in. This is preferred over
installing the Swing archive, as Swing degrades access time for the
APIWizard Search function.

If you access the APIWizard with Netscape Navigator, follow these


instructions to download and install the Java Foundation Class
(Swing) archive:

Download the Java Foundation Class (Swing) Archive


Modifying the Java Class Path on UNIX Platforms
Modifying the Java Class Path on NT Platforms

Download the Java Foundation Class (Swing) Archive


1. Go to the Java Foundation Class Download Page.
2. Go to the heading Downloading the JFC/Swing X.X.X Release,
where X.X.X is the latest JFC version.
3. Click on the standard TAR or ZIP file link to go to the heading
Download the Standard Version.
4. Do not download the “installer” version.
5. Select a file format, click Continue, and follow the download
instructions on the subsequent pages.
6. Uncompress the downloaded bundle.

The J-Link Online Browser 5-3


After downloading the swing-X.X.Xfcs directory (where X.X.X is the
version of the downloaded JFC) created when uncompressing the
bundle, locate the swingall.jar archive. Add this archive to the Java
Class Path as shown in the next sections.

Modifying the Java Class Path on UNIX Platforms


Follow these steps to make the Java Foundation Class (Swing)
available in UNIX shell environments:

1. If the CLASSPATH environment variable exists, then add the


following line to the end of file ~/.cshrc

setenv CLASSPATH "${CLASSPATH}:[path_to_swingall.jar]"

Otherwise, add the following line to ~/.cshrc

setenv CLASSPATH ".:[path_to_swingall.jar]"


2. Save and close ~/.cshrc.
3. Enter the following command:

source ~/.cshrc

This sets the CLASSPATH environment variable in the current


shell. All new shells will be also be affected.
4. Close and restart your internet browser from shell that uses the
new class path data.

Modifying the Java Class Path on NT Platforms


Follow these steps to make the Java Foundation Class (Swing)
available on Windows NT Platforms:

1. Click on Start -> Settings -> Control Panel.


2. In the System Properties window, select the Environment
tab.
3. Check in the User Variables display area for the ClassPath
variable as shown in the following figure.
Windows NT Environment Variable Display Window

5-4 J-Link User’s Guide


The J-Link Online
Browser
If the ClassPath variable exists, then follow these steps:

1. Click on ClassPath in the Variable column. The value of


ClassPath will appear in the Value text field.
2. Append the path to the swingall.jar archive to the current
value of ClassPath:

...;[path_to_swingall_archive];.
Use the semicolon as the path delimiter before and after the path to
the archive, and the period (.) at the end of the variable definition.
There must be only one semicolon-period “;.” entry in the ClassPath
variable, and it should appear at the end of the class path.

The J-Link Online Browser 5-5


If the ClassPath variable does not exist, then follow these steps:

1. In the Variable text field, enter ClassPath.


2. In the Value text field, enter:

[path_to_swingall_archive];.

There must be a semicolon-period “;.” entry at the end of the


ClassPath variable.
3. Click the Set button.
4. Click the Apply button.
5. Click the OK button.
6. Close and restart your internet browser. You do not need to
reboot your machine.

Automatic Index Tree Updating


With your browser environment configured correctly, following a
link in an APIWizard HTML file causes the tree in the Selection
frame to update and scroll the tree reference that corresponds to
the newly displayed page. This is automatic tree scrolling.

If you access the APIWizard through Netscape’s Java2 plug-in, this


feature is not available. You must install the Java foundation class
called Swing for this method to work. See Loading the Swing Class
Library for the procedure on loading Swing.

If you access the APIWizard with Internet Explorer, download and


install the Internet Explorer Java2 plug-in to make automatic tree
scrolling available.

APIWizard Interface
The APIWizard interface consists of two frames. The next sections
describe how to display and use these frames in your Web browser.

Package/Class/Interface/Exception/Topic Selection Frame


This frame, located on the left of the screen, controls what is
presented in the Display frame. Specify what data you want to view
by choosing either Packages, Classes, Interfaces, Exceptions,
or the J-Link Wildfire 4.0 User’s Guide.

5-6 J-Link User’s Guide


In Packages mode, this frame displays an alphabetical list of the
J-Link packages. A package is a logical subdivision of functionality
within J-Link; for example, the pfcFamily package contains
classes related to family table operations. This frame can also
display J-Link interfaces, classes, and methods as subnodes of the
packages.

In Classes mode, this frame displays an alphabetical list of the


J-Link Classes. It can also display J-Link methods as subnodes of

The J-Link Online


the classes.

Browser
In Interfaces mode, this frame displays an alphabetical list of the
J-Link interfaces. It can also display J-Link methods as subnodes of
the interfaces.

In Exceptions mode, this frame displays an alphabetical list of


named exceptions in the J-Link library. It can also display the
methods for the exceptions as the subnodes.

In J-Link Wildfire 4.0 User’s Guide mode, this frame displays


the J-Link User’s Guide table of contents in a tree structure. All
chapters are displayed as subnodes of the main J-Link User’s Guide
node.

The Package/Class/Interface Selection frame includes a Find


button for data searches of the J-Link User’s Guide or of API
specifications taken from header files. See the section APIWizard
Search Feature (Find) for more information on the Find feature.

Display Frame
This frame, located on the right of the screen, displays:

• J-Link package definitions and their hierarchial relationships.


• J-Link classes and interfaces definitions
• J-Link method descriptions
• User's Guide content
• Code examples for J-Link methods
The following figure displays the APIWizard interface layout.

The J-Link Online Browser 5-7


J-Link APIWizard General Layout

5-8 J-Link User’s Guide


Navigating the Package/Class/Interface/Exception/Topic Selection
Tree
Access all J-Link APIWizard online documentation data for
packages, classes, interfaces, methods, or the J-Link User’s Guide
from the Package/Class/Interface Selection frame. This frame
displays a tree structure of the data. Expand and collapse the tree
to navigate this data.

The J-Link Online


To expand the tree structure, first select Packages, Classes,

Browser
Interfaces, Exceptions, or the J-Link Wildfire 4.0 User’s
Guide at the top of the frame. The APIWizard displays the tree
structure in a collapsed form. The switch icon to the far left of a
node (i.e. a package, a class, a interface or chapter name) signifies
that this node contains subnodes. If a node has no switch icon, it
has no subnodes. Clicking the switch icon (or double-clicking on the
node text) moves the switch to the down position. The APIWizard
then expands the tree to display the subnodes. Select a node or
subnode, and the APIWizard displays the online data in the Display
frame.

Browsing the J-Link Packages


View the J-Link packages by choosing J-Link Packages at the top
of the Package/Classes/Interfaces Selection frame. In this mode, the
APIWizard displays all the J-Link packages in the alphabetical
order.

The Display frame for each J-Link package displays the


information about all the classes and interfaces that belong to that
package.

Click the switch icon next to the desired package name, or


double-click the package name text to view the clasess or interfaces
that belong to that package. You can also view the methods for each
class or interface in the expanded tree by clicking the switch icon
next to the class or interface name, or by double-clicking the name.

The following figure shows the collapased tree layout for the J-Link
packages.

The J-Link Online Browser 5-9


J-Link Packages

5 - 10 J-Link User’s Guide


Browsing the J-Link User’s Guide
View the J-Link User’s Guide by clicking the J-Link Wildfire 4.0
User’s Guide at the top of the
Package/Class/Interface/Exception/Topic Selection frame. In this
mode, the APIWizard displays the section headings of the User’s
Guide.

View a section by clicking the switch icon next to the desired section

The J-Link Online


name or by double-clicking the section name. The APIWizard then
displays a tree of subsections under the selected section. The text

Browser
for the selected section and its subsections appear in the Display
frame. Click the switch icon again (or double-click the node text) to
collapse the subnodes listed and display only the main nodes.

The following figure shows the collapsed tree layout for the table of
contents of the J-Link User’s Guide.

The J-Link Online Browser 5 - 11


Table of Contents for the User’s Guide

5 - 12 J-Link User’s Guide


APIWizard Search Feature (Find)
The APIWizard supports searches for specified strings against both
the J-Link User’s Guide and API definition files. Click the Find
button on the Package/Class/Interface/Exception/Topic frame to
display the APIWizard Search dialog.

Note: The APIWizard Search feature is slow when accessed


through Internet Explorer’s Default Virtual Machine.

The J-Link Online


For better performance, access the APIWizard through
Internet Explorer’s Java2 plug-in.

Browser
APIWizard Search Dialog Box

The J-Link Online Browser 5 - 13


The Search dialog box contains the following fields, buttons, and
frames:

• Enter Search String(s)


Enter the specific search string or strings in this field. By
default, the browser performs a non-case-sensitive search.
• Search/Stop
Select the Search button to begin a search. During a search,
this button name changes to Stop. Select the Stop button to stop
a search.
• Help
Select this button for help about the APIWizard search feature.
The APIWizard presents this help data in the Display frame.
• Case Sensitive
Select this button to specify a case-sensitive search.
• Search API References
Select this button to search for data on API methods. Select the
API Names button to search for method names only. Select the
Definitions button to search the API method names and
definitions for specific strings.
• Search Manuals
Select this button to search the J-Link User’s Guide data. Select
the Table of Contents button to search on TOC entries only.
Select the Index button to search only the Index. Select the
Contents button to search on all text in the J-Link User’s Guide.
• Name
This frame displays a list of strings found by the APIWizard
search.
• Found Under
This frame displays the location in the online help data where
the APIWizard found the string.

5 - 14 J-Link User’s Guide


Supported Search Types
The APIWizard Search supports the following:

• Case sensitive searches


• Search of API definitions, J-Link User’s Guide data, or both
• Search of API data by API names only or by API names and
definitions

The J-Link Online


• Search of J-Link User’s Guide by Table of Contents only, by

Browser
TOC and section titles, or on the User’s Guide contents (the
entire text).
• Wildcard searches—valid characters are:
– * (asterisk) matches zero or more non-whitespace
characters
– ? (question mark) matches one and only one non-whitespace
character

To search for any string containing the characters Get, any


number of other characters, and the characters Name
Get*Name

To search for any string containing the characters Get, one


other character, and the characters Name
Get?Name

To search for any string containing the characters Get, one or


more other characters, and the characters Name
Get?*Name

To search on the string Feature, followed by an *


Feature\*

To search on the string Feature, followed by a ?


Feature\?

To search on the string Feature, followed by a \


Feature\\

• Search string containing white space— Search on strings that


contain space characters (white space) by placing double- or
single-quote characters around the string.

The J-Link Online Browser 5 - 15


"family table"
’Model* methods’

• Search on multiple strings—Separate multiple search strings


with white space (tabs or spaces). Note that the default logical
relationship between multiple search strings is OR.
To return all strings matching GetName OR GetId, enter:
Get*Name Get*Id

Note: This search specification also returns strings that


match both specified search targets.
For example:
FullName

returns Model.GetName and ModelDescriptor.GetFullName

If a string matches two or more search strings, the APIWizard


displays only one result in the search table, for example:
Full* *Name

returns only one entry for each FullName property found.


Mix quoted and non-quoted strings as follows:
Get*Name "family table"

returns all instances of strings continaing Get and Name, or


strings containing family table.

Performing an APIWizard Search


Follow these steps to search for information in the APIWizard
online help data:

• Select the Find icon at the top of the


Package/Class/Interface/Exception/Topic Selection frame.
• Specify the string or strings to be searched for in the Enter
Search String field.
• Select Case Sensitive to specify a case-sensitive search. Note
that the default search is non-case-sensitive.
• Select either or both of the Search API References and Search
User’s Guide buttons. Select the options under these buttons as
desired.
• Select the Search button. The APIWizard turns this button red
and is renames it Stop for the duration of the search.

5 - 16 J-Link User’s Guide


• If the APIWizard finds the search string in the specified search
area(s), it displays the string in the Name frame. In the Where
Found frame, the APIWizard displays links to the online help
data that contains the found string.
• During the search, or after the search ends, select an entry in
the Name or Where Found frames to display the online help
data for that string. The APIWizard first updates the
Package/Class/Interface/Exception/Topic Selection frame tree,

The J-Link Online


and then presents in the Display frame the online help data for
the selected string.

Browser

The J-Link Online Browser 5 - 17


6
Session Objects

This chapter describes how to program on the session level using


J-Link.

Topic Page

Overview of Session Objects 6-2


Getting the Session Object 6-2
Directories 6-5
Accessing the Pro/ENGINEER Interface 6-7

6-1
Overview of Session Objects
The Pro/ENGINEER Session object (contained in the class
com.ptc.pfc.pfcSession.Session) is the highest level object in
J-Link. Any program that accesses data from Pro/ENGINEER must
first get a handle to the Session object before accessing more
specific data.

The Session object contains methods to perform the following


operations:

• Accessing models and windows (described in the Models and


Windows chapters).
• Working with the Pro/ENGINEER user interface.
• Allowing interactive selection of items within the session.
• Accessing global settings such as line styles, colors, and
configuration options.
The following sections describe these operations in detail.

Getting the Session Object


Method Introduced:

• pfcGlobal.pfcGlobal.GetProESession
The method pfcGlobal.pfcGlobal.GetProESession gets a
Session object in sychronous mode.

Note: You can make multiple calls to this method but each
call will give you a handle to the same object.

Getting Session Information


Methods Introduced:

• pfcGlobal.pfcGlobal.GetProEArguments
• pfcGlobal.pfcGlobal.GetProEVersion
• pfcGlobal.pfcGlobal.GetProEBuildCode
The method pfcGlobal.pfcGlobal.GetProEArguments returns
an array containing the command line arguments passed to
Pro/ENGINEER if these arguments follow one of two formats:

• Any argument starting with a plus sign (+) followed by a letter


character.

6-2 J-Link User’s Guide


• Any argument starting with a minus (-) followed by a
capitalized letter.
The first argument passed in the array is the full path to the
Pro/ENGINEER executable.

The method pfcGlobal.pfcGlobal.GetProEVersion returns a


string that represent the Pro/ENGINEER version, for example
“Wildfire”.

Session Objects
The method pfcGlobal.pfcGlobal.GetProEBuildCode returns a
string that represents the build code of the Pro/ENGINEER
session.

Note: The preceding methods can only access information in


synchronous mode.

Example: Accessing the Pro/ENGINEER Command Line


Arguments

The following example describes the use of the


GetProEArguments method to access the Pro/ENGINEER
command line arguments. The first argument is always the full
path to the Pro/E executable. For this application the next two
arguments can be either ("+runtime" or "+development") or ("-Unix"
or "-NT"). Based on these values 2 boolean variables are set and
passed on to another method which makes use of this information.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.*;
public class ProEArgumentExample
{
public static void start()
{
try
{
boolean unix;
boolean runtime;
/*------------------------------------------------------------------*\
Getting the arguments!
/*------------------------------------------------------------------*\
stringseq argseq=pfcGlobal.GetProEArguments();
/*------------------------------------------------------------------*\
Making sure that there are 3 arguments.
/*------------------------------------------------------------------*\
int size=argseq.getarraysize();
if (size == 3)
{
/*------------------------------------------------------------------*\
First argument is Pro/ENGINEER executable
/*------------------------------------------------------------------*\

Session Objects 6-3


String val=argseq.get(1);
/*------------------------------------------------------------------*\
Setting boolean variable runtime based on value after making sure that
it is one of the 2 specified values.
/*------------------------------------------------------------------*\
if (val.equalsIgnoreCase("+runtime"))
{
runtime=true;
}
else if (val.equalsIgnoreCase("+development"))
{
runtime=false;
}
else
{
printMsg("Invalid second argument");
return;
}
/*------------------------------------------------------------------*\
Setting boolean variable unix based on value after making sure that it
is one of the 2 specified values.
/*------------------------------------------------------------------*\
val=argseq.get(2);
if (val.equalsIgnoreCase("-Unix"))
{
unix=true;
}
else if (val.equalsIgnoreCase("-NT"))
{
unix=false;
}
else
{
printMsg ("Invalid third argument");
return;
}

/*------------------------------------------------------------------*\
Pass the boolean values to the method where they are used for some
application.
/*------------------------------------------------------------------*\
runApplication(runtime,unix);
}
else
{
printMsg("Invalid number of arguments");
}
}
catch(jxthrowable x)
{
printMsg("Exception in getting session:"+x);

6-4 J-Link User’s Guide


}
}
public static void runApplication(boolean rtime, boolean unix)
{
/*------------------------------------------------------------------*\
Application code goes here...
/*------------------------------------------------------------------*\
}
public static void stop()

Session Objects
{
}
public static void printMsg(String str)
{
System.out.println(str);
}
}

Directories
Methods Introduced:

• pfcSession.BaseSession.GetCurrentDirectory
• pfcSession.BaseSession.ChangeDirectory
The method pfcSession.BaseSession.GetCurrentDirectory
returns the absolute path name for the current working directory of
Pro/ENGINEER.

The method pfcSession.BaseSession.ChangeDirectorychanges


Pro/ENGINEER to another working directory.

Configuration Options
Methods Introduced:

• pfcSession.BaseSession.GetConfigOptionValues
• pfcSession.BaseSession.SetConfigOption
• pfcSession.BaseSession.LoadConfigFile
You can access configuration options programmatically using the
methods described in this section.

Session Objects 6-5


Use the method
pfcSession.BaseSession.GetConfigOptionValues to retrieve
the value of a specified configuration file option. Pass the Name of
the configuration file option as the input to this method. The
method returns an array of values that the configuration file option
is set to. It returns a single value if the configuration file option is
not a multi-valued option. The method returns a null if the specified
configuration file option does not exist.

The method pfcSession.BaseSession.SetConfigOption is used


to set the value of a specified configuration file option. If the option
is a multi-value option, it adds a new value to the array of values
that already exist.

The method pfcSession.BaseSession.LoadConfigFile loads an


entire configuration file into Pro/ENGINEER.

Macros
Method Introduced:

• pfcSession.BaseSession.RunMacro
The method pfcSession.BaseSession.RunMacro runs a macro
string. A J-Link macro string is equivalent to a Pro/ENGINEER
mapkey minus the key sequence and the mapkey name. To
generate a macro string, create a mapkey in Pro/ENGINEER. Refer
to the Pro/ENGINEER online help for more information about
creating a mapkey.

Copy the Value of the generated mapkey Option from the


Tools>Options dialog box. An example Value is as follows:
$F2 @MAPKEY_LABELtest;
~ Activate `main_dlg_cur` `ProCmdModelNew.file`;
~ Activate `new` `OK`;

The key sequence is $F2. The mapkey name is


@MAPKEY_LABELtest. The remainder of the string following the
first semicolon is the macro string that should be passed to the
method pfcSession.BaseSession.RunMacro.

In this case, it is as follows:


~ Activate `main_dlg_cur` `ProCmdModelNew.file`;
~ Activate `new` `OK`;

6-6 J-Link User’s Guide


Note: Creating or editing the macro string manually is not
supported as the mapkeys are not a supported scripting
language. The syntax is not defined for users and is not
guaranteed to remain constant across different
datecodes of Pro/ENGINEER.
Macros are executed from synchronous mode only when control
returns to Pro/ENGINEER from the J-Link program. Macros in
synchronous mode are stored in reverse order (last in, first out).

Session Objects
Macros are executed in asynchronous mode as soon as they are
registered. Macros in asynchronous mode are run in the same order
that they are saved.

Colors and Line Styles


Methods Introduced:

• pfcSession.BaseSession.SetStdColorFromRGB
• pfcSession.BaseSession.GetRGBFromStdColor
• pfcSession.BaseSession.SetTextColor
• pfcSession.BaseSession.SetLineStyle
These methods control the general display of a Pro/ENGINEER
session.

Use the method


pfcSession.BaseSession.SetStdColorFromRGB to customize
any of the Pro/ENGINEER standard colors.

To change the color of any text in the window, use the method
pfcSession.BaseSession.SetTextColor.

To change the appearance of nonsolid lines (for example, datums)


use the method pfcSession.BaseSession.SetLineStyle.

Accessing the Pro/ENGINEER Interface


The Session object has methods that work with the
Pro/ENGINEER interface. These methods provide access to the
menu bar and message window. For more information on accessing
menus, refer to the chapter Menus, Commands, and Pop-up Menus.

Session Objects 6-7


The Text Message File
A text message file is where you define strings that are displayed in
the Pro/ENGINEER user interface. This includes the strings on the
command buttons that you add to the Pro/ENGINEER number, the
help string that displays when the user’s cursor is positioned over
such a command button, and text strings that you display in the
Message Window. You have the option of including a translation for
each string in the text message file.

Restrictions on the Text Message File


You must observe the following restrictions when you name your
message file:

• The name of the file must be 30 characters or less, including the


extension.
• The name of the file must contain lower case characters only.
• The file extension must be three characters.
• The version number must be in the range 1 to 9999.
• All message file names must be unique, and all message key
strings must be unique across all applications that run with
Pro/ENGINEER. Duplicate message file names or message key
strings can cause Pro/ENGINEER to exhibit unexpected
behavior. To avoid conflicts with the names of Pro/ENGINEER
or foreign application message files or message key strings,
PTC recommends that you choose a prefix unique to your
application, and prepend that prefix to each message file name
and each message key string corresponding to that application
Note: Message files are loaded into Pro/ENGINEER only once
during a session. If you make a change to the message
file while Pro/ENGINEER is running you must exit and
restart Pro/ENGINEER before the change will take
effect.

Contents of the Message File


The message file consists of groups of four lines, one group for each
message you want to write. The four lines are as follows:

1. A string that acts as the identifier for the message. This


keyword must be unique for all Pro/ENGINEER messages.
2. The string that will be substituted for the identifier.

6-8 J-Link User’s Guide


This string can include placeholders for run-time information
stored in a stringseq object (shown in Writing Messages to
the Message Window).
3. The translation of the message into another language (can be
blank).
4. An intentionally blank line reserved for future extensions.

Writing a Message Using a Message Pop-up Dialog Box

Session Objects
Method Introduced:

• pfcSession.Session.UIShowMessageDialog
The method pfcSession.Session.UIShowMessageDialog
displays the UI message dialog. The input arguments to the method
are:

• Message—The message text to be displayed in the dialog.


• Options—An instance of the pfcUI.MessageDialogOptions
containing other options for the resulting displayed message. If
this is not supplied, the dialog will show a default message
dialog with an Info classification and an OK button. If this is
not to be null, create an instance of this options type with
pfcUI.pfcUI.MessageDialogOptions_Create(). You can set
the following options:
– Buttons—Specifies an array of buttons to include in the
dialog. If not supplied, the dialog will include only the OK
button. Use the method
pfcUI.MessageDialogOptions.SetButtons to set this
option.
– DefaultButton—Specifies the identifier of the default
button for the dialog box. This must match one of the
available buttons. Use the method
pfcUI.MessageDialogOptions.SetDefaultButton to set
this option.
– DialogLabel—The text to display as the title of the dialog
box. If not supplied, the label will be the english string
"Info". Use the method
pfcUI.MessageDialogOptions.SetDialogLabel to set
this option.

Session Objects 6-9


– MessageDialogType—The type of icon to be displayed
with the dialog box (Info, Prompt, Warning, or Error). If not
supplied, an Info icon is used. Use the method
pfcUI.MessageDialogOptions.SetMessageDialogType
to set this option.

Accessing the Message Window


The following sections describe how to access the message window
using J-Link. The topics are as follows:

• Writing Messages to the Message Window


• Writing Messages to an Internal Buffer

Writing Messages to the Message Window


Methods Introduced:

• pfcSession.Session.UIDisplayMessage
• pfcSession.Session.UIDisplayLocalizedMessage
• pfcSession.Session.UIClearMessage
These methods enable you to display program information on the
screen.

The input arguments to the methods


pfcSession.Session.UIDisplayMessage and
pfcSession.Session.UIDisplayLocalizedMessage include the
names of the message file, a message identifier, and (optionally) a
stringseq object that contains upto 10 pieces of run-time
information. For pfcSession.Session.UIDisplayMessage, the
strings in the stringseq are identified as %0s, %1s, ... %9s based
on their location in the sequence. For
pfcSession.Session.UIDisplayLocalizedMessage, the strings
in the stringseq are identified as %0w, %1w, ... %9w based on their
location in the sequence. To include other types of run-time data
(such as integers or reals) you must first convert the data to strings
and store it in the string sequence.

Writing Messages to an Internal Buffer


Methods Introduced:

• pfcSession.BaseSession.GetMessageContents
• pfcSession.BaseSession.GetLocalizedMessageContents

6 - 10 J-Link User’s Guide


The methods pfcSession.BaseSession.GetMessageContents
and pfcSession.BaseSession.GetLocalizedMessageContents
enable you to write a message to an internal buffer instead of the
Pro/ENGINEER message area.

These methods take the same input arguments and perform exactly
the same argument substitution and translation as the
pfcSession.Session.UIDisplayMessage and
pfcSession.Session.UIDisplayLocalizedMessage methods

Session Objects
described in the previous section.

Message Classification
Messages displayed in J-Link include a symbol that identifies the
message type. Every message type is identified by a classification
that begins with the characters %C. A message classification
requires that the message key line (line one in the message file)
must be preceded by the classification code.

Note: Any message key string used in the code should not
contain the classification.
J-Link applications can now display any or all of the following
message symbols:

• Prompt—This J-Link message is preceded by a green arrow.


The user must respond to this message type. Responding
includes, specifying input information, accepting the default
value offered, or canceling the application. If no action is taken,
the progress of the application is halted. A response may either
be textual or a selection. The classification for Prompt messages
is %CP.
• Info—This J-Link message is preceded by a blue dot. Info
message types contain information such as user requests or
feedback from J-Link or Pro/ENGINEER. The classification for
Info messages is %CI.
Note: Do not classify messages that display information
regarding problems with an operation or process as
Info. These types of messages must be classified as
Warnings.
• Warning—This J-Link message is preceded by a triangle
containing an exclamation point. Warning message types
contain information to alert users to situations that could
potentially lead to an error during a later stage of the process.
Examples of warnings could be a process restriction or a
suspected data problem. A Warning will not prevent or

Session Objects 6 - 11
interrupt a process. Also, a Warning should not be used to
indicate a failed operation. Warnings must only caution a user
that the completed operation may not have been performed in a
completely desirable way. The classification for Warning
messages is %CW.
• Error—This J-Link message is preceded by a a broken square.
An Error message informs the user that a required task was not
completed successfully. Depending on the application, a failed
task may or may not require intervention or correction before
work can continue. Whenever possible redress this situation by
providing a path. The classification for Error messages is %CE.
• Critical—This J-Link message is preceded by a red X. A
Critical message type informs the user of an extremely serious
situation that is usually preceeded by loss of user data. Options
redressing this situation, if available, should be provided within
the message. The classification for a Critical messages is %CC.

Example Code: Writing a Message

The following example code demonstrates how to write a message to


the message window. The program uses the message file
mymessages.txt, which contains the following lines:

______________________________________
USER Error: %0s of code %1s at %2s
Error: %0s of code %1s at %2s
#
#
______________________________________

import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;

public class UIDisplayMessage {

public void printMyError (Session session, String location,


String error, int errorcode)
{
stringseq texts;

try {
texts = stringseq.create();
}
catch (jxthrowable x) {
System.out.println ("Exception in creating string sequence:"+x);
return;
}

6 - 12 J-Link User’s Guide


try {
texts.set (0, error);
texts.set (1, new String (errorcode));
texts.set (2, location);
}
catch (jxthrowable x) {
System.out.println ("Exception in setting text fields:"+x);
return;
}

Session Objects
try {
session.UIDisplayMessage ("mymessages.txt",
"USER Error: %0s of code %1s at %2s", texts);
}
catch (jxthrowable x) {
System.out.println ("Exception in UIDisplayMessage():"+x);
}
}
}

Reading Data from the Message Window


Methods Introduced:

• pfcSession.Session.UIReadIntMessage
• pfcSession.Session.UIReadRealMessage
• pfcSession.Session.UIReadStringMessage
These methods enable a program to get data from the user.

The pfcSession.Session.UIReadIntMessage and


pfcSession.Session.UIReadRealMessage methods contain
optional arguments that can be used to limit the value of the data to
a certain range.

The method pfcSession.Session.UIReadStringMessage


includes an optional Boolean argument that specifies whether to
echo characters entered onto the screen. You would use this
argument when prompting a user to enter a password.

Displaying Feature Parameters


Method Introduced:

• pfcSession.Session.UIDisplayFeatureParams
The method pfcSession.Session.UIDisplayFeatureParams
forces Pro/ENGINEER to show dimensions or other parameters
stored on a specific feature. The displayed dimensions may then be
interactively selected by the user.

Session Objects 6 - 13
File Dialogs
Methods Introduced:

• pfcSession.Session.UIOpenFile
• pfcUI.pfcUI.FileOpenOptions_Create
• pfcUI.FileOpenOptions.SetFilterString
• pfcUI.FileOpenOptions.SetPreselectedItem
• pfcUI.FileUIOptions.SetDefaultPath
• pfcUI.FileUIOptions.SetDialogLabel
• pfcUI.FileUIOptions.SetShortcuts
• pfcUI.pfcUI.FileOpenShortcut_Create
• pfcUI.FileOpenShortcut.SetShortcutName
• pfcUI.FileOpenShortcut.SetShortcutPath
• pfcSession.Session.UISaveFile
• pfcUI.pfcUI.FileSaveOptions_Create
• pfcSession.Session.UISelectDirectory
• pfcUI.pfcUI.DirectorySelectionOptions_Create
• pfcSession.BaseSession.UIRegisterFileOpen
• pfcUI.pfcUI.FileOpenRegisterOptions_Create
• pfcUI.FileOpenRegisterOptions.SetFileDescription
• pfcUI.FileOpenRegisterOptions.SetFileType
• pfcUI.FileOpenRegisterListener.FileOpenAccess
• pfcUI.FileOpenRegisterListener.OnFileOpenRegister
• pfcSession.BaseSession.UIRegisterFileSave
• pfcUI.pfcUI.FileSaveRegisterOptions_Create
• pfcUI.FileSaveRegisterOptions.SetFileDescription
• pfcUI.FileSaveRegisterOptions.SetFileType
• pfcUI.FileSaveRegisterListener.FileSaveAccess
• pfcUI.FileSaveRegisterListener.OnFileSaveRegister

6 - 14 J-Link User’s Guide


The method pfcSession.Session.UIOpenFile opens the relevant
Pro/ENGINEER dialog box for opening files and browsing
directories. The method lets you specify several options through the
input arguments pfcUI.FileOpenOptions and
pfcUI.FileUIOptions.

Use the method pfcUI.pfcUI.FileOpenOptions_Create to create


a new instance of the pfcUI.FileOpenOptions object. This object
contains the the following options:

Session Objects
• FilterString—Specifies the filter string for the type of file
accepted by the dialog box. Multiple file types should be listed
with wildcards and separated by commas, for example, "*.prt,
*.asm". Use the method
pfcUI.FileOpenOptions.SetFilterString to set this option.
• PreselectedItem—Specifies the name of an item to preselect in
the dialog box. Use the method
pfcUI.FileOpenOptions.SetPreselectedItem to set this
option.
The pfcUI.FileUIOptions object contains the the following
options:

• DefaultPath—Specifies the name of the path to be opened by


default in the dialog box. Use the method
pfcUI.FileUIOptions.SetDefaultPath to set this option.
• DialogLabel—Specifies the title of the dialog box. Use the
method pfcUI.FileUIOptions.SetDialogLabel to set this
option.
• Shortcuts—Specifies an array of file shortcuts of the type
pfcUI.FileOpenShortcut. Create this object using the
method pfcUI.FileOpenShortcut_Create. This object
contains the following attributes:
– ShortcutName—Specifies the name of shortcut path to be
made available in the dialog box.
– ShortcutPath—Specifies the string for the shortcut path.
Use the method pfcUI.FileUIOptions.SetShortcuts to set
the array of file shortcuts.
The method pfcSession.Session.UIOpenFile returns the file
selected by you. The application must use other methods or
techniques to perform the desired action on the file.

Session Objects 6 - 15
The method pfcSession.Session.UISaveFile opens the
Pro/ENGINEER dialog box for saving a file. The method accepts
options similar to pfcSession.Session.UIOpenFile through the
pfcUI.FileSaveOptions and pfcUI.FileUIOptions objects.
Use the method pfcUI.pfcUI.FileSaveOptions_Create to create
a new instance of the pfcUI.FileSaveOptions object. When
using the Save dialog box, you can set the name to a non-existent
file. The method pfcSession.Session.UISaveFile returns the
name of the file selected by you; the application must use other
methods or techniques to perform the desired action on the file.

The method pfcSession.Session.UISelectDirectory prompts the


user to select a directory using the Pro/ENGINEER dialog box for
browsing directories. The method accepts options through the
pfcUI.DirectorySelectionOptions object which is similar to
the pfcUI.FileUIOptions object (described for the method
pfcSession.Session.UIOpenFile). Specify the default directory
path, the title of the dialog box, and a set of shortcuts to other
directories to start browsing. If the default path is specified as
NULL, the current directory is used. Use the method
pfcUI.pfcUI.DirectorySelectionOptions_Create to create a
new instance of the pfcUI.DirectorySelectionOptions object.
The method pfcSession.Session.UISelectDirectory returns the
selected directory path; the application must use other methods or
techniques to perform other relevant tasks with this selected path.

The method pfcSession.BaseSession.UIRegisterFileOpen


registers a new file type in the File > Open dialog box in
Pro/ENGINEER. This method takes the
pfcUI.FileOpenRegisterOptions and
pfcUI.FileOpenRegisterListener objects as its input
arguments. These objects are as follows:

• pfcUI.FileOpenRegisterOptions—This object contains the


options for registering an open operation. Use the method
pfcUI.pfcUI.FileOpenRegisterOptions_Create to create a
new instance of the object. It contains the following options:
– FileDescription—Specifies the short description of the file
type to be opened. This description appears for the file type
in the File > Open dialog box. Use the method
pfcUI.FileOpenRegisterOptions.SetFileDescription
to modify this option.
– FileType—Specifies the file type to be opened. The file type
appears as the file extension in the File > Open dialog box.
Use the method
pfcUI.FileOpenRegisterOptions.SetFileType to modify
this option.

6 - 16 J-Link User’s Guide


• pfcUI.FileOpenRegisterListener—This object provides
the action listener methods for the new file type to be
registered. The method
pfcUI.FileOpenRegisterListener.FileOpenAccess is called
to determine whether the new file type can be opened using the
File > Open dialog box. The method
pfcUI.FileOpenRegisterListener.OnFileOpenRegister is
called on clicking Open for the newly registered file type.

Session Objects
The method pfcSession.BaseSession.UIRegisterFileSave registers a
new file type in the File > Save a Copy dialog box in
Pro/ENGINEER. This method takes the
pfcUI.FileSaveRegisterOptions and
pfcUI.FileSaveRegisterListener objects as its input
arguments. These objects are described as follows:

• pfcUI.FileSaveRegisterOptions—This object contains the


options for registering a save operation. Use the method
pfcUI.pfcUI.FileSaveRegisterOptions_Create to create a
new instance of the object. It contains the following options:
– FileDescription—Specifies the short description of the file
type to be saved. This description appears for the file type
in the File > Save a Copy dialog box. Use the method
pfcUI.FileSaveRegisterOptions.SetFileDescription to
modify this option.
– FileType—Specifies the file type to be saved. The file type
appears as the file extension in the File > Save a Copy
dialog box. Use the method
pfcUI.FileSaveRegisterOptions.SetFileType to modify
this option.
• pfcUI.FileSaveRegisterListener—This object provides
the action listener methods for the new file type to be
registered. The method
pfcUI.FileSaveRegisterListener.FileSaveAccess is called
to determine whether the new file type can be saved using the
File > Save a Copy dialog box. The method
pfcUI.FileSaveRegisterListener.OnFileSaveRegister is
called on clicking OK for the newly registered file type.

Customizing the Pro/ENGINEER Navigation Area


The Pro/ENGINEER navigation area includes the Model and Layer
Tree pane, Folder browser pane, and Favorites pane. The methods
described in this section enable J-Link applications to add custom
panes that contain Web pages to the Pro/ENGINEER navigation
area.

Session Objects 6 - 17
Adding Custom Web Pages
To add custom Web pages to the navigation area, the J-Link
application must:

1. Add a new pane to the navigation area.


2. Set an icon for this pane.
3. Set the URL of the location that will be displayed in the pane.

Methods Introduced:

• pfcSession.Session.NavigatorPaneBrowserAdd
• pfcSession.Session.NavigatorPaneBrowserIconSet
• pfcSession.Session.NavigatorPaneBrowserURLSet
The method pfcSession.Session.NavigatorPaneBrowserAdd
adds a new pane that can display a Web page to the navigation
area. The input parameters are:

• PaneName—Specify a unique name for the pane. Use this


name in susbsequent calls to
pfcSession.Session.NavigatorPaneBrowserIconSet and
pfcSession.Session.NavigatorPaneBrowserURLSet.
• IconFileName—Specify the name of the icon file, including the
extension. A valid format for the icon file is the PTC-proprietary
format used by Pro/ENGINEER .BIF, .GIF, .JPG, or .PNG. The
new pane is displayed with the icon image. If you specify the
value as NULL, the default Pro/ENGINEER icon is used.
The default search paths for finding the icons are:
- <ProENGINEER loadpoint>/text/resource
- <Application text dir>/resource
- <Application text dir>/(language)/resource
The location of the application text directory is specified
in the registry file.
• URL—Specify the URL of the location to be accessed from the
pane.
Use the method
pfcSession.Session.NavigatorPaneBrowserIconSet to set or
change the icon of a specified browser pane in the navigation area.

6 - 18 J-Link User’s Guide


Use the method
pfcSession.Session.NavigatorPaneBrowserURLSet to change
the URL of the page displayed in the browser pane in the
navigation area.

Example: Customizing the Pro/ENGINEER Navigation Pane


The following sample code shows you how to customize the
Pro/ENGINEER navigation pane.

Session Objects
package com.ptc.jlinkexamples;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import java.lang.Object.*;
import java.io.*;

public class pfcNavigatorPaneExamples


{
static final String msgTxt = "jlexamples.txt";

/*=====================================================================*\
FUNCTION: AddPane
PURPOSE: Adds a new navigator pane.
\*=====================================================================*/
public static void AddPane() throws jxthrowable
{
Session session = pfcGlobal.GetProESession ();

/*---------------------------------------------------------------------*\
Get the pane name and url from the user and set the values
\*---------------------------------------------------------------------*/

session.UIDisplayMessage(msgTxt, "Enter Navigator Pane name :" ,


null);
String name = session.UIReadStringMessage(null);
if(name == null)
return;

session.UIDisplayMessage(msgTxt, "Enter path to Navigator Pane icon :"


, null);
String icon = session.UIReadStringMessage(null);

session.UIDisplayMessage(msgTxt, "Enter Navigator Pane URL :" , null);


String url = session.UIReadStringMessage(null);
if(url == null)
return;

session.NavigatorPaneBrowserAdd (name, icon, url);


}

Session Objects 6 - 19
/*=====================================================================*\
FUNCTION: ChangePaneURL
PURPOSE: Change navigator pane url.
\*=====================================================================*/
public static void ChangePaneURL() throws jxthrowable
{
Session session = pfcGlobal.GetProESession ();

/*---------------------------------------------------------------------*\
Get the pane name and new url from the user
\*---------------------------------------------------------------------*/

session.UIDisplayMessage(msgTxt, "Enter Navigator Pane name :" ,


null);
String name = session.UIReadStringMessage(null);
if(name == null)
return;

session.UIDisplayMessage(msgTxt, "Enter new Navigator Pane URL :" ,


null);
String url = session.UIReadStringMessage(null);
if(url == null)
return;

session.NavigatorPaneBrowserURLSet(name, url);
}

/*=====================================================================*\
FUNCTION: ChangePaneIcon
PURPOSE: Change navigator pane icon.
\*=====================================================================*/
public static void ChangePaneIcon() throws jxthrowable
{
Session session = pfcGlobal.GetProESession ();

/*---------------------------------------------------------------------*\
Get the pane name and new url from the user
\*---------------------------------------------------------------------*/

session.UIDisplayMessage(msgTxt, "Enter Navigator Pane name :" ,


null);
String name = session.UIReadStringMessage(null);
if(name == null)
return;

session.UIDisplayMessage(msgTxt, "Enter path to Navigator Pane icon :"


, null);
String icon = session.UIReadStringMessage(null);
if(icon == null)
return;

6 - 20 J-Link User’s Guide


session.NavigatorPaneBrowserIconSet(name, icon);
}
}

Session Objects

Session Objects 6 - 21
7
Selection

This chapter describes how to use Interactive Selection in J-Link.

Topic Page

Interactive Selection 7-2


Accessing Selection Data 7-4
Programmatic Selection 7-6
Selection Buffer 7-7

7-1
Interactive Selection
Methods Introduced:

• pfcSession.BaseSession.Select
• pfcSelect.pfcSelect.SelectionOptions_Create
• pfcSelect.SelectionOptions.SetMaxNumSels
• pfcSelect.SelectionOptions.SetOptionKeywords
The method pfcSession.BaseSession.Select activates the
standard Pro/ENGINEER menu structure for selecting objects and
returns a pfcSelect.Selections sequence that contains the
objects the user selected. Using the Options argument, you can
control the type of object that can be selected and the maximum
number of selections.

In addition, you can pass in a pfcSelect.Selections sequence


to the method. The returned pfcSelect.Selections sequence
will contain the input sequence and any new objects.

The methods pfcSelect.pfcSelect.SelectionOptions_Create and


pfcSelect.SelectionOptions.SetOptionKeywords take a
String argument made up of one or more of the identifiers listed in
the table below, separated by commas.

For example, to allow the selection of features and axes, the


arguments would be “feature,axis”.

Pro/ENGINEER String ModelItemType


Database Item Identifier
Datum point point ITEM_POINT
Datum axis axis ITEM_AXIS
Datum plane datum ITEM_FEATURE
Coordinate system datum csys ITEM_COORD_SYS
Feature feature ITEM_FEATURE
Edge (solid or datum edge ITEM_EDGE
surface)
Edge (solid only) sldedge ITEM_EDGE
Edge (datum surface only) qltedge ITEM_EDGE
Datum curve curve ITEM_CURVE
Composite curve comp_crv ITEM_CURVE
Surface (solid or quilt) surface ITEM_SURFACE

7-2 J-Link User’s Guide


Pro/ENGINEER String ModelItemType
Database Item Identifier
Surface (solid) sldface ITEM_SURFACE
Surface (datum surface) qltface ITEM_SURFACE
Quilt dtmqlt ITEM_QUILT
Dimension dimension ITEM_DIMENSION
Reference dimension ref_dim ITEM_REF_DIMENSION

Selection
Integer parameter ipar ITEM_DIMENSION
Part part N/A
Part or subassembly prt_or_asm N/A
Assembly component component N/A
model
Component or feature membfeat ITEM_FEATURE
Detail symbol dtl_symbol ITEM_DTL_SYM_INSTANCE
Note any_note ITEM_NOTE,ITEM_DTL_NOTE
Draft entity draft_ent ITEM_DTL_ENTITY
Table dwg_table ITEM_TABLE
Table cell table_cell ITEM_TABLE
Drawing view dwg_view N/A

When you specify the maximum number of selections, the argument


to pfcSelect.SelectionOptions.SetMaxNumSels must be an
Integer. The code will be as follows:
sel_options.setMaxNumSels (new Integer (10));
The default value assigned when creating a SelectionOptions
object is –1, which allows any number of selections by the user.

Selection 7-3
Accessing Selection Data
Methods Introduced:

• pfcSelect.Selection.GetSelModel
• pfcSelect.Selection.GetSelItem
• pfcSelect.Selection.GetPath
• pfcSelect.Selection.GetParams
• pfcSelect.Selection.GetTParam
• pfcSelect.Selection.GetPoint
• pfcSelect.Selection.GetDepth
• pfcSelect.Selection.GetSelView2D
• pfcSelect.Selection.GetSelTableCell
• pfcSelect.Selection.GetSelTableSegment
These methods return objects and data that make up the selection
object. Using the appropriate methods, you can access the following
data:

• For a selected model or model item use


pfcSelect.Selection.GetSelModel or
pfcSelect.Selection.GetSelItem.
• For an assembly component use
pfcSelect.Selection.GetPath.
• For UV parameters of the selection point on a surface use
pfcSelect.Selection.GetParams.
• For the T parameter of the selection point on an edge or curve
use pfcSelect.Selection.GetTParam.
• For a three-dimensional point object that contains the selected
point use pfcSelect.Selection.GetPoint.
• For selection depth, in screen coordinates use
pfcSelect.Selection.GetDepth.
• For the selected drawing view, if the selection was from a
drawing, use pfcSelect.Selection.GetSelView2D.
• For the selected table cell, if the selection was from a table, use
pfcSelect.Selection.GetSelTableCell.
• For the selected table segment, if the selection was from a table,
use pfcSelect.Selection.GetSelTableSegment.

7-4 J-Link User’s Guide


Controlling Selection Display
Methods Introduced:

• pfcSelect.Selection.Highlight
• pfcSelect.Selection.UnHighlight
• pfcSelect.Selection.Display
These methods cause a specific selection to be highlighted or
dimmed on the screen using the color specified as an argument.

Selection
The method pfcSelect.Selection.Highlight highlights the
selection in the current window. This highlight is the same as the
one used by Pro/ENGINEER when selecting an item—it just
repaints the wire-frame display in the new color. The highlight is
removed if you use the View, Repaint command or
pfcWindow.Window.Repaint; it is not removed if you use
pfcWindow.Window.Refresh.

The method pfcSelect.Selection.UnHighlight removes the


highlight.

The method pfcSelect.Selection.Display causes a selected object


to be displayed on the screen, even if it is suppressed or hidden.

Note: This is a one-time action and the next repaint will erase
this display.

Example Code: Using Interactive Selection

The following example code demonstrates how to use J-Link to


allow interactive selection.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcFeature.*

public class Select {

/**
* This example allows the user to interactively select objects.
* This method initializes a SelectionOptions object that restricts
* selection to features, with a specified maximum number of selections.
*/

public Selections SelectFeatures (Session session, int max)


{
Selections selections;
SelectionOptions sel_options;

Selection 7-5
try {
sel_options = pfcSelect.SelectionOptions_Create ("feature");
sel_options.SetMaxNumSels (new Integer (max));
}
catch (jxthrowable x) {
System.out.println ("Exception caught in initializing options"+x);
return (null);
}
try {
selections = session.Select (sel_options, null);
}
catch (jxthrowable x) {
System.out.println ("Exception caught in selection");
return (null);
}
return (selections);
}
}

Programmatic Selection
J-Link provides methods whereby you can make your own Selection
objects, without prompting the user. These Selections are required
as inputs to some methods and can also be used to highlight certain
objects on the screen.

Methods and Properties Introduced:

• pfcSelect.pfcSelect.CreateModelItemSelection
• pfcSelect.pfcSelect.CreateComponentSelection
• pfcSelect.Selection.SetSelItem
• pfcSelect.Selection.SetPath
• pfcSelect.Selection.SetParams
• pfcSelect.Selection.SetTParam
• pfcSelect.Selection.SetPoint
• pfcSelect.Selection.SetSelTableCell
• pfcSelect.Selection.SetSelView2D
The method pfcSelect.pfcSelect.CreateModelItemSelection
creates a selection out of any model item object. It takes a
pfcModelItem.ModelItem and optionally a
pfcAssembly.ComponentPath object to identify which component
in an assembly the Selection Object belongs to.

7-6 J-Link User’s Guide


The method pfcSelect.pfcSelect.CreateComponentSelection
creates a selection out of any component in an assembly. It takes a
pfcAssembly.ComponentPath object. For more information
about pfcAssembly.ComponentPath objects, see the section
Getting a Solid Object in the Solid chapter.

Some J-Link methods require more information to be set in the


selection object. J-Link methods allow you to set the following:

The selected item using the method


pfcSelect.Selection.SetSelItem.

Selection
The selected component path using the method
pfcSelect.Selection.SetPath.

The selected UV parameters using the method


pfcSelect.Selection.SetParams.

The selected T parameter (for a curve or edge), using the method


pfcSelect.Selection.SetTParam.

The selected XYZ point using the method


pfcSelect.Selection.SetPoint.

The selected table cell using the method


pfcSelect.Selection.SetSelTableCell.

The selected drawing view using the method


pfcSelect.Selection.SetSelView2D.

Selection Buffer
Introduction to Selection Buffers
Selection is the process of choosing items on which you want to
perform an operation. In Pro/ENGINEER, before a feature tool is
invoked, the user can select items to be used in a given tool's
collectors. Collectors are like storage bins of the references of
selected items. The location where preselected items are stored is
called the selection buffer.

Depending on the situation, different selection buffers may be


active at any one time. In Part and Assembly mode,
Pro/ENGINEER offers the default selection buffer, the Edit
selection buffer, and other more specialized buffers. Other
Pro/ENGINEER modes offer different selection buffers.

Selection 7-7
In the default Part and Assembly buffer there are two levels at
which selection is done:

• First Level Selection


Provides access to higher-level objects such as features or
components. You can make a second level selection only after you
select the higher-level object.

• Second Level Selection


Provides access to geometric objects such as edges and faces.

Note: First-level and second-level objects are usually


incompatible in the selection buffer.
J-Link allows access to the contents of the currently active selection
buffer. The available functions allow your application to:

• Get the contents of the active selection buffer.


• Remove the contents of the active selection buffer.
• Add to the contents of the active selection buffer.

Reading the Contents of the Selection Buffer


Methods Introduced:

• pfcSession.Session.GetCurrentSelectionBuffer()
• pfcSelect.SelectionBuffer.GetContents()
The method pfcSession.Session.GetCurrentSelectionBuffer
returns the selection buffer object for the current active model in
session. The selection buffer contains the items preselected by the
user to be used by the selection tool and popup menus.

Use the method pfcSelect.SelectionBuffer.GetContents to


access the contents of the current selection buffer. The method
returns independent copies of the selections in the selection buffer
(if the buffer is cleared, this array is still valid).

7-8 J-Link User’s Guide


Removing the Items of the Selection Buffer
Methods Introduced:

• pfcSelect.SelectionBuffer.RemoveSelection
• pfcSelect.SelectionBuffer.Clear
Use the method pfcSelect.SelectionBuffer.RemoveSelection to
remove a specific selection from the selection buffer. The input
argument is the IndexToRemove specifies the index where the item

Selection
was found in the call to the method
pfcSelect.SelectionBuffer.GetContents.

Use the method pfcSelect.SelectionBuffer.Clear to clear the


currently active selection buffer of all contents. After the buffer is
cleared, all contents are lost.

Adding Items to the Selection Buffer


Method Introduced:

• pfcSelect.SelectionBuffer.AddSelection
Use the method pfcSelect.SelectionBuffer.AddSelection to add
an item to the currently active selection buffer.

Note: The selected item must refer to an item that is in the


current model such as its owner, component path or
drawing view.
This method may fail due to any of the following reasons:

• There is no current selection buffer active.


• The selection does not refer to the current model.
• The item is not currently displayed and so cannot be added to
the buffer.
• The selection cannot be added to the buffer in combination with
one or more objects that are already in the buffer. For example:
geometry and features cannot be selected in the default buffer
at the same time.

Selection 7-9
8
Menus, Commands, and
Pop-up Menus

This chapter describes the methods provided by J-Link to create


and modify menus, menu buttons, commands, and pop-up menus in
the Pro/ENGINEER user interface.

Topic Page

Introduction 8-2
Menu Bar Definitions 8-2
Creating New Menus and Buttons 8-2
Designating Commands 8 - 12
Pop-up Menus 8 - 15

8-1
Introduction
The J-Link menu bar classes enable you to modify existing
Pro/ENGINEER menu bar menus and to create new menu bar
menus.

Menu Bar Definitions


• Menu bar—The top level horizontal bar in the
Pro/ENGINEER UI, containing the main menus, such as File,
Edit, and Applications.
• Menu bar menu—A menu, such as the File menu, or a
sub-menu, such as the Export menu under the File menu.
• Menu bar button—A named item in a menu bar menu that is
used to launch a set of instructions. An example is the Exit
button in the File menu.
• Tool bar button—An item with a name or icon or both in a
tool bar that is used to launch a set of instructions. An example
is the New File command shown on the File toolbar.
• Pop-up menu—A menu invoked by selection of an item in the
Pro/ENGINEER graphics window.
• Command—A procedure in Pro/ENGINEER that may be
activated from a menu bar, tool bar, or pop-up menu button.

Creating New Menus and Buttons


The following methods enable you to create new menu buttons in
any location on the menu bar.

Methods Introduced:

• pfcSession.Session.UICreateCommand
• pfcSession.Session.UICreateMaxPriorityCommand
• pfcSession.Session.UIAddButton
• pfcSession.Session.UIAddMenu
• pfcCommand.UICommandActionListener.OnCommand

8-2 J-Link User’s Guide


The method pfcSession.Session.UICreateCommand creates a
pfcUICommand object that contains a
pfcCommand.UICommandActionListener. You should override
the pfcCommand.UICommandActionListener.OnCommand
method with the code that you want to execute when the user clicks
a button.

The method

Menus, Commands,
and Pop-up Menus
pfcSession.Session.UICreateMaxPriorityCommand creates a
pfcCommand.UICommand object having maximum command
priority. The priority of the action refers to the level of precedence
the added action takes over other Pro/ENGINEER actions.
Maximum priority actions dismiss all other actions except
asynchronous actions.

Maximum command priority should be used only in commands that


open and activate a new model in a window. Create all other
commands using the method
pfcSession.Session.UICreateCommand.

The method pfcSession.Session.UIAddButton enables you to


add your command to a menu on the menu bar. It also enables you
to specify a help message that is displayed when the user moves the
pointer over the button.

The pfcSession.Session.UIAddMenu method enables you to


create new, top-level menus that can contain your own commands
or to add submenus to existing menus.

Note: The menu file required when adding a menu or a button


must have the same format as the text message file
described above.
The listener method
pfcCommand.UICommandListener.OnCommand is called
when the command is activated in Pro/ENGINEER by pressing a
button.

Example 1: Adding a Menu Button


The following example code demonstrates how to create a new
button on the Pro/ENGINEER menu bar. This method creates a
button called Input Info on the Utilities menu and assigns the
method gatherInputs() to activate when the button is pressed.
package com.ptc.jlinkexamples;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;

Menus, Commands, and Pop-up Menus 8-3


import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcCommand.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcModelItem.*;

/*====================================================================*\
FUNCTION : addInputButton()
PURPOSE : An example of the creation of a new button on the Pro/E
menu bar. This method will create a button called "Input
info" on the utilities menu and assigns the method
gatherInputs() to activate when the button is pressed.
Command access check is added by CheckCommandAccess
\*====================================================================*/
public static void addInputButton(Session session)
{
UICommand inputCommand = null;

/*====================================================================*\
Add new input command
\*====================================================================*/
try {
inputCommand=session.UICreateCommand("INPUT",
new GatherInputListener (session));
}
catch(jxthrowable x) {
System.out.println("Exception in UICreateCommand():"+x);
return;
}

/*====================================================================*\
Add action listener to check access to the command
\*====================================================================*/
try {
inputCommand.AddActionListener(new CheckButtonCommandAccess (session));
}
catch(jxthrowable x) {
System.out.println("Exception in AddActionListener():"+x);
return;
}

/*====================================================================*\
Add new button to "windows" menu
\*====================================================================*/
try {
session.UIAddButton(inputCommand, "Windows", null,
"USER Input info", "USER Gather inputs",
"jlexamples.txt");
}

catch(jxthrowable x){

8-4 J-Link User’s Guide


System.out.println("Exception in UIAddButton():"+x);
return;
}
}

/*====================================================================*\
CLASS : GatherInputListener()
PURPOSE : Listener class which implements the added command.
\*====================================================================*/

Menus, Commands,
and Pop-up Menus
class GatherInputListener extends DefaultUICommandActionListener
{
public Session session;

public GatherInputListener(Session currentSession)


{
session = currentSession;
}

public void gatherInputs()


{
try
{
session.UIShowMessageDialog("Example button pressed" , null);
}
catch(jxthrowable x)
{
System.out.println("Exception in UIShowMessageDialog():"+x);
return;
}
}

public void OnCommand ()


{
gatherInputs();
}
}
The corresponding message file for the example program contains
two text messages. The first is used as a button name, the second as
its help string.
USER#Input#info
Input info
#
#
USER#Gather#inputs
Gather inputs used in my J-Link program
#
#

Menus, Commands, and Pop-up Menus 8-5


Finding Pro/ENGINEER commands
This method enables you to find existing Pro/ENGINEER
commands in order to modify their behavior.

Method Introduced:

• pfcSession.Session.UIGetCommand
The method pfcSession.Session.UIGetCommand returns a
pfcCommand.UICommand object representing an existing
Pro/ENGINEER command. The method allows you to find the
command ID for an existing command so that you can add an access
function or bracket function to the command. You must know the
name of the command in order to find its ID.

Use the trail file to find the name of an action command (not a
menu button). Click the corresponding icon on the toolbar (not the
button in the menu bar) and check the last entry in the trail file.
For example, for the Save icon, the trail file will have the
corresponding entry:

~ Activate 'main_dlg_cur' 'ProCmdModelSave.file'

The action name for the Save icon is ProCmdModelSave. This


string can be used as input to
pfcSession.Session.UIGetCommand to get the command ID.

You can determine a command ID string for an option without an


icon by searching through the resource files located in the
<Pro/ENGINEER Loadpoint>/text/resources directory. If you
search for the menu button name, the line will contain the
corresponding action command for the button.

Access Listeners for Commands


These methods allow you to apply an access listener to a command.
The access listener determines whether or not the command is
visible at the current time in the current session.

Methods Introduced:

• pfcBase.ActionSource.AddActionListener
• pfcCommand.UICommandAccessListener.OnCommandAccess
Use the method pfcBase.ActionSource.AddActionListener to
register a new pfcCommand.UICommandAccessListener on
any command (created either by an application or
Pro/ENGINEER). This listener will be called when buttons based
on the command might be shown.

8-6 J-Link User’s Guide


The listener method
pfcCommand.UICommandAccessListener.OnCommandAcce
ss allows you to impose an access function on a particular
command. The method determines if the action or command should
be available, unavailable, or hidden.

The potential return values are listed in the enumerated type


CommandAccess and are as follows:

Menus, Commands,
and Pop-up Menus
• ACCESS_REMOVE—The button is not visible and if all of the
menu buttons in the containing menu possess an access
function returning ACCESS_REMOVE, the containing menu
will also be removed from the Pro/ENGINEER user interface..
• ACCESS_INVISIBLE—The button is not visible.
• ACCESS_UNAVAILABLE—The button is visible, but gray
and cannot be selected.
• ACCESS_DISALLOW—The button shows as available, but
the command will not be executed when it is chosen.
• ACCESS_AVAILABLE—The button is not gray and can be
selected by the user. This is the default value.

Example 2: Command Access Listeners


This example code demonstrates the usage of the access listener
method for a particular command. The
CommandAccessOnCommandAccess function returns
"ACCESS_UNAVAILABLE" that disables button associated with
the command, if the model is not present or if it is not of type PART.
Else, the function returns "ACCESS_AVAILABLE" that enables
button associated with the command.
/*===================================================================*\
CLASS : CheckCommandAccess ()
PURPOSE : This class will be used to check if access to command must
be given.
\*===================================================================*/
class CheckCommandAccess extends DefaultUICommandAccessListener
{
private Session session;

public CheckCommandAccess (Session currentSession)


{
session = currentSession;
}

public CommandAccess OnCommandAccess (boolean


AllowErrorMessages)

Menus, Commands, and Pop-up Menus 8-7


{
Model model = null;
try
{

/*=============================================================*\
Get the current model
\*=============================================================*/
model = session.GetCurrentModel ();

/*===================================================================*\
If model is not present or it is not of type part, return
"ACCESS_UNAVAILABLE" which disables button associated with the command
\*====================================================================*/
if (model == null)
{
return CommandAccess.ACCESS_UNAVAILABLE;
}
else if (model.GetType() != ModelType.MDL_PART)
{
return CommandAccess.ACCESS_UNAVAILABLE;
}

/*===================================================================*\
Else, return "ACCESS_AVAILABLE" which enables button associated with
the command
\*===================================================================*/
else
{
return CommandAccess.ACCESS_AVAILABLE;
}

}
catch(jxthrowable x)
{
System.out.println("Exception in OnCommandAccess():"+x);
return CommandAccess.ACCESS_UNAVAILABLE;
}

}
}

Bracket Listeners for Commands


These methods allow you to apply a bracket listener to a command.
The bracket listener is called before and after the command runs,
which allows your application to provide custom logic to execute
whenever the command is selected.

8-8 J-Link User’s Guide


Methods Introduced:

• pfcBase.ActionSource.AddActionListener
• pfcCommand.UICommandBracketListener.OnBeforeCommand
• pfcCommand.UICommandBracketListener.OnAfterCommand
Use the method pfcBase.ActionSource.AddActionListener to
register a new pfcCommand.UICommandBracketListener on

Menus, Commands,
and Pop-up Menus
any command (created either by an application or
Pro/ENGINEER). This listener will be called when the command is
selected by the user.

The listener methods


pfcCommand.UICommandBracketListener.OnBeforeComm
and and
pfcCommand.UICommandBracketListener.OnAfterComma
nd allow the creation of functions that will be called immediately
before and after execution of a given command. These methods are
used to add the business logic to the start or end (or both) of an
existing Pro/ENGINEER command.

The method
pfcCommand.UICommandBracketListener.OnBeforeComm
and could also be used to cancel an upcoming command. To do this,
throw a pfcExceptions.XCancelProEAction exception from the
body of the listener method using
pfcExceptions.XCancelProEAction.Throw.

Example 3: Bracket Listeners


The following example code demonstrates the usage of the bracket
listener methods that are called before and after when the user
tries to rename the model. If the model contains a certain
parameter, the rename attempt will be aborted by this listener.
/*====================================================================*\
FUNCTION : addRenameCheck()
PURPOSE : An example of comman bracket listener which prevents model
rename when a specified parameter is present.
\*====================================================================*/
public static void addRenameCheck(Session session , String paramName)
{
UICommand command = null;

try
{
/*====================================================================*\
Get the command which is invoked by pressing "Rename" button
\*====================================================================*/

Menus, Commands, and Pop-up Menus 8-9


command = session.UIGetCommand("ProCmdModelRename");

/*====================================================================*\
If the command is not null, add action listener to check access to the
command
\*====================================================================*/
if (command != null)
{
command.AddActionListener(new RenameBracketListener(session ,
paramName));
}
}
catch(jxthrowable x)
{
System.out.println("Exception in addRenameCheck():"+x);
return;
}
}
}

/*====================================================================*\
CLASS : RenameBracketListener()
PURPOSE : This listener class will be used to check if model rename
should be allowed depending if parameter is present.
\*====================================================================*/
class RenameBracketListener extends DefaultUICommandBracketListener
{
public Session session;
String name;

public RenameBracketListener (Session currentSession , String


paramName)
{
session = currentSession;
name = paramName;
}

/*====================================================================*\
FUNCTION : OnAfterCommand()
PURPOSE : Function called after rename execution is complete.

\*====================================================================*/
public void OnAfterCommand()
{
}

/*====================================================================*\
FUNCTION : OnBeforeCommand()
PURPOSE : Function called when rename button is pressed.

8 - 10 J-Link User’s Guide


\*====================================================================*/
public void OnBeforeCommand() throws com.ptc.cipjava.jxthrowable
{
Model model = null;
Parameter param = null;
boolean cancelRename ;

try

Menus, Commands,
and Pop-up Menus
{
/*==============================================================*\
Get the current model
\*==============================================================*/
model = session.GetCurrentModel ();

if (model == null)
{
return;
}

/*==============================================================*\
Get the specified parameter
\*==============================================================*/
param = model.GetParam(name);

/*==============================================================*\
If parameter is present, rename should not be allowed
\*==============================================================*/
if (param != null)
{
cancelRename = true;
}
else
{
cancelRename = false;
}
}
catch(jxthrowable x)
{
System.out.println("Exception in OnBeforeCommand():"+x);
return;
}

if (cancelRename == true)
{
XCancelProEAction.Throw();
}
}

Menus, Commands, and Pop-up Menus 8 - 11


Designating Commands
Using J-Link you can designate Pro/ENGINEER commands to be
available to be added to any Pro/ENGINER toolbar.

To add a command to the toolbar, you must:

1. Define or add the command to be initiated on clicking the icon


in the J-Link application.
2. Optionally designate an icon button to be used with the
command.
3. Designate the command to appear in the Screen Customization
dialog box of Pro/ENGINEER.
4. Finally, enter the Screen Customization dialog, and
manually add the designated command to the window. Save the
configuration in Pro/ENGINEER so that changes to the toolbar
appear when a new session of Pro/ENGINEER is started.

Command Icons
Method Introduced:

• pfcCommand.UICommand.SetIcon
The method pfcCommand.UICommand.SetIcon allows you to
designate an icon to be used with the command you created. The
method adds the icon to the Pro/ENGINEER command. Specify the
name of the icon file, including the extension as the input argument
for this method. A valid format for the icon file is the
PTC-proprietary format used by Pro/ENGINEER.BIF or a standard
.GIF. The Pro/ENGINEER toolbar button is replaced with the
image of the image.

Note: While specifying the name of the icon file, do not specify
the full path to the icon names.
The default search paths for finding the icons are:

• <ProENGINEER loadpoint>/text/resource
• <Application text dir>/resource
• <Apppplication text dir>/(language)/resource
The location of the application text directory is specified in the
registry file.

Toolbar commands that do not have an icon assigned to them


display the button label.

8 - 12 J-Link User’s Guide


You may also use this method to assign a small icon to a menu
button on the menubar. The icon appears to the left of the button
label.

Before using the method pfcCommand.UICommand.SetIcon,


you must place the command in a menu using the method
pfcSession.Session.UIAddButton.

Menus, Commands,
and Pop-up Menus
Designating the Command
Method Introduced:

• pfcCommand.UICommand.Designate
This method allows you designate the command as available in the
Screen Customization dialog box of Pro/ENGINEER. After a J-Link
application has used the method
pfcCommand.UICommand.Designate on a command, you can
interactively drag the toolbar button that you associate with the
command, on to the Pro/ENGINEER toolbar. If this method is not
called, the toolbar button will not be visible in the Screen
Customization dialog box of Pro/ENGINEER.

The arguments to this method are:

• Label—The message string that refers to the icon label. This


label (stored in the message file) identifies the text seen when
the button is displayed. If the command is not assigned an icon,
the button label string appears on the toolbar button by default.
• Help—The one-line Help for the icon. This label (stored in the
message file) identifies the help line seen when the mouse
moves over the icon.
• Description—The message appears in the Screen Customization
dialog and also when "Description" is clicked in
Pro/ENGINEER.
• MessageFile—The message file name. All the labels including
the one-line Help labels must be present in the message file.
Note: This file must be in the directory <text_path>/text or
<text_path>/text/<language>.
Before using the method pfcCommand.UICommand.Designate,
you must place the command in a menu using the method
pfcSession.Session.UIAddButton.

Menus, Commands, and Pop-up Menus 8 - 13


Placing the Toolbar Button
Once the toolbar button has been created using the functions
discussed above, place the toolbar button on the Pro/ENGINEER
toolbar. Click Tools > Customize Screen. The designated buttons
will be stored under the category “Foreign Applications”. Drag the
toolbar button on to the Pro/ENGINEER toolbar as shown in the
following figure. Save the window configuration settings in the
config.win file so that the settings are loaded when a new session of
Pro/ENGINEER is launched. For more information, see the
Pro/ENGINEER menus portion of the Pro/ENGINEER help.

Figure 8-1: The Customize Screen With The Icons To be Designated

8 - 14 J-Link User’s Guide


Figure 8-2: The Pro/ENGINEER Toolbar With The Designated Icons

Menus, Commands,
and Pop-up Menus
Pop-up Menus
Pro/ENGINEER provides shortcut menus that contain frequently
used commands appropriate to the currently selected items. You
can access a shortcut menu by right-clicking a selected item.
Shortcut menus are accessible in:

• Graphics window
• Model Tree
• Some dialog boxes
• Any area where you can perform an object-action operation by
selecting an item and choosing a command to perform on the
selected item.
The methods described in this section allow you to add menus to a
graphics window pop-up menu.

Adding a Pop-up Menu to the Graphics Window


You can activate different pop-up menus during a given session of
Pro/ENGINEER. Every time the Pro/ENGINEER context changes
when you open a different model type, enter different tools or
special modes such as Edit, a different pop-up menu is created.
When Pro/ENGINEER moves to the next context, the pop-up menu
may be destroyed.

As a result of this, J-Link applications must attach a button to the


pop-up menu during initialization of the pop-up menu. The J-Link
application is notified each time a particular pop-up menu is
created, which then allows the user to add to the pop-up menu.

Menus, Commands, and Pop-up Menus 8 - 15


Use the following procedure to add items to pop-up menus in the
graphics window:

1. Obtain the name of the existing pop-up menus to which you


want to add a new menu using the trail file.
2. Create commands for the new pop-up menu items.
3. Implement access listeners to provide visibility information for
the items.
4. Add an action listener to the session to listen for pop-up menu
initialization.
5. In the listener method, if the pop-up menu is the correct menu
to which you wish to add the button, then add it.
The following sections describe each of these steps in detail. You
can add push buttons and cascade menus to the pop-up menus. You
can add pop-up menu items only in the active window. You cannot
use this procedure to remove items from existing menus.

Using the Trail File to Determine Existing Pop-up Menu


Names
The trail file in Pro/ENGINEER contains a comment that identifies
the name of the pop-up menu if the configuration option,
auxapp_popup_menu_info is set to yes.

For example, the pop-up menu, Edit Properties, has the following
comment in the trail file:
~ Close `rmb_popup` `PopupMenu`
~ Activate `rmb_popup` `EditProperties`
!Command ProCmdEditPropertiesDtm was pushed from the
software.
!Item was selected from popup menu 'popup_mnu_edit'

Listening for Pop-up Menu Initialization


Methods Introduced:

• pfcBase.ActionSource.AddActionListener
• pfcUI.PopupmenuListener.OnPopupmenuCreate
Use the method pfcBase.ActionSource.AddActionListener to
register a new pfcUI.PopupmenuListener to the session. This
listener will be called when pop-up menus are initialized.

8 - 16 J-Link User’s Guide


The method pfcUI.PopupmenuListener.OnPopupmenuCreate
is called after the pop-up menu is created internally in
Pro/ENGINEER and may be used to assign application-owned
buttons to the pop-up menu.

Accessing the Pop-up Menus


The method described in this section provides the name of the

Menus, Commands,
and Pop-up Menus
pop-up menus used to access these menus while using other
methods.

Method Introduced:

• pfcUI.Popupmenu.GetName
The method pfcUI.Popupmenu.GetName() returns the name of
the pop-up menu.

Adding Content to the Pop-up Menus


Methods Introduced:

• pfcUI.Popupmenu.AddButton
• pfcUI.Popupmenu.AddMenu
Use pfcUI.Popupmenu.AddButton to add a new item to a pop-up
menu. The input arguments are:

• Command—Specifies the command associated with the pop-up


menu.
• Options – A pfcUI.PopupmenuOptions object containing
other options for the method. The options that may be included
are:
• PositionIndex—Specifies the position in the pop-up menu at
which to add the menu button. Pass null to add the button
to the bottom of the menu. Use the method
pfcUI.PopupmenuOptions.SetPositionIndex to set this
option.
• Name—Specifies the name of the added button. The button
name is placed in the trail file when the user selects the
menu button. Use the method
pfcUI.PopupmenuOptions.SetName to set this option.
• SetLabel—Specifies the button label. This label identifies
the text displayed when the button is displayed. Use the
method pfcUI.PopupmenuOptions.SetLabel to set this
option.

Menus, Commands, and Pop-up Menus 8 - 17


• Helptext—Specifies the help message associated with the
button. Use the method
pfcUI.PopupmenuOptions.SetHelptext to set this
option.
Use the method pfcUI.Popupmenu.AddMenu to add a new
cascade menu to an existing pop-up menu.

The argument for this method is a pfcUI.PopupmenuOptions


object, whose members have the same purpose as described for
newly added buttons. This method returns a new
pfcUI.Popupmenu object to which you may add new buttons.

Example 4: Creating a Pop-up Menu


This example code demonstrates the usage of UI functions to add a
new model tree pop-up menu.
package com.ptc.jlinkexamples;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcCommand.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcUI.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSolid.*;

public class pfcPopupExamples


{

/*=====================================================================*\
FUNCTION: addMenus
PURPOSE: This function demonstrates the usage of UI functions to add a
new button to ProE Graphics Window and model tree popup menu.
\*=====================================================================*/
public static void addMenus(Session session)
{
UICommand inputCommand = null;

try
{

8 - 18 J-Link User’s Guide


/*-----------------------------------------------------------*\
Add new input command
\*-----------------------------------------------------------*/
inputCommand=session.UICreateCommand("HIGHLIGHT",
new AssemblyFunction (session));

/*-----------------------------------------------------------*\
Add action listener to check access to the command
\*-----------------------------------------------------------*/

Menus, Commands,
and Pop-up Menus
inputCommand.AddActionListener(new CheckCommandAccess (session));

/*-----------------------------------------------------------*\
Add new button to action menu
\*-----------------------------------------------------------*/
session.UIAddButton(inputCommand, "ActionMenu", null,
"USER Highlight Constraint", "USER Highlight Constraint Help",
"jlexamples.txt");

/*-----------------------------------------------------------*\
Add action listener which will execute when new popup menus
are created
\*-----------------------------------------------------------*/
session.AddActionListener(new CreatePopupButton(session) );

catch(jxthrowable x)
{
System.out.println("Exception in addMenus():"+x);
return;
}
}
}

/*=====================================================================*\
CLASS: AssemblyFunction
PURPOSE: This is the Listener class to implement Highlight command.
\*=====================================================================*/
class AssemblyFunction extends DefaultUICommandActionListener
{
private Session session;

public AssemblyFunction(Session currentSession)


{
session = currentSession;
}

public void OnCommand ()


throws com.ptc.cipjava.jxthrowable
{
highlightConstraints();

Menus, Commands, and Pop-up Menus 8 - 19


}

public void highlightConstraints()


throws com.ptc.cipjava.jxthrowable
{

Selections selections;
SelectionBuffer selectionBuffer;
SelectionOptions options ;
ModelItem item ;
Feature feature ;

ComponentPath modelPath;
ComponentPath parentPath;
intseq parentIds;
Solid modelParent;
int modelId;

/*---------------------------------------------------------------------*\
Get selected components
\*---------------------------------------------------------------------*/
selectionBuffer = session.GetCurrentSelectionBuffer();
selections = selectionBuffer.GetContents();

if (selections == null)
{
options = pfcSelect.SelectionOptions_Create ("membfeat");
options.SetMaxNumSels (new Integer (1));
selections = session.Select (options, null);

if (selections == null || selections.getarraysize () == 0)


return;

/*---------------------------------------------------------------------*\
Get the model item from the selection
\*---------------------------------------------------------------------*/
item = selections.get(0).GetSelItem();

/*---------------------------------------------------------------------*\
If item is null, get the model item from the selection model
\*---------------------------------------------------------------------*/
if (item == null)
{
/*-----------------------------------------------------------------*\
Get the component path from the selection model
\*-----------------------------------------------------------------*/
modelPath = selections.get(0).GetPath();

8 - 20 J-Link User’s Guide


modelId =
modelPath.GetComponentIds().get(modelPath.GetComponentIds().getarraysize(
) - 1);

/*-----------------------------------------------------------------*\
Get the parent model of the selection model
\*-----------------------------------------------------------------*/
parentIds = modelPath.GetComponentIds();

Menus, Commands,
and Pop-up Menus
parentIds.removerange(parentIds.getarraysize() - 1 ,
parentIds.getarraysize());

if (parentIds.getarraysize() == 0)
{
modelParent = modelPath.GetRoot();
}
else
{
parentPath = pfcAssembly.CreateComponentPath(modelPath.GetRoot(),
parentIds);
modelParent = parentPath.GetLeaf();
}

/*-----------------------------------------------------------------*\
Get the selection model as model item from the parent model
\*-----------------------------------------------------------------*/
item = ((ModelItemOwner)modelParent).GetItemById
(ModelItemType.ITEM_FEATURE , modelId);

if (item == null)
return;

feature = (Feature)item;

if (feature.GetFeatType () != FeatureType.FEATTYPE_COMPONENT)
return;

ComponentFeat asmcomp = (ComponentFeat) item;

ComponentConstraints constrs = asmcomp.GetConstraints ();

if (constrs == null || constrs.getarraysize() == 0)


return;

for (int i = 0; i < constrs.getarraysize(); i++)


{
/*---------------------------------------------------------------------*\
Highlight the assembly reference geometry
\*---------------------------------------------------------------------*/

Menus, Commands, and Pop-up Menus 8 - 21


ComponentConstraint c = constrs.get (i);

Selection asmRef = c.GetAssemblyReference ();

if (asmRef != null)
asmRef.Highlight (StdColor.COLOR_ERROR);

/*---------------------------------------------------------------------*\
Highlight the component reference geometry
\*---------------------------------------------------------------------*/
Selection compRef = c.GetComponentReference ();

if (compRef != null)
compRef.Highlight (StdColor.COLOR_WARNING);

/*---------------------------------------------------------------------*\
Prepare and display the message text.
\*---------------------------------------------------------------------*/
Double offset = c.GetOffset ();
String offsetString = "";
if (offset != null)
offsetString = ", offset of "+offset;

ComponentConstraintType cType = c.GetType ();


String cTypeString = constraintTypeToString (cType);

stringseq texts = stringseq.create ();


texts.set (0, new String (""+(i+1)));
texts.set (1, new String (""+constrs.getarraysize()));
texts.set (2, cTypeString);
texts.set (3, offsetString);

session.UIDisplayMessage ("jlexamples.txt",
"JLEX Showing constraint %0s of %1s %2s%3s. Hit <CR> to continue.",
texts);
session.UIReadStringMessage (null);

/*---------------------------------------------------------------------*\
Clean up the UI for the next constraint
\*---------------------------------------------------------------------*/
if (asmRef != null)
{
asmRef.UnHighlight ();
}

if (compRef != null)
{
compRef.UnHighlight ();
}
}

8 - 22 J-Link User’s Guide


}

/*=====================================================================*\
FUNCTION: constraintTypeToString
PURPOSE: Utility to convert the constraint type to a string for printing
\*=====================================================================*/
private static String constraintTypeToString (ComponentConstraintType
type)
{

Menus, Commands,
and Pop-up Menus
switch (type.getValue())
{
case ComponentConstraintType._ASM_CONSTRAINT_MATE:
return ("(Mate)");
case ComponentConstraintType._ASM_CONSTRAINT_MATE_OFF:
return ("(Mate Offset)");
case ComponentConstraintType._ASM_CONSTRAINT_ALIGN:
return ("(Align)");
case ComponentConstraintType._ASM_CONSTRAINT_ALIGN_OFF:
return ("(Align Offset)");
case ComponentConstraintType._ASM_CONSTRAINT_INSERT:
return ("(Insert)");
case ComponentConstraintType._ASM_CONSTRAINT_ORIENT:
return ("(Orient)");
case ComponentConstraintType._ASM_CONSTRAINT_CSYS:
return ("(Csys)");
case ComponentConstraintType._ASM_CONSTRAINT_TANGENT:
return ("(Tangent)");
case ComponentConstraintType._ASM_CONSTRAINT_PNT_ON_SRF:
return ("(Point on Surf)");
case ComponentConstraintType._ASM_CONSTRAINT_EDGE_ON_SRF:
return ("(Edge on Surf)");
case ComponentConstraintType._ASM_CONSTRAINT_DEF_PLACEMENT:
return ("(Default)");
case ComponentConstraintType._ASM_CONSTRAINT_SUBSTITUTE:
return ("(Substitute)");
case ComponentConstraintType._ASM_CONSTRAINT_PNT_ON_LINE:
return ("(Point on Line)");
case ComponentConstraintType._ASM_CONSTRAINT_FIX:
return ("(Fix)");
case ComponentConstraintType._ASM_CONSTRAINT_AUTO:
return ("(Auto)");
default:
return ("(Unrecognized Type)");
}
}
}

/*=====================================================================*\
CLASS: CreatePopupButton
PURPOSE: Listener class to create Popup menu button when the menu is
created.

Menus, Commands, and Pop-up Menus 8 - 23


\*=====================================================================*/
class CreatePopupButton extends DefaultPopupmenuListener
{
private Session session;

public CreatePopupButton(Session currentSession)


{
session = currentSession;
}

public void OnPopupmenuCreate (Popupmenu menu)


throws com.ptc.cipjava.jxthrowable
{
UICommand command = null;
PopupmenuOptions options;

/*---------------------------------------------------------------------*\
If the created popup menu is "Sel Obj Menu", then get the command for
highlight constraint added previously and add button
\*---------------------------------------------------------------------*/
if (menu.GetName().equals("Sel Obj Menu"))
{
command = session.UIGetCommand("HIGHLIGHT");
if (command != null)
{
options = pfcUI.PopupmenuOptions_Create(new String
("HIGHLIGHT_CONSTRAINTS"));
options.SetHelptext("Highlight Assembly Constraints");
options.SetLabel("Highlight Constraint");

menu.AddButton(command, options);
}
}
}
}

/*=====================================================================*\
CLASS: CreatePopupButton
PURPOSE: This listener class checks if command is accessible to the user.
\*=====================================================================*/
class CheckCommandAccess extends DefaultUICommandAccessListener
{
private Session session;

public CheckCommandAccess (Session currentSession)


{
session = currentSession;
}

public CommandAccessOnCommandAccess (boolean AllowErrorMessages)


{

8 - 24 J-Link User’s Guide


Model model = null;
Selections selections;
SelectionBuffer selectionBuffer;

try
{
/*---------------------------------------------------------------------*\
Get the current model
\*---------------------------------------------------------------------*/

Menus, Commands,
and Pop-up Menus
model = session.GetCurrentModel ();

/*---------------------------------------------------------------------*\
If model is not present or it is not of type assembly, return
"ACCESS_UNAVAILABLE" which disables button associated with the command
\*---------------------------------------------------------------------*/
if (model == null)
{
return CommandAccess.ACCESS_UNAVAILABLE;
}
else if (model.GetType() != ModelType.MDL_ASSEMBLY)
{
return CommandAccess.ACCESS_UNAVAILABLE;
}

/*---------------------------------------------------------------------*\
Get the current selection
\*---------------------------------------------------------------------*/
selectionBuffer = session.GetCurrentSelectionBuffer();
selections = selectionBuffer.GetContents();

/*---------------------------------------------------------------------*\
If nothing has been selected or more than one item has been sleected,
return "ACCESS_UNAVAILABLE" which disables button associated with the
command
\*---------------------------------------------------------------------*/
if ((selections == null) || (selections.getarraysize() > 1))
{
return CommandAccess.ACCESS_UNAVAILABLE;
}

/*---------------------------------------------------------------------*\
Else return "ACCESS_AVAILABLE" which enables button associated with
the
command
\*---------------------------------------------------------------------*/
return CommandAccess.ACCESS_AVAILABLE;

}
catch(jxthrowable x)
{
System.out.println("Exception in OnCommandAccess():"+x);

Menus, Commands, and Pop-up Menus 8 - 25


return CommandAccess.ACCESS_UNAVAILABLE;
}

}
}

The corresponding message file for the example program contains


two text messages. The first is used as the pop-menu button name,
the second as its help string.
USER Highlight Constraint
Highlight Constraint
#
#
USER Highlight Constraint Help
Highlight Assembly Constraints
#
#

8 - 26 J-Link User’s Guide


9
Models

This chapter describes how to program on the model level using


J-Link.

Topic Page

Overview of Model Objects 9-2


Getting a Model Object 9-2
Model Descriptors 9-3
Retrieving Models 9-4
Model Information 9-6
Model Operations 9-9
Running ModelCHECK 9 - 10

9-1
Overview of Model Objects
Models can be any Pro/ENGINEER file type, including parts,
assemblies, drawings, sections, and layouts. The classes and
methods in the package com.ptc.pfc.pfcModel provide generic access
to models, regardless of their type. The available methods enable
you to do the following:

• Access information about a model.


• Open, copy, rename, and save a model.

Getting a Model Object


Methods Introduced:

• pfcFamily.FamilyTableRow.CreateInstance
• pfcSelect.Selection.GetSelModel
• pfcSession.BaseSession.GetModel
• pfcSession.BaseSession.GetCurrentModel
• pfcSession.BaseSession.ListModels
• pfcSession.BaseSession.GetByRelationId
• pfcWindow.Window.GetModel
These methods get a model object that is already in session.

The method pfcSelect.Selection.GetSelModel returns the model


that was interactively selected.

The method pfcSession.BaseSession.GetModel returns a model


based on its name and type, whereas
pfcSession.BaseSession.GetByRelationId returns a model in
an assembly that has the specified integer identifier.

The method pfcSession.BaseSession.GetCurrentModel returns


the current active model.

Use the method pfcSession.BaseSession.ListModels to return a


sequence of all the models in session.

For more methods that return solid models, refer to the chapter
Solid.

9-2 J-Link User’s Guide


Model Descriptors
Methods Introduced:

• pfcModel.pfcModel.ModelDescriptor_Create
• pfcModel.pfcModel.ModelDescriptor_CreateFromFileName
• pfcModel.ModelDescriptor.SetGenericName
• pfcModel.ModelDescriptor.SetInstanceName

Models
• pfcModel.ModelDescriptor.SetType
• pfcModel.ModelDescriptor.SetHost
• pfcModel.ModelDescriptor.SetDevice
• pfcModel.ModelDescriptor.SetPath
• pfcModel.ModelDescriptor.SetFileVersion
• pfcModel.ModelDescriptor.GetFullName
• pfcModel.Model.GetFullName
Model descriptors are data objects used to describe a model file and
its location in the system. The methods in the model descriptor
enable you to set specific information that enables Pro/ENGINEER
to find the specific model you want.

The static utility method


pfcModel.pfcModel.ModelDescriptor_Create allows you to
specify as data to be entered a model type, an instance name, and a
generic name. The model descriptor constructs the full name of the
model as a string, as follows:
String FullName = InstanceName+"<"+GenericName+">";
// As long as the
// generic name is
// not an empty
// string ("")

If you want to load a model that is not a family table instance, pass
an empty string as the generic name argument so that the full
name of the model is constructed correctly. If the model is a family
table interface, you should specify both the instance and generic
names.

Note: You are allowed to set other fields in the model


descriptor object, but they may be ignored by some
methods.

Models 9-3
The static utility method
pfcModel.pfcModel.ModelDescriptor_CreateFromFileName
allows you to create a new model descriptor from a given a file
name. The file name is a string in the form
"<name>.<extension>".

Retrieving Models
Methods Introduced:

• pfcSession.BaseSession.RetrieveModel
• pfcSession.BaseSession.RetrieveModelWithOpts
• pfcSession.BaseSession.OpenFile
• pfcSolid.Solid.HasRetrievalErrors
These methods cause Pro/ENGINEER to retrieve the model that
corresponds to the ModelDescriptor argument.

The method pfcSession.BaseSession.RetrieveModel retrieves


the specified model into the Pro/ENGINEER session given its model
descriptor from a standard directory. But this function does not
create a window for it, nor does it display the model anywhere.

The method pfcSession.BaseSession.RetrieveModelWithOpts


retrieves the specified model into the Pro/ENGINER session based
on the path specified by the model descriptor. The path can be a
disk path, a workspace path, or a commonspace path. The Opts
argument (given by the pfcSession.RetrieveModelOptions
object) provides the user with the option to specify simplified
representations.

The method pfcSession.BaseSession.OpenFile brings the model


into memory, opens a new window for it (or uses the base window, if
it is empty), and displays the model.

Note: pfcSession.BaseSession.OpenFile actually returns a


handle to the window it has created.
To get a handle to the model you need, use the method
pfcWindow.Window.GetModel.

The method pfcSolid.Solid.HasRetrievalErrors returns a true


value if the features in the solid model were suppressed during the
RetrieveModel or OpenFile operations. This method must be
called immediately after the
pfcSession.BaseSession.RetrieveModel method or an
equivalent retrieval method.

9-4 J-Link User’s Guide


Example Code: Retrieving a Model
The following example code demonstrates how to retrieve a model.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;

public class pfcModelExamples {

/**
* An example of retrieving a model using a model descriptor object.

Models
* This method loads the model identified by modelname and type from a
* standard directory location.
*/

public Model retrieveModelFromStandardDir (Session session,


String modelname, ModelType type)
{
String stdpath = "/home/ptc/models/standard";
ModelDescriptor descr;
Model model;

try {
descr = pfcModel.ModelDescriptor_Create (type, modelname, null);
descr.SetPath (stdpath);
}
catch (jxthrowable x) {
System.out.println ("Error in initializing model descriptor"+x);
return (null);
}
try {
model = session.RetrieveModel (descr);
}
catch (jxthrowable x) {
printMsg ("Exception in retrieving model:"+x);
return (null);
}
return (model);
}
public static void printMsg (String str)
{
System.out.println (str);
}
}

Models 9-5
Model Information
Methods Introduced:

• pfcModel.Model.GetFileName
• pfcModel.Model.GetCommonName
• pfcModel.Model.IsCommonNameModifiable
• pfcModel.Model.GetFullName
• pfcModel.Model.GetGenericName
• pfcModel.Model.GetInstanceName
• pfcModel.Model.GetOrigin
• pfcModel.Model.GetRelationId
• pfcModel.Model.GetDescr
• pfcModel.Model.GetType
• pfcModel.Model.GetIsModified
• pfcModel.Model.GetVersion
• pfcModel.Model.GetRevision
• pfcModel.Model.GetBranch
• pfcModel.Model.GetReleaseLevel
• pfcModel.Model.GetVersionStamp
• pfcModel.Model.ListDependencies
• pfcModel.Model.ListDeclaredModels
• pfcModel.Model.CheckIsModifiable
• pfcModel.Model.CheckIsSaveAllowed
The method pfcModel.Model.GetFileName retrieves the model
file name in the "name"."type" format.

The method pfcModel.Model.GetCommonName retrieves the


common name for the model. This name is displayed for the model
in Windchill PDMLink.

Use the method


pfcModel.Model.GetIsCommonNameModifiable to identify if
the common name of the model can be modified. You can modify the
name for models that are not yet owned by Windchill PDMLink, or
in certain situations if the configuration option
let_proe_rename_pdm_objects is set to yes.

9-6 J-Link User’s Guide


The method pfcModel.Model.GetFullName retrieves the full
name of the model in the instance <generic> format.

The method pfcModel.Model.GetGenericName retrieves the


name of the generic model. If the model is not an instance, this
name must be NULL or an empty string.

The method pfcModel.Model.GetInstanceName retrieves the


name of the model. If the model is an instance, this method
retrieves the instance name.

Models
The method pfcModel.Model.GetOrigin returns the complete
path to the file from which the model was opened. This path can be
a location on disk from a Windchill workspace, or from a
downloaded URL.

The method pfcModel.Model.GetRelationId retrieves the


relation identifier of the specified model. It can be NULL.

The method pfcModel.Model.GetDescr returns the descriptor for


the specified model. Model descriptors can be used to represent
models not currently in session.

Note: From Pro/ENGINEER Wildfire 4.0 onwards, the


methods pfcModel.Model.GetFullName,
pfcModel.Model.GetGenericName, and
pfcModel.Model.GetDescr throw an exception
pfcExceptions.XtoolkitCantOpen if called on a
model instance whose immediate generic is not in
session. Handle this exception and typecast the model
as pfcSolid.Solid, which in turn can be typecast as
pfcFamily.FamilyMember, and use the method
pfcFamily.FamilyMember.GetImmediateGenericI
nfo to get the model descriptor of the immediate generic
model. The model descriptor can be used to derive the
full name or generic name of the model. If you wish to
switch off this behavior and continue to run legacy
applications in the pre-Wildfire 4.0 mode, set the
configuration option
retrieve_instance_dependencies to
"instance_and_generic_deps".
The method pfcModel.Model.GetType returns the type of model
in the form of the pfcModel.ModelType object. The types of
models are as follows:

• MDL_ASSEMBLY—Specifies an assembly.
• MDL_PART—Specifies a part.
• MDL_DRAWING—Specifies a drawing.

Models 9-7
• MDL_2D_SECTION—Specifies a 2D section.
• MDL_LAYOUT—Specifies a layout.
• MDL_DWG_FORMAT—Specifies a drawing format.
• MDL_MFG—Specifies a manufacturing model.
• MDL_REPORT—Specifies a report.
• MDL_MARKUP—Specifies a drawing markup.
• MDL_DIAGRAM—Specifies a diagram
The method pfcModel.Model.GetIsModified identifies whether
the model has been modified since it was last saved.

The method pfcModel.Model.GetVersion returns the version of


the specified model from the PDM system. It can be NULL, if not
set.

The method pfcModel.Model.GetRevision returns the revision


number of the specified model from the PDM system. It can be
NULL, if not set.

The method pfcModel.Model.GetBranch returns the branch of


the specified model from the PDM system. It can be NULL, if not
set.

The method pfcModel.Model.GetReleaseLevel returns the


release level of the specified model from the PDM system. It can be
NULL, if not set.

The method pfcModel.Model.GetVersionStamp returns the


version stamp of the specified model. The version stamp is a
Pro/ENGINEER specific identifier that changes with each change
made to the model.

The method pfcModel.Model.ListDependencies returns a list of


the first-level dependencies for the specified model in the
Pro/ENGINEER workspace in the form of the
pfcModel.Dependencies object.

The method pfcModel.Model.ListDeclaredModels returns a list


of all the first-level objects declared for the specified model.

The method pfcModel.Model.CheckIsModifiable identifies if a


given model can be modified without checking for any subordinate
models. This method takes a boolean argument ShowUI that
determines whether the Pro/ENGINEER conflict resolution dialog
box should be displayed to resolve conflicts, if detected. If this

9-8 J-Link User’s Guide


argument is false, then the conflict resolution dialog box is not
displayed, and the model can be modified only if there are no
conflicts that cannot be overridden, or are resolved by default
resolution actions. For a generic model, if ShowUI is true, then all
instances of the model are also checked.

The method pfcModel.Model.CheckIsSaveAllowed identifies if


a given model can be saved along with all of its subordinate models.
The subordinate models can be saved based on their modification
status and the value of the configuration option save_objects.
This method also checks the current user interface context to

Models
identify if it is currently safe to save the model. Thus, calling this
method at different times might return different results. This
method takes a boolean argument ShowUI. Refer to the previous
method for more information on this argument.

Model Operations
Methods Introduced:

• pfcModel.Model.Backup
• pfcModel.Model.Copy
• pfcModel.Model.CopyAndRetrieve
• pfcModel.Model.Rename
• pfcModel.Model.Save
• pfcModel.Model.Erase
• pfcModel.Model.EraseWithDependencies
• pfcModel.Model.Delete
• pfcModel.Model.Display
• pfcModel.Model.SetCommonName
These model operations duplicate most of the commands available
in the Pro/ENGINEER File menu.

The method pfcModel.Model.Backup makes a backup of an


object in memory to a disk in a specified directory.

The method pfcModel.Model.Copy copies the specified model to


another file.

The method pfcModel.Model.CopyAndRetrieve copies the


model to another name, and retrieves that new model into session.

Models 9-9
The method pfcModel.Model.Rename renames a specified model.

The method pfcModel.Model.Save stores the specified model to a


disk.

The method pfcModel.Model.Erase erases the specified model


from the session. Models used by other models cannot be erased
until the models dependent upon them are erased.

The method pfcModel.Model.EraseWithDependencies erases


the specified model from the session and all the models on which
the specified model depends from disk, if the dependencies are not
needed by other items in session.

The method pfcModel.Model.Delete removes the specified model


from memory and disk.

The method pfcModel.Model.Display displays the specified


model. You must call this method if you create a new window for a
model because the model will not be displayed in the window until
you call pfcModel.Model.Display.

The method pfcModel.Model.SetCommonName modifies the


common name of the specified model. You can modify this name for
models that are not yet owned by Windchill PDMLink, or in certain
situations if the configuration option
let_proe_rename_pdm_objects is set to yes.

Running ModelCHECK
ModelCHECK is an integrated application that runs transparently
within Pro/ENGINEER. ModelCHECK uses a configurable list of
company design standards and best modeling practices. You can
configure ModelCHECK to run interactively or automatically when
you regenerate or save a model.

Methods Introduced:

• pfcSession.BaseSession.ExecuteModelCheck
• pfcModelCheck.pfcModelCheck.ModelCheckInstructions_Create
• pfcModelCheck.ModelCheckInstructions.SetConfigDir
• pfcModelCheck.ModelCheckInstructions.SetMode
• pfcModelCheck.ModelCheckInstructions.SetOutputDir
• pfcModelCheck.ModelCheckInstructions.SetShowInBrowser

9 - 10 J-Link User’s Guide


• pfcModelCheck.ModelCheckResults.GetNumberOfErrors
• pfcModelCheck.ModelCheckResults.GetNumberOfWarnings
• pfcModelCheck.ModelCheckResults.GetWasModelSaved
You can run ModelCHECK from an external application using the
method pfcSession.BaseSession.ExecuteModelCheck. This
method takes the model Model on which you want to run
ModelCHECK and instructions in the form of the object
ModelCheckInstructions as its input parameters. This object
contains the following parameters:

Models
• ConfigDir—Specifies the location of the configuration files. If
this parameter is set to NULL, the default ModelCHECK
configuration files are used.
• Mode—Specifies the mode in which you want to run
ModelCHECK. The modes are:
– MODELCHECK_GRAPHICS—Interactive mode
– MODELCHECK_NO_GRAPHICS—Batch mode
• OutputDir—Specifies the location for the reports. If you set this
parameter to NULL, the default ModelCHECK directory, as per
config_init.mc, will be used.
• ShowInBrowser—Specifies if the results report should be
displayed in the Web browser.
The method
pfcModelCheck.pfcModelCheck.ModelCheckInstructions_C
reate creates the ModelCheckInstructions object containing the
ModelCHECK instructions described above.

Use the methods


pfcModelCheck.ModelCheckInstructions.SetConfigDir,
pfcModelCheck.ModelCheckInstructions.SetMode,
pfcModelCheck.ModelCheckInstructions.SetOutputDir, and
pfcModelCheck.ModelCheckInstructions.SetShowInBrowse
r to modify the ModelCHECK instructions.

The method pfcSession.BaseSession.ExecuteModelCheck


returns the results of the ModelCHECK run in the form of the
ModelCheckResults object. This object contains the following
parameters:

• NumberOfErrors—Specifies the number of errors detected.


• NumberOfWarnings—Specifies the number of warnings found.
• WasModelSaved—Specifies whether the model is saved with
updates.

Models 9 - 11
Use the
methodspfcModelCheck.ModelCheckResults.GetNumberOfE
rrors,
pfcModelCheck.ModelCheckResults.GetNumberOfWarning,
and pfcModelCheck.ModelCheckResults.GetWasModelSaved
to access the results obtained.

Custom Checks
This section describes how to define custom checks in
ModelCHECK that users can run using the standard ModelCHECK
interface in Pro/ENGINEER.

To define and register a custom check:

1. Set the CUSTMTK_CHECKS_FILE configuration option in the


start configuration file to a text file that stores the check
definition. For example:
CUSTMTK_CHECKS_FILE text/custmtk_checks.txt
2. Set the contents of the CUSTMTK_CHECKS_FILE file to define
the checks. Each check should list the following items:
• DEF_<checkname>—Specifies the name of the check. The
format must be CHKTK_<checkname>_<mode>, where
mode is PRT, ASM, or DRW.
• TAB_<checkname>—Specifies the tab category in the
ModelCHECK report under which the check is classified.
Valid tab values are:
- INFO
- PARAMETER
- LAYER
- FEATURE
- RELATION
- DATUM
- MISC
- VDA
- VIEWS
• MSG_<checkname>—Specifies the description of the check
that appears in the lower part of the ModelCHECK report
when you select the name.

9 - 12 J-Link User’s Guide


• DSC_<checkname>—Specifies the name of the check as it
appears in the ModelCHECK report table.
• ERM_<checkname>—If set to INFO, the check is considered
an INFO check and the report table displays the text from
the first item returned by the check, instead of a count of
the items. Otherwise, this value must be included, but is
ignored by Pro/ENGINEER.
See the Example 1: Text File for Custom Checks for a sample
custom checks text file.

Models
3. Add the check and its values to the ModelCHECK configuration
file.
4. Register the ModelCHECK check from the J-Link application.
Note: Other than the requirements listed above, J-Link
custom checks do not have access to the rest of the
values in the ModelCHECK configuration files. All the
custom settings specific to the check, such as start
parameters, constants, and so on, must be supported by
the user application and not ModelCHECK.

Registering Custom Checks


Methods Introduced:

• pfcSession.BaseSession.RegisterCustomModelCheck
• pfcModelCheck.pfcModelCheck.CustomCheckInstructions_Create
• pfcModelCheck.CustomCheckInstructions.SetCheckName
• pfcModelCheck.CustomCheckInstructions.SetCheckLabel
• pfcModelCheck.CustomCheckInstructions.SetListener
• pfcModelCheck.CustomCheckInstructions.SetActionButtonLabel
• pfcModelCheck.CustomCheckInstructions.SetUpdateButtonLabel
The method
pfcSession.BaseSession.RegisterCustomModelCheck
registers a custom check that can be included in any ModelCHECK
run. This method takes the instructions in the form of the
CustomCheckInstructions object as its input argument. This
object contains the following parameters:

• CheckName—Specifies the name of the custom check.


• CheckLabel—Specifies the label of the custom check.

Models 9 - 13
• Listener—Specifies the listener object containing the custom
check methods. Refer to the section Custom Check Listeners for
more information.
• ActionButtonLabel—Specifies the label for the action button. If
you specify NULL for this parameter, this button is not shown.
• UpdateButtonLabel—Specifies the label for the update button.
If you specify NULL for this parameter, this button is not
shown.
The method
pfcModelCheck.pfcModelCheck.CustomCheckInstructions_
Create creates the CustomCheckInstructions object containing
the custom check instructions described above.

Use the methods


pfcModelCheck.CustomCheckInstructions.SetCheckName,
pfcModelCheck.CustomCheckInstructions.SetCheckLabel,
pfcModelCheck.CustomCheckInstructions.SetListener,
pfcModelCheck.CustomCheckInstructions.SetActionButton
Label, and
pfcModelCheck.CustomCheckInstructions.SetUpdateButto
nLabel to modify the instructions.

The following figure illustrates how the results of some custom


checks might be displayed in the ModelCHECK report.

9 - 14 J-Link User’s Guide


Models
Custom Check Listeners
Methods Introduced:

• pfcModelCheck.ModelCheckCustomCheckListener.OnCustomCheck
• pfcModelCheck.pfcModelCheck.CustomCheckResults_Create
• pfcModelCheck.CustomCheckResults.SetResultsCount
• pfcModelCheck.CustomCheckResults.SetResultsTable
• pfcModelCheck.CustomCheckResults.SetResultsUrl
• pfcModelCheck.ModelCheckCustomCheckListener.OnCustomCheckAction
• pfcModelCheck.ModelCheckCustomCheckListener.OnCustomCheckUpdate
The interface
pfcModelCheck.ModelCheckCustomCheckListener provides
the method signatures to implement a custom ModelCheck check.

Each listener method takes the following input arguments:

• CheckName—The name of the custom check as defined in the


original call to the method
pfcSession.BaseSession.RegisterCustomModelCheck.

Models 9 - 15
• Mdl—The model being checked.
The application method that overrides
pfcModelCheck.ModelCheckCustomCheckListener.OnCusto
mCheck is used to evaluate a custom defined check. The user
application runs the check on the specified model and returns the
results in the form of the CustomCheckResults object. This object
contains the following parameters:

• ResultsCount—Specifies an integer indicating the number of


errors found by the check. This value is displayed in the
ModelCHECK report generated.
• ResultsTable—Specifies a list of text descriptions of the
problem encountered for each error or warning.
• ResultsUrl—Specifies the link to an application-owned page
that provides information on the results of the custom check.
The method
pfcModelCheck.pfcModelCheck.CustomCheckResults_Creat
e creates the CustomCheckResults object containing the custom
check results described above.

Use the methods


pfcModelCheck.CustomCheckResults.SetResultsCount,
pfcModelCheck.CustomCheckResults.SetResultsTable, and
pfcModelCheck.CustomCheckResults.SetResultsUrl listed
above to modify the custom checks results obtained.

The method that overrides


pfcModelCheck.ModelCheckCustomCheckListener.OnCusto
mCheckAction is called when the custom check’s Action button is
pressed. The input supplied includes the text selected by the user
from the custom check results.

The function that overrides


pfcModelCheck.ModelCheckCustomCheckListener.OnCusto
mCheckUpdate is called when the custom check’s Update button
is pressed. The input supplied includes the text selected by the user
from the custom check results.

Custom ModelCHECK checks can have an Action button to


highlight the problem, and possibly an Update button to fix it
automatically.

The following figure displays the ModelCHECK report with an


Action button that invokes the
pfcModelCheck.ModelCheckCustomCheckListener.OnCusto
mCheckAction listener method.

9 - 16 J-Link User’s Guide


Models

Example 1: Text File for Custom Checks


The following is the text file custmtk_checks.txt for custom
checks examples.
# Custom TK Check File
# def-name of check as registered

# DWGVIEWGENERIC

Models 9 - 17
DEF_UG_DWGVIEW_GENERIC CHKTK_UG_DWGVIEW_GENERIC_DRW
TAB_UG_DWGVIEW_GENERIC VIEWS
MSG_UG_DWGVIEW_GENERIC CUSTOM: J-Link - Report Generic Status
ERM_UG_DWGVIEW_GENERIC CUSTOM: J-Link - Report Generic Status
DSC_UG_DWGVIEW_GENERIC CUSTOM: J-Link - Report Generic Status

# MODEL_PARAM_NAME
DEF_UG_MDLPARAM_NAME CHKTK_UG_MDLPARAM_NAME_PRT
TAB_UG_MDLPARAM_NAME DATUM
MSG_UG_MDLPARAM_NAME CUSTOM: J-Link - Parameter has invalid value
ERM_UG_MDLPARAM_NAME CUSTOM: J-Link - Invalid Parameter value.
DSC_UG_MDLPARAM_NAME CUSTOM: J-Link - Parameter has invalid value

# MODEL_ACCURACY
DEF_UG_MDL_ACC_TYPE CHKTK_UG_MDL_ACC_TYPE_PRT
TAB_UG_MDL_ACC_TYPE INFO
MSG_UG_MDL_ACC_TYPE CUSTOM: J-Link - Report Model accuracy type
ERM_UG_MDL_ACC_TYPE CUSTOM: J-Link - Report Model accuracy type.
DSC_UG_MDL_ACC_TYPE CUSTOM: J-Link - Report Model accuracy type

Example 2: Registering Custom ModelCHECK Checks


This example demonstrates how to register custom ModelCHECK
checks using J-Link. The following custom checks are registered:

• CHKTK_UG_MDLPARAM_NAME_PRT—Determines if the model


has a parameter whose name is equal to the model name.
• CHKTK_UG_MDL_ACC_TYPE—Checks the type of accuracy
defined for the model.
• CHKTK_UG_DWGVIEW_GENERIC—Drawing mode check that
identifies the drawing views that use generic models.
import com.ptc.cipjava.*;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.Session;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcWindow.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcDrawing.*;

9 - 18 J-Link User’s Guide


import com.ptc.pfc.pfcModelCheck.*;
import com.ptc.pfc.pfcFamily.*;
import com.ptc.pfc.pfcDisplay.*;

import java.util.logging.*;
import java.io.IOException;

import javax.swing.*;

/******************************************************\
CLASS: pfcModelCheckExamples

Models
PURPOSE: Define all the ModelCHECKs of this example code
\******************************************************/

public class pfcModelCheckExamples


{

protected Logger logger;


private FileHandler handler;

static Session session;


/******************************************************\
FUNCTION: SetupNameCheck()
PURPOSE: Register the ModelCHECK for Parameter name check.
\******************************************************/
public static void SetupNameCheck ()
{
String Name = "CHKTK_UG_MDLPARAM_NAME";
String Label = "UG CustomCheck: MDL PARAM NAME";

try
{
/*-----------------------------------------------*\
Define the ModelCHECK Instructions object
\*-----------------------------------------------*/

CustomCheckInstructions NameCheckInst =
pfcModelCheck.CustomCheckInstructions_Create (Name, Label,
new MCheckNameListen () );

/*-----------------------------------------------*\
Define the label for the Update button
\*-----------------------------------------------*/

NameCheckInst.SetUpdateButtonLabel ("UG CustomCheckUpdate:


MDL PARAM NAME");
session = pfcGlobal.GetProESession();

/*-----------------------------------------------*\
Register the ModelCHECK
\*-----------------------------------------------*/

Models 9 - 19
session.RegisterCustomModelCheck ( NameCheckInst );
}
catch (jxthrowable x)
{
}

}
/******************************************************\
FUNCTION: SetupDwgGenericCheck()
PURPOSE: Register the ModelCHECK for checking Generic
objects in a drawing.
\******************************************************/
public static void SetupDwgGenericCheck ()
{
String Name = "CHKTK_UG_DWGVIEW_GENERIC";
String Label = "UG CustomCheck: DWGVIEW GENERIC";

try
{
/*-----------------------------------------------*\
Define the ModelCHECK Instructions object
\*-----------------------------------------------*/

CustomCheckInstructions DwgGenericCheckInst =
pfcModelCheck.CustomCheckInstructions_Create (Name, Label,
new MCheckDwgGenericListen () );

/*-----------------------------------------------*\
Define the label for the Action button
\*-----------------------------------------------*/
DwgGenericCheckInst.SetActionButtonLabel ("UG CustomCheckAction:
DWGVIEW GENERIC");
session = pfcGlobal.GetProESession();

/*-----------------------------------------------*\
Register the ModelCHECK
\*-----------------------------------------------*/

session.RegisterCustomModelCheck ( DwgGenericCheckInst );
}
catch (jxthrowable x)
{
}
}
/******************************************************\
FUNCTION: SetupAccuracyCheck()
PURPOSE: Register the ModelCHECK for checking the type of
accuracy defined for the model.
\******************************************************/
public static void SetupAccuracyCheck ()

9 - 20 J-Link User’s Guide


{
String Name = "CHKTK_UG_MDL_ACC_TYPE";
String Label = "UG CustomCheck: MDL ACC TYPE";

try
{
/*-----------------------------------------------*\
Define the ModelCHECK Instructions object
\*-----------------------------------------------*/
CustomCheckInstructions AccuracyCheckInst =

Models
pfcModelCheck.CustomCheckInstructions_Create (
Name, Label, new MCheckAccuracyListen () );

session = pfcGlobal.GetProESession();

/*-----------------------------------------------*\
Register the ModelCHECK
\*-----------------------------------------------*/

session.RegisterCustomModelCheck ( AccuracyCheckInst );
}
catch (jxthrowable x)
{
}
}

public pfcModelCheckExamples (Session s)


{
session = s;
try
{
handler = new FileHandler ("pfcModelCheckExamples.log");
logger = Logger.global;
logger.addHandler(handler);
}
catch (IOException e)
{
System.out.println ("Caught exception initializing log file: " +
e);
}
}
}

Example 3: Implementing a Model Name Parameter Check


The following example defines the custom ModelCHECK check for
the parameter name in a model. This check updates the parameter
name to be equal to the model name, if the parameter exists with a
different name, or creates the parameter with the model name if it
does not exist.

Models 9 - 21
/******************************************************\
CLASS: MCheckNameListen
PURPOSE: Define the ModelCHECK for checking the parameter value on the
model & Update for changing it to the required value if required.
\******************************************************/
class MCheckNameListen extends
com.ptc.pfc.pfcModelCheck.DefaultModelCheckCustomCheckListener
{

/******************************************************\
FUNCTION: OnCustomCheck()
PURPOSE: Check name of the parameter
RETURNS: CustomCheckResults object
\******************************************************/
public CustomCheckResults OnCustomCheck (String CheckName, Model Mdl)
throws com.ptc.cipjava.jxthrowable
{
CustomCheckResults result = null;

stringseq results_table = stringseq.create();


int result_count;
Parameter param;
ParamValue param_value;
ParamValueType pvalue_type;

param = Mdl.GetParam ("MDL_NAME_PARAM");

if (param == null)
{
results_table.append("UG CustomCheck: MDL PARAM NOT FOUND");
result_count = 1;
}
else
{
param_value = param.GetScaledValue ();

pvalue_type = param_value.Getdiscr();

if (pvalue_type == ParamValueType.PARAM_STRING)
{
if( param_value.GetStringValue().equals(Mdl.GetInstanceName()) )
{
result_count = 0;
}
else
{
results_table.append("UG CustomCheck: MDL PARAM INCORRECT");
result_count = 1;
}
}
else

9 - 22 J-Link User’s Guide


{
results_table.append("UG CustomCheck: MDL PARAM INV TYPE");
result_count = 1;
}
}

result = pfcModelCheck.CustomCheckResults_Create (result_count);

result.SetResultsTable (results_table);

return (result);

Models
}

/******************************************************\
FUNCTION: OnCustomCheckUpdate()
PURPOSE: Update the parameter name in case it is wrong or create the
parameter with requried name in case it does not exist.
\******************************************************/
public void OnCustomCheckUpdate (String CheckName , Model Mdl, String
SelectedItem) throws com.ptc.cipjava.jxthrowable
{
Parameter param;
ParamValue param_value;
ParamValueType pvalue_type;
String message_file = "jlexamples.txt";

Session sess = pfcGlobal.GetProESession();

if (SelectedItem.equals ("UG CustomCheck: MDL PARAM NOT FOUND"))


{
param_value =
pfcModelItem.CreateStringParamValue(Mdl.GetInstanceName());

param = Mdl.CreateParam ("MDL_NAME_PARAM", param_value);

sess.UIDisplayMessage (message_file, "jlMCPaCreated", null);


}

if (SelectedItem.equals ("UG CustomCheck: MDL PARAM INCORRECT"))


{
param = Mdl.GetParam ("MDL_NAME_PARAM");
param_value =
pfcModelItem.CreateStringParamValue(Mdl.GetInstanceName());
param.SetScaledValue (param_value, null);
sess.UIDisplayMessage (message_file, "jlMCPaUpdated", null);
}

if (SelectedItem.equals ("UG CustomCheck: MDL PARAM INV TYPE"))


{
sess.UIDisplayMessage (message_file, "jlMCPaInvalid", null);
}

Models 9 - 23
}

Example 4: Implementing a Model Accuracy Type Check


The following example defines the custom ModelCHECK check for
the type of accuracy whether relative or absolute that has been set
for a model. This check has a check listener method, but no action
or update listener method since it is an info-only check.
/******************************************************\
CLASS: MCheckDwgAccuracyListen
PURPOSE: Define the ModelCHECK for checking Generic
objects in a drawing & Action for highlighting the Generic
objects found.
\******************************************************/
class MCheckAccuracyListen extends
com.ptc.pfc.pfcModelCheck.DefaultModelCheckCustomCheckListener
{
/******************************************************\
FUNCTION: OnCustomCheck()
PURPOSE: Check Accuracy type (Absolute/Relative)
RETURNS: CustomCheckResults object
\******************************************************/
public CustomCheckResults OnCustomCheck (String CheckName, Model Mdl)
throws com.ptc.cipjava.jxthrowable
{
CustomCheckResults result = null;

String message_file = "jlexamples.txt";


stringseq results_table = stringseq.create();
int result_count;

Solid Sld = (Solid)Mdl;


Double accuracy;

Session sess = pfcGlobal.GetProESession();

if (Sld.GetAbsoluteAccuracy() != null)
{
accuracy = Sld.GetAbsoluteAccuracy();
results_table.append("UG CustomCheck: MDL ACC ABS");
result_count = 1;
sess.UIDisplayMessage (message_file, "jlMCABSAcc", null);
}
else
{
accuracy = Sld.GetRelativeAccuracy();

9 - 24 J-Link User’s Guide


results_table.append("UG CustomCheck: MDL ACC REL");
result_count = 1;
sess.UIDisplayMessage (message_file, "jlMCRELAcc", null);
}

result = pfcModelCheck.CustomCheckResults_Create (result_count);

result.SetResultsTable (results_table);

return (result);

Models
}

Example 5: Implementing a Check for Drawing Views Using Generic


Models
The following example defines the custom ModelCHECK check for
identifying drawing views using generic models. This check has a
check listener method and an action listener method to highlight
the views that use generic models.
/******************************************************\
CLASS: MCheckDwgGenericListen
PURPOSE: Define the ModelCHECK for checking Generic objects in a drawing &
Action for highlighting the Generic objects found.
\******************************************************/
class MCheckDwgGenericListen extends
com.ptc.pfc.pfcModelCheck.DefaultModelCheckCustomCheckListener
{

/******************************************************\
FUNCTION: OnCustomCheck()
PURPOSE: Check existence of Generics in the drawing
RETURNS: CustomCheckResults object
\******************************************************/
public CustomCheckResults OnCustomCheck (String CheckName, Model Mdl)
throws com.ptc.cipjava.jxthrowable
{
CustomCheckResults result = null;

stringseq results_table = stringseq.create();


int result_count = 0;

Drawing draw = (Drawing)Mdl;


View2Ds dwgviews = ((Model2D)draw).List2DViews();

View2D dwgview;
Model viewmodel;

Models 9 - 25
Solid viewsolid;
FamilyMember parent;
String viewname;

for (int i = 0 ; i<dwgviews.getarraysize() ; i++)


{
dwgview = dwgviews.get(i);
viewmodel = dwgview.GetModel();
viewsolid = (Solid)viewmodel;
parent = viewsolid.GetParent();

/*-----------------------------------------------*\
Generics will have no parent.
\*-----------------------------------------------*/

if (parent == null)
{
viewname = dwgview.GetName();
results_table.append(viewname);
result_count++;
}
}

result = pfcModelCheck.CustomCheckResults_Create (result_count);

result.SetResultsTable (results_table);

return (result);
}

/******************************************************\
FUNCTION: OnCustomCheckAction()
PURPOSE: Highlight Generics present in the drawing.
\******************************************************/
public void OnCustomCheckAction (String CheckName , Model Mdl, String
SelectedItem) throws com.ptc.cipjava.jxthrowable
{
Session sess = pfcGlobal.GetProESession ();

Drawing draw = (Drawing)Mdl;

View2D dwgview = ((Model2D)draw).GetViewByName (SelectedItem);

Outline3D outline = dwgview.GetOutline();

Point3D p1 = Point3D.create();
p1.set(0,(outline.get(0).get(0) - 10));
p1.set(1,(outline.get(0).get(1) - 10));
p1.set(2,0);

Point3D p2 = Point3D.create();

9 - 26 J-Link User’s Guide


p2.set(0,(outline.get(0).get(0) - 10));
p2.set(1,(outline.get(1).get(1) + 10));
p2.set(2,0);

Point3D p3 = Point3D.create();
p3.set(0,(outline.get(1).get(0) + 10));
p3.set(1,(outline.get(1).get(1) + 10));
p3.set(2,0);

Point3D p4 = Point3D.create();
p4.set(0,(outline.get(1).get(0) + 10));

Models
p4.set(1,(outline.get(0).get(1) - 10));
p4.set(2,0);

Point3D p5 = Point3D.create();
p5.set(0,(outline.get(0).get(0) - 10));
p5.set(1,(outline.get(0).get(1) - 10));
p5.set(2,0);

Point3Ds boundary = Point3Ds.create();

boundary.insert(0,p1);
boundary.insert(1,p2);
boundary.insert(2,p3);
boundary.insert(3,p4);
boundary.insert(4,p5);

StdLineStyle oldstyle = sess.SetLineStyle (StdLineStyle.LINE_PHANTOM);

StdColor origcolor = sess.GetCurrentGraphicsColor();


sess.SetCurrentGraphicsColor (StdColor.COLOR_HIGHLIGHT);

sess.DrawPolyline (boundary);

StdLineStyle oldstyle2 = sess.SetLineStyle (oldstyle);


sess.SetCurrentGraphicsColor (origcolor);

dwgview.Regenerate();
}
}

Example 6: Changes to the ModelCHECK Configuration Files to


enable Custom Checks
Lines added to the ModelCheck configuration file (default_checks.mch)

E Check the item. If not succeed, report as an error


W Check the item. If not succeed, report as a warning
N Do not check the item.
Y Check the item. If not succeed, do not report err or warn

Models 9 - 27
CHKTK_UG_DWGVIEW_GENERIC_DRW YNEW E E E E Y
CHKTK_UG_MDLPARAM_NAME_PRT YNEW E E E E Y
CHKTK_UG_MDL_ACC_TYPE_PRT YNEW Y Y Y Y Y

Lines added to the ModelCheck start file (sample_start.mcs)


CUSTMTK_CHECKS_FILE custmtk_checks.txt

9 - 28 J-Link User’s Guide


10
Drawings

This chapter describes how to program drawing functions using


J-Link.

Topic Page

Overview of Drawings in J-Link 10 - 2


Creating Drawings from Templates 10 - 2
Obtaining Drawing Models 10 - 6
Drawing Information 10 - 6
Drawing Operations 10 - 7
Drawing Sheets 10 - 10
Drawing Views 10 - 15
Drawing Dimensions 10 - 26
Drawing Tables 10 - 37
Detail Items 10 - 49
Detail Entities 10 - 51
OLE Objects 10 - 56
Detail Notes 10 - 56
Detail Groups 10 - 63
Detail Symbols 10 - 66
Detail Attachments 10 - 87

10 - 1
Overview of Drawings in J-Link
This section describes the functions that deal with drawings. You
can create drawings of all Pro/ENGINEER models using the
functions in J-Link. You can annotate the drawing, manipulate
dimensions, and use layers to manage the display of different items.

Unless otherwise specified, J-Link functions that operate on


drawings use world units.

Creating Drawings from Templates


Drawing templates simplify the process of creating a drawing using
J-Link. Pro/ENGINEER can create views, set the view display,
create snap lines, and show the model dimensions based on the
template. Use templates to:

• Define layout views


• Set view display
• Place notes
• Place symbols
• Define tables
• Show dimensions

Method Introduced:

• pfcSession.BaseSession.CreateDrawingFromTemplate
Use the method
pfcSession.BaseSession.CreateDrawingFromTemplate to
create a drawing from the drawing template and to return the
created drawing. The attributes are:

• New drawing name


• Name of an existing template
• Name and type of the solid model to use while populating
template views
• Sequence of options to create the drawing. The options are as
follows:
– DRAWINGCREATE_DISPLAY_DRAWING—display the
new drawing.

10 - 2 J-Link User’s Guide


– DRAWINGCREATE_SHOW_ERROR_DIALOG—display
the error dialog box.
– DRAWINGCREATE_WRITE_ERROR_FILE—write the
errors to a file.
– DRAWINGCREATE_PROMPT_UNKNOWN_PARAMS—pro
mpt the user on encountering unknown parameters.

Drawing Creation Errors

Drawings
Methods Introduced:

• pfcExceptions.XToolkitDrawingCreateErrors.GetErrors
• pfcExceptions.DrawingCreateError.GetType
• pfcExceptions.DrawingCreateError.GetViewName
• pfcExceptions.DrawingCreateError.GetObjectName
• pfcExceptions.DrawingCreateError.GetSheetNumber
• pfcExceptions.DrawingCreateError.GetView
The exception XToolkitDrawingCreateErrors is thrown if an
error is encountered when creating a drawing from a template. This
exception contains a list of errors which occurred during drawing
creation.

Note: When this exception type is encountered, the drawing is


actually created, but some of the contents failed to
generate correctly.
The error structure contains an array of drawing creation errors.
Each error message may have the following elements:

• Type—The type of error as follows:


– DWGCREATE_ERR_SAVED_VIEW_DOESNT_EXIST—Save
d view does not exist.
– DWGCREATE_ERR_X_SEC_DOESNT_EXIST—Specified
cross section does not exist.
– DWGCREATE_ERR_EXPLODE_DOESNT_EXIST—Exploded
state did not exist.
– DWGCREATE_ERR_MODEL_NOT_EXPLODABLE—Model
cannot be exploded.
– DWGCREATE_ERR_SEC_NOT_PERP—Cross section view
not perpendicular to the given view.

Drawings 10 - 3
– DWGCREATE_ERR_NO_RPT_REGIONS—Repeat regions
not available.
– DWGCREATE_ERR_FIRST_REGION_USED—Repeat
region was unable to use the region specified.
– DWGCREATE_ERR_NOT_PROCESS_ASSEM— Model is
not a process assembly view.
– DWGCREATE_ERR_NO_STEP_NUM—The process step
number does not exist.
– DWGCREATE_ERR_TEMPLATE_USED—The template
does not exist.
– DWGCREATE_ERR_NO_PARENT_VIEW_FOR_PROJ—Ther
e is no possible parent view for this projected view.
– DWGCREATE_ERR_CANT_GET_PROJ_PARENT—Could
not get the projected parent for a drawing view.
– DWGCREATE_ERR_SEC_NOT_PARALLEL—The
designated cross section was not parallel to the created
view.
– DWGCREATE_ERR_SIMP_REP_DOESNT_EXIST—The
designated simplified representation does not exist.
• ViewName—Name of the view where the error occurred.
• SheetNumber—Sheet number where the error occurred.
• ObjectName—Name of the invalid or missing object.
• View—2D view in which the error occurred.
Use the method
pfcExceptions.XToolkitDrawingCreateErrors.GetErrors to
obtain the preceding array elements from the error object.

Example: Drawing Creation from a Template

The following code creates a new drawing using a predefined


template.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;

10 - 4 J-Link User’s Guide


import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;

Drawings
import java.io.*;
public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION: createDrawingFromTemplate
PURPOSE: Create a new drawing using a predefined template.
\*====================================================================*/
public static void createDrawingFromTemplate (String newDrawingName)
throws com.ptc.cipjava.jxthrowable
{
String predefinedTemplate = "c_drawing";

if (newDrawingName == "")
{
throw new RuntimeException("Please supply a drawing name.
Aborting...");
}
/*------------------------------------------------------------------*\
Use the current model to create the drawing.
\*------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession();
Model solid = session.GetCurrentModel();
if (solid == null || (solid.GetType() != ModelType.MDL_PART &&
solid.GetType() != ModelType.MDL_ASSEMBLY))
{
throw new RuntimeException ("Current model is not usable for new
drawing. Aborting...");
}

DrawingCreateOptions options = DrawingCreateOptions.create();


options.insert (0,
DrawingCreateOption.DRAWINGCREATE_DISPLAY_DRAWING);
/*------------------------------------------------------------------*\
Create the required drawing.
\*------------------------------------------------------------------*/
Drawing drw =
session.CreateDrawingFromTemplate (newDrawingName,
predefinedTemplate,
solid.GetDescr(),
options);

Drawings 10 - 5
}
}

Obtaining Drawing Models


This section describes how to obtain drawing models.

Methods Introduced:

• pfcSession.BaseSession.RetrieveModel
• pfcSession.BaseSession.GetModel
• pfcSession.BaseSession.GetModelFromDescr
• pfcSession.BaseSession.ListModels
• pfcSession.BaseSession.ListModelsByType
The method pfcSession.BaseSession.RetrieveModel retrieves
the drawing specified by the model descriptor. Model descriptors
are data objects used to describe a model file and its location in the
system. The method returns the retrieved drawing.

The method pfcSession.BaseSession.GetModel returns a


drawing based on its name and type, whereas
pfcSession.BaseSession.GetModelFromDescr returns a
drawing specified by the model descriptor. The model must be in
session.

Use the method pfcSession.BaseSession.ListModels to return a


sequence of all the drawings in session.

Drawing Information
Methods Introduced:

• pfcModel2D.Model2D.ListModels
• pfcModel2D.Model2D.GetCurrentSolid
• pfcModel2D.Model2D.ListSimplifiedReps
• pfcModel2D.Model2D.GetTextHeight
The method pfcModel2D.Model2D.ListModels returns a list of
all the solid models used in the drawing.

The method pfcModel2D.Model2D.GetCurrentSolid returns


the current solid model of the drawing.

10 - 6 J-Link User’s Guide


The method pfcModel2D.Model2D.ListSimplifiedReps returns
the simplified representations of a solid model that are assigned to
the drawing.

The method pfcModel2D.Model2D.GetTextHeight returns the


text height of the drawing.

Drawing Operations

Drawings
Methods Introduced:

• pfcModel2D.Model2D.AddModel
• pfcModel2D.Model2D.DeleteModel
• pfcModel2D.Model2D.ReplaceModel
• pfcModel2D.Model2D.SetCurrentSolid
• pfcModel2D.Model2D.AddSimplifiedRep
• pfcModel2D.Model2D.DeleteSimplifiedRep
• pfcModel2D.Model2D.Regenerate
• pfcModel2D.Model2D.SetTextHeight
• pfcModel2D.Model2D.CreateDrawingDimension
• pfcModel2D.Model2D.CreateView
The method pfcModel2D.Model2D.AddModel adds a new solid
model to the drawing.

The method pfcModel2D.Model2D.DeleteModel removes a


model from the drawing. The model to be deleted should not appear
in any of the drawing views.

The method pfcModel2D.Model2D.ReplaceModel replaces a


model in the drawing with a related model (the relationship should
be by family table or interchange assembly). It allows you to replace
models that are shown in drawing views and regenerates the view.

The method pfcModel2D.Model2D.SetCurrentSolid assigns the


current solid model for the drawing. Before calling this method, the
solid model must be assigned to the drawing using the method
pfcModel2D.Model2D.AddModel. To see the changes to
parameters and fields reflecting the change of the current solid
model, regenerate the drawing using the method
pfcSheet.SheetOwner.RegenerateSheet.

Drawings 10 - 7
The method pfcModel2D.Model2D.AddSimplifiedRep
associates the drawing with the simplified representation of an
assembly .

The method pfcModel2D.Model2D.DeleteSimplifiedRep


removes the association of the drawing with an assembly simplified
representation. The simplified representation to be deleted should
not appear in any of the drawing views.

Use the method pfcModel2D.Model2D.Regenerate to regenerate


the drawing draft entities and appearance.

The method pfcModel2D.Model2D.SetTextHeight sets the


value of the text height of the drawing.

The method pfcModel2D.Model2D.CreateDrawingDimension


creates a new drawing dimension based on the data object that
contains information about the location of the dimension. This
method returns the created dimension. Refer to the section
Drawing Dimensions.

The method pfcModel2D.Model2D.CreateView creates a new


drawing view based on the data object that contains information
about how to create the view. The method returns the created
drawing view. Refer to the section Creating Drawing Views.

Example: Replace Drawing Model Solid with its Generic

The following code replaces all solid model instances in a drawing


with its generic.
import com.ptc.cipjava.*;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;

10 - 8 J-Link User’s Guide


import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*==================================================================*\
FUNCTION: drawingSolidReplace()
PURPOSE: Replaces all instance solid models in a drawing with their

Drawings
generic. Similar to the Pro/ENGINEER behavior, the function
will not replace models if the target generic
model is already present in the drawing.
\*==================================================================*/
public static void replaceModels() throws com.ptc.cipjava.jxthrowable
{

/*--------------------------------------------------------------------*\
Get the current drawing
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;


/*------------------------------------------------------------------*\
Visit the drawing models.
\*------------------------------------------------------------------*/
Models solids = drawing.ListModels ();

/*------------------------------------------------------------------*\
Loop on all of the drawing models.
\*------------------------------------------------------------------*/
for (int i = 0; i < solids.getarraysize(); i++)
{
Solid solid = (Solid)solids.get (i);
/*------------------------------------------------------------------*\
If the generic is not an instance, continue (GetParent() method
from class FamilyMember)
\*------------------------------------------------------------------*/
Solid generic = (Solid)solid.GetParent();

if (generic == null)
continue;

/*------------------------------------------------------------------*\
Replace all instances with their (top-level) generic.
\*------------------------------------------------------------------*/

Drawings 10 - 9
try
{
drawing.ReplaceModel (solid, generic, true);
}
catch (XToolkitFound xtef)
{
// Target generic is already in drawing; do nothing
}
}
}
}

Drawing Sheets
A drawing sheet is represented by its number. Drawing sheets in
J-Link are identified by the same sheet numbers seen by a
Pro/Engineer user.

Note: These identifiers may change if the sheets are moved as


a consequence of adding, removing or reordering sheets.

Drawing Sheet Information


Methods Introduced

• pfcSheet.SheetOwner.GetSheetData
• pfcSheet.SheetOwner.GetSheetTransform
• pfcSheet.SheetOwner.GetSheetScale
• pfcSheet.SheetOwner.GetSheetFormat
• pfcSheet.SheetOwner.GetSheetBackgroundView
• pfcSheet.SheetOwner.GetNumberOfSheets
• pfcSheet.SheetOwner.GetCurrentSheetNumber
• pfcSheet.SheetOwner.GetSheetUnits
The method pfcSheet.SheetOwner.GetSheetData returns sheet
data including the size, orientation, and units of the sheet specified
by the sheet number.

The method pfcSheet.SheetOwner.GetSheetTransform


returns the transformation matrix for the sheet specified by the
sheet number. This transformation matrix includes the scaling
needed to convert screen coordinates to drawing coordinates (which
use the designated drawing units).

10 - 10 J-Link User’s Guide


The method pfcSheet.SheetOwner.GetSheetScale returns the
scale of the drawing on a particular sheet based on the drawing
model used to measure the scale. If no models are used in the
drawing then the default scale value is 1.0.

The method pfcSheet.SheetOwner.GetSheetFormat returns


the drawing format used for the sheet specified by the sheet
number. It returns a null value if no format is assigned to the sheet.

The method
pfcSheet.SheetOwner.GetSheetBackgroundView returns the

Drawings
view object representing the background view of the sheet specified
by the sheet number.

The method pfcSheet.SheetOwner.GetNumberOfSheets


returns the number of sheets in the model.

The method pfcSheet.SheetOwner.GetCurrentSheetNumber


returns the current sheet number in the model.

Note: The sheet numbers range from 1 to n, where n is the


number of sheets.
The method pfcSheet.SheetOwner.GetSheetUnits returns the
units used by the sheet specified by the sheet number.

Drawing Sheet Operations


Methods Introduced:

• pfcSheet.SheetOwner.AddSheet
• pfcSheet.SheetOwner.DeleteSheet
• pfcSheet.SheetOwner.ReorderSheet
• pfcSheet.SheetOwner.RegenerateSheet
• pfcSheet.SheetOwner.SetSheetScale
• pfcSheet.SheetOwner.SetSheetFormat
• pfcSheet.SheetOwner.SetCurrentSheetNumber
The method pfcSheet.SheetOwner.AddSheet adds a new sheet
to the model and returns the number of the new sheet.

The method pfcSheet.SheetOwner.DeleteSheet removes the


sheet specified by the sheet number from the model.

Use the method pfcSheet.SheetOwner.ReorderSheet to reorder


the sheet from a specified sheet number to a new sheet number.

Drawings 10 - 11
Note: The sheet number of other affected sheets also changes
due to reordering or deletion.
The method pfcSheet.SheetOwner.RegenerateSheet
regenerates the sheet specified by the sheet number.

Note: You can regenerate a sheet only if it is displayed.


Use the method pfcSheet.SheetOwner.SetSheetScale to set the
scale of a model on the sheet based on the drawing model to scale
and the scale to be used. Pass the value of the DrawingModel
parameter as null to select the current drawing model.

Use the method pfcSheet.SheetOwner.SetSheetFormat to


apply the specified format to a drawing sheet based on the drawing
format, sheet number of the format, and the drawing model.

The sheet number of the format is specified by the


FormatSheetNumber parameter. This number ranges from 1 to the
number of sheets in the format. Pass the value of this parameter as
null to use the first format sheet.

The drawing model is specified by the DrawingModel parameter.


Pass the value of this parameter as null to select the current
drawing model.

The method pfcSheet.SheetOwner.SetCurrentSheetNumber


sets the current sheet to the sheet number specified.

Example: Listing Drawing Sheets

The following example shows how to list the sheets in the current
drawing. The information is placed in an external browser window.
import com.ptc.cipjava.*;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;

10 - 12 J-Link User’s Guide


import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;

import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : listSheets()

Drawings
PURPOSE : Command to list drawing sheet info in an information window
\*====================================================================*/
public static void listSheets() throws com.ptc.cipjava.jxthrowable,
java.io.IOException
{
/*--------------------------------------------------------------------*\
Save an HTML file to contain the information to be displayed
\*--------------------------------------------------------------------*/
String URL = "sheet_info.html";

PrintWriter writer = new PrintWriter (new FileOutputStream (URL));

writer.println ("<html><head></head><body>");

/*--------------------------------------------------------------------*\
Get the current drawing
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;


/*--------------------------------------------------------------------*\
Get the number of sheets
\*--------------------------------------------------------------------*/
int sheets = drawing.GetNumberOfSheets();

for (int i = 1; i <= sheets; i++)


{
/*--------------------------------------------------------------------*\
Get the drawing sheet size etc.
\*--------------------------------------------------------------------*/
SheetData info = drawing.GetSheetData (i);

DrawingFormat format = drawing.GetSheetFormat (i);

/*--------------------------------------------------------------------*\
Print the information to the window

Drawings 10 - 13
\*--------------------------------------------------------------------*/

String unit = "unknown";

switch (info.GetUnits().GetType().getValue())
{
case LengthUnitType._LENGTHUNIT_INCH:
unit = "inches";
break;
case LengthUnitType._LENGTHUNIT_FOOT:
unit = "feet";
break;
case LengthUnitType._LENGTHUNIT_MM:
unit = "mm";
break;
case LengthUnitType._LENGTHUNIT_CM:
unit = "cm";
break;
case LengthUnitType._LENGTHUNIT_M:
unit = "m";
break;
case LengthUnitType._LENGTHUNIT_MCM:
unit = "mcm";
break;
}

writer.println ("<h2>Sheet "+ i + "</h2>");


writer.println ("<table>");
writer.println (" <tr><td> Width </td><td> "+
info.GetWidth() + " </td></tr> ");
writer.println (" <tr><td> Height </td><td> "+
info.GetHeight() + " </td></tr> ");
writer.println (" <tr><td> Units </td><td> "+
unit + " </td></tr> ");
String formatName;
if (format == null)
formatName = "none";
else
formatName = format.GetFullName();
writer.println (" <tr><td> Format </td><td> "+
formatName + " </td></tr> ");
writer.println ("</table>");
writer.println ("<br>");

}
writer.println ("</body></html>");

writer.close ();

session.GetCurrentWindow().SetURL (session.GetCurrentDirectory()+
URL);

10 - 14 J-Link User’s Guide


}
}

Drawing Views
A drawing view is represented by the interface
pfcView2D.View2D. All model views in the drawing are
associative, that is, if you change a dimensional value in one view,

Drawings
the system updates other drawing views accordingly. The model
automatically reflects any dimensional changes that you make to a
drawing. In addition, corresponding drawings also reflect any
changes that you make to a model such as the addition or deletion
of features and dimensional changes.

Creating Drawing Views


Method Introduced:

• pfcModel2D.Model2D.CreateView
The method pfcModel2D.Model2D.CreateView creates a new
view in the drawing. Before calling this method, the drawing must
be displayed in a window.

The interface pfcView2D.View2DCreateInstructions contains


details on how to create the view. The types of drawing views
supported for creation are:

• DRAWVIEW GENERAL—General drawing views


• DRAWVIEW PROJECTION—Projected drawing views

General Drawing Views


The interface pfcView2D.GeneralViewCreateInstructions
contains details on how to create general drawing views.

Methods Introduced:

• pfcView2D.pfcView2D.GeneralViewCreateInstructions_Create
• pfcView2D.GeneralViewCreateInstructions.SetViewModel
• pfcView2D.GeneralViewCreateInstructions.SetLocation
• pfcView2D.GeneralViewCreateInstructions.SetSheetNumber

Drawings 10 - 15
• pfcView2D.GeneralViewCreateInstructions.SetOrientation
• pfcView2D.GeneralViewCreateInstructions.SetExploded
• pfcView2D.GeneralViewCreateInstructions.SetScale
The method
pfcView2D.pfcView2D.GeneralViewCreateInstructions_Cre
ate creates the pfcView2D.GeneralViewCreateInstructions
data object used for creating general drawing views.

Use the method


pfcView2D.GeneralViewCreateInstructions.SetViewModel
to assign the solid model to display in the created general drawing
view.

Use the method


pfcView2D.GeneralViewCreateInstructions.SetLocation to
assign the location in a drawing sheet to place the created general
drawing view.

Use the method


pfcView2D.GeneralViewCreateInstructions.SetSheetNumbe
r to set the number of the drawing sheet in which the general
drawing view is created.

The method
pfcView2D.GeneralViewCreateInstructions.SetOrientation
assigns the orientation of the model in the general drawing view in
the form of the pfcBase.Transform3D data object. The
transformation matrix must only consist of the rotation to be
applied to the model. It must not consist of any displacement or
scale components. If necessary, set the displacement to {0, 0, 0}
using the method pfcBase.Transform3D.SetOrigin, and remove
any scaling factor by normalizing the matrix.

Use the method


pfcView2D.GeneralViewCreateInstructions.SetExploded to
set the created general drawing view to be an exploded view.

Use the method


pfcView2D.GeneralViewCreateInstructions.SetScale to
assign a scale to the created general drawing view. This value is
optional, if not assigned, the default drawing scale is used.

Projected Drawing Views


The interface pfcView2D.ProjectionViewCreateInstructions
contains details on how to create general drawing views.

10 - 16 J-Link User’s Guide


Methods Introduced:

• pfcView2D.pfcView2D.ProjectionViewCreateInstructions_Create
• pfcView2D.ProjectionViewCreateInstructions.SetParentView
• pfcView2D.ProjectionViewCreateInstructions.SetLocation
• pfcView2D.ProjectionViewCreateInstructions.SetExploded
The method
pfcView2D.pfcView2D.ProjectionViewCreateInstructions_C

Drawings
reate creates the
pfcView2D.ProjectionViewCreateInstructions data object
used for creating projected drawing views.

Use the method


pfcView2D.ProjectionViewCreateInstructions.SetParentVie
w to assign the parent view for the projected drawing view.

Use the method


pfcView2D.ProjectionViewCreateInstructions.SetLocation
to assign the location of the projected drawing view. This location
determines how the drawing view will be oriented.

Use the method


pfcView2D.ProjectionViewCreateInstructions.SetExploded
to set the created projected drawing view to be an exploded view.

Example: Creating Drawing Views

The following example code adds a new sheet to a drawing and


creates three views of a selected model.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;

Drawings 10 - 17
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {


/*====================================================================*\
FUNCTION : createSheetAndViews()
PURPOSE : Create a new drawing sheet with a general, and two
projected,views of a selected solid
\*====================================================================*/
public static void createSheetAndViews(String solidName /* as ????.???
*/)
throws com.ptc.cipjava.jxthrowable
{
/*--------------------------------------------------------------------*\
Get the current drawing, create a new sheet
\*--------------------------------------------------------------------*/
Session session =pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;

int sheetNo = drawing.AddSheet ();


drawing.SetCurrentSheetNumber (sheetNo);

/*--------------------------------------------------------------------*\
Find the solid model, if its in session
\*--------------------------------------------------------------------*/
ModelDescriptor mdlDescr =
pfcModel.ModelDescriptor_CreateFromFileName (solidName);
Model solidMdl = session.GetModelFromDescr (mdlDescr);

if (solidMdl == null)
{
/*--------------------------------------------------------------------*\
If its not found, try to retieve the solid model
\*--------------------------------------------------------------------*/
solidMdl = session.RetrieveModel (mdlDescr);

if (solidMdl == null)
throw new RuntimeException ("Model "+solidName+"
cannot be found or retrieved.");
}

/*--------------------------------------------------------------------*\
Try to add it to the drawing
\*--------------------------------------------------------------------*/

10 - 18 J-Link User’s Guide


try
{
drawing.AddModel (solidMdl);
}
catch (XToolkitInUse xtiu)
{
// model is already in this drawing, nothing to do
}

/*---------------------------------------------------------------------*\
Create a general view from the Z axis direction at a predefined location

Drawings
\*---------------------------------------------------------------------*/
Matrix3D matrix = Matrix3D.create();
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
if (i == j)
matrix.set (i, j, 1.0);
else
matrix.set (i, j, 0.0);
}

Transform3D transf = pfcBase.Transform3D_Create (matrix);

Point3D pos = Point3D.create();


pos.set (0, 200.0);
pos.set (1, 600.0);
pos.set (2, 0.0);

GeneralViewCreateInstructions instrs =
pfcView2D.GeneralViewCreateInstructions_Create (solidMdl,
sheetNo,
pos, transf);

View2D genView = drawing.CreateView (instrs);

/*--------------------------------------------------------------------*\
Get the position and size of the new view
\*--------------------------------------------------------------------*/
Outline3D outline = genView.GetOutline();

/*--------------------------------------------------------------------*\
Create a projected view to the right of the general view
\*--------------------------------------------------------------------*/
pos.set (0, outline.get (1).get (0) + (outline.get(1).get(0) -
outline.get (0).get (0)));
pos.set (1, (outline.get (0).get(1) + outline.get (1).get(1))/2);

ProjectionViewCreateInstructions pInstrs =
pfcView2D.ProjectionViewCreateInstructions_Create (genView,
pos);

Drawings 10 - 19
drawing.CreateView (pInstrs);

/*--------------------------------------------------------------------*\
Create a projected view below the general view
\*--------------------------------------------------------------------*/
pos.set (0, (outline.get (0).get(0) + outline.get (1).get(0))/2);
pos.set (1, outline.get (0).get (1) - (outline.get(1).get(1) -
outline.get (0).get (1)));

pInstrs =
pfcView2D.ProjectionViewCreateInstructions_Create (genView,
pos);

drawing.CreateView (pInstrs);
}
}

Obtaining Drawing Views


Methods Introduced:

• pfcSelect.Selection.GetSelView2D
• pfcModel2D.Model2D.List2DViews
• pfcModel2D.Model2D.GetViewByName
• pfcModel2D.Model2D.GetViewDisplaying
• pfcSheet.SheetOwner.GetSheetBackgroundView
The method pfcSelection.Selection.GetSelView2D returns the
selected drawing view (if the user selected an item from a drawing
view). It returns a null value if the selection does not contain a
drawing view.

The method pfcModel2D.Model2D.List2DViews lists and


returns the drawing views found. This method does not include the
drawing sheet background views returned by the method
pfcSheet.SheetOwner.GetSheetBackgroundView.

The method pfcModel2D.Model2D.GetViewByName returns


the drawing view based on the name. This method returns a null
value if the specified view does not exist.

The method pfcModel2D.Model2D.GetViewDisplaying returns


the drawing view that displays a dimension. This method returns a
null value if the dimension is not displayed in the drawing.

Note: This method works for solid and drawing dimensions.

10 - 20 J-Link User’s Guide


The method pfcSheet.SheetOwner.GetSheetBackgroundView
returns the drawing sheet background views.

Drawing View Information


Methods Introduced:

• pfcObject.Child.GetDBParent
• pfcView2D.View2D.GetSheetNumber

Drawings
• pfcView2D.View2D.GetIsBackground
• pfcView2D.View2D.GetModel
• pfcView2D.View2D.GetScale
• pfcView2D.View2D.GetIsScaleUserdefined
• pfcView2D.View2D.GetOutline
• pfcView2D.View2D.GetLayerDisplayStatus
• pfcView2D.View2D.GetIsViewdisplayLayerDependent
• pfcView2D.View2D.GetDisplay
• pfcView2D.View2D.GetTransform
• pfcView2D.View2D.GetName
The inherited method pfcObject.Child.GetDBParent, when
called on a View2D object, provides the drawing model which owns
the specified drawing view. The return value of the method can be
downcast to a Model2D object.

The method pfcView2D.View2D.GetSheetNumber returns the


sheet number of the sheet that contains the drawing view.

The method pfcView2D.View2D.GetIsBackground returns a


value that indicates whether the view is a background view or a
model view.

The method pfcView2D.View2D.GetModel returns the solid


model displayed in the drawing view.

The method pfcView2D.View2D.GetScale returns the scale of


the drawing view.

The method pfcView2D.View2D.GetIsScaleUserdefined


specifies if the drawing has a user-defined scale.

The method pfcView2D.View2D.GetOutline returns the position


of the view in the sheet in world units.

Drawings 10 - 21
The method pfcView2D.View2D.GetLayerDisplayStatus
returns the display status of the specified layer in the drawing
view.

The method pfcView2D.View2D.GetDisplay returns an output


structure that describes the display settings of the drawing view.
The fields in the structure are as follows:

• Style—Whether to display as wireframe, hidden lines, no


hidden lines, or shaded
• TangentStyle—Linestyle used for tangent edges
• CableStyle—Linestyle used to display cables
• RemoveQuiltHiddenLines—Whether or not to apply
hidden-line-removal to quilts
• ShowConceptModel—Whether or not to display the skeleton
• ShowWeldXSection—Whether or not to include welds in the
cross-section
The method pfcView2D.View2D.GetTransform returns a matrix
that describes the transform between 3D solid coordinates and 2D
world units for that drawing view. The transformation matrix is a
combination of the following factors:

• The location of the view origin with respect to the drawing


origin.
• The scale of the view units with respect to the drawing units
• The rotation of the model with respect to the drawing
coordinate system.
The method pfcView2D.View2D.GetName returns the name of
the specified view in the drawing.

Example: Listing the Views in a Drawing

The following example creates an information window about all the


views in a drawing. The information is placed in an external
browser window
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;

10 - 22 J-Link User’s Guide


import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;

Drawings
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : listViews()
PURPOSE : Command to list view info in an information window
\*====================================================================*/
public static void listViews() throws com.ptc.cipjava.jxthrowable,
java.io.IOException
{
/*--------------------------------------------------------------------*\
Open a browser window to contain the information to be displayed
\*--------------------------------------------------------------------*/
String URL = "view_info.html";
PrintWriter writer = new PrintWriter (new FileOutputStream (URL));

writer.println ("<html><head></head><body>");

/*--------------------------------------------------------------------*\
Get the current drawing
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;


/*--------------------------------------------------------------------*\
Collect the views
\*--------------------------------------------------------------------*/
View2Ds views = drawing.List2DViews ();

for(int i=0; i<views.getarraysize(); i++)


{
View2D view = views.get (i);

Drawings 10 - 23
/*--------------------------------------------------------------------*\
Get the name & sheet number for this view
\*--------------------------------------------------------------------*/
String viewName = view.GetName();
int sheetNo = view.GetSheetNumber ();
/*--------------------------------------------------------------------*\
Get the name of the solid that the view contains
\*--------------------------------------------------------------------*/
Model solid = view.GetModel ();
ModelDescriptor descr = solid.GetDescr();

/*--------------------------------------------------------------------*\
Get the outline, scale, and display state
\*--------------------------------------------------------------------*/
Outline3D outline = view.GetOutline();
double scale = view.GetScale();
ViewDisplay display = view.GetDisplay();

/*--------------------------------------------------------------------*\
Write the information to the browser window file
\*--------------------------------------------------------------------*/

String dispStyle = "unknown";


switch(display.GetStyle().getValue())
{
case DisplayStyle._DISPSTYLE_DEFAULT:
dispStyle = "default";
break;
case DisplayStyle._DISPSTYLE_WIREFRAME:
dispStyle = "wireframe";
break;
case DisplayStyle._DISPSTYLE_HIDDEN_LINE:
dispStyle = "hidden line";
break;
case DisplayStyle._DISPSTYLE_NO_HIDDEN:
dispStyle = "no hidden";
break;
case DisplayStyle._DISPSTYLE_SHADED:
dispStyle = "shaded";
break;
}

writer.println ("<h2>View "+ viewName + "</h2>");


writer.println ("<table>");
writer.println (" <tr><td> Sheet </td><td> "+
sheetNo + " </td></tr> ");
writer.println (" <tr><td> Model </td><td> "+
descr.GetFullName() + " </td></tr> ");
writer.println (" <tr><td> Outline </td><td> ");
writer.println ("<table><tr><td> <i>Lower left:</i> </td><td>");
writer.println (outline.get (0).get (0) + ", " +

10 - 24 J-Link User’s Guide


outline.get (0).get(1) + ", " +
outline.get (0).get(2));
writer.println ("</td></tr><tr><td>
<iUpper right:</i></td><td>");
writer.println (outline.get (1).get (0) + ", " +
outline.get (1).get(1) + ", " +
outline.get (1).get(2));
writer.println ("</td></tr></table></td>");
writer.println (" <tr><td> Scale </td><td> "+ scale +
" </td></tr> ");
writer.println (" <tr><td> Display style </td><td> "+

Drawings
dispStyle + " </td></tr>");
writer.println ("</table>");
writer.println ("<br>");
}
writer.println ("</body></html>");

writer.close ();

session.GetCurrentWindow().SetURL (session.GetCurrentDirectory()+URL);
}
}

Drawing Views Operations


Methods Introduced:

• pfcView2D.View2D.SetScale
• pfcView2D.View2D.Translate
• pfcView2D.View2D.Delete
• pfcView2D.View2D.Regenerate
• pfcView2D.View2D.SetLayerDisplayStatus
• pfcView2D.View2D.SetDisplay
The method pfcView2D.View2D.SetScale sets the scale of the
drawing view.

The method pfcView2D.View2D.Translate moves the drawing


view by the specified transformation vector.

The method pfcView2D.View2D.Delete deletes a specified


drawing view. Set the DeleteChildren parameter to true to delete
the children of the view. Set this parameter to false or null to
prevent deletion of the view if it has children.

The method pfcView2D.View2D.Regenerate erases the


displayed view of the current object, regenerates the view from the
current drawing, and redisplays the view.

Drawings 10 - 25
The method pfcView2D.View2D.SetLayerDisplayStatus sets
the display status for the layer in the drawing view.

The method pfcView2D.View2D.SetDisplay sets the value of the


display settings for the drawing view.

Drawing Dimensions
This section describes the J-Link methods that give access to the
types of dimensions that can be created in the drawing mode. They
do not apply to dimensions created in the solid mode, either those
created automatically as a result of feature creation, or reference
dimension created in a solid. A drawing dimension or a reference
dimension shown in a drawing is represented by the interface
com.ptc.pfc.pfcDimension2D.Dimension2D.

Obtaining Drawing Dimensions


Methods Introduced:

• pfcModelItem.ModelItemOwner.ListItems
• pfcModelItem.ModelItemOwner.GetItemById
• pfcSelect.Selection.GetSelItem
The method pfcModelItem.ModelItemOwner.ListItems
returns a list of drawing dimensions specified by the parameter
Type or returns null if no drawing dimensions of the specified type
are found. This method lists only those dimensions created in the
drawing.

The values of the parameter Type for the drawing dimensions are:

• ITEM_DIMENSION—Dimension
• ITEM_REF_DIMENSION—Reference dimension
Set the parameter Type to the type of drawing dimension to
retrieve. If this parameter is set to null, then all the dimensions in
the drawing are listed.

The method pfcModelItem.ModelItemOwner.GetItemById


returns a drawing dimension based on the type and the integer
identifier. The method returns only those dimensions created in the
drawing. It returns a null if a drawing dimension with the specified
attributes is not found.

The method pfcSelect.Selection.GetSelItem returns the value of


the selected drawing dimension.

10 - 26 J-Link User’s Guide


Creating Drawing Dimensions
Methods Introduced:

• pfcDimension2D.pfcDimension2D.DrawingDimCreateInstructions_Create
• pfcModel2D.Model2D.CreateDrawingDimension
• pfcDimension2D.pfcDimension2D.EmptyDimensionSense_Create
• pfcDimension2D.pfcDimension2D.PointDimensionSense_Create

Drawings
• pfcDimension2D.pfcDimension2D.SplinePointDimensionSense_Create
• pfcDimension2D.pfcDimension2D.TangentIndexDimensionSense_Create
• pfcDimension2D.pfcDimension2D.LinAOCTangentDimensionSense_Create
• pfcDimension2D.pfcDimension2D.AngleDimensionSense_Create
• pfcDimension2D.pfcDimension2D.PointToAngleDimensionSense_Create
The method
pfcDimension2D.pfcDimension2D.DrawingDimCreateInstru
ctions_Create creates an instructions object that describes how to
create a drawing dimension using the method
pfcModel2D.Model2D.CreateDrawingDimension.

The parameters of the instruction object are:

• Attachments—The entities that the dimension is attached to.


The selections should include the drawing model view.
• IsRefDimension—True if the dimension is a reference
dimension, otherwise null or false.
• OrientationHint—Describes the orientation of the dimensions
in cases where this cannot be deduced from the attachments
themselves.
• Senses—Gives more information about how the dimension
attaches to the entity, i.e., to what part of the entity and in
what direction the dimension runs. The types of dimension
senses are as follows:
– DIMSENSE_NONE
– DIMSENSE_POINT
– DIMSENSE_SPLINE_PT
– DIMSENSE_TANGENT_INDEX
– DIMSENSE_LINEAR_TO_ARC_OR_CIRCLE_TANGENT
– DIMSENSE_ANGLE

Drawings 10 - 27
– DIMSENSE_POINT_TO_ANGLE
• TextLocation—The location of the dimension text, in world
units.
The method pfcModel2D.Model2D.CreateDrawingDimension
creates a dimension in the drawing based on the instructions data
object that contains information needed to place the dimension. It
takes as input an array of pfcSelection objects and an array of
pfcDimensionSense structures that describe the required
attachments. The method returns the created drawing dimension.

The method
pfcDimension2D.pfcDimension2D.EmptyDimensionSense_C
reate creates a new dimension sense associated with the type
DIMSENSE NONE. The "sense" field is set to Type. In this case no
information such as location or direction is needed to describe the
attachment points. For example, if there is a single attachment
which is a straight line, the dimension is the length of the straight
line. If the attachments are two parallel lines, the dimension is the
distance between them.

The method
pfcDimension2D.pfcDimension2D.PointDimensionSense_Cr
eate creates a new dimension sense associated with the type
DIMSENSE POINT which specifies the part of the entity to which
the dimension is attached. The "sense" field is set to the value of the
parameter PointType.

The possible values of PointType are:

• DIMPOINT_END1— The first end of the entity


• DIMPOINT_END2—The second end of the entity
• DIMPOINT_CENTER—The center of an arc or circle
• DIMPOINT_NONE—No information such as location or
direction of the attachment is specified. This is similar to
setting the PointType to DIMSENSE NONE.
• DIMPOINT_MIDPOINT—The mid point of the entity
The method
pfcDimension2D.pfcDimension2D.SplinePointDimensionSe
nse_Create creates a dimension sense associated with the type
DIMSENSE_SPLINE_PT. This means that the attachment is to a
point on a spline. The "sense" field is set to SplinePointIndex i.e.,
the index of the spline point.

10 - 28 J-Link User’s Guide


The method
pfcDimension2D.pfcDimension2D.TangentIndexDimension
Sense_Create creates a new dimension sense associated with the
type DIMSENSE_TANGENT_INDEX. The attachment is to a
tangent of the entity, which is an arc or a circle. The sense field is
set to TangentIndex, i.e., the index of the tangent of the entity.

The method
pfcDimension2D.pfcDimension2D.LinAOCTangentDimensio
nSense_Create creates a new dimension sense associated with the

Drawings
type DIMSENSE_LINEAR_TO_ARC_OR_CIRCLE_TANGENT.
The dimension is the perpendicular distance between the a line and
a tangent to an arc or a circle that is parallel to the line. The sense
field is set to the value of the parameter TangentType.

The possible values of TangentType are:

• DIMLINAOCTANGENT_LEFT0—The tangent is to the left of


the line, and is on the same side, of the center of the arc or
circle, as the line.
• DIMLINAOCTANGENT_RIGHT0—The tangent is to the right
of the line, and is on the same side, of the center of the arc or
circle, as the line.
• DIMLINAOCTANGENT_LEFT1—The tangent is to the left of
the line, and is on the opposite side of the line.
• DIMLINAOCTANGENT_RIGHT1— The tangent is to the right
of the line, and is on the opposite side of the line.
The method
pfcDimension2D.pfcDimension2D.AngleDimensionSense_Cr
eate creates a new dimension sense associated with the type
DIMSENSE_ANGLE. The dimension is the angle between two
straight entities. The "sense" field is set to the value of the
parameter AngleOptions.

The possible values of AngleOptions are:

• IsFirst—Is set to TRUE if the angle dimension starts from the


specified entity in a counterclockwise direction. Is set to FALSE
if the dimension ends at the specified entity. The value is TRUE
for one entity and FALSE for the other entity forming the
angle.

Drawings 10 - 29
• ShouldFlip—If the value of ShouldFlip is FALSE, and the
direction of the specified entity is away from the vertex of the
angle, then the dimension attaches directly to the entity. If the
direction of the entity is away from the vertex of the angle, then
the dimension is attached to the a witness line. The witness line
is in line with the entity but in the direction opposite to the
vertex of the angle. If the value of ShouldFlip is TRUE then the
above cases are reversed.
The method
pfcDimension2D.pfcDimension2D.PointToAngleDimensionS
ense_Create creates a new dimension sense associated with the
type DIMSENSE_POINT_TO_ANGLE. The dimension is the angle
between a line entity and the tangent to a curved entity. The curve
attachment is of the type DIMSENSE_POINT_TO_ANGLE and the
line attachment is of the type DIMSENSE POINT. In this case both
the "angle" and the "angle_sense" fields must be set. The field
"sense" shows which end of the curve the dimension is attached to
and the field "angle_sense" shows the direction in which the
dimension rotates and to which side of the tangent it attaches.

Drawing Dimensions Information


Methods Introduced:

• pfcDimension2D.Dimension2D.GetIsAssociative
• pfcDimension2D.Dimension2D.GetIsReference
• pfcDimension2D.Dimension2D.GetIsDisplayed
• pfcDimension2D.Dimension2D.GetAttachmentPoints
• pfcDimension2D.Dimension2D.GetDimensionSenses
• pfcDimension2D.Dimension2D.GetOrientationHint
• pfcDimension2D.Dimension2D.GetBaselineDimension
• pfcDimension2D.Dimension2D.GetLocation
• pfcDimension2D.Dimension2D.GetView
• pfcDimension2D.Dimension2D.GetTolerance
• pfcDimension2D.Dimension2D.GetIsToleranceDisplayed
The method pfcDimension2D.Dimension2D.GetIsAssociative
returns whether the dimension or reference dimension in a drawing
is associative.

10 - 30 J-Link User’s Guide


The method pfcDimension2D.Dimension2D.GetIsReference
determines whether the drawing dimension is a reference
dimension.

The method pfcDimension2D.Dimension2D.GetIsDisplayed


determines whether the dimension will be displayed in the
drawing.

The method
pfcDimension2D.Dimension2D.GetAttachmentPoints returns
a sequence of attachment points. The dimension senses array

Drawings
returned by the method
pfcDimension2D.Dimension2D.GetDimensionSenses gives
more information on how these attachments are interpreted.

The method
pfcDimension2D.Dimension2D.GetDimensionSenses returns
a sequence of dimension senses, describing how the dimension is
attached to each attachment returned by the method
pfcDimension2D.Dimension2D.GetAttachmentPoints.

The method
pfcDimension2D.Dimension2D.GetOrientationHint returns
the orientation hint for placing the drawing dimensions. The
orientation hint determines how Pro/ENGINEER will orient the
dimension with respect to the attachment points.

Note: This methods described above are applicable only for


dimensions created in the drawing mode. It does not
support dimensions created at intersection points of
entities.
The method
pfcDimension2D.Dimension2D.GetBaselineDimension
returns an ordinate baseline drawing dimension. It returns a null
value if the dimension is not an ordinate dimension.

Note: The method updates the display of the dimension only if


it is currently displayed.
The method pfcDimension2D.Dimension2D.GetLocation
returns the placement location of the dimension.

The method pfcDimension2D.Dimension2D.GetView returns


the drawing view in which the dimension is displayed. This method
applies to dimensions stored in the solid or in the drawing.

Drawings 10 - 31
The method pfcDimension2D.Dimension2D.GetTolerance
retrieves the upper and lower tolerance limits of the drawing
dimension in the form of the DimTolerance object. A null value
indicates a nominal tolerance.

Use the method


pfcDimension2D.Dimension2D.GetIsToleranceDisplayed
determines whether or not the dimension’s tolerance is displayed in
the drawing.

Drawing Dimensions Operations


Methods Introduced:

• pfcDimension2D.Dimension2D.ConvertToLinear
• pfcDimension2D.Dimension2D.ConvertToOrdinate
• pfcDimension2D.Dimension2D.ConvertToBaseline
• pfcDimension2D.Dimension2D.SetLocation
• pfcDimension2D.Dimension2D.SwitchView
• pfcDimension2D.Dimension2D.SetTolerance
• pfcDimension2D.Dimension2D.EraseFromModel2D
• pfcModel2D.Model2D.SetViewDisplaying
The method pfcDimension2D.Dimension2D.ConvertToLinear
converts an ordinate drawing dimension to a linear drawing
dimension. The drawing containing the dimension must be
displayed.

The method
pfcDimension2D.Dimension2D.ConvertToOrdinate converts
a linear drawing dimension to an ordinate baseline dimension.

The method
pfcDimension2D.Dimension2D.ConvertToBaseline converts a
location on a linear drawing dimension to an ordinate baseline
dimension. The method returns the newly created baseline
dimension.

Note: The method updates the display of the dimension only if


it is currently displayed.
The method pfcDimension2D.Dimension2D.SetLocation sets
the placement location of a dimension or reference dimension in a
drawing.

10 - 32 J-Link User’s Guide


The method pfcDimension2D.Dimension2D.SwitchView
changes the view where a dimension created in the drawing is
displayed.

The method pfcDimension2D.Dimension2D.SetTolerance


assigns the upper and lower tolerance limits of the drawing
dimension.

The method
pfcDimension2D.Dimension2D.EraseFromModel2D
permanently erases the dimension from the drawing.

Drawings
The method pfcModel2D.Model2D.SetViewDisplaying changes
the view where a dimension created in a solid model is displayed.

Example: Command Creation of Dimensions from Model


Datum Points

The example below shows a command which creates vertical and


horizontal ordinate dimensions from each datum point in a model
in a drawing view to a selected coordinate system datum.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION: createPointDims()
PURPOSE : Command to create dimensions to each of the models' datum
points

Drawings 10 - 33
\*====================================================================*/
public static void createPointDims() throws
com.ptc.cipjava.jxthrowable
{

Dimension2D hBaseline = null;


Dimension2D vBaseline = null;

/*--------------------------------------------------------------------*\
Select a coordinate system. This defines the model (the top one
in that view), and the common attachments for the dimensions
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();

SelectionOptions selOptions =
pfcSelect.SelectionOptions_Create("csys");
selOptions.SetMaxNumSels (new Integer (1));
Selections selections = session.Select (selOptions, null);

if (selections == null || selections.getarraysize() == 0)


return;

/*--------------------------------------------------------------------*\
Extract the csys handle, and assembly path, and view handle.
\*--------------------------------------------------------------------*/
Selection csysSel = selections.get (0);
ModelItem selItem = csysSel.GetSelItem();
ComponentPath selPath = csysSel.GetPath();
View2D selView = csysSel.GetSelView2D();
Point3D selPos = csysSel.GetPoint();

if (selView == null)
throw new RuntimeException ("Must select coordinate system from a
drawing view.");

Model2D drawing = (Model2D)selView.GetDBParent();

/*--------------------------------------------------------------------*\
Get the root solid, and the transform from the root to the
component owning the csys
\*--------------------------------------------------------------------*/

Transform3D asmTransf = null;


Solid rootSolid = (Solid)selItem.GetDBParent();
if (selPath != null)
{
rootSolid = (Solid)selPath.GetRoot();
asmTransf = selPath.GetTransform(true);
}
/*--------------------------------------------------------------------*\
Get a list of datum points in the model

10 - 34 J-Link User’s Guide


\*--------------------------------------------------------------------*/

ModelItems points =
rootSolid.ListItems (ModelItemType.ITEM_POINT);

if (points == null || points.getarraysize() == 0)


return;
/*--------------------------------------------------------------------*\
Calculate where the csys is located on the drawing
\*--------------------------------------------------------------------*/

Drawings
Point3D csysPos = selPos;
if (asmTransf != null)
{
csysPos = asmTransf.TransformPoint (selPos);
}
Transform3D viewTransf = selView.GetTransform();
csysPos = viewTransf.TransformPoint (csysPos);

Vector2D csys3DPos = Vector2D.create ();


csys3DPos.set (0, csysPos.get (0));
csys3DPos.set (1, csysPos.get (1));

/*--------------------------------------------------------------------*\
Get the view outline
\*--------------------------------------------------------------------*/
Outline3D outline = selView.GetOutline();

/*--------------------------------------------------------------------*\
Allocate the attachment arrays
\*--------------------------------------------------------------------*/
DimensionSenses senses = DimensionSenses.create();
Selections attachments = Selections.create();

/*--------------------------------------------------------------------*\
For each datum point...
\*--------------------------------------------------------------------*/
for(int p=0; p<points.getarraysize(); p++)
{

/*--------------------------------------------------------------------*\
Calculate the position of the point on the drawing
\*--------------------------------------------------------------------*/
Point point = (Point)points.get (p);
Point3D pntPos = point.GetPoint ();

pntPos = viewTransf.TransformPoint (pntPos);

/*--------------------------------------------------------------------*\
Set up the "sense" information
\*--------------------------------------------------------------------*/

Drawings 10 - 35
PointDimensionSense sense1 =
pfcDimension2D.PointDimensionSense_Create
(DimensionPointType.DIMPOINT_CENTER);
senses.set (0, sense1);
PointDimensionSense sense2 =
pfcDimension2D.PointDimensionSense_Create
(DimensionPointType.DIMPOINT_CENTER);
senses.set (1, sense2);

/*--------------------------------------------------------------------*\
Set the attachment information
\*--------------------------------------------------------------------*/
Selection pntSel = pfcSelect.CreateModelItemSelection (point, null);
pntSel.SetSelView2D(selView);
attachments.set (0, pntSel);
attachments.set (1, csysSel);

/*--------------------------------------------------------------------*\
Calculate the dim position to be just to the left of the
drawing view, midway between the point and csys
\*--------------------------------------------------------------------*/
Vector2D dimPos = Vector2D.create ();
dimPos.set (0, outline.get (0).get (0) - 20.0);
dimPos.set (1, (csysPos.get (1) + pntPos.get (1))/2.0);

/*--------------------------------------------------------------------*\
Create and display the dimension
\*--------------------------------------------------------------------*/
DrawingDimCreateInstructions createInstrs =
pfcDimension2D.DrawingDimCreateInstructions_Create (attachments,
senses,
dimPos,
OrientationHint.ORIENTHINT_VERTICAL);
Dimension2D dim = drawing.CreateDrawingDimension (createInstrs);

DrawingDimensionShowInstructions showInstrs =
pfcView2D.DrawingDimensionShowInstructions_Create (selView, null);
dim.Show (showInstrs);

/*--------------------------------------------------------------------*\
If this is the first vertical dim, create an ordinate base
line from it, else just convert it to ordinate
\*--------------------------------------------------------------------*/
if(p==0)
{
//dimPos.set (0, csysPos.get (0));
//dimPos.set (1, csysPos.get (1));
vBaseline = dim.ConvertToBaseline (csys3DPos);
}

else

10 - 36 J-Link User’s Guide


dim.ConvertToOrdinate (vBaseline);

/*--------------------------------------------------------------------*\
Set this dimension to be horizontal
\*--------------------------------------------------------------------*/
createInstrs.SetOrientationHint (OrientationHint.ORIENTHINT_HORIZONTAL);
/*--------------------------------------------------------------------*\
Calculate the dim position to be just to the bottom of the
drawing view, midway between the point and csys
\*--------------------------------------------------------------------*/
dimPos.set (0, (csysPos.get (0) + pntPos.get (0))/2.0);

Drawings
dimPos.set (1, outline.get (1).get (1) - 20.0);

createInstrs.SetTextLocation (dimPos);

/*--------------------------------------------------------------------*\
Create and display the dimension
\*--------------------------------------------------------------------*/
dim = drawing.CreateDrawingDimension (createInstrs);
dim.Show (showInstrs);

/*--------------------------------------------------------------------*\
If this is the first horizontal dim, create an ordinate base line
from it, else just convert it to ordinate
\*--------------------------------------------------------------------*/
if(p==0)
{
//dimPos.set (0, csysPos.get (0));
//dimPos.set (1, csysPos.get (1));
hBaseline = dim.ConvertToBaseline (csys3DPos);
}

else
dim.ConvertToOrdinate (hBaseline);

}
}
}

Drawing Tables
A drawing table in J-Link is represented by the interface
com.ptc.pfc.pfcTable.Table. It is a child of the ModelItem
interface.

Drawings 10 - 37
Some drawing table methods operate on specific rows or columns.
The row and column numbers in J-Link begin with 1 and range up
to the total number of rows or columns in the table. Some drawing
table methods operate on specific table cells. The interface
com.ptc.pfc.pfcTable.TableCell is used to represent a drawing
table cell.

Creating Drawing Cells


Method Introduced:

• pfcTable.pfcTable.TableCell_Create
The method pfcTable.pfcTable.TableCell_Create creates the
TableCell object representing a cell in the drawing table.

Some drawing table methods operate on specific drawing segment.


A multisegmented drawing table contains 2 or more areas in the
drawing. Inserting or deleting rows in one segment of the table can
affect the contents of other segments. Table segments are
numbered beginning with 0. If the table has only a single segment,
use 0 as the segment id in the relevant methods.

Selecting Drawing Tables and Cells


Methods Introduced:

• pfcSession.BaseSession.Select
• pfcSelect.Selection.GetSelItem
• pfcSelect.Selection.GetSelTableCell
• pfcSelect.Selection.GetSelTableSegment
Tables may be selected using the method
pfcSession.BaseSession.Select. Pass the filter dwg_table to
select an entire table and the filter table_cell to prompt the user
to select a particular table cell.

The method pfcSelect.Selection.GetSelItem returns the selected


table handle. It is a model item that can be cast to a Table object.

The method pfcSelect.Selection.GetSelTableCell returns the


row and column indices of the selected table cell.

The method pfcSelect.Selection.GetSelTableSegment returns


the table segment identifier for the selected table cell. If the table
consists of a single segment, this method returns the identifier 0.

10 - 38 J-Link User’s Guide


Creating Drawing Tables
Methods Introduced:

• pfcTable.pfcTable.TableCreateInstructions_Create
• pfcTable.TableOwner.CreateTable
The method
pfcTable.pfcTable.TableCreateInstructions_Create creates
the TableCreateInstructions data object that describes how to

Drawings
construct a new table using the method
pfcTable.TableOwner.CreateTable.

The parameters of the instructions data object are:

• Origin—This parameter stores a three dimensional point


specifying the location of the table origin. The origin is the
position of the top left corner of the table.
• RowHeights—Specifies the height of each row of the table.
• ColumnData—Specifies the width of each column of the table
and its justification.
• SizeTypes—Indicates the scale used to measure the column
width and row height of the table.
The method pfcTable.TableOwner.CreateTable creates a table
in the drawing specified by the TableCreateInstructions data
object.

Retrieving Drawing Tables


Methods Introduced

• pfcTable.pfcTable.TableRetrieveInstructions_Create
• pfcTable.TableOwner.RetrieveTable
The method
pfcTable.pfcTable.TableRetrieveInstructions_Create creates
the TableRetrieveInstructions data object that describes how to
retrieve a drawing table using the method
pfcTable.TableOwner.RetrieveTable. The method returns the
created instructions data object.

The parameters of the instruction object are:

• FileName—Name of the file containing the drawing table.


• Position—The location of left top corner of the retrieved table.

Drawings 10 - 39
The method pfcTable.TableOwner.RetrieveTable retrieves a
table specified by the TableRetrieveInstructions data object
from a file on the disk. It returns the retrieved table. The data
object contains information on the table to retrieve and is returned
by the method
pfcTable.pfcTable.TableRetrieveInstructions_Create.

Drawing Tables Information


Methods Introduced:

• pfcTable.TableOwner.ListTables
• pfcTable.TableOwner.GetTable
• pfcTable.Table.GetRowCount
• pfcTable.Table.GetColumnCount
• pfcTable.Table.CheckIfIsFromFormat
• pfcTable.Table.GetRowSize
• pfcTable.Table.GetColumnSize
• pfcTable.Table.GetText
• pfcTable.Table.GetCellNote
The method pfcTable.TableOwner.ListTables returns a
sequence of tables found in the model.

The method pfcTable.TableOwner.GetTable returns a table


specified by the table identifier in the model. It returns a null value
if the table is not found.

The method pfcTable.Table.GetRowCount returns the number


of rows in the table.

The method pfcTable.Table.GetColumnCount returns the


number of columns in the table.

The method pfcTable.Table.CheckIfIsFromFormat verifies if


the drawing table was created using the format of the drawing
sheet specified by the sheet number. The method returns a true
value if the table was created by applying the drawing format.

The method pfcTable.Table.GetRowSize returns the height of


the drawing table row specified by the segment identifier and the
row number.

The method pfcTable.Table.GetColumnSize returns the width


of the drawing table column specified by the segment identifier and
the column number.

10 - 40 J-Link User’s Guide


The method pfcTable.Table.GetText returns the sequence of text
in a drawing table cell. Set the value of the parameter Mode to
DWGTABLE_NORMAL to get the text as displayed on the screen.
Set it to DWGTABLE_FULL to get symbolic text, which includes
the names of parameter references in the table text.

The method pfcTable.Table.GetCellNote returns the detail note


item contained in the table cell.

Drawing Tables Operations

Drawings
Methods Introduced:

• pfcTable.Table.Erase
• pfcTable.Table.Display
• pfcTable.Table.RotateClockwise
• pfcTable.Table.InsertRow
• pfcTable.Table.InsertColumn
• pfcTable.Table.MergeRegion
• pfcTable.Table.SubdivideRegion
• pfcTable.Table.DeleteRow
• pfcTable.Table.DeleteColumn
• pfcTable.Table.SetText
• pfcTable.TableOwner.DeleteTable
The method pfcTable.Table.Erase erases the specified table
temporarily from the display. It still exists in the drawing. The
erased table can be displayed again using the method
pfcTable.Table.Display. The table will also be redisplayed by a
window repaint or a regeneration of the drawing. Use these
methods to hide a table from the display while you are making
multiple changes to the table.

The method pfcTable.Table.RotateClockwise rotates a table


clockwise by the specified amount of rotation.

The method pfcTable.Table.InsertRow inserts a new row in the


drawing table. Set the value of the parameter RowHeight to specify
the height of the row. Set the value of the parameter
InsertAfterRow to specify the row number after which the new row
has to be inserted. Specify 0 to insert a new first row.

Drawings 10 - 41
The method pfcTable.Table.InsertColumn inserts a new column
in the drawing table. Set the value of the parameter ColumnWidth
to specify the width of the column. Set the value of the parameter
InsertAfterColumn to specify the column number after which the
new column has to be inserted. Specify 0 to insert a new first
column.

The method pfcTable.Table.MergeRegion merges table cells


within a specified range of rows and columns to form a single cell.
The range is a rectangular region specified by the table cell on the
upper left of the region and the table cell on the lower right of the
region.

The method pfcTable.Table.SubdivideRegion removes merges


from a region of table cells that were previously merged. The region
to remove merges is specified by the table cell on the upper left of
the region and the table cell on the lower right of the region.

The methods pfcTable.Table.DeleteRow and


pfcTable.Table.DeleteColumn delete any specified row or
column from the table. The methods also remove the text from the
affected cells.

The method pfcTable.Table.SetText sets text in the table cell.

Use the method pfcTable.TableOwner.DeleteTable to delete a


specified drawing table from the model permanently. The deleted
table cannot be displayed again.

Note: Many of the above methods provide a parameter


Repaint. If this is set to true the table will be repainted
after the change. If set to false or null Pro/ENGINEER
will delay the repaint, allowing you to perform several
operations before showing changes on the screen.

Example: Creation of a Table Listing Datum Points

The following example creates a drawing table that lists the datum
points in a model shown in a drawing view.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;

10 - 42 J-Link User’s Guide


import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;

Drawings
import java.io.*;
public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : createTableOfPoints()
PURPOSE : Command to create a table of points
\*====================================================================*/
public static void createTableOfPoints()
throws com.ptc.cipjava.jxthrowable
{

double[] widths = new double [4];


widths [0] = 8.0;
widths [1] = 10.0;
widths [2] = 10.0;
widths [3] = 10.0;

/*--------------------------------------------------------------------*\
Select a coordinate system. This defines the model (the top one
in that view), and the reference for the datum point positions.
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();

SelectionOptions selOptions =
pfcSelect.SelectionOptions_Create("csys");
selOptions.SetMaxNumSels (new Integer (1));
Selections selections = session.Select (selOptions, null);

if (selections == null || selections.getarraysize() == 0)


return;

/*--------------------------------------------------------------------*\
Extract the csys handle, and assembly path, and view handle.
\*--------------------------------------------------------------------*/
ModelItem selItem = selections.get (0).GetSelItem();
ComponentPath selPath = selections.get (0).GetPath();
View2D selView = selections.get (0).GetSelView2D();

if (selView == null)
throw new RuntimeException ("Must select coordinate system from a

Drawings 10 - 43
drawing view.");

Model2D drawing = (Model2D)selView.GetDBParent();

/*--------------------------------------------------------------------*\
Extract the csys location (property CoordSys from class CoordSystem)
\*--------------------------------------------------------------------*/
CoordSystem csys = (CoordSystem) selItem;
Transform3D csysTransf = csys.GetCoordSys();
csysTransf.Invert ();

/*--------------------------------------------------------------------*\
Extract the cys name
\*--------------------------------------------------------------------*/
String csysName = selItem.GetName();

/*--------------------------------------------------------------------*\
Get the root solid, and the transform from the root to the
component owning the csys
\*--------------------------------------------------------------------*/

Transform3D asmTransf = null;


Solid rootSolid = (Solid)selItem.GetDBParent();
if (selPath != null)
{
rootSolid = (Solid)selPath.GetRoot();
asmTransf = selPath.GetTransform(false);
}

/*--------------------------------------------------------------------*\
Get a list of datum points in the model
\*--------------------------------------------------------------------*/

ModelItems points =
rootSolid.ListItems (ModelItemType.ITEM_POINT);

if (points == null || points.getarraysize() == 0)


return;

/*--------------------------------------------------------------------*\
Set the table position
\*--------------------------------------------------------------------*/
Point3D location = Point3D.create();
location.set (0, 500.0);
location.set (1, 500.0);
location.set (2, 0.0);

/*--------------------------------------------------------------------*\
Setup the table creation instructions
\*--------------------------------------------------------------------*/
TableCreateInstructions instrs =

10 - 44 J-Link User’s Guide


pfcTable.TableCreateInstructions_Create (location);

instrs.SetSizeType (TableSizeType.TABLESIZE_BY_NUM_CHARS);

ColumnCreateOptions columnInfo = ColumnCreateOptions.create();

for (int i = 0; i < Array.getLength (widths); i++)


{
ColumnCreateOption column =
pfcTable.ColumnCreateOption_Create
(ColumnJustification.COL_JUSTIFY_LEFT,

Drawings
widths [i]);
columnInfo.insert (columnInfo.getarraysize(), column);
}
instrs.SetColumnData (columnInfo);

realseq rowInfo = realseq.create();

for (int i = 0; i < points.getarraysize() + 2; i++)


{
rowInfo.insert (rowInfo.getarraysize(), 1.0);
}
instrs.SetRowHeights (rowInfo);

/*--------------------------------------------------------------------*\
Create the table
\*--------------------------------------------------------------------*/
Table dwgTable = drawing.CreateTable (instrs);

/*--------------------------------------------------------------------*\
Merge the top row cells to form the header
\*--------------------------------------------------------------------*/
TableCell topLeft = pfcTable.TableCell_Create (1, 1);
TableCell bottomRight = pfcTable.TableCell_Create (1, 4);
dwgTable.MergeRegion (topLeft, bottomRight, null);

/*--------------------------------------------------------------------*\
Write header text specifying model and csys
\*--------------------------------------------------------------------*/
writeTextInCell (dwgTable, 1, 1,
"Datum points for " + rootSolid.GetFullName() +
" w.r.t. csys "+csysName);

/*--------------------------------------------------------------------*\
Add subheadings to columns
\*--------------------------------------------------------------------*/
writeTextInCell (dwgTable, 2, 1, "Point");
writeTextInCell (dwgTable, 2, 2, "X");
writeTextInCell (dwgTable, 2, 3, "Y");
writeTextInCell (dwgTable, 2, 4, "Z");

Drawings 10 - 45
/*--------------------------------------------------------------------*\
For each datum point...
\*--------------------------------------------------------------------*/
for (int p=0; p<points.getarraysize(); p++)
{
Point geomPoint = (Point) points.get(p);
/*--------------------------------------------------------------------*\
Add the point name to column 1
\*--------------------------------------------------------------------*/
writeTextInCell (dwgTable, p+3, 1, geomPoint.GetName());

/*--------------------------------------------------------------------*\
Transform the location w.r.t to the csys
\*--------------------------------------------------------------------*/
Point3D trfPoint = geomPoint.GetPoint();
if (asmTransf != null)
trfPoint =
asmTransf.TransformPoint (geomPoint.GetPoint());
trfPoint = csysTransf.TransformPoint (trfPoint);

/*--------------------------------------------------------------------*\
Add the XYZ to column 3,4,5
\*--------------------------------------------------------------------*/
DecimalFormat format = new DecimalFormat ("#,##0.000");
StringBuffer buffer = new StringBuffer();
FieldPosition position =
new FieldPosition (NumberFormat.FRACTION_FIELD);

format.format (trfPoint.get(0), buffer, position);


writeTextInCell (dwgTable, p+3, 2, buffer.toString());
buffer = new StringBuffer();
format.format (trfPoint.get(1), buffer, position);
writeTextInCell (dwgTable, p+3, 3, buffer.toString());

buffer = new StringBuffer();


format.format (trfPoint.get(2), buffer, position);
writeTextInCell (dwgTable, p+3, 4, buffer.toString());
}
/*--------------------------------------------------------------------*\
Display the table
\*--------------------------------------------------------------------*/
dwgTable.Display ();
}

/*====================================================================*\
FUNCTION : writeTextInCell()
PURPOSE : Utility to add one text line to a table cell
\*====================================================================*/
private static void writeTextInCell(Table table, int row,
int col, String text)
throws com.ptc.cipjava.jxthrowable

10 - 46 J-Link User’s Guide


{
TableCell cell = pfcTable.TableCell_Create (row, col);
stringseq lines = stringseq.create();
lines.insert (0, text);

table.SetText (cell, lines);


}
}

Drawing Table Segments

Drawings
Drawing tables can be constructed with one or more segments.
Each segment can be independently placed. The segments are
specified by an integer identifier starting with 0.

Methods Introduced:

• pfcSelect.Selection.GetSelTableSegment
• pfcTable.Table.GetSegmentCount
• pfcTable.Table.GetSegmentSheet
• pfcTable.Table.MoveSegment
• pfcTable.Table.GetInfo
The method pfcSelect.Selection.GetSelTableSegment returns
the value of the segment identifier of the selected table segment. It
returns a null value if the selection does not contain a segment
identifier.

The method pfcTable.Table.GetSegmentCount returns the


number of segments in the table.

The method pfcTable.Table.GetSegmentSheet determines the


sheet number that contains a specified drawing table segment.

The method pfcTable.Table.MoveSegment moves a drawing


table segment to a new location. Pass the co-ordinates of the target
position in the format x, y, z=0.

Note: Set the value of the parameter Repaint to true to


repaint the drawing with the changes. Set it to false or
null to delay the repaint.
To get information about a drawing table pass the value of the
segment identifier as input to the method
pfcTable.Table.GetInfo. The method returns the table
information including the rotation, row and column information,
and the 3D outline.

Drawings 10 - 47
Repeat Regions
Methods Introduced:

• pfcTable.Table.IsCommentCell
• pfcTable.Table.GetCellComponentModel
• pfcTable.Table.GetCellReferenceModel
• pfcTable.Table.GetCellTopModel
• pfcTable.TableOwner.UpdateTables
The methods pfcTable.Table.IsCommentCell,
pfcTable.Table.GetCellComponentModel,
pfcTable.Table.GetCellReferenceModel,
pfcTable.Table.GetCellTopModel, and
pfcTable.TableOwner.UpdateTables apply to repeat regions in
drawing tables.

The method pfcTable.Table.IsCommentCell tells you whether a


cell in a repeat region contains a comment.

The method pfcTable.Table.GetCellComponentModel returns


the path to the assembly component model that is being referenced
by a cell in a repeat region of a drawing table. It does not return a
valid path if the cell attribute is set to "NO DUPLICATE" or "NO
DUPLICATE/LEVEL".

The method pfcTable.Table.GetCellReferenceModel returns


the reference component that is being referred to by a cell in a
repeat region of a drawing table, even if cell attribute is set to "NO
DUPLICATE" or "NO DUPLICATE/LEVEL".

The method pfcTable.Table.GetCellTopModel returns the top


model that is being referred to by a cell in a repeat region of a
drawing table, even if cell attribute is set to "NO DUPLICATE" or
"NO DUPLICATE/LEVEL".

Use the method pfcTable.TableOwner.UpdateTables to update


the repeat regions in all the tables to account for changes to the
model. It is equivalent to the command Table, Repeat Region,
Update.

10 - 48 J-Link User’s Guide


Detail Items
The methods described in this section operate on detail items.

In J-Link you can create, delete and modify detail items, control
their display, and query what detail items are present in the
drawing. The types of detail items available are:

• Draft Entities—Contain graphical items created in


Pro/Engineer. The items are as follows:

Drawings
– Arc
– Ellipse
– Line
– Point
– Polygon
– Spline
• Notes—Textual annotations
• Symbol Definitions—Contained in the drawing’s symbol
gallery.
• Symbol Instances—Instances of a symbol placed in a drawing.
• Draft Groups—Groups of detail items that contain notes,
symbol instances, and draft entities.
• OLE objects—Object Linking and Embedding (OLE) objects
embedded in the Pro/ENGINEER drawing file.

Listing Detail Items


Methods Introduced:

• pfcModelItem.ModelItemOwner.ListItems
• pfcDetail.DetailItemOwner.ListDetailItems
• pfcModelItem.ModelItemOwner.GetItemById
• pfcDetail.DetailItemOwner.CreateDetailItem
The method pfcModelItem.ModelItemOwner.ListItems
returns a list of detail items specified by the parameter Type or
returns null if no detail items of the specified type are found.

The values of the parameter Type for detail items are:

• ITEM_DTL_ENTITY—Detail Entity

Drawings 10 - 49
• ITEM_DTL_NOTE—Detail Note
• ITEM_DTL_GROUP—Draft Group
• ITEM_DTL_SYM_DEFINITION—Detail Symbol Definition
• ITEM_DTL_SYM_INSTANCE—Detail Symbol Instance
• ITEM_DTL_OLE_OBJECT—Drawing embedded OLE object
If this parameter is set to null, then all the model items in the
drawing are listed.

The method pfcDetail.DetailItemOwner.ListDetailItems also


lists the detail items in the model. Pass the type of the detail item
and the sheet number that contains the specified detail items.

Set the input parameter Type to the type of detail item to be listed.
Set it to null to return all the detail items. The input parameter
SheetNumber determines the sheet that contains the specified
detail item. Pass null to search all the sheets. This argument is
ignored if the parameter Type is set to
DETAIL_SYM_DEFINITION.

The method returns a sequence of detail items and returns a null if


no items matching the input values are found.

The method pfcModelItem.ModelItemOwner.GetItemById


returns a detail item based on the type of the detail item and its
integer identifier. The method returns a null if a detail item with
the specified attributes is not found.

Creating a Detail Item


Methods Introduced:

• pfcDetail.DetailItemOwner.CreateDetailItem
• pfcDetail.pfcDetailGroupInstructions_Create
The method pfcDetail.DetailItemOwner.CreateDetailItem
creates a new detail item based on the instruction data object that
describes the type and content of the new detail item. The
instructions data object is returned by the method
pfcDetail.pfcDetailGroupInstructions_Create. The method
returns the newly created detail item.

10 - 50 J-Link User’s Guide


Detail Entities
A detail entity in J-Link is represented by the interface
com.ptc.pfc.pfcDetail.DetailEntityItem. It is a child of the
DetailItem interface.

The interface com.ptc.pfc.pfcDetail.DetailEntityInstructions


contains specific information used to describe a detail entity item.

Instructions

Drawings
Methods Introduced:

• pfcDetail.pfcDetail.DetailEntityInstructions_Create
• pfcDetail.DetailEntityInstructions.GetGeometry
• pfcDetail.DetailEntityInstructions.SetGeometry
• pfcDetail.DetailEntityInstructions.GetIsConstruction
• pfcDetail.DetailEntityInstructions.SetIsConstruction
• pfcDetail.DetailEntityInstructions.GetColor
• pfcDetail.DetailEntityInstructions.SetColor
• pfcDetail.DetailEntityInstructions.GetFontName
• pfcDetail.DetailEntityInstructions.SetFontName
• pfcDetail.DetailEntityInstructions.GetWidth
• pfcDetail.DetailEntityInstructions.SetWidth
• pfcDetail.DetailEntityInstructions.GetView
• pfcDetail.DetailEntityInstructions.SetView
The method
pfcDetail.pfcDetail.DetailEntityInstructions_Create creates
an instructions object that describes how to construct a detail
entity, for use in the methods
pfcDetail.DetailItemOwner.CreateDetailItem,
pfcDetail.DetailSymbolDefItem.CreateDetailItem, and
pfcDetail.DetailEntityItem.Modify.

Drawings 10 - 51
The instructions object is created based on the curve geometry and
the drawing view associated with the entity. The curve geometry
describes the trajectory of the detail entity in world units. The
drawing view can be a model view returned by the method
pfcModel2D.Model2D.List2DViews or a drawing sheet
background view returned by the method
pfcSheet.SheetOwner.GetSheetBackgroundView. The
background view indicates that the entity is not associated with a
particular model view.

The method returns the created instructions object.

Note: Changes to the values of a


pfcDetail.DetailEntityInstructions object do not
take effect until that instructions object is used to
modify the entity using
pfcDetail.DetailEntityItem.Modify.
The method pfcDetail.DetailEntityInstructions.GetGeometry
returns the geometry of the detail entity item.

The method pfcDetail.DetailEntityInstructions.SetGeometry


sets the geometry of the detail entity item. For more information
refer to Curve Descriptors.

The method
pfcDetail.DetailEntityInstructions.GetIsConstruction
returns a value that specifies whether the entity is a construction
entity.

The method
pfcDetail.DetailEntityInstructions.SetIsConstruction
specifies if the detail entity is a construction entity.

The method pfcDetail.DetailEntityInstructions.GetColor


returns the color of the detail entity item.

The method pfcDetail.DetailEntityInstructions.SetColor sets


the color of the detail entity item. Pass null to use the default
drawing color.

The method pfcDetail.DetailEntityInstructions.GetFontName


returns the line style used to draw the entity. The method returns a
null value if the default line style is used.

The method pfcDetail.DetailEntityInstructions.SetFontName


sets the line style for the detail entity item. Pass null to use the
default line style.

10 - 52 J-Link User’s Guide


The method pfcDetail.DetailEntityInstructions.GetWidth
returns the value of the width of the entity line. The method
returns a null value if the default line width is used.

The method pfcDetail.DetailEntityInstructions.SetWidth


specifies the width of the entity line. Pass null to use the default
line width.

The method pfcDetail.DetailEntityInstructions.GetView


returns the drawing view associated with the entity. The view can
either be a model view or a drawing sheet background view.

Drawings
The method pfcDetail.DetailEntityInstructions.SetView sets
the drawing view associated with the entity. The view can either be
a model view or a drawing sheet background view.

Example: Create a Draft Line with Predefined Color

The following example shows a utility that creates a draft line in


one of the colors predefined in Pro/ENGINEER.
import com.ptc.cipjava.*;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;

import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : createLineEntity()
PURPOSE : Utility to create a line entity between specified points

Drawings 10 - 53
\*====================================================================*/
public static void createLineEntity() throws
com.ptc.cipjava.jxthrowable
{
StdColor color = StdColor.COLOR_QUILT;
Session session = pfcGlobal.GetProESession ();

/*--------------------------------------------------------------------*\
Get the current drawing & its background view
\*--------------------------------------------------------------------*/
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;

int currSheet = drawing.GetCurrentSheetNumber();


View2D view = drawing.GetSheetBackgroundView (currSheet);

/*--------------------------------------------------------------------*\
Select the endpoints of the line
\*--------------------------------------------------------------------*/
MouseStatus mouse1 =
session.UIGetNextMousePick (MouseButton.MOUSE_BTN_LEFT);
Point3D start = mouse1.GetPosition();
MouseStatus mouse2 =
session.UIGetNextMousePick (MouseButton.MOUSE_BTN_LEFT);
Point3D end = mouse2.GetPosition();

/*--------------------------------------------------------------------*\
Allocate and initialize a curve descriptor
\*--------------------------------------------------------------------*/
LineDescriptor geom = pfcGeometry.LineDescriptor_Create (start, end);
/*--------------------------------------------------------------------*\
Allocate data for the draft entity
\*--------------------------------------------------------------------*/
DetailEntityInstructions instrs =
pfcDetail.DetailEntityInstructions_Create (geom,
view);

/*--------------------------------------------------------------------*\
Set the color to the specified Pro/ENGINEER predefined color
\*--------------------------------------------------------------------*/
ColorRGB rgb = session.GetRGBFromStdColor (color);
instrs.SetColor(rgb);

/*--------------------------------------------------------------------*\
Create the entity
\*--------------------------------------------------------------------*/
drawing.CreateDetailItem (instrs);

10 - 54 J-Link User’s Guide


/*--------------------------------------------------------------------*\
Display the entity
\*--------------------------------------------------------------------*/
session.GetCurrentWindow().Repaint();
}
}

Detail Entities Information

Drawings
Methods Introduced:

• pfcDetail.DetailEntityItem.GetInstructions
• pfcDetail.DetailEntityItem.GetSymbolDef
The method pfcDetail.DetailEntityItem.GetInstructions
returns the instructions data object that is used to construct the
detail entity item.

The method pfcDetail.DetailEntityItem.GetSymbolDef returns


the symbol definition that contains the entity. This method returns
a null value if the entity is not a part of a symbol definition.

Detail Entities Operations


Methods Introduced:

• pfcDetail.DetailEntityItem.Draw
• pfcDetail.DetailEntityItem.Erase
• pfcDetail.DetailEntityItem.Modify
The method pfcDetail.DetailEntityItem.Draw temporarily
draws a detail entity item, so that it is removed during the next
draft regeneration.

The method pfcDetail.DetailEntityItem.Erase undraws a detail


entity item temporarily, so that it is redrawn during the next draft
regeneration.

The method pfcDetail.DetailEntityItem.Modify modifies the


definition of an entity item using the specified instructions data
object.

Drawings 10 - 55
OLE Objects
An object linking and embedding (OLE) object is an external file,
such as a document, graphics file, or video file that is created using
an external application and which can be inserted into another
application, such as Pro/ENGINEER. You can create and insert
supported OLE objects into a two-dimensional Pro/ENGINEER file,
such as a drawing, report, format file, layout, or diagram. The
functions described in this section enable you to identify and access
OLE objects embedded in drawings.

Methods Introduced:

• pfcDetail.DetailOLEObject.GetApplicationType
• pfcDetail.DetailOLEObject.GetOutline
• pfcDetail.DetailOLEObject.GetPath
• pfcDetail.DetailOLEObject.GetSheet
The method pfcDetail.DetailOLEObject.GetApplicationType
returns the type of the OLE object as a string, for example,
"Microsoft Word Document".

The method pfcDetail.DetailOLEObject.GetOutline returns the


extent of the OLE object embedded in the drawing.

The method pfcDetail.DetailOLEObject.GetPath returns the


path to the external file for each OLE object, if it is linked to an
external file.

The method pfcDetail.DetailOLEObject.GetSheet returns the


sheet number for the OLE object.

Detail Notes
A detail note in J-Link is represented by the interface
com.ptc.pfc.pfcDetail.DetailNoteItem. It is a child of the
DetailItem interface.

The interface com.ptc.pfc.pfcDetail.DetailNoteInstructions


contains specific information that describes a detail note.

Instructions
Methods Introduced:

• pfcDetail.pfcDetail.DetailNoteInstructions_Create

10 - 56 J-Link User’s Guide


• pfcDetail.DetailNoteInstructions.GetTextLines
• pfcDetail.DetailNoteInstructions.SetTextLines
• pfcDetail.DetailNoteInstructions.GetIsDisplayed
• pfcDetail.DetailNoteInstructions.SetIsDisplayed
• pfcDetail.DetailNoteInstructions.GetIsReadOnly
• pfcDetail.DetailNoteInstructions.SetIsReadOnly
• pfcDetail.DetailNoteInstructions.GetIsMirrored

Drawings
• pfcDetail.DetailNoteInstructions.SetIsMirrored
• pfcDetail.DetailNoteInstructions.GetHorizontal
• pfcDetail.DetailNoteInstructions.SetHorizontal
• pfcDetail.DetailNoteInstructions.GetVertical
• pfcDetail.DetailNoteInstructions.SetVertical
• pfcDetail.DetailNoteInstructions.GetColor
• pfcDetail.DetailNoteInstructions.SetColor
• pfcDetail.DetailNoteInstructions.GetLeader
• pfcDetail.DetailNoteInstructions.SetLeader
• pfcDetail.DetailNoteInstructions.GetTextAngle
• pfcDetail.DetailNoteInstructions.SetTextAngle
The method
pfcDetail.pfcDetail.DetailNoteInstructions_Create creates a
data object that describes how a detail note item should be
constructed when passed to the methods
pfcDetail.DetailItemOwner.CreateDetailItem,
pfcDetail.DetailSymbolDefItem.CreateDetailItem, or
pfcDetail.DetailNoteItem.Modify. The parameter inTextLines
specifies the sequence of text line data objects that describe the
contents of the note.

Note: Changes to the values of a


pfcDetail.DetailNoteInstructions object do not take
effect until that instructions object is used to modify the
note using pfcDetail.DetailNoteItem.Modify
The method pfcDetail.DetailNoteInstructions.GetTextLines
returns the description of text line contents in the note.

The method pfcDetail.DetailNoteInstructions.SetTextLines


sets the description of the text line contents in the note.

Drawings 10 - 57
The method pfcDetail.DetailNoteInstructions.GetIsDisplayed
returns a boolean indicating if the note is currently displayed.

The method pfcDetail.DetailNoteInstructions.SetIsDisplayed


sets the display flag for the note.

The method pfcDetail.DetailNoteInstructions.GetIsReadOnly


determines whether the note can be edited by the user, while the
method pfcDetail.DetailNoteInstructions.SetIsReadOnly
toggles the read only status of the note.

The method pfcDetail.DetailNoteInstructions.GetIsMirrored


determines whether the note is mirrored, while the method
pfcDetail.DetailNoteInstructions.SetIsMirrored toggles the
mirrored status of the note.

The method pfcDetail.DetailNoteInstructions.GetHorizontal


returns the value of the horizontal justification of the note, while
the method pfcDetail.DetailNoteInstructions.SetHorizontal
sets the value of the horizontal justification of the note.

The method pfcDetail.DetailNoteInstructions.GetVertical


returns the value of the vertical justification of the note, while the
method pfcDetail.DetailNoteInstructions.SetVertical sets the
value of the vertical justification of the note.

The method pfcDetail.DetailNoteInstructions.GetColor


returns the color of the detail note item. The method returns a null
value to represent the default drawing color.

Use the method pfcDetail.DetailNoteInstructions.SetColor to


set the color of the detail note item. Pass null to use the default
drawing color.

The method pfcDetail.DetailNoteInstructions.GetLeader


returns the locations of the detail note item and information about
the leaders.

The method pfcDetail.DetailNoteInstructions.SetLeader sets


the values of the location of the detail note item and the locations
where the leaders are attached to the drawing.

The method pfcDetail.DetailNoteInstructions.GetTextAngle


returns the value of the angle of the text used in the note. The
method returns a null value if the angle is 0.0.

The method pfcDetail.DetailNoteInstructions.SetTextAngle


sets the value of the angle of the text used in the note. Pass null to
use the angle 0.0.

10 - 58 J-Link User’s Guide


Example: Create Drawing Note at Specified Location with
Leader to Surface and Surface Name

The following example creates a drawing note at a specified


location, with a leader attached to a solid surface, and displays the
name of the surface.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;

Drawings
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : createSurfNote()
PURPOSE : Utility to create a note that documents the surface name or id.
The note text will be placed at the upper right corner of the
selected view.
\*====================================================================*/
public static void createSurfNote() throws com.ptc.cipjava.jxthrowable
{
/*--------------------------------------------------------------------*\
Get the current drawing & its background view
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;


/*--------------------------------------------------------------------*\

Drawings 10 - 59
Interactively select a surface in a drawing view
\*--------------------------------------------------------------------*/
SelectionOptions options =
pfcSelect.SelectionOptions_Create ("surface");
options.SetMaxNumSels (new Integer (1));

Selections sels = session.Select (options, null);


Selection selSurf = sels.get (0);
ModelItem item = selSurf.GetSelItem();

String name = item.GetName();


if (name == null)
name = new String ("Surface ID "+item.GetId());

/*--------------------------------------------------------------------*\
Allocate a text item, and set its properties
\*--------------------------------------------------------------------*/
DetailText text = pfcDetail.DetailText_Create (name);

/*--------------------------------------------------------------------*\
Allocate a new text line, and add the text item to it
/*--------------------------------------------------------------------*/
DetailTexts texts = DetailTexts.create();
texts.insert (0, text);

DetailTextLine textLine = pfcDetail.DetailTextLine_Create (texts);

DetailTextLines textLines = DetailTextLines.create();


textLines.insert (0, textLine);

/*--------------------------------------------------------------------*\
Set the location of the note text
\*--------------------------------------------------------------------*/
View2D dwgView = selSurf.GetSelView2D();
Outline3D outline = dwgView.GetOutline();
Point3D textPos = outline.get (1);

// Force the note to be slightly beyond the view outline boundary


textPos.set (0, textPos.get (0) + 0.25 * (textPos.get (0) -
outline.get (0).get(0)));
textPos.set (1, textPos.get (1) + 0.25 * (textPos.get (1) -
outline.get (0).get(1)));

FreeAttachment position =
pfcDetail.FreeAttachment_Create (textPos);
position.SetView (dwgView);

/*--------------------------------------------------------------------*\
Set the attachment for the note leader
\*--------------------------------------------------------------------*/
ParametricAttachment leaderToSurf =

10 - 60 J-Link User’s Guide


pfcDetail.ParametricAttachment_Create (selSurf);

/*--------------------------------------------------------------------*\
Set the attachment structure
\*--------------------------------------------------------------------*/
DetailLeaders allAttachments = pfcDetail.DetailLeaders_Create ();
allAttachments.SetItemAttachment (position);
Attachments attachs = Attachments.create ();
attachs.insert (0, leaderToSurf);
allAttachments.SetLeaders (attachs);

Drawings
/*--------------------------------------------------------------------*\
Allocate a note description, and set its properties
\*--------------------------------------------------------------------*/
DetailNoteInstructions instrs =
pfcDetail.DetailNoteInstructions_Create (textLines);

instrs.SetLeader (allAttachments);

/*--------------------------------------------------------------------*\
Create the note
\*--------------------------------------------------------------------*/
DetailNoteItem note =
(DetailNoteItem) drawing.CreateDetailItem (instrs);

/*--------------------------------------------------------------------*\
Display the note
\*--------------------------------------------------------------------*/
note.Show ();
}
}

Detail Notes Information


Methods Introduced:

• pfcDetail.DetailNoteItem.GetInstructions
• pfcDetail.DetailNoteItem.GetSymbolDef
• pfcDetail.DetailNoteItem.GetLineEnvelope
• pfcDetail.DetailNoteItem.GetModelReference
The method pfcDetail.DetailNoteItem.GetInstructions returns
an instructions data object that describes how to construct the
detail note item. This method takes a ProBoolean argument,
GiveParametersAsNames, which determines whether symbolic
representations of parameters and drawing properties in the note
text should be displayed, or the actual text seen by the user should
be displayed.

Drawings 10 - 61
Note: Pro/ENGINEER does not resolve and replace symbolic
callouts for notes which are not displayed. Therefore, if
the note is not displayed or is hidden in a layer, the text
retrieved may contain symbolic callouts, even when
GiveParametersAsNames is false.
The method pfcDetail.DetailNoteItem.GetSymbolDef returns
the symbol definition that contains the note. The method returns a
null value if the note is not a part of a symbol definition.

The method pfcDetail.DetailNoteItem.GetLineEnvelope


determines the screen coordinates of the envelope around the detail
note. This envelope is defined by four points. The following figure
illustrates how the point order is determined.

0 1
Detail NoteText

2 3

The ordering of the points is maintained even if the notes are


mirrored or are at an angle.

The method pfcDetail.DetailNoteItem.GetModelReference


returns the model referenced by the parameterized text in a note.
The model is referenced based on the line number and the text
index where the parameterized text appears.

Details Notes Operations


Methods Introduced:

• pfcDetail.DetailNoteItem.Draw
• pfcDetail.DetailNoteItem.Show
• pfcDetail.DetailNoteItem.Erase
• pfcDetail.DetailNoteItem.Remove
• pfcDetail.DetailNoteItem.Modify
The method pfcDetail.DetailNoteItem.Draw temporarily draws
a detail note item, so that it is removed during the next draft
regeneration.

The method pfcDetail.DetailNoteItem.Show displays the note


item, such that it is repainted during the next draft regeneration.

10 - 62 J-Link User’s Guide


The method pfcDetail.DetailNoteItem.Erase undraws a detail
note item temporarily, so that it is redrawn during the next draft
regeneration.

The method pfcDetail.DetailNoteItem.Remove undraws a


detail note item permanently, so that it is not redrawn during the
next draft regeneration.

The method pfcDetail.DetailNoteItem.Modify modifies the


definition of an existing detail note item based on the instructions
object that describes the new detail note item.

Drawings
Detail Groups
A detail group in J-Link is represented by the interface
com.ptc.pfc.pfcDetail.DetailGroupItem. It is a child of the
DetailItem interface.

The interface com.ptc.pfc.pfcDetail.DetailGroupInstructions


contains information used to describe a detail group item.

Instructions
Method Introduced:

• pfcDetail.pfcDetail.DetailGroupInstructions_Create
• pfcDetail.DetailGroupInstructions.GetName
• pfcDetail.DetailGroupInstructions.SetName
• pfcDetail.DetailGroupInstructions.GetElements
• pfcDetail.DetailGroupInstructions.SetElements
• pfcDetail.DetailGroupInstructions.GetIsDisplayed
• pfcDetail.DetailGroupInstructions.SetIsDisplayed
The method
pfcDetail.pfcDetail.DetailGroupInstructions_Create creates
an instruction data object that describes how to construct a detail
group for use in pfcDetail.DetailItemOwner.CreateDetailItem
and pfcDetail.DetailGroupItem.Modify.

Note: Changes to the values of a


pfcDetail.DetailGroupInstructions object do not
take effect until that instructions object is used to
modify the group using
pfcDetail.DetailGroupItem.Modify.

Drawings 10 - 63
The method pfcDetail.DetailGroupInstructions.GetName
returns the name of the detail group.

The method pfcDetail.DetailGroupInstructions.SetName sets


the name of the detail group.

The method pfcDetail.DetailGroupInstructions.GetElements


returns the sequence of the detail items(notes, groups and entities)
contained in the group.

The method pfcDetail.DetailGroupInstructions.SetElements


sets the sequence of the detail items contained in the group.

The method
pfcDetail.DetailGroupInstructions.GetIsDisplayed returns
whether the detail group is displayed in the drawing.

The method
pfcDetail.DetailGroupInstructions.SetIsDisplayed toggles
the display of the detail group.

Detail Groups Information


Method Introduced:

• pfcDetail.DetailGroupItem.GetInstructions
The method pfcDetail.DetailGroupItem.GetInstructions gets a
data object that describes how to construct a detail group item. The
method returns the data object describing the detail group item.

Detail Groups Operations


Methods Introduced:

• pfcDetail.DetailGroupItem.Draw
• pfcDetail.DetailGroupItem.Erase
• pfcDetail.DetailGroupItem.Modify
The method pfcDetail.DetailGroupItem.Draw temporarily
draws a detail group item, so that it is removed during the next
draft generation.

The method pfcDetail.DetailGroupItem.Erase temporarily


undraws a detail group item, so that it is redrawn during the next
draft generation.

The method pfcDetail.DetailGroupItem.Modify changes the


definition of a detail group item based on the data object that
describes how to construct a detail group item.

10 - 64 J-Link User’s Guide


Example: Create New Group of Items

The following example creates a group from a set of selected detail


items.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;

Drawings
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;
public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : createGroup()
PURPOSE : Command to create a new group with selected items
\*====================================================================*/
public static void createGroup (String groupName)
throws com.ptc.cipjava.jxthrowable
{
/*--------------------------------------------------------------------*\
Select notes, draft entities, symbol instances
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
SelectionOptions selOptions =
pfcSelect.SelectionOptions_Create
("any_note,draft_ent,dtl_symbol");
Selections selections = session.Select (selOptions, null);

if (selections == null || selections.getarraysize() == 0)


return;

/*--------------------------------------------------------------------*\
Allocate and fill a sequence with the detail item handles
\*--------------------------------------------------------------------*/
DetailItems items = DetailItems.create();

Drawings 10 - 65
for (int i = 0; i < selections.getarraysize(); i ++)
{
items.insert (items.getarraysize(),
(DetailItem)selections.get (i).GetSelItem());
}

/*--------------------------------------------------------------------*\
Get the drawing which will own the group
\*--------------------------------------------------------------------*/
Drawing drawing = (Drawing)items.get (0).GetDBParent();

/*--------------------------------------------------------------------*\
Allocate group data and set the group items
\*--------------------------------------------------------------------*/
DetailGroupInstructions instrs =
pfcDetail.DetailGroupInstructions_Create (groupName, items);

/*--------------------------------------------------------------------*\
Create the group
\*--------------------------------------------------------------------*/
drawing.CreateDetailItem (instrs);
}
}

Detail Symbols
Detail Symbol Definitions
A detail symbol definition in J-Link is represented by the interface
pfcDetail.DetailSymbolDefItem. It is a child of the DetailItem
interface.

The interface pfcDetail.DetailSymbolDefInstructions contains


information that describes a symbol definition. It can be used when
creating symbol definition entities or while accessing existing
symbol definition entities.

Instructions
Methods Introduced:

• pfcDetail.pfcDetail.DetailSymbolDefInstructions_Create
• pfcDetail.DetailSymbolDefInstructions.GetSymbolHeight
• pfcDetail.DetailSymbolDefInstructions.SetSymbolHeight
• pfcDetail.DetailSymbolDefInstructions.GetHasElbow

10 - 66 J-Link User’s Guide


• pfcDetail.DetailSymbolDefInstructions.SetHasElbow
• pfcDetail.DetailSymbolDefInstructions.GetIsTextAngleFixed
• pfcDetail.DetailSymbolDefInstructions.SetIsTextAngleFixed
• pfcDetail.DetailSymbolDefInstructions.GetScaledHeight
• pfcDetail.DetailSymbolDefInstructions.GetAttachments
• pfcDetail.DetailSymbolDefInstructions.SetAttachments
• pfcDetail.DetailSymbolDefInstructions.GetFullPath

Drawings
• pfcDetail.DetailSymbolDefInstructions.SetFullPath
• pfcDetail.DetailSymbolDefInstructions.GetReference
• pfcDetail.DetailSymbolDefInstructions.SetReference
The method
pfcDetail.pfcDetail.DetailSymbolDefInstructions_Create
creates an instruction data object that describes how to create a
symbol definition based on the path and name of the symbol
definition. The instructions object is passed to the methods
pfcDetailItemOwner.CreateDetailItem and
pfcDetailSymbolDefItem.Modify.

Note: Changes to the values of a


pfcDetail.DetailSymbolDefInstructions object do
not take effect until that instructions object is used to
modify the definition using the method
pfcDetail.DetailSymbolDefItem.Modify.
The method
pfcDetail.DetailSymbolDefInstructions.GetSymbolHeight
returns the value of the height type for the symbol definition. The
symbol definition height options are as follows:

• SYMDEF_FIXED—Symbol height is fixed.


• SYMDEF_VARIABLE—Symbol height is variable.
• SYMDEF_RELATIVE_TO_TEXT—Symbol height is
determined relative to the text height.
The method
pfcDetail.DetailSymbolDefInstructions.SetSymbolHeight
sets the value of the height type for the symbol definition.

The method
pfcDetail.DetailSymbolDefInstructions.GetHasElbow
determines whether the symbol definition includes an elbow.

Drawings 10 - 67
The method
pfcDetail.DetailSymbolDefInstructions.SetHasElbow decides
if the symbol definition should include an elbow.

The method
pfcDetail.DetailSymbolDefInstructions.GetIsTextAngleFixe
d returns whether the text of the angle is fixed.

The method
pfcDetail.DetailSymbolDefInstructions.SetIsTextAngleFixe
d toggles the requirement that the text angle be fixed.

The method
pfcDetail.DetailSymbolDefInstructions.GetScaledHeight
returns the height of the symbol definition in inches.

The method
pfcDetail.DetailSymbolDefInstructions.GetAttachments
returns the value of the sequence of the possible instance
attachment points for the symbol definition.

The method
pfcDetail.DetailSymbolDefInstructions.SetAttachments sets
the value of the sequence of the possible instance attachment points
for the symbol definition.

The method
pfcDetail.DetailSymbolDefInstructions.GetFullPath returns
the value of the complete path of the symbol definition file.

The method
pfcDetail.DetailSymbolDefInstructions.SetFullPath sets the
value of the complete path of the symbol definition path.

The method
pfcDetail.DetailSymbolDefInstructions.GetReference
returns the text reference information for the symbol definition. It
returns a null value if the text reference is not used. The text
reference identifies the text item used for a symbol definition which
has a height type of SYMDEF_TEXT_RELATED.

The method
pfcDetail.DetailSymbolDefInstructions.SetReference sets
the text reference information for the symbol definition.

Detail Symbol Definitions Information


Methods Introduced:

• pfcDetail.DetailSymbolDefItem.ListDetailItems

10 - 68 J-Link User’s Guide


• pfcDetail.DetailSymbolDefItem.GetInstructions
The method pfcDetail.DetailSymbolDefItem.ListDetailItems
lists the detail items in the symbol definition based on the type of
the detail item.

The method pfcDetail.DetailSymbolDefItem.GetInstructions


returns an instruction data object that describes how to construct
the symbol definition.

Detail Symbol Definitions Operations

Drawings
Methods Introduced:

• pfcDetail.DetailSymbolDefItem.CreateDetailItem
• pfcDetail.DetailSymbolDefItem.Modify
The method
pfcDetail.DetailSymbolDefItem.CreateDetailItem creates a
detail item in the symbol definition based on the instructions data
object. The method returns the detail item in the symbol definition.

The method pfcDetail.DetailSymbolDefItem.Modify modifies a


symbol definition based on the instructions data object that
contains information about the modifications to be made to the
symbol definition.

Retrieving Symbol Definitions


Methods Introduced:

• pfcDetail.DetailItemOwner.RetrieveSymbolDefinition
The method
pfcDetail.DetailItemOwner.RetrieveSymbolDefinition
retrieves a symbol definition from the disk.

The input parameters of this method are:

• FileName—Name of the symbol definition file


• FilePath—Path to the symbol definition file. It is relative to the
path specified by the option "pro_symbol_dir" in the
configuration file. A null value indicates that the function
should search the current directory.
• Version—Numerical version of the symbol definition file. A null
value retrieves the latest version.
• UpdateUnconditionally—True if Pro/ENGINEER should
update existing instances of this symbol definition, or false to
quit the operation if the definition exists in the model.

Drawings 10 - 69
The method returns the retrieved symbol definition.

Example : Create Symbol Definition

The following example creates a symbol definition which contains


four line entities forming a box, a note at the middle of the box, and
a free attachment.
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;

public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : createBoxSymdef()
PURPOSE : To create a symbol definition with the specified name,
containing a box and a note with the specified text
\*====================================================================*/
public static void createBoxSymdef (String name, String text)
throws com.ptc.cipjava.jxthrowable
{
/*-------------------------------------------------------------------*\
Get the current drawing & its background view
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing)model;


/*--------------------------------------------------------------------*\

10 - 70 J-Link User’s Guide


Allocate symbol definition description data
\*--------------------------------------------------------------------*/
DetailSymbolDefInstructions instrs =
pfcDetail.DetailSymbolDefInstructions_Create (name);
instrs.SetSymbolHeight(SymbolDefHeight.SYMDEF_FIXED);

/*--------------------------------------------------------------------*\
Set a FREE attachment at the origin of the symbol
\*--------------------------------------------------------------------*/
Point3D origin = Point3D.create();
origin.set (0, 0.0);

Drawings
origin.set (1, 0.0);
origin.set (2, 0.0);

SymbolDefAttachment attachment =
pfcDetail.SymbolDefAttachment_Create
(SymbolDefAttachmentType.SYMDEFATTACH_FREE, origin);

SymbolDefAttachments attachments = SymbolDefAttachments.create();


attachments.insert (0, attachment);
instrs.SetAttachments (attachments);

/*--------------------------------------------------------------------*\
Create the empty symbol
\*--------------------------------------------------------------------*/
DetailSymbolDefItem symDef =
(DetailSymbolDefItem)drawing.CreateDetailItem (instrs);

/*--------------------------------------------------------------------*\
Calculate the default text height for the symbol based on the drawing
text height and transform
\*--------------------------------------------------------------------*/
double textHeight = drawing.GetTextHeight();
Transform3D matrix =
drawing.GetSheetTransform (drawing.GetCurrentSheetNumber());

double defHeight = textHeight / matrix.GetMatrix().get (0, 0);

/*--------------------------------------------------------------------*\
Create four lines to form a box, twice the default text height,
around the origin
\*--------------------------------------------------------------------*/
Point3D end1 = Point3D.create ();
Point3D end2 = Point3D.create ();
end1.set (0, -defHeight);
end1.set (1, -defHeight);
end1.set (2, 0.0);
end2.set (0, defHeight);
end2.set (1, -defHeight);
end2.set (2, 0.0);

Drawings 10 - 71
ColorRGB colorRGB =
session.GetRGBFromStdColor (StdColor.COLOR_ERROR);

addLine (symDef, end1, end2, colorRGB);

end2.set (0, -defHeight);


end2.set (1, defHeight);

addLine (symDef, end1, end2, colorRGB);

end1.set (0, defHeight);


end1.set (1, defHeight);

addLine (symDef, end1, end2, colorRGB);

end2.set (0, defHeight);


end2.set (1, -defHeight);

addLine (symDef, end1, end2, colorRGB);

/*--------------------------------------------------------------------*\
Add a note with the specified text at the origin
\*--------------------------------------------------------------------*/
addNote (symDef, origin, text);
}

/*====================================================================*\
FUNCTION : addNote()
PURPOSE : To add a note with the specified text and location to a
symbol definition.
\*====================================================================*/
private static void addNote(DetailSymbolDefItem symDef,
Point3D location,
String text)
throws com.ptc.cipjava.jxthrowable
{

/*--------------------------------------------------------------------*\
Allocate a text item, and set its properties
\*--------------------------------------------------------------------*/
DetailText dText = pfcDetail.DetailText_Create (text);

/*--------------------------------------------------------------------*\
Allocate a new text line, and add the text item to it
/*--------------------------------------------------------------------*/
DetailTexts texts = DetailTexts.create();
texts.insert (0, dText);

DetailTextLine textLine =
pfcDetail.DetailTextLine_Create (texts);

10 - 72 J-Link User’s Guide


DetailTextLines textLines = DetailTextLines.create();
textLines.insert (0, textLine);

/*--------------------------------------------------------------------*\
Set the location of the note text
\*--------------------------------------------------------------------*/
FreeAttachment position =
pfcDetail.FreeAttachment_Create (location);
;
/*--------------------------------------------------------------------*\
Set the attachment structure

Drawings
\*--------------------------------------------------------------------*/
DetailLeaders allAttachments = pfcDetail.DetailLeaders_Create ();
allAttachments.SetItemAttachment (position);

/*--------------------------------------------------------------------*\
Allocate a note description, and set its properties
\*--------------------------------------------------------------------*/
DetailNoteInstructions instrs =
pfcDetail.DetailNoteInstructions_Create (textLines);

instrs.SetLeader (allAttachments);
instrs.SetHorizontal (HorizontalJustification.H_JUSTIFY_CENTER);
instrs.SetVertical (VerticalJustification.V_JUSTIFY_MIDDLE);

/*--------------------------------------------------------------------*\
Create the note
\*--------------------------------------------------------------------*/
symDef.CreateDetailItem (instrs);
}

/*====================================================================*\
FUNCTION : addLine()
PURPOSE : Utility to add a line entity to a symbol definition
\*====================================================================*/
private static void addLine (DetailSymbolDefItem symDef,
Point3D start,
Point3D end,
ColorRGB color)
throws com.ptc.cipjava.jxthrowable
{

/*--------------------------------------------------------------------*\
Allocate and initialize a curve descriptor
\*--------------------------------------------------------------------*/
LineDescriptor geom =
pfcGeometry.LineDescriptor_Create (start, end);

/*--------------------------------------------------------------------*\
Allocate data for the draft entity
\*--------------------------------------------------------------------*/

Drawings 10 - 73
DetailEntityInstructions instrs =
pfcDetail.DetailEntityInstructions_Create (geom,
null);
instrs.SetColor(color);

/*--------------------------------------------------------------------*\
Create the entity
\*--------------------------------------------------------------------*/
symDef.CreateDetailItem (instrs);

}
}

Detail Symbol Instances


A detail symbol instance in J-Link is represented by the interface
pfcDetail.DetailSymbolInstItem. It is a child of the DetailItem
interface.

The interface pfcDetail.DetailSymbolInstInstructions contains


information that describes a symbol instance. It can be used when
creating symbol instances and while accessing existing groups.

Instructions
Methods Introduced:

• pfcDetail.pfcDetail.DetailSymbolInstInstructions_Create
• pfcDetail.DetailSymbolInstInstructions.GetIsDisplayed
• pfcDetail.DetailSymbolInstInstructions.SetIsDisplayed
• pfcDetail.DetailSymbolInstInstructions.GetColor
• pfcDetail.DetailSymbolInstInstructions.SetColor
• pfcDetail.DetailSymbolInstInstructions.GetSymbolDef
• pfcDetail.DetailSymbolInstInstructions.SetSymbolDef
• pfcDetail.DetailSymbolInstInstructions.GetAttachOnDefType
• pfcDetail.DetailSymbolInstInstructions.SetAttachOnDefType
• pfcDetail.DetailSymbolInstInstructions.GetDefAttachment
• pfcDetail.DetailSymbolInstInstructions.SetDefAttachment
• pfcDetail.DetailSymbolInstInstructions.GetInstAttachment
• pfcDetail.DetailSymbolInstInstructions.SetInstAttachment
• pfcDetail.DetailSymbolInstInstructions.GetAngle
• pfcDetail.DetailSymbolInstInstructions.SetAngle

10 - 74 J-Link User’s Guide


• pfcDetail.DetailSymbolInstInstructions.GetScaledHeight
• pfcDetail.DetailSymbolInstInstructions.SetScaledHeight
• pfcDetail.DetailSymbolInstInstructions.GetTextValues
• pfcDetail.DetailSymbolInstInstructions.SetTextValues
• pfcDetail.DetailSymbolInstInstructions.GetCurrentTransform
• pfcDetail.DetailSymbolInstInstructions.SetGroups
The method

Drawings
pfcDetail.pfcDetail.DetailSymbolInstInstructions_Create
creates a data object that contains information about the placement
of a symbol instance.

Note: Changes to the values of a


pfcDetail.DetailSymbolInstInstructions object do
not take effect until that instructions object is used to
modify the instance using
pfcDetail.DetailSymbolInstItem.Modify.
The method
pfcDetail.DetailSymbolInstInstructions.GetIsDisplayed
returns a value that specifies whether the instance of the symbol is
displayed.

Use the method


pfcDetail.DetailSymbolInstInstructions.SetIsDisplayed to
switch the display of the symbol instance.

The method
pfcDetail.DetailSymbolInstInstructions.GetColor returns the
color of the detail symbol instance. A null value indicates that the
default drawing color is used.

The method pfcDetail.DetailSymbolInstInstructions.SetColor


sets the color of the detail symbol instance. Pass null to use the
default drawing color.

The method
pfcDetail.DetailSymbolInstInstructions.GetSymbolDef
returns the symbol definition used for the instance.

The method
pfcDetail.DetailSymbolInstInstructions.SetSymbolDef sets
the value of the symbol definition used for the instance.

Drawings 10 - 75
The method
pfcDetail.DetailSymbolInstInstructions.GetAttachOnDefTy
pe returns the attachment type of the instance. The method
returns a null value if the attachment represents a free attachment.
The attachment options are as follows:

• SYMDEFATTACH_FREE—Attachment on a free point.


• SYMDEFATTACH_LEFT_LEADER—Attachment via a leader
on the left side of the symbol.
• SYMDEFATTACH_RIGHT_LEADER— Attachment via a
leader on the right side of the symbol.
• SYMDEFATTACH_RADIAL_LEADER—Attachment via a
leader at a radial location.
• SYMDEFATTACH_ON_ITEM—Attachment on an item in the
symbol definition.
• SYMDEFATTACH_NORMAL_TO_ITEM—Attachment normal
to an item in the symbol definition.
The method
pfcDetail.DetailSymbolInstInstructions.SetAttachOnDefTy
pe sets the attachment type of the instance.

The method
pfcDetail.DetailSymbolInstInstructions.GetDefAttachment
returns the value that represents the way in which the instance is
attached to the symbol definition.

The method
pfcDetail.DetailSymbolInstInstructions.SetDefAttachment
specifies the way in which the instance is attached to the symbol
definition.

The method
pfcDetail.DetailSymbolInstInstructions.GetInstAttachment
returns the value of the attachment of the instance that includes
location and leader information.

The method
pfcDetail.DetailSymbolInstInstructions.SetInstAttachment
sets value of the attachment of the instance.

The method
pfcDetail.DetailSymbolInstInstructions.GetAngle returns the
value of the angle at which the instance is placed. The method
returns a null value if the value of the angle is 0 degrees.

10 - 76 J-Link User’s Guide


The method pfcDetail.DetailSymbolInstInstructions.SetAngle
sets the value of the angle at which the instance is placed.

The method
pfcDetail.DetailSymbolInstInstructions.GetScaledHeight
returns the height of the symbol instance in the owner drawing or
model coordinates. This value is consistent with the height value
shown for a symbol instance in the Properties dialog box in the
Pro/ENGINEER User Interface.

Note: The scaled height obtained using the above method is

Drawings
partially based on the properties of the symbol
definition assigned using the method
pfcDetail.DetailSymbolInstInstructions.GetSymb
olDef. Changing the symbol definition may change the
calculated value for the scaled height.
The method
pfcDetail.DetailSymbolInstInstructions.SetScaledHeight
sets the value of the height of the symbol instance in the owner
drawing or model coordinates.

The method
pfcDetail.DetailSymbolInstInstructions.GetTextValues
returns the sequence of variant text values used while placing the
symbol instance.

The method
pfcDetail.DetailSymbolInstInstructions.SetTextValues sets
the sequence of variant text values while placing the symbol
instance.

The method
pfcDetail.DetailSymbolInstInstructions.GetCurrentTransfo
rm returns the coordinate transformation matrix to place the
symbol instance.

The method
pfcDetail.DetailSymbolInstInstructions.SetGroups sets the
DetailSymbolGroupOption argument for displaying symbol groups
in the symbol instance. This argument can have the following
values:

• DETAIL_SYMBOL_GROUP_INTERACTIVE—Symbol groups
are interactively selected for display. This is the default value
in the GRAPHICS mode.
• DETAIL_SYMBOL_GROUP_ALL—All non-exclusive symbol
groups are included for display.

Drawings 10 - 77
• DETAIL_SYMBOL_GROUP_NONE—None of the
non-exclusive symbol groups are included for display.
• DETAIL_SYMBOL_GROUP_CUSTOM—Symbol groups
specified by the application are displayed.
Refer to the section Detail Symbol Groups for more information on
detail symbol groups.

Detail Symbol Instances Information


Method Introduced:

• pfcDetail.DetailSymbolInstItem.GetInstructions
The method pfcDetail.DetailSymbolInstItem.GetInstructions
returns an instructions data object that describes how to construct
a symbol instance. This method takes a ProBoolean argument,
GiveParametersAsNames, which determines whether symbolic
representations of parameters and drawing properties in the
symbol instance should be displayed, or the actual text seen by the
user should be displayed.

Detail Symbol Instances Operations


Methods Introduced:

• pfcDetail.DetailSymbolInstItem.Draw
• pfcDetail.DetailSymbolInstItem.Erase
• pfcDetail.DetailSymbolInstItem.Show
• pfcDetail.DetailSymbolInstItem.Remove
• pfcDetail.DetailSymbolInstItem.Modify
The method pfcDetail.DetailSymbolInstItem.Draw draws a
symbol instance temporarily to be removed on the next draft
regeneration.

The method pfcDetail.DetailSymbolInstItem.Erase undraws a


symbol instance temporarily from the display to be redrawn on the
next draft generation.

The method pfcDetail.DetailSymbolInstItem.Show displays a


symbol instance to be repainted on the next draft regeneration.

The method pfcDetail.DetailSymbolInstItem.Remove deletes a


symbol instance permanently.

10 - 78 J-Link User’s Guide


The method pfcDetail.DetailSymbolInstItem.Modify modifies a
symbol instance based on the instructions data object that contains
information about the modifications to be made to the symbol
instance.

Example: Create a Free Instance of Symbol Definition


import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcDetail.*;

Drawings
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcTable.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSheet.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcDrawingFormat.*;
import com.ptc.pfc.pfcDimension2D.*;
import java.lang.reflect.Array;
import java.text.*;
import java.io.*;
public class pfcDrawingExamples {

/*====================================================================*\
FUNCTION : placeSymInst()
PURPOSE : Place a CG symbol with no leaders at a specified location
\*====================================================================*/
public static void placeInst() throws com.ptc.cipjava.jxthrowable
{
/*--------------------------------------------------------------------*\
Get the current drawing
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;

/*--------------------------------------------------------------------*\
Retrieve the symbol definition from the system
\*--------------------------------------------------------------------*/
DetailSymbolDefItem symDef =

Drawings 10 - 79
drawing.RetrieveSymbolDefinition ("CG", null, null, null);

/*--------------------------------------------------------------------*\
Select the locations for the symbol
\*--------------------------------------------------------------------*/

boolean stop = false;


Point3Ds points = Point3Ds.create ();
while (!stop)
{
MouseStatus mouse = session.UIGetNextMousePick (null);
if (mouse.GetSelectedButton() ==
MouseButton.MOUSE_BTN_LEFT)
{
points.insert (0, mouse.GetPosition());
}
else
stop = true;
}

/*--------------------------------------------------------------------*\
Allocate the symbol instance decription
\*--------------------------------------------------------------------*/
DetailSymbolInstInstructions instrs =
pfcDetail.DetailSymbolInstInstructions_Create (symDef);

for (int i = 0; i < points.getarraysize(); i++)


{
/*--------------------------------------------------------------------*\
Set the location of the note text
\*--------------------------------------------------------------------*/
FreeAttachment position =
pfcDetail.FreeAttachment_Create (points.get (i));

/*--------------------------------------------------------------------*\
Set the attachment structure
\*--------------------------------------------------------------------*/
DetailLeaders allAttachments =
pfcDetail.DetailLeaders_Create ();
allAttachments.SetItemAttachment (position);

instrs.SetInstAttachment (allAttachments);
/*--------------------------------------------------------------------*\
Create and display the symbol
\*--------------------------------------------------------------------*/
DetailSymbolInstItem symInst =
(DetailSymbolInstItem) drawing.CreateDetailItem (instrs);
symInst.Show();
}
}
}

10 - 80 J-Link User’s Guide


Example: Create a Free Instance of a Symbol Definition
with drawing unit heights, variable text and groups
/*====================================================================*\
FUNCTION : placeDetailSymbol()
PURPOSE : Creates a free instance of a symbol definition with drawing
unit heights, variable text and groups. A symbol is placed
with no leaders at a specified location.
\*====================================================================*/
public static void placeDetailSymbol(String groupName,
String variableText ,

Drawings
double height)
throws com.ptc.cipjava.jxthrowable
{

/*--------------------------------------------------------------------*\
Get the current drawing
\*--------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();

Model model = session.GetCurrentModel();

if (model.GetType() != ModelType.MDL_DRAWING)
throw new RuntimeException ("Current model is not a drawing");

Drawing drawing = (Drawing) model;

/*--------------------------------------------------------------------*\
Retrieve the symbol definition from the system
\*--------------------------------------------------------------------*/
DetailSymbolDefItem symDef =
drawing.RetrieveSymbolDefinition ("detail_symbol_example", "./", null,
null);

/*--------------------------------------------------------------------*\
Select the locations for the symbol
\*--------------------------------------------------------------------*/

boolean stop = false;


Point3D point = Point3D.create ();
while (!stop)
{
MouseStatus mouse = session.UIGetNextMousePick (null);
if (mouse.GetSelectedButton() ==
MouseButton.MOUSE_BTN_LEFT)
{
point = mouse.GetPosition();
stop = true;
}
}

Drawings 10 - 81
/*--------------------------------------------------------------------*\
Allocate the symbol instance decription
\*--------------------------------------------------------------------*/
DetailSymbolInstInstructions instrs =
pfcDetail.DetailSymbolInstInstructions_Create (symDef);

/*--------------------------------------------------------------------*\
Set the symbol height in drawing units
\*--------------------------------------------------------------------*/
if (height > 0)
{
instrs.SetScaledHeight(new Double(height));
}

/*--------------------------------------------------------------------*\
Set text to the variable text in the symbol. This will be displayed
instead of the text defined when creating the symbol
\*--------------------------------------------------------------------*/
DetailVariantTexts varTexts;
DetailVariantText varText;

if ((variableText != null) || (!variableText.equals("VAR_TEXT")))


{
varText = pfcDetail.DetailVariantText_Create("VAR_TEXT" , variableText );
varTexts = DetailVariantTexts.create();
varTexts.insert(0,varText);

instrs.SetTextValues(varTexts);
}

/*--------------------------------------------------------------------*\
Display the groups in symbol depending on group name
\*--------------------------------------------------------------------*/
DetailSymbolGroups groups, allGroups;
DetailSymbolGroup group = null;

if (groupName.equals("ALL"))
instrs.SetGroups (DetailSymbolGroupOption.DETAIL_SYMBOL_GROUP_ALL ,
null);
else if (groupName.equals("NONE"))
instrs.SetGroups (DetailSymbolGroupOption.DETAIL_SYMBOL_GROUP_NONE ,
null);
else
{
allGroups = instrs.GetSymbolDef().ListSubgroups();
group = getGroup(allGroups , groupName );
if (group != null)
{
groups = DetailSymbolGroups.create();
groups.insert(0, group);
instrs.SetGroups (DetailSymbolGroupOption.DETAIL_SYMBOL_GROUP_CUSTOM ,

10 - 82 J-Link User’s Guide


groups);
}
}

/*--------------------------------------------------------------------*\
Set the location of the note text
\*--------------------------------------------------------------------*/
FreeAttachment position = pfcDetail.FreeAttachment_Create (point);

/*--------------------------------------------------------------------*\
Set the attachment structure

Drawings
\*--------------------------------------------------------------------*/
DetailLeaders allAttachments =
pfcDetail.DetailLeaders_Create ();
allAttachments.SetItemAttachment (position);

instrs.SetInstAttachment (allAttachments);

/*--------------------------------------------------------------------*\
Create and display the symbol
\*--------------------------------------------------------------------*/
DetailSymbolInstItem symInst =
(DetailSymbolInstItem) drawing.CreateDetailItem (instrs);
symInst.Show();

/*====================================================================*\
FUNCTION : getGroup()
PURPOSE : Return the specific group depending on the group name.
\*====================================================================*/
public static DetailSymbolGroup getGroup(DetailSymbolGroups groups,
String groupName)
throws com.ptc.cipjava.jxthrowable
{
DetailSymbolGroup group = null;
DetailSymbolGroupInstructions groupInstrs;
int i;

if (groups.getarraysize() <=0 )
{
return null;
}

/*--------------------------------------------------------------------*\
Loop through all the groups in the symbol and return the group with
the selected name
\*--------------------------------------------------------------------*/
for(i=0;i<groups.getarraysize();i++)
{
group = groups.get(i);

Drawings 10 - 83
groupInstrs = group.GetInstructions();

if (groupInstrs.GetName().equals(groupName))
return group;
}
return null;
}

Detail Symbol Groups


A detail symbol group in J-Link is represented by the interface
pfcDetail.DetailSymbolGroup. It is a child of the
pfcObject.Object interface. A detail symbol group is accessible
only as a part of the contents of a detail symbol definition or
instance.

The interface pfcDetail.DetailSymbolGroupInstructions


contains information that describes a symbol group. It can be used
when creating new symbol groups, or while accessing or modifying
existing groups.

Instructions
Methods Introduced:

• pfcDetail.pfcDetail.DetailSymbolGroupInstructions_Create
• pfcDetail.DetailSymbolGroupInstructions.GetItems
• pfcDetail.DetailSymbolGroupInstructions.SetItems
• pfcDetail.DetailSymbolGroupInstructions.GetName
• pfcDetail.DetailSymbolGroupInstructions.SetName
The method
pfcDetail.pfcDetail.DetailSymbolGroupInstructions_Create
creates the pfcDetail.DetailSymbolGroupInstructions data
object that stores the name of the symbol group and the list of detail
items to be included in the symbol group.

Note: Changes to the values of the


pfcDetail.DetailSymbolGroupInstructions data
object do not take effect until this object is used to
modify the instance using the method
pfcDetail.DetailSymbolGroup.Modify.
The method
pfcDetail.DetailSymbolGroupInstructions.GetItems returns
the list of detail items included in the symbol group.

10 - 84 J-Link User’s Guide


The method
pfcDetail.DetailSymbolGroupInstructions.SetItems sets the
list of detail items to be included in the symbol group.

The method
pfcDetail.DetailSymbolGroupInstructions.GetName returns
the name of the symbol group.

The method
pfcDetail.DetailSymbolGroupInstructions.SetName assigns
the name of the symbol group.

Drawings
Detail Symbol Group Information
Methods Introduced:

• pfcDetail.DetailSymbolGroup.GetInstructions
• pfcDetail.DetailSymbolGroup.GetParentGroup
• pfcDetail.DetailSymbolGroup.GetParentDefinition
• pfcDetail.DetailSymbolGroup.ListChildren
• pfcDetail.DetailSymbolDefItem.ListSubgroups
• pfcDetail.DetailSymbolDefItem.IsSubgroupLevelExclusive
• pfcDetail.DetailSymbolInstItem.ListGroups
The method pfcDetail.DetailSymbolGroup.GetInstructions
returns the pfcDetail.DetailSymbolGroupInstructions data
object that describes how to construct a symbol group.

The method pfcDetail.DetailSymbolGroup.GetParentGroup


returns the parent symbol group to which a given symbol group
belongs.

The method
pfcDetail.DetailSymbolGroup.GetParentDefinition returns
the symbol definition of a given symbol group.

The method pfcDetail.DetailSymbolGroup.ListChildren lists


the subgroups of a given symbol group.

The method pfcDetail.DetailSymbolDefItem.ListSubgroups


lists the subgroups of a given symbol group stored in the symbol
definition at the indicated level.

Drawings 10 - 85
The method
pfcDetail.DetailSymbolDefItem.IsSubgroupLevelExclusive
identifies if the subgroups of a given symbol group stored in the
symbol definition at the indicated level are exclusive or
independent. If groups are exclusive, only one of the groups at this
level can be active in the model at any time. If groups are
independent, any number of groups can be active.

The method pfcDetail.DetailSymbolInstItem.ListGroups lists


the symbol groups included in a symbol instance. The
SymbolGroupFilter argument determines the types of symbol
groups that can be listed. It takes the following values:

• DTLSYMINST_ALL_GROUPS—Retrieves all groups in the


definition of the symbol instance.
• DTLSYMINST_ACTIVE_GROUPS—Retrieves only those
groups that are actively shown in the symbol instance.
• DTLSYMINST_INACTIVE_GROUPS—Retrieves only those
groups that are not shown in the symbol instance.

Detail Symbol Group Operations


Methods Introduced:

• pfcDetail.DetailSymbolGroup.Delete
• pfcDetail.DetailSymbolGroup.Modify
• pfcDetail.DetailSymbolDefItem.CreateSubgroup
• pfcDetail.DetailSymbolDefItem.SetSubgroupLevelExclusive
• pfcDetail.DetailSymbolDefItem.SetSubgroupLevelIndependent
The method pfcDetail.DetailSymbolGroup.Delete deletes the
specified symbol group from the symbol definition. This method
does not delete the entities contained in the group.

The method pfcDetail.DetailSymbolGroup.Modify modifies the


specified symbol group based on the
pfcDetail.DetailSymbolGroupInstructions data object that
contains information about the modifications that can be made to
the symbol group.

The method pfcDetail.DetailSymbolDefItem.CreateSubgroup


creates a new subgroup in the symbol definition at the indicated
level below the parent group.

10 - 86 J-Link User’s Guide


The method
pfcDetail.DetailSymbolDefItem.SetSubgroupLevelExclusive
makes the subgroups of a symbol group exclusive at the indicated
level in the symbol definition.

Note: After you set the subgroups of a symbol group as


exclusive, only one of the groups at the indicated level
can be active in the model at any time.
The method
pfcDetail.DetailSymbolDefItem.SetSubgroupLevelIndepend

Drawings
ent makes the subgroups of a symbol group independent at the
indicated level in the symbol definition.

Note: After you set the subgroups of a symbol group as


independent, any number of groups at the indicated
level can be active in the model at any time.

Detail Attachments
A detail attachment in J-Link is represented by the interface
pfcDetail.Attachment. It is used for the following tasks:

• The way in which a drawing note or a symbol instance is placed


in a drawing.
• The way in which a leader on a drawing note or symbol instance
is attached.

Method Introduced:

• pfcDetail.Attachment.GetType
The method pfcDetail.Attachment.GetType returns the
pfcDetail.AttachmentType object containing the types of detail
attachments. The detail attachment types are as follows:

• ATTACH_FREE—The attachment is at a free point possibly


with respect to a given drawing view.
• ATTACH_PARAMETRIC—The attachment is to a point on a
surface or an edge of a solid.
• ATTACH_OFFSET—The attachment is offset to another
drawing view, to a model item, or to a 3D model annotation.
• ATTACH_TYPE_UNSUPPORTED—The attachment is to an
item that cannot be represented in PFC at the current time.
However, you can still retrieve the location of the attachment.

Drawings 10 - 87
Free Attachment
The ATTACH_FREE detail attachment type is represented by the
interface pfcDetail.FreeAttachment. It is a child of the
pfcDetail.Attachment interface.

Methods Introduced:

• pfcDetail.FreeAttachment.GetAttachmentPoint
• pfcDetail.FreeAttachment.SetAttachmentPoint
• pfcDetail.FreeAttachment.GetView
• pfcDetail.FreeAttachment.SetView
The method pfcDetail.FreeAttachment.GetAttachmentPoint
returns the attachment point. This location is in screen coordinates
for drawing items, symbol instances and surface finishes on
flat-to-screen annotation planes, and in model coordinates for
symbols and surface finishes on 3D model annotation planes.

The method pfcDetail.FreeAttachment.SetAttachmentPoint


sets the attachment point.

The method pfcDetail.FreeAttachment.GetView returns the


drawing view to which the attachment is related. The attachment
point is relative to the drawing view, that is the attachment point
moves when the drawing view is moved. This method returns a
NULL value, if the detail attachment is not related to a drawing
view, but is placed at the specified location in the drawing sheet, or
if the attachment is offset to a model item or to a 3D model
annotation.

The method pfcDetail.FreeAttachment.SetView sets the


drawing view.

Parametric Attachment
The ATTACH_PARAMETRIC detail attachment type is
represented by the interface pfcDetail.ParametricAttachment.
It is a child of the pfcDetail.Attachment interface.

Methods Introduced:

• pfcDetail.ParametricAttachment.GetAttachedGeometry
• pfcDetail.ParametricAttachment.SetAttachedGeometry

10 - 88 J-Link User’s Guide


The method
pfcDetail.ParametricAttachment.GetAttachedGeometry
returns the pfcSelect.Selection object representing the item to
which the detail attachment is attached. This includes the drawing
view in which the attachment is made.

The method
pfcDetail.ParametricAttachment.SetAttachedGeometry
assigns the pfcSelect.Selection object representing the item to
which the detail attachment is attached. This object must include

Drawings
the target drawing view. The attachment will occur at the selected
parameters.

Offset Attachment
The ATTACH_OFFSET detail attachment type is represented by
the interface pfcDetail.OffsetAttachment. It is a child of the
pfcDetail.Attachment interface.

Methods Introduced:

• pfcDetail.OffsetAttachment.GetAttachedGeometry
• pfcDetail.OffsetAttachment.SetAttachedGeometry
• pfcDetail.OffsetAttachment.GetAttachmentPoint
• pfcDetail.OffsetAttachment.SetAttachmentPoint
The method
pfcDetail.OffsetAttachment.GetAttachedGeometry returns
the pfcSelect.Selection object representing the item to which the
detail attachment is attached. This includes the drawing view
where the attachment is made, if the offset reference is in a model.

The method
pfcDetail.OffsetAttachment.SetAttachedGeometry assigns
the pfcSelect.Selection object representing the item to which the
detail attachment is attached. This can include the drawing view.
The attachment will occur at the selected parameters.

The method pfcDetail.OffsetAttachment.GetAttachmentPoint


returns the attachment point. This location is in screen coordinates
for drawing items, symbol instances and surface finishes on
flat-to-screen annotation planes, and in model coordinates for
symbols and surface finishes on 3D model annotation planes. The
distance from the attachment point to the location of the item to
which the detail attachment is attached is saved as the offset
distance.

Drawings 10 - 89
The method pfcDetail.OffsetAttachment.SetAttachmentPoint
sets the attachment point in screen coordinates.

Unsupported Attachment
The ATTACH_TYPE_UNSUPPORTED detail attachment type is
represented by the interface
pfcDetail.UnsupportedAttachment. It is a child of the
pfcDetail.Attachment interface.

Method Introduced:

• pfcDetail.UnsupportedAttachment.GetAttachmentPoint
• pfcDetail.UnsupportedAttachment.SetAttachmentPoint
The method
pfcDetail.UnsupportedAttachment.GetAttachmentPoint
returns the attachment point. This location is in screen coordinates
for drawing items, symbol instances and surface finishes on
flat-to-screen annotation planes, and in model coordinates for
symbols and surface finishes on 3D model annotation planes.

The method
pfcDetail.UnsupportedAttachment.SetAttachmentPoint
assigns the attachment point in screen coordinates.

10 - 90 J-Link User’s Guide


11
Solid

Most of the objects and methods in J-Link are used with solid
models (parts and assemblies). Because solid objects inherit from
the interface Model, you can use any of the Model methods on any
Solid, Part, or Assembly object.

Topic Page

Getting a Solid Object 11 - 2


Solid Information 11 - 2
Solid Operations 11 - 3
Solid Units 11 - 5
Mass Properties 11 - 12
Annotations 11 - 14
Cross Sections 11 - 15
Materials 11 - 15

11 - 1
Getting a Solid Object
Methods Introduced:

• pfcSession.BaseSession.CreatePart
• pfcSession.BaseSession.CreateAssembly
• pfcAssembly.ComponentPath.GetRoot
• pfcAssembly.ComponentPath.GetLeaf
• pfcMFG.MFG.GetSolid
The methods pfcSession.BaseSession.CreatePart and
pfcSession.BaseSession.CreateAssembly create new solid
models with the names you specify.

The methods pfcAssembly.ComponentPath.GetRoot and


pfcAssembly.ComponentPath.GetLeaf specify the solid objects
that make up the component path of an assembly component model.
You can get a component path object from any component that has
been interactively selected.

The method pfcMFG.MFG.GetSolid retrieves the storage solid in


which the manufacturing model’s features are placed. In order to
create a UDF group in the manufacturing model, call the method
pfcSolid.Solid.CreateUDFGroup on the storage solid.

Solid Information
Methods Introduced:

• pfcSolid.Solid.GetRelativeAccuracy
• pfcSolid.Solid.SetRelativeAccuracy
• pfcSolid.Solid.GetAbsoluteAccuracy
• pfcSolid.Solid.SetAbsoluteAccuracy
You can set the relative and absolute accuracy of any solid model
using these methods. Relative accuracy is relative to the size of the
solid. For example, a relative accuracy of .01 specifies that the solid
must be accurate to within 1/100 of its size. Absolute accuracy is
measured in absolute units (inches, centimeters, and so on).

Note: For a change in accuracy to take effect, you must


regenerate the model.

11 - 2 J-Link User’s Guide


Solid Operations
Methods Introduced:

• pfcSolid.Solid.Regenerate
• pfcSolid.pfcSolid.RegenInstructions_Create
• pfcSolid.RegenInstructions.SetAllowFixUI
• pfcSolid.RegenInstructions.SetForceRegen
• pfcSolid.RegenInstructions.SetFromFeat

Solid
• pfcSolid.RegenInstructions.SetRefreshModelTree
• pfcSolid.RegenInstructions.SetResumeExcludedComponents
• pfcSolid.RegenInstructions.SetUpdateAssemblyOnly
• pfcSolid.RegenInstructions.SetUpdateInstances
• pfcSolid.Solid.GetGeomOutline
• pfcSolid.Solid.EvalOutline
• pfcSolid.Solid.GetIsSkeleton
The method pfcSolid.Solid.Regenerate causes the solid model to
regenerate according to the instructions provided in the form of the
pfcSolid.RegenInstructions object. Passing a null value for the
instructions argument causes an automatic regeneration.

Pro/ENGINEER Wildfire 5.0 introduces the No-Resolve mode,


wherein if a model and feature regeneration fails, failed features
and children of failed features are created and regeneration of other
features continues. However, J-Link does not support regeneration
in this mode. The method pfcSolid.Solid.Regenerate throws an
exception pfcExceptions.XtoolkitBadContext, if
Pro/ENGINEER is running in the No-Resolve mode. To continue
with the Pro/ENGINEER Wildfire 4.0 behavior in the Resolve
mode, set the configuration option regen_failure_handling to
resolve_mode in the Pro/ENGINEER session.

Note: Setting the configuration option to switch to Resolve


mode ensures the old behavior as long as you do not
retrieve the models saved under the No-Resolve mode.
To consistently preserve the old behavior, use Resolve
mode from the beginning and throughout your
Pro/ENGINEER session.
The pfcSolid.RegenInstructions object contains the following
input parameters:

Solid 11 - 3
• AllowFixUI—Determines whether or not to activate the Fix
Model user interface, if there is an error.
Use the method
pfcSolid.RegenInstructions.SetAllowFixUI to modify this
parameter.
• ForceRegen—Forces the solid model to fully regenerate. All the
features in the model are regenerated. If this parameter is
false, Pro/ENGINEER determines which features to
regenerate. By default, it is false.
Use the method
pfcSolid.RegenInstructions.SetForceRegen to modify this
parameter.
• FromFeat—Not currently used. This parameter is reserved for
future use.
Use the method pfcSolid.RegenInstructions.SetFromFeat
to modify this parameter.
• RefreshModelTree—Refreshes the Pro/ENGINEER Model Tree
after regeneration. The model must be active to use this
attribute. If this attribute is false, the Model Tree is not
refreshed. By default, it is false.
Use the method
pfcSolid.RegenInstructions.SetRefreshModelTree to
modify this parameter.
• ResumeExcludedComponents—Enables Pro/ENGINEER to
resume the available excluded components of the simplified
representation during regeneration. This results in a more
accurate update of the simplified representation.
Use the method
pfcSolid.RegenInstructions.SetResumeExcludedCompo
nents to modify this parameter.
• UpdateAssemblyOnly—Updates the placements of an assembly
and all its sub-assemblies, and regenerates the assembly
features and intersected parts. If the affected assembly is
retrieved as a simplified representation, then the locations of
the components are updated. If this attribute is false, the
component locations are not updated, even if the simplified
representation is retrieved. By default, it is false.
Use the method
pfcSolid.RegenInstructions.SetUpdateAssemblyOnly to
modify this parameter.

11 - 4 J-Link User’s Guide


• UpdateInstances—Updates the instances of the solid model in
memory. This may slow down the regeneration process. By
default, this attribute is false.
Use the method
pfcSolid.RegenInstructions.SetUpdateInstances to
modify this parameter.
The method pfcSolid.Solid.GetGeomOutline returns the
three-dimensional bounding box for the specified solid. The method
pfcSolid.Solid.EvalOutline also returns a three-dimensional
bounding box, but you can specify the coordinate system used to

Solid
compute the extents of the solid object.

The method pfcSolid.Solid.GetIsSkeleton determines whether


the part model is a skeleton or a concept model. It returns a true
value if the model is a skeleton, else it returns a false.

Solid Units
Each model has a basic system of units to ensure all material
properties of that model are consistently measured and defined. All
models are defined on the basis of the system of units. A part can
have only one system of unit.

The following types of quantities govern the definition of units of


measurement:

• Basic Quantities—The basic units and dimensions of the


system of units. For example, consider the Centimeter Gram
Second (CGS) system of unit. The basic quantities for this
system of units are:
– Length—cm
– Mass—g
– Force—dyne
– Time—sec
– Temperature—K
• Derived Quantities—The derived units are those that are
derived from the basic quantities. For example, consider the
Centimeter Gram Second (CGS) system of unit. The derived
quantities for this system of unit are as follows:
– Area—cm^2
– Volume—cm^3

Solid 11 - 5
– Velocity—cm/sec
In J-Link, individual units in the model are represented by the
interface pfcUnits.Unit.

Types of Unit Systems


The types of systems of units are as follows:

• Pre-defined system of units—This system of unit is provided by


default.
• Custom-defined system of units—This system of unit is defined
by the user only if the model does not contain standard metric
or nonmetric units, or if the material file contains units that
cannot be derived from the predefined system of units or both.
In Pro/ENGINEER, the system of units are categorized as follows:

• Mass Length Time (MLT)—The following systems of units


belong to this category:
- CGS —Centimeter Gram Second
- MKS—Meter Kilogram Second
- mmKS—millimeter Kilogram Second
• Force Length Time (FLT)—The following systems of units
belong to this category:
- Pro/ENGINEER Default—Inch lbm Second. This is the
default system followed by Pro/ENGINEER.
- FPS—Foot Pound Second
- IPS—Inch Pound Second
- mmNS—Millimeter Newton Second
In J-Link, the system of units followed by the model is represented
by the interface pfcUnits.UnitSystem.

11 - 6 J-Link User’s Guide


Accessing Individual Units
Methods Introduced:

• pfcSolid.Solid.ListUnits
• pfcSolid.Solid.GetUnit
• pfcUnits.Unit.GetName
• pfcUnits.Unit.GetExpression
• pfcUnits.Unit.GetType

Solid
• pfcUnits.Unit.GetIsStandard
• pfcUnits.Unit.GetReferenceUnit
• pfcUnits.Unit.GetConversionFactor
• pfcUnits.UnitConversionFactor.GetOffset
• pfcUnits.UnitConversionFactor.GetScale
The method pfcSolid.Solid.ListUnits returns the list of units
available to the specified model.

The method pfcSolid.Solid.GetUnit retrieves the unit, based on


its name or expression for the specified model in the form of the
pfcUnits.Unit object.

The method pfcUnits.Unit.GetName returns the name of the


unit.

The method pfcUnits.Unit.GetExpression returns a


user-friendly unit description in the form of the name (for example,
ksi) for ordinary units and the expression (for example, N/m^3) for
system-generated units.

The method pfcUnits.Unit.GetType returns the type of quantity


represented by the unit in terms of the pfcBase.UnitType object.
The types of units are as follows:

• UNIT_LENGTH—Specifies length measurement units.


• UNIT_MASS—Specifies mass measurement units.
• UNIT_FORCE—Specifies force measurement units.
• UNIT_TIME—Specifies time measurement units.
• UNIT_TEMPERATURE—Specifies temperature measurement
units.
• UNIT_ANGLE—Specifies angle measurement units.

Solid 11 - 7
The method pfcUnits.Unit.GetIsStandard identifies whether the
unit is system-defined (if the property IsStandard is set to true) or
user-defined (if the property IsStandard is set to false).

The method pfcUnits.Unit.GetReferenceUnit returns a


reference unit (one of the available system units) in terms of the
pfcUnits.Unit object.

The method pfcUnits.Unit.GetConversionFactor identifies the


relation of the unit to its reference unit in terms of the
pfcUnits.UnitConversionFactor object. The unit conversion
factors are as follows:

• Offset—Specifies the offset value applied to the values in the


reference unit.
• Scale—Specifies the scale applied to the values in the reference
unit to get the value in the actual unit.
Example - Consider the formula to convert temperature from
Centigrade to Fahrenheit
F = a + (C * b)
where
F is the temperature in Fahrenheit
C is the temperature in Centigrade
a = 32 (constant signifying the offset value)
b = 9/5 (ratio signifying the scale of the unit)
Note: Pro/ENGINEER scales the length dimensions of the
model using the factors listed above. If the scale is
modified, the model is regenerated. When you scale the
model, the model units are not changed. Imported
geometry cannot be scaled.
Use the methods pfcUnits.UnitConversionFactor.GetOffset
and pfcUnits.UnitConversionFactor.GetScale to retrieve the
unit conversion factors listed above.

11 - 8 J-Link User’s Guide


Modifying Individual Units
Methods Introduced:

• pfcUnits.Unit.Modify
• pfcUnits.Unit.Delete
• pfcUnits.Unit.SetName
• pfcUnits.UnitConversionFactor.SetOffset
• pfcUnits.UnitConversionFactor.SetScale

Solid
The method pfcUnits.Unit.Modify modifies the definition of a
unit by applying a new conversion factor specified by the
pfcUnits.UnitConversionFactor object and a reference unit.

The method pfcUnits.Unit.Delete deletes the unit.

Note: You can delete only custom units and not standard
units.
The method pfcUnits.Unit.SetName modifies the name of the
unit.

Use the methods pfcUnits.UnitConversionFactor.SetOffset


and pfcUnits.UnitConversionFactor.SetScale to modify the
unit conversion factors.

Creating a New Unit


Methods Introduced:

• pfcSolid.Solid.CreateCustomUnit
• pfcUnits.pfcUnits.UnitConversionFactor_Create
The method pfcSolid.Solid.CreateCustomUnit creates a custom
unit based on the specified name, the conversion factor given by the
pfcUnits.UnitConversionFactor object, and a reference unit.

The method pfcUnits.pfcUnits.UnitConversionFactor_Create


creates the pfcUnits.UnitConversionFactor object containing
the unit conversion factors.

Solid 11 - 9
Accessing Systems of Units
Methods Introduced:

• pfcSolid.Solid.ListUnitSystems
• pfcSolid.Solid.GetPrincipalUnits
• pfcUnits.UnitSystem.GetUnit
• pfcUnits.UnitSystem.GetName
• pfcUnits.UnitSystem.GetType
• pfcUnits.UnitSystem.GetIsStandard
The method pfcSolid.Solid.ListUnitSystems returns the list of
unit systems available to the specified model.

The method pfcSolid.Solid.GetPrincipalUnits returns the


system of units assigned to the specified model in the form of the
pfcUnits.UnitSystem object.

The method pfcUnits.UnitSystem.GetUnit retrieves the unit of a


particular type used by the unit system.

The method pfcUnits.UnitSystem.GetName returns the name of


the unit system.

The method pfcUnits.UnitSystem.GetType returns the type of


the unit system in the form of the pfcUnits.UnitSystemType
object. The types of unit systems are as follows:

• UNIT_SYSTEM_MASS_LENGTH_TIME—Specifies the Mass


Length Time (MLT) unit system.
• UNIT_SYSTEM_FORCE_LENGTH_TIME—Specifies the
Force Length Time (FLT) unit system.
For more information on these unit systems listed above, refer to
the section Types of Unit Systems.

The method pfcUnits.UnitSystem.GetIsStandard identifies


whether the unit system is system-defined (if the property
IsStandard is set to true) or user-defined (if the property
IsStandard is set to false).

Modifying Systems of Units


Methods Introduced:

• pfcUnits.UnitSystem.Delete
• pfcUnits.UnitSystem.SetName

11 - 10 J-Link User’s Guide


The method pfcUnits.UnitSystem.Delete deletes a
custom-defined system of units.

Note: You can delete only a custom-defined system of units


and not a standard system of units.
Use the method pfcUnits.UnitSystem.SetName to rename a
custom-defined system of units. Specify the new name for the
system of units as an input parameter for this function.

Creating a New System of Units

Solid
Method Introduced:

• pfcSolid.Solid.CreateUnitSystem
The method pfcSolid.Solid.CreateUnitSystem creates a new
system of units in the model based on the specified name, the type
of unit system given by the pfcUnits.UnitSystemType object, and
the types of units specified by the pfcUnits.Units sequence to use
for each of the base measurement types (length, force or mass, and
temperature).

Conversion to a New Unit System


Methods Introduced:

• pfcSolid.Solid.SetPrincipalUnits
• pfcUnits.pfcUnits.UnitConversionOptions_Create
• pfcUnits.UnitConversionOptions.SetDimensionOption
• pfcUnits.UnitConversionOptions.SetIgnoreParamUnits
The method pfcSolid.Solid.SetPrincipalUnits changes the
principal system of units assigned to the solid model based on the
the unit conversion options specified by the
pfcUnits.UnitConversionOptions object. The method
pfcUnits.pfcUnits.UnitConversionOptions_Create creates the
pfcUnits.UnitConversionOptions object containing the unit
conversion options listed below.

Solid 11 - 11
The types of unit conversion options are as follows:

• DimensionOption—Use the option while converting the


dimensions of the model.
Use the method
pfcUnits.UnitConversionOptions.SetDimensionOption to
modify this option.
This option can be of the following types:
– UNITCONVERT_SAME_DIMS—Specifies that unit
conversion occurs by interpreting the unit value in the new
unit system. For example, 1 inch will equal to 1 millimeter.
– UNITCONVERT_SAME_SIZE—Specifies that unit
conversion will occur by converting the unit value in the
new unit system. For example, 1 inch will equal to 25.4
millimeters.
• IgnoreParamUnits—This boolean attribute determines whether
or not ignore the parameter units. If it is null or true,
parameter values and units do not change when the unit
system is changed. If it is false, parameter units are converted
according to the rule.
Use the method
pfcUnits.UnitConversionOptions.SetIgnoreParamUnits
to modify this attribute.

Mass Properties
Method Introduced:

• pfcSolid.Solid.GetMassProperty
The function pfcSolid.Solid.GetMassProperty provides
information about the distribution of mass in the part or assembly.
It can provide the information relative to a coordinate system
datum, which you name, or the default one if you provide null as
the name. It returns a class called MassProperty.

The class contains the following fields:

• The volume.
• The surface area.
• The density. The density value is 1.0, unless a material has
been assigned.
• The mass.

11 - 12 J-Link User’s Guide


• The center of gravity (COG).
• The inertia matrix.
• The inertia tensor.
• The inertia about the COG.
• The principal moments of inertia (the eigen values of the COG
inertia).
• The principal axes (the eigenvectors of the COG inertia).

Solid
Example Code: Retrieving a Mass Property Object
This method retrieves a MassProperty object from a specified solid
model. The solid's mass, volume, and center of gravity point are
then printed.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSolid.*;
public class pfcSolidMassPropExample
{
public static void printMassProperties (Solid solid)
{
MassProperty properties; // Data Structure containing mass property
data.
Point3D gravity_center;
try
{
properties = solid.GetMassProperty(null);// optional arugument in
this method
// is the name of a ccordinate
system to use
// to compute the mass
properties
System.out.println("The solid mass is: " + properties.GetMass());
System.out.println("The solid volume is: " +
properties.GetVolume());
gravity_center = properties.GetGravityCenter();
System.out.println("The Center Of Gravity is at ");
System.out.println("X: " + gravity_center.get(0) + " Y: "
+ gravity_center.get(1) + " Z: "
+ gravity_center.get(2));
}
catch (jxthrowable x)
{
System.out.println("Exception caught: "+x);
}
}

Solid 11 - 13
}

Annotations
Methods Introduced:

• pfcNote.Note.GetLines
• pfcNote.Note.SetLines
• pfcNote.Note.GetURL
• pfcNote.Note.SetURL
• pfcNote.Note.Display
• pfcNote.Note.Delete
• pfcNote.Note.GetOwner
3D model notes are instance of ModelItem objects. They can be
located and accessed using methods that locate model items in solid
models, and downcast to the Note interface to use the methods in
this section.

The method pfcNote.Note.GetLines returns the text contained in


the 3D model note. The method pfcNote.Note.SetLines modifies
the note text.

The method pfcNote.Note.GetURL returns the URL stored in the


3D model note. The method pfcNote.Note.SetURL modifies the
note URL.

The method pfcNote.Note.Display forces the display of the model


note.

The method pfcNote.Note.Delete deletes a model note.

The method pfcNote.Note.GetOwner returns the solid model


owner of the note.

11 - 14 J-Link User’s Guide


Cross Sections
Methods Introduced:

• pfcSolid.Solid.ListCrossSections
• pfcSolid.Solid.GetCrossSection
• pfcXSection.XSection.GetName
• pfcXSection.XSection.SetName
• pfcXSection.XSection.GetXSecType

Solid
• pfcXSection.XSection.Delete
• pfcXSection.XSection.Display
• pfcXSection.XSection.Regenerate
The method pfcSolid.Solid.ListCrossSections returns a
sequence of cross section objects represented by the Xsection
interface. The method pfcSolid.Solid.GetCrossSection searches
for a cross section given its name.

The method pfcXSection.XSection.GetName returns the name


of the cross section in Pro/ENGINEER. The method
pfcXSection.XSection.SetName modifies the cross section name.

The method pfcXSection.XSection.GetXSecType returns the


type of cross section, that is planar or offset, and the type of item
intersected by the cross section.

The method pfcXSection.XSection.Delete deletes a cross section.

The method pfcXSection.XSection.Display forces a display of


the cross section in the window.

The method pfcXSection.XSection.Regenerate regenerates a


cross section.

Materials
J-Link enables you to programmatically access the material types
and properties of parts. Using the methods described in the
following sections, you can perform the following actions:

• Create or delete materials


• Set the current material
• Access and modify the material types and properties

Solid 11 - 15
Methods Introduced:

• pfcPart.Material.Save
• pfcPart.Material.Delete
• pfcPart.Part.GetCurrentMaterial
• pfcPart.Part.SetCurrentMaterial
• pfcPart.Part.ListMaterials
• pfcPart.Part.CreateMaterial
• pfcPart.Part.RetrieveMaterial
The method pfcPart.Material.Save writes to a material file that
can be imported into any Pro/ENGINEER part.

The method pfcPart.Material.Delete removes material from the


part.

The method pfcPart.Part.GetCurrentMaterial returns the


currently assigned material for the part.

The method pfcPart.Part.SetCurrentMaterial sets the material


assigned to the part.

Note:
– By default, while assigning a material to a sheetmetal part,
the method pfcPart.Part.SetCurrentMaterial modifies
the values of the sheetmetal properties such as Y factor and
bend table according to the material file definition. This
modification triggers a regeneration and a modification of
the developed length calculations of the sheetmetal part.
However, you can avoid this behavior by setting the value of
the configuration option
material_update_smt_bend_table to never_replace.
– The method pfcPart.Part.SetCurrentMaterial may
change the model display, if the new material has a default
appearance assigned to it.
– The method may also change the family table, if the
parameter PTC_MATERIAL_NAME is a part of the family
table.
The method pfcPart.Part.ListMaterials returns a list of the
materials available in the part.

The method pfcPart.Part.CreateMaterial creates a new empty


material in the specified part.

11 - 16 J-Link User’s Guide


The method pfcPart.Part.RetrieveMaterial imports a material
file into the part. The name of the file read can be as either:

• <name>.mtl—Specifies the new material file format.


• <name>.mat—Specifies the material file format prior to
Pro/ENGINEER Wildfire 3.0.
If the material is not already in the part database,
pfcPart.Part.RetrieveMaterial adds the material to the
database after reading the material file. If the material is already
in the database, the function replaces the material properties in the

Solid
database with those contained in the material file.

Accessing Material Types


Methods Introduced:

• pfcPart.Material.GetStructuralMaterialType
• pfcPart.Material.SetStructuralMaterialType
• pfcPart.Material.GetThermalMaterialType
• pfcPart.Material.SetThermalMaterialType
• pfcPart.Material.GetSubType
• pfcPart.Material.SetSubType
• pfcPart.Material.GetPermittedSubTypes
The method pfcPart.Material.GetStructuralMaterialType
returns the material type for the structural properties of the
material. The material types are as follows:

• MTL_ISOTROPIC—Specifies a a material with an infinite


number of planes of material symmetry, making the properties
equal in all directions.
• MTL_ORTHOTROPIC—Specifies a material with symmetry
relative to three mutually perpendicular planes.
• MTL_TRANSVERSELY_ISOTROPIC—Specifies a material
with rotational symmetry about an axis. The properties are
equal for all directions in the plane of isotropy.
Use the method pfcPart.Material.SetStructuralMaterialType
to set the material type for the structural properties of the material.

The method pfcPart.Material.GetThermalMaterialType


returns the material type for the thermal properties of the material.
The material types are as follows:

Solid 11 - 17
• MTL_ISOTROPIC—Specifies a material with an infinite
number of planes of material symmetry, making the properties
equal in all directions.
• MTL_ORTHOTROPIC—Specifies a material with symmetry
relative to three mutually perpendicular planes.
• MTL_TRANSVERSELY_ISOTROPIC—Specifies a material
with rotational symmetry about an axis. The properties are
equal for all directions in the plane of isotropy.
Use the method pfcPart.Material.SetThermalMaterialType to
set the material type for the thermal properties of the material.

The method pfcPart.Material.GetSubType returns the subtype


for the MTL_ISOTROPIC material type.

Use the method pfcPart.Material.SetSubType to set the subtype


for the MTL_ISOTROPIC material type.

Use the method pfcPart.Material.GetPermittedSubTypes to


retrieve a list of the permitted string values for the material
subtype.

Accessing Material Properties


The methods listed in this section enable you to access material
properties.

Methods Introduced:

• pfcPart.pfcPart.MaterialProperty_Create
• pfcPart.Material.GetPropertyValue
• pfcPart.Material.SetPropertyValue
• pfcPart.Material.SetPropertyUnits
• pfcPart.Material.RemoveProperty
• pfcPart.Material.GetDescription
• pfcPart.Material.SetDescription
• pfcPart.Material.GetFatigueType
• pfcPart.Material.SetFatigueType

11 - 18 J-Link User’s Guide


• pfcPart.Material.GetPermittedFatigueTypes
• pfcPart.Material.GetFatigueMaterialType
• pfcPart.Material.SetFatigueMaterialType
• pfcPart.Material.GetPermittedFatigueMaterialTypes
• pfcPart.Material.GetFatigueMaterialFinish
• pfcPart.Material.SetFatigueMaterialFinish
• pfcPart.Material.GetPermittedFatigueMaterialFinishes

Solid
• pfcPart.Material.GetFailureCriterion
• pfcPart.Material.SetFailureCriterion
• pfcPart.Material.GetPermittedFailureCriteria
• pfcPart.Material.GetHardness
• pfcPart.Material.SetHardness
• pfcPart.Material.GetHardnessType
• pfcPart.Material.SetHardnessType
• pfcPart.Material.GetCondition
• pfcPart.Material.SetCondition
• pfcPart.Material.GetBendTable
• pfcPart.Material.SetBendTable
• pfcPart.Material.GetCrossHatchFile
• pfcPart.Material.SetCrossHatchFile
• pfcPart.Material.GetMaterialModel
• pfcPart.Material.SetMaterialModel
• pfcPart.Material.GetPermittedMaterialModels
• pfcPart.Material.GetModelDefByTests
• pfcPart.Material.SetModelDefByTests
The method pfcPart.pfcPart.MaterialProperty_Create creates
a new instance of a material property object.

All numerical material properties are accessed using the same set
of APIs. You must provide a property type to indicate the property
you want to read or modify.

The method pfcPart.Material.GetPropertyValue returns the


value and the units of the material property.

Solid 11 - 19
Use the method pfcPart.Material.SetPropertyValue to set the
value and units of the material property. If the property type does
not exist for the material, then this method creates it.

Use the method pfcPart.Material.SetPropertyUnits to set the


units of the material property.

Use the method pfcPart.Material.RemoveProperty to remove


the material property.

Material properties that are non-numeric can be accessed via


property-specific get and set methods.

The methods pfcPart.Material.GetDescription and


pfcPart.Material.SetDescription return and set the description
string for the material respectively.

The methods pfcPart.Material.GetFatigueType and


pfcPart.Material.SetFatigueType return and set the valid
fatigue type for the material respectively.

Use the method pfcPart.Material.GetPermittedFatigueTypes


to get a list of the permitted string values for the fatigue type.

The methods pfcPart.Material.GetFatigueMaterialType and


pfcPart.Material.SetFatigueMaterialType return and set the
class of material when determining the effect of the fatigue
respectively.

Use the method


pfcPart.Material.GetPermittedFatigueMaterialTypes to
retrieve a list of the permitted string values for the fatigue material
type.

The methods pfcPart.Material.GetFatigueMaterialFinish and


pfcPart.Material.SetFatigueMaterialFinish return and set the
type of surface finish for the fatigue material respectively.

Use the method


pfcPart.Material.GetPermittedFatigueMaterialFinishes to
retrieve a list of permitted string values for the fatigue material
finish.

The method pfcPart.Material.GetFailureCriterion returns the


reduction factor for the failure strength of the material. This factor
is used to reduce the endurance limit of the material to account for
unmodeled stress concentrations, such as those found in welds. Use
the method pfcPart.Material.SetFailureCriterion to set the
reduction factor for the failure strength of the material.

11 - 20 J-Link User’s Guide


Use the method
pfcPart.Material.GetPermittedFailureCriteria to retrieve a
list of permitted string values for the material failure criterion.

The methods pfcPart.Material.GetHardness and


pfcPart.Material.SetHardness return and set the hardness for
the specified material respectively.

The methods pfcPart.Material.GetHardnessType and


pfcPart.Material.SetHardnessType return and set the hardness
type for the specified material respectively.

Solid
The methods pfcPart.Material.GetCondition and
pfcPart.Material.GetCondition return and set the condition for
the specified material respectively.

The methods pfcPart.Material.GetBendTable and


pfcPart.Material.SetBendTable return and set the bend table
for the specified material respectively.

The methods pfcPart.Material.GetCrossHatchFile and


pfcPart.Material.SetCrossHatchFile return and set the file
containing the crosshatch pattern for the specified material
respectively.

The methods pfcPart.Material.GetMaterialModel and


pfcPart.Material.SetMaterialModel return and set the type of
hyperelastic isotropic material model respectively.

Use the method


pfcPart.Material.GetPermittedMaterialModels to retrieve a
list of the permitted string values for the material model.

The methods pfcPart.Material.GetModelDefByTests


determines whether the hyperelastic isotropic material model has
been defined using experimental data for stress and strain.

Use the method pfcPart.Material.SetModelDefByTests to


define the hyperelastic isotropic material model using experimental
data for stress and strain.

Accessing User-defined Material Properties


Materials permit assignment of user-defined parameters. These
parameters allow you to place non-standard properties on a given
material. Therefore pfcPart.Material is a child of
pfcModelItem.ParameterOwner, which provides access to
user-defined parameters and properties of materials through the
methods in that interface.

Solid 11 - 21
12
Windows and Views

J-Link provides access to Pro/ENGINEER windows and saved


views. This chapter describes the methods that provide this access.

Topic Page

Windows 12 - 2
Embedded Browser 12 - 4
Views 12 - 4
Coordinate Systems and Transformations 12 - 6

12 - 1
Windows
This section describes the J-Link methods that access Window
objects. The topics are as follows:

• Getting a Window Object


• Window Operations

Getting a Window Object


Methods Introduced:

• pfcSession.BaseSession.GetCurrentWindow
• pfcSession.BaseSession.CreateModelWindow
• pfcModel.Model.Display
• pfcSession.BaseSession.ListWindows
• pfcSession.BaseSession.GetWindow
• pfcSession.BaseSession.OpenFile
• pfcSession.BaseSession.GetModelWindow
The method pfcSession.BaseSession.GetCurrentWindow
provides access to the current active window in Pro/ENGINEER.

The method pfcSession.BaseSession.CreateModelWindow


creates a new window that contains the model that was passed as
an argument.

Note: You must call the method pfcModel.Model.Display


for the model geometry to be displayed in the window.
Use the method pfcSession.BaseSession.ListWindows to get a
list of all the current windows in session.

The method pfcSession.BaseSession.GetWindow gets the


handle to a window given its integer identifier.

The method pfcSession.BaseSession.OpenFile returns the


handle to a newly created window that contains the opened model.

Note: If a model is already open in a window the method


returns a handle to the window.
The method pfcSession.BaseSession.GetModelWindow returns
the handle to the window that contains the opened model, if it is
displayed.

12 - 2 J-Link User’s Guide


Window Operations
Methods Introduced:

• pfcWindow.Window.GetHeight
• pfcWindow.Window.GetWidth
• pfcWindow.Window.GetXPos

Windows and Views


• pfcWindow.Window.GetYPos
• pfcWindow.Window.GetGraphicsAreaHeight
• pfcWindow.Window.GetGraphicsAreaWidth
• pfcWindow.Window.Clear
• pfcWindow.Window.Repaint
• pfcWindow.Window.Refresh
• pfcWindow.Window.Close
• pfcWindow.Window.Activate
• pfcWindow.Window.GetId
The methods pfcWindow.Window.GetHeight,
pfcWindow.Window.GetWidth,
pfcWindow.Window.GetXPos, and
pfcWindow.Window.GetYPos retrieve the height, width,
x-position, and y-position of the window respectively. The values of
these parameters are normalized from 0 to 1.

The methods pfcWindow.Window.GetGraphicsAreaHeight


and pfcWindow.Window.GetGraphicsAreaWidth retrieve the
height and width of the Pro/ENGINEER graphics area window
without the border respectively. The values of these parameters are
normalized from 0 to 1. For both the window and graphics area
sizes, if the object occupies the whole screen, the window size
returned is 1. For example, if the screen is 1024 pixels wide and the
graphics area is 512 pixels, then the width of the graphics area
window is returned as 0.5.

The method pfcWindow.Window.Clear removes geometry from


the window.

Both pfcWindow.Window.Repaint and


pfcWindow.Window.Refresh repaint solid geometry. However,
the Refresh method does not remove highlights from the screen
and is used primarily to remove temporary geometry entities from
the screen.

Windows and Views 12 - 3


Use the method pfcWindow.Window.Close to close the window.
If the current window is the original window created when
Pro/ENGINEER started, this method clears the window.
Otherwise, it removes the window from the screen.

The method pfcWindow.Window.Activate activates a window.


This function is available only in the asynchronous mode.

The method pfcWindow.Window.GetId retrieves the ID of the


Pro/ENGINEER window.

Embedded Browser
Methods Introduced:

• pfcWindow.Window.GetURL
• pfcWindow.Window.SetURL
• pfcWindow.Window.GetBrowserSize
• pfcWindow.Window.SetBrowserSize
The methods pfcWindow.Window.GetURL and
pfcWindow.Window.SetURL enables you to find and change the
URL displayed in the embedded browser in the Pro/ENGINEER
window.

The methods pfcWindow.Window.GetBrowserSize and


pfcWindow.Window.SetBrowserSize enables you to find and
change the size of the embedded browser in the Pro/ENGINEER
window.

Views
This section describes the J-Link methods that access View objects.
The topics are as follows:

• Getting a View Object


• View Operations

12 - 4 J-Link User’s Guide


Getting a View Object
Methods Introduced:

• pfcView.ViewOwner.RetrieveView
• pfcView.ViewOwner.GetView
• pfcView.ViewOwner.ListViews

Windows and Views


• pfcView.ViewOwner.GetCurrentView
Any solid model inherits from the interface ViewOwner. This will
enable you to use these methods on any solid object.

The method pfcView.ViewOwner.RetrieveView sets the current


view to the orientation previously saved with a specified name.

Use the method pfcView.ViewOwner.GetView to get a handle to


a named view without making any modifications.

The method pfcView.ViewOwner.ListViews returns a list of all


the views previously saved in the model.

The method pfcView.ViewOwner.GetCurrentView returns a


view handle that represents the current orientation. Although this
view does not have a name, you can use this view to find or modify
the current orientation.

View Operations
Methods Introduced:

• pfcView.View.GetName
• pfcView.View.GetIsCurrent
• pfcView.View.Reset
• pfcView.ViewOwner.SaveView
To get the name of a view given its identifier, use the method
pfcView.View.GetName.

The method pfcView.View.GetIsCurrent determines if the View


object represents the current view.

The pfcView.View.Reset method restores the current view to the


default view.

To store the current view under the specified name, call the method
pfcView.ViewOwner.SaveView.

Windows and Views 12 - 5


Coordinate Systems and Transformations
This section describes the various coordinate systems used by
Pro/ENGINEER and accessible from J-Link and how to transform
from one coordinate system to another.

Coordinate Systems
Pro/ENGINEER and J-Link use the following coordinate systems:

• Solid Coordinate System


• Screen Coordinate System
• Window Coordinate System
• Drawing Coordinate System
• Drawing View Coordinate System
• Assembly Coordinate System
• Datum Coordinate System
• Section Coordinate System
The following sections describe each of these coordinate systems.

Solid Coordinate System


The solid coordinate system is the three-dimensional, Cartesian
coordinate system used to describe the geometry of a
Pro/ENGINEER solid model. In a part, the solid coordinate system
describes the geometry of the surfaces and edges. In an assembly,
the solid coordinate system also describes the locations and
orientations of the assembly members.

You can visualize the solid coordinate system in Pro/ENGINEER by


creating a coordinate system datum with the option Default.
Distances measured in solid coordinates correspond to the values of
dimensions as seen by the Pro/ENGINEER user.

Solid coordinates are used by J-Link for all the methods that look at
geometry and most of the methods that draw three-dimensional
graphics.

12 - 6 J-Link User’s Guide


Screen Coordinate System
The screen coordinate system is two-dimensional coordinate system
that describes locations in a Pro/ENGINEER window. When the
user zooms or pans the view, the screen coordinate system follows
the display of the solid so a particular point on the solid always
maps to the same screen coordinate. The mapping changes only
when the view orientation is changed.

Windows and Views


Screen coordinates are nominal pixel counts. The bottom, left
corner of the default window is at (0, 0) and the top, right corner is
at (1000, 864).

Screen coordinates are used by some of the graphics methods, the


mouse input methods, and all methods that draw graphics or
manipulate items on a drawing.

Window Coordinate System


The window coordinate system is similar to the screen coordinate
system, except it is not affected by zoom and pan. When an object is
first displayed in a window, or the option View, Pan/Zoom, Reset is
used, the screen and window coordinates are the same.

Window coordinates are needed only if you take account of zoom


and pan. For example, you can find out whether a point on the solid
is visible in the window or you can draw two-dimensional text in a
particular window location, regardless of pan and zoom.

Drawing Coordinate System


The drawing coordinate system is a two-dimensional system that
describes the location on a drawing relative to the bottom, left
corner, and measured in drawing units. For example, on a U.S.
letter-sized, landscape-format drawing sheet that uses inches, the
top, right-corner is (11, 8.5) in drawing coordinates.

The J-Link methods that manipulate drawings generally use


screen coordinates.

Drawing View Coordinate System


The drawing view coordinate system is used to describe the
locations of entities in a drawing view.

Windows and Views 12 - 7


Assembly Coordinate System
An assembly has its own coordinate system that describes the
positions and orientations of the member parts, subassemblies, and
the geometry of datum features created in the assembly.

When an assembly is retrieved into memory each member is also


loaded and continues to use its own solid coordinate system to
describe its geometry.

This is important when you are analyzing the geometry of a


subassembly and want to extract or display the results relative to
the coordinate system of the parent assembly.

Datum Coordinate System


A coordinate system datum can be created anywhere in any part or
assembly, and represents a user-defined coordinate system. It is
often a requirement in a J-Link application to describe geometry
relative to such a datum.

Section Coordinate System


Every sketch has a coordinate system used to locate entities in that
sketch. Sketches used in features will use a coordinate system
different from that of the solid model.

Transformations
Methods Introduced:

• pfcBase.Transform3D.Invert
• pfcBase.Transform3D.TransformPoint
• pfcBase.Transform3D.TransformVector
• pfcBase.Transform3D.GetMatrix
• pfcBase.Transform3D.SetMatrix
• pfcBase.Transform3D.GetOrigin
• pfcBase.Transform3D.GetXAxis
• pfcBase.Transform3D.GetYAxis
• pfcBase.Transform3D.GetZAxis
All coordinate systems are treated in J-Link as if they were
three-dimensional. Therefore, a point in any of the coordinate
systems is always represented by the pfcBase.Point3D class:

12 - 8 J-Link User’s Guide


Vectors store the same data but are represented for clarity by the
pfcBase.Vector3D class.

Screen coordinates contain a z-value whose positive direction is


outwards from the screen. The value of z is not generally important
when specifying a screen location as an input to a method, but it is
useful in other situations. For example, if you select a datum plane,
you can find the direction of the plane by calculating the normal to

Windows and Views


the plane, transforming to screen coordinates, then looking at the
sign of the z-coordinate.

A transformation between two coordinate systems is represented by


thepfcBase.Transform3D class. This class contains a 4x4 matrix
that combines the conventional 3x3 matrix that describes the
relative orientation of the two systems, and the vector that
describes the shift between them.

The 4x4 matrix used for transformations is as follows:

… … … 0
… … … 0
X′ Y′ Z′ 1 = X Y Z 1
… … … 0
Xs Ys Zs 1

The utility method ptcBase.Transform3D.Invert inverts a


transformation matrix so that it can be used to transform points in
the opposite direction.

J-Link provides two utilities for performing coordinate


transformations. The method
ptcBase.Transform3D.TransformPoint transforms a
three-dimensional point and
ptcBase.Transform3D.TransformVector transforms a
three-dimensional vector.

The following diagram summarizes the coordinate transformations


needed when using J-Link and specifies the J-Link methods that
provide the transformation matrix.

Windows and Views 12 - 9


CSYS DATUM

pfcGeometry.CoordSystem.GetCoordSys

MODEL
PART ASM
pfcAssembly.ComponentPath.GetTransform

pfcView.View.GetTransform

SCREEN

pfcAssembly.ComponentPath.GetTransform

WINDOW

Transforming to Screen Coordinates


Methods Introduced:

• pfcView.View.GetTransform
• pfcView.View.SetTransform
• pfcView.View.Rotate
The view matrix describes the transformation from solid to screen
coordinates. The method pfcView.View.GetTransform provides
the view matrix for the specified view. The method
pfcView.View.SetTransform allows you to specify a matrix for
the view.

The method pfcView.View.Rotate rotates a view, relative to the


X, Y, or Z axis, in the amount that you specifiy.

To transform from screen to solid coordinates, invert the


transformation matrix using the method
pfcBase.Transform3D.Invert.

12 - 10 J-Link User’s Guide


Transforming to Coordinate System Datum Coordinates
Method Introduced:

• pfcGeometry.CoordSystem.GetCoordSys
The method pfcGeometry.CoordSystem.GetCoordSys provides
the location and orientation of the coordinate system datum in the
coordinate system of the solid that contains it. The location is in

Windows and Views


terms of the directions of the three axes and the position of the
origin.

Transforming Window Coordinates


Methods Introduced

• pfcWindow.Window.GetScreenTransform
• pfcWindow.Window.SetScreenTransform
• pfcBase.ScreenTransform.SetPanX
• pfcBase.ScreenTransform.SetPanY
• pfcBase.ScreenTransform.SetZoom
You can alter the pan and zoom of a window by using a Screen
Transform object. This object contains three attributes. PanX and
PanY represent the horizontal and vertical movement. Every
increment of 1.0 moves the view point one screen width or height.
Zoom represents a scaling factor for the view. This number must be
greater than zero.

Transforming Coordinates of an Assembly Member


Method Introduced:

• pfcAssembly.ComponentPath.GetTransform
The method pfcAssembly.ComponentPath.GetTransform
provides the matrix for transforming from the solid coordinate
system of the assembly member to the solid coordinates of the
parent assembly, or the reverse.

Example Code - Normalizing a Coordinate Transformation


Matrix

The following example code uses two methods to transfer the view
transformation from one view to another. The method
viewTransfer accepts two views and transfers the matrix from the
first to the second. This matrix is normalized using the second
method, matrixNormalize.

Windows and Views 12 - 11


Views can be changed to a normalized matrix only. The example
method UtilMatrixNormalize takes a Matrix3D object and
normalizes it.

Note: Both of these methods are declared to throw the


exception jxthrowable. You need to put your
error-handling code in the methods that call the utility
methods.
import java.lang.Math.*;
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcView.*;
import com.ptc.pfc.pfcBase.*;

public class UtilView


{

// ViewTransfer method transfers a matrix from one view into the other.

public static View viewTransfer (View view1, View view2) throws


jxthrowable
{
Transform3D transform;
Matrix3D matrix;

transform = view1.GetTransform();
matrix = transform.GetMatrix();
matrix = matrixNormalize (matrix);
transform.SetMatrix (matrix);
view2.SetTransform (transform);

return (view2);
}

// Normalize function: Normalizes a Matrix3D object

public static Matrix3D matrixNormalize(Matrix3D m) throws jxthrowable


{
double scale;
int row, col;

// Set the bottom row to 0.0.

m.set (3,0, 0.0);


m.set (3,1, 0.0);
m.set (3,2, 0.0);

// Normalization scale

scale = Math.sqrt (m.get(0,0)*m.get(0,0) +


m.get(0,1)*m.get(0,1) +

12 - 12 J-Link User’s Guide


m.get(0,2)* m.get(0,2));

for (row = 0;row < 3; row++)


for (col = 0;col < 3; col++)
m.set (row, col, m.get(row, col)/scale);
return (m);
}
}

Windows and Views

Windows and Views 12 - 13


13
ModelItem

This chapter describes the J-Link methods that enable you to


access and manipulate ModelItems.

Topic Page

Solid Geometry Traversal 13 - 2


Getting ModelItem Objects 13 - 2
ModelItem Information 13 - 3
Layer Objects 13 - 4

13 - 1
Solid Geometry Traversal
Solid models are made up of 11 distinct types of ModelItem, as
follows:

• pfcFeature.Feature
• pfcGeometry.Surface
• pfcGeometry.Edge
• pfcGeometry.Curve (datum curve)
• pfcGeometry.Axis (datum axis)
• pfcGeometry.Point (datum point)
• pfcGeometry.Quilt (datum quilt)
• pfcLayer.Layer
• pfcNote.Note
• pfcDimension.Dimension
• pfcDimension.RefDimension
Each model item is assigned a unique identification number that
will never change. In addition, each model item can be assigned a
string name. Layers, points, axes, dimensions, and reference
dimensions are automatically assigned a name that can be
changed.

Getting ModelItem Objects


Methods Introduced:

• pfcModelItem.ModelItemOwner.ListItems
• pfcFeature.Feature.ListSubItems
• pfcLayer.Layer.ListItems
• pfcModelItem.ModelItemOwner.GetItemById
• pfcModelItem.ModelItemOwner.GetItemByName
• pfcFamily.FamColModelItem.GetRefItem
• pfcSelect.Selection.GetSelItem

13 - 2 J-Link User’s Guide


All models inherit from the interface ModelItemOwner. The
method pfcModelItem.ModelItemOwner.ListItems returns a
sequence of ModelItems contained in the model. You can specify
which type of ModelItem to collect by passing in one of the
enumerated ModelItemType objects, or you can collect all
ModelItems by passing null as the model item type.

The methods pfcFeature.Feature.ListSubItems and


pfcLayer.Layer.ListItems produce similar results for specific
features and layers. These methods return a list of subitems in the

ModelItem
feature or items in the layer.

To access specific model items, call the method


pfcModelItem.ModelItemOwner.GetItemById. This methods
enables you to access the model item by identifier.

To access specific model items, call the method


pfcModelItem.ModelItemOwner.GetItemByName. This
methods enables you to access the model item by name.

The method pfcFamily.FamColModelItem.GetRefItem returns


the dimension or feature used as a header for a family table.

The method pfcSelect.Selection.GetSelItem returns the item


selected interactively by the user.

ModelItem Information
Methods Introduced:

• pfcModelItem.ModelItem.GetName
• pfcModelItem.ModelItem.SetName
• pfcModelItem.ModelItem.GetId
• pfcModelItem.ModelItem.GetType
Certain ModelItems also have a string name that can be changed
at any time. The methods GetName and SetName access this
name.

The method GetId returns the unique integer identifier for the
ModelItem.

The GetType method returns an enumeration object that indicates


the model item type of the specified ModelItem. See the section
“Solid Geometry Traversal” for the list of possible model item types.

ModelItem 13 - 3
Layer Objects
In J-Link, layers are instances of ModelItem. The following
sections describe how to get layer objects and the operations you
can perform on them.

Getting Layer Objects


Method Introduced:

• pfcModel.Model.CreateLayer
The method pfcModel.Model.CreateLayer returns a new layer
with the name you specify.

See the section “Getting ModelItem Objects” for other methods that
can return layer objects.

Layer Operations
Methods Introduced:

• pfcLayer.Layer.GetStatus
• pfcLayer.Layer.SetStatus
• pfcLayer.Layer.ListItems
• pfcLayer.Layer.AddItem
• pfcLayer.Layer.RemoveItem
• pfcLayer.Layer.Delete
The methods pfcLayer.Layer.GetStatus and
pfcLayer.Layer.SetStatus enable you to access the display status
of a layer. The corresponding enumeration class is DisplayStatus
and the possible values are Normal, Displayed, Blank, or
Hidden.

Use the methods pfcLayer.Layer.ListItems,


pfcLayer.Layer.AddItem, and pfcLayer.Layer.RemoveItem to
control the contents of a layer.

The method pfcLayer.Layer.Delete removes the layer (but not


the items it contains) from the model.

13 - 4 J-Link User’s Guide


14
Features

All Pro/ENGINEER solid models are made up of features. This


chapter describes how to program on the feature level using J-Link.

Topic Page

Access to Features 14 - 2
Feature Information 14 - 3
Feature Operations 14 - 4
Feature Groups and Patterns 14 - 6
User Defined Features 14 - 8
Creating Features from UDFs 14 - 9

14 - 1
Access to Features
Methods Introduced:

• pfcFeature.Feature.ListChildren
• pfcFeature.Feature.ListParents
• pfcFeature.FeatureGroup.GetGroupLeader
• pfcFeature.FeaturePattern.GetPatternLeader
• pfcFeature.FeaturePattern.ListMembers
• pfcSolid.Solid.ListFailedFeatures
• pfcSolid.Solid.ListFeaturesByType
• pfcSolid.Solid.GetFeatureById
The methods pfcFeature.Feature.ListChildren and
pfcFeature.Feature.ListParents return a sequence of features
that contain all the children or parents of the specified feature.

To get the first feature in the specified group access the method
pfcFeature.FeatureGroup.GetGroupLeader.

The methods pfcFeature.FeaturePattern.GetPatternLeader


and pfcFeature.FeaturePattern.ListMembers return features
that make up the specified feature pattern. See the section Feature
Groups and Patterns for more information on feature patterns.

The method pfcSolid.Solid.ListFailedFeatures returns a


sequence that contains all the features that failed regeneration.

The method pfcSolid.Solid.ListFeaturesByType returns a


sequence of features contained in the model. You can specify which
type of feature to collect by passing in one of the FeatureType
enumeration objects, or you can collect all features by passing void
null as the type. If you list all features, the resulting sequence will
include invisible features that Pro/ENGINEER creates internally.
Use the method’s VisibleOnly argument to exclude them.

The method pfcSolid.Solid.GetFeatureById returns the feature


object with the corresponding integer identifier.

14 - 2 J-Link User’s Guide


Feature Information
Methods Introduced:

• pfcFeature.Feature.GetFeatType
• pfcFeature.Feature.GetStatus
• pfcFeature.Feature.GetIsVisible
• pfcFeature.Feature.GetIsReadonly

Features
• pfcFeature.Feature.GetIsEmbedded
• pfcFeature.Feature.GetNumber
• pfcFeature.Feature.GetFeatTypeName
• pfcFeature.Feature.GetFeatSubType
• pfcRoundFeat.RoundFeat.GetIsAutoRoundMember
The enumeration classes FeatureType and FeatureStatus
provide information for a specified feature. The following methods
specify this information:

• pfcFeature.Feature.GetFeatType—Returns the type of a


feature.
• pfcFeature.Feature.GetStatus—Returns whether the
feature is suppressed, active, or failed regeneration.
The other methods that gather feature information include the
following:

• pfcFeature.Feature.GetIsVisible—Identifies whether the


specified feature will be visible on the screen.
• pfcFeature.Feature.GetIsReadonly—Identifies whether the
specified feature can be modified.
• pfcFeature.Feature.GetIsEmbedded—Specifies whether
the specified feature is an embedded datum.
• pfcFeature.Feature.GetNumber—Returns the feature
regeneration number. This method returns void null if the
feature is suppressed.
The method pfcFeature.Feature.GetFeatTypeName returns a
string representation of the feature type.

The method pfcFeature.Feature.GetFeatSubType returns a


string representation of the feature subtype, for example, "Extrude"
for a protrusion feature.

Features 14 - 3
The method
pfcRoundFeat.RoundFeat.GetIsAutoRoundMember
determines whether the specified round feature is a member of an
Auto Round feature.

Feature Operations
Methods Introduced:

• pfcSolid.Solid.ExecuteFeatureOps
• pfcFeature.Feature.CreateSuppressOp
• pfcFeature.SuppressOperation.SetClip
• pfcFeature.SuppressOperation.SetAllowGroupMembers
• pfcFeature.SuppressOperation.SetAllowChildGroupMembers
• pfcFeature.Feature.CreateDeleteOp
• pfcFeature.DeleteOperation.SetClip
• pfcFeature.DeleteOperation.SetAllowGroupMembers
• pfcFeature.DeleteOperation.SetAllowChildGroupMembers
• pfcFeature.DeleteOperation.SetKeepEmbeddedDatums
• pfcFeature.Feature.CreateResumeOp
• pfcFeature.ResumeOperation.SetWithParents
• pfcFeature.Feature.CreateReorderBeforeOp
• pfcFeature.ReorderBeforeOperation.SetBeforeFeat
• pfcFeature.Feature.CreateReorderAfterOp
• pfcFeature.ReorderAfterOperation.SetAfterFeat
• pfcFeature.FeatureOperations.create
The method pfcSolid.Solid.ExecuteFeatureOps causes a
sequence of feature operations to run in order. Feature operations
include suppressing, resuming, reordering, and deleting features.
The optional RegenInstructions argument specifies whether the
user will be allowed to fix the model if a regeneration failure occurs.

Note: The method pfcSolid.Solid.ExecuteFeatureOps is


not supported in the No-Resolve mode, introduced in
Pro/ENGINEER Wildfire 5.0. It throws an exception
pfcExceptions.XtoolkitBadContext. To continue
with the Pro/ENGINEER Wildfire 4.0 behavior in the

14 - 4 J-Link User’s Guide


Resolve mode, set the configuration option
regen_failure_handling to resolve_mode in the
Pro/ENGINEER session. Refer to the "Solid
Operations" section in the "Solid" chapter for more
information on the No-Resolve mode.
You can create an operation that will delete, suppress, reorder, or
resume certain features using the methods in the interface
pfcFeature.Feature. Each created operation must be passed as a
member of the FeatureOperations object to the method
pfcSolid.Solid.ExecuteFeatureOps. You can create a sequence

Features
of the FeatureOperations object using the method
pfcFeature.FeatureOperations.create.

Some of the operations have specific options that you can modify to
control the behavior of the operation:

• Clip—Specifies whether to delete or suppress all features after


the selected feature. By default, this option is false.
Use the methods pfcFeature.DeleteOperation.SetClip and
pfcFeature.SuppressOperation.SetClip to modify this
option.
• AllowGroupMembers—If this option is set to true and if the
feature to be deleted or suppressed is a member of a group, then
the feature will be deleted or suppressed out of the group. If this
option is set to false, then the entire group containing the
feature is deleted or suppressed. By default, this option is false.
It can be set to true only if the option Clip is set to true.
Use the methods
pfcFeature.SuppressOperation.SetAllowGroupMembers
and
pfcFeature.DeleteOperation.SetAllowGroupMembers to
modify this option.
• AllowChildGroupMembers—If this option is set to true and if
the children of the feature to be deleted or suppressed are
members of a group, then the children of the feature will be
individually deleted or suppressed out of the group. If this
option is set to false, then the entire group containing the
feature and its children is deleted or suppressed. By default,
this option is false. It can be set to true only if the options Clip
and AllowGroupMembers are set to true.
Use the
methodspfcFeature.SuppressOperation.SetAllowChildGr
oupMembers and
pfcFeature.DeleteOperation.SetAllowChildGroupMemb
ers to modify this option.

Features 14 - 5
• KeepEmbeddedDatums—Specifies whether to retain the
embedded datums stored in a feature while deleting the
feature. By default, this option is false.
Use the method
pfcFeature.DeleteOperation.SetKeepEmbeddedDatums
to modify this option.
• WithParents—Specifies whether to resume the parents of the
selected feature.
Use the method
pfcFeature.ResumeOperation.SetWithParents to modify
this option.
• BeforeFeat—Specifies the feature before which you want to
reorder the features.
Use the
methodpfcFeature.ReorderBeforeOperation.SetBeforeFe
at to modify this option.
• AfterFeat—Specifies the feature after which you want to
reorder the features.
Use the
methodpfcFeature.ReorderAfterOperation.SetAfterFeat
to modify this option.

Feature Groups and Patterns


Patterns are treated as features in Pro/ENGINEER Wildfire. A
feature type, FEATTYPE_PATTERN_HEAD, is used for the
pattern header feature.

The result of the pattern header feature for users of previous


versions of J-Link is as follows:

• Models that contain patterns get one extra feature of type


FEATTYPE_PATTERN_HEAD in the regeneration list. This
changes the feature numbers of all subsequent features,
including those in the pattern.
Note: The pattern header feature is not treated as a leader or
a member of the pattern by the methods described in
the following section.

14 - 6 J-Link User’s Guide


Methods Introduced:

• pfcFeature.Feature.GetGroup
• pfcFeature.Feature.GetPattern
• pfcSolid.Solid.CreateLocalGroup
• pfcFeature.FeatureGroup.GetPattern
• pfcFeature.FeatureGroup.GetGroupLeader
• pfcFeature.FeaturePattern.GetPatternLeader

Features
• pfcFeature.FeaturePattern.ListMembers
• pfcFeature.FeaturePattern.Delete
The method pfcFeature.Feature.GetGroup returns a handle to
the local group that contains the specified feature.

To get the first feature in the specified group call the method
pfcFeature.FeatureGroup.GetGroupLeader.

The methods pfcFeature.FeaturePattern.GetPatternLeader


and pfcFeature.FeaturePattern.ListMembers return features
that make up the specified feature pattern.

The methods pfcFeature.Feature.GetPattern and


pfcFeature.FeatureGroup.GetPattern return the
FeaturePattern object that contains the corresponding Feature
or FeatureGroup. Use the method
pfcSolid.Solid.CreateLocalGroup to take a sequence of features
and create a local group with the specified name. To delete a
FeaturePattern object, call the method
pfcFeature.FeaturePattern.Delete.

Changes To Feature Groups


Beginning in Revision 2000i2, the structure of feature groups is
different than in previous releases. Feature groups now have a
group header feature, which shows up in the model information and
feature list for the model. This feature will be inserted in the
regeneration list to a position just before the first feature in the
group. Existing models, when retrieved into Revision 2000i2, will
have their groups automatically updated to this structure upon
retrieval.

The results of these changes are as follows:

Features 14 - 7
• Models that contain groups will get one extra feature in the
regeneration list, of type
FeatureType.FEATTYPE_GROUP_HEAD. This will change the
feature numbers of all subsequent features, including those in
the group.
• Each group automatically contains one new feature in the list of
features returned from
pfcFeature.FeatureGroup.ListMembers.
• Each group automatically gets a different leader feature (the
group head feature is the leader). This is returned from
pfcFeature.FeatureGroup.GetGroupLeader.
• Each group pattern contains a series of groups, and each group
in the pattern will be similarly altered.

User Defined Features


Groups in Pro/ENGINEER represent sets of contiguous features
that act as a single feature for specific operations. Individual
features are affected by most operations while some operations
apply to an entire group:

• Suppress
• Delete
• Layers
• Patterning
User defined Features (UDFs) are groups of features that are
stored in a file. When a UDF is placed in a new model the created
features are automatically assigned to a group. A local group is a
set of features that have been specifically assigned to a group to
make modifications and patterning easier.

Note: All methods in this section can be used for UDFs and
local groups.

14 - 8 J-Link User’s Guide


Read Access to Groups and User Defined Features
Methods Introduced:

• pfcFeature.FeatureGroup.GetUDFName
• pfcFeature.FeatureGroup.GetUDFInstanceName
• pfcFeature.FeatureGroup.ListUDFDimensions
• pfcUDFGroup.UDFDimension.GetUDFDimensionName

Features
User defined features (UDF’s) are groups of features that can be
stored in a file and added to a new model. A local group is similar to
a UDF except it is available only in the model in which is was
created.

The method pfcFeature.FeatureGroup.GetUDFName provides


the name of the group for the specified group instance. A particular
group definition can be used more than once in a particular model.

If the group is a family table instance, the method


pfcFeature.FeatureGroup.GetUDFInstanceName suppliesthe
instance name.

The method pfcFeature.FeatureGroup.ListUDFDimensions


traverses the dimensions that belong to the UDF. These dimensions
correspond to the dimensions specified as variables when the UDF
was created. Dimensions of the original features that were not
variables in the UDF are not included unless the UDF was placed
using the Independent option.

The method
pfcUDFGroup.UDFDimension.GetUDFDimensionName
provides access to the dimension name specified when the UDF was
created, and not the name of the dimension in the current model.
This name is required to place the UDF programmatically using the
method pfcSolid.Solid.CreateUDFGroup.

Creating Features from UDFs


Method Introduced:

• pfcSolid.Solid.CreateUDFGroup
The method pfcSolid.Solid.CreateUDFGroup is used to create
new features by retrieving and applying the contents of an existing
UDF file. It is equivalent to the Pro/ENGINEER command
Feature, Create, User Defined.

Features 14 - 9
To understand the following explanation of this method, you must
have a good knowledge and understanding of the use of UDF’s in
Pro/ENGINEER. PTC recommends that you read about UDF’s in
the Pro/ENGINEER on-line help, and practice defining and using
UDF’s in Pro/ENGINEER before you attempt to use this method.

When you create a UDF interactively, Pro/ENGINEER prompts you


for the information it needs to fix the properties of the resulting
features. When you create a UDF from J-Link, you can provide
some or all of this information programmatically by filling several
compact data classes that are inputs to the method
pfcSolid.Solid.CreateUDFGroup.

During the call to pfcSolid.Solid.CreateUDFGroup,


Pro/ENGINEER prompts you for the following:

• Information required by the UDF that was not provided in the


input data structures.
• Correct information to replace erroneous information
Such prompts are a useful way of diagnosing errors when you
develop your application. This also means that, in addition to
creating UDF’s programmatically to provide automatic synthesis of
model geometry, you can also use
pfcSolid.Solid.CreateUDFGroup to create UDF’s
semi-interactively. This can simplify the interactions needed to
place a complex UDF making it easier for the user and less prone to
error.

Creating UDFs
Creating a UDF requires the following information:

• Name—The name of the UDF you are creating and the instance
name if applicable.
• Dependency—Specify if the UDF is independent of the UDF
definition or is modified by the changers made to it.
• Scale—How to scale the UDF relative to the placement model.
• Variable Dimension—The new values of the variables
dimensions and pattern parameters, those whose values can be
modified each time the UDF is created.
• Dimension Display—Whether to show or blank non-variable
dimensions created within the UDF group.

14 - 10 J-Link User’s Guide


• References—The geometrical elements that the UDF needs in
order to relate the features it contains to the existing models
features. The elements correspond to the picks that
Pro/ENGINEER prompts you for when you create a UDF
interactively using the prompts defined when the UDF was
created. You cannot select an embedded datum as the UDF
reference.
• Parts Intersection—When a UDF that is being created in an
assembly contains features that modify the existing geometry
you must define which parts are affected or intersected. You

Features
also need to know at what level in an assembly each
intersection is going to be visible.
• Orientations—When a UDF contains a feature with a direction
that is defined in respect to a datum plane Pro/ENGINEER
must know what direction the new feature will point to. When
you create such a UDF interactively Pro/ENGINEER prompt
you for this information with a flip arrow.
• Quadrants—When a UDF contains a linearly placed feature
that references two datum planes to define it’s location in the
new model Pro/ENGINEER prompts you to pick the location of
the new feature. This is determined by which side of each
datum plane the feature must lie. This selection is referred to
as the quadrant because the are four possible combinations for
each linearly place feature.
To pass all the above values to Pro/ENGINEER, J-Link uses a
special class that prepares and sets all the options and passes them
to Pro/ENGINEER.

Creating Interactively Defined UDFs


Method Introduced:

• pfcUDFGroup.pfcUDFGroup.UDFPromptCreateInstructions_Create
This static method is used to create an instructions object that can
be used to prompt a user for the required values that will create a
UDF interactively.

Creating a Custom UDF


Method Introduced:

• pfcUDFCreate.pfcUDFCreate.UDFCustomCreateInstructions_Create

Features 14 - 11
This method creates a UDFCustomCreateInstructions object with a
specified name. To set the UDF creation parameters
programmatically you must modify this object as described below.
The members of this class relate closely to the prompts
Pro/ENGINEER gives you when you create a UDF interactively.
PTC recommends that you experiment with creating the UDF
interactively using Pro/ENGINEER before you write the J-Link
code to fill the structure.

Setting the Family Table Instance Name


Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetInstanceName
• pfcUDFCreate.UDFCustomCreateInstructions.GetInstanceName
If the UDF contains a family table, this field can be used to select
the instance in the table. If the UDF does not contain a family
table, or if the generic instance is to be selected, the do not set the
string.

Setting Dependency Type


MethodsIntroduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetDependencyType
• pfcUDFCreate.UDFCustomCreateInstructions.GetDependencyType
The UDFDependencyType object represents the dependency type of
the UDF. The choices correspond to the choices available when you
create a UDF interactively. This enumerated type takes the
following values:

• UDFDEP_INDEPENDENT
• UDFDEP_DRIVEN
Note: UDFDEP_INDEPENDENT is the default value, if this
option is not set.

Setting Scale and Scale Type


Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetScaleType
• pfcUDFCreate.UDFCustomCreateInstructions.GetScaleType
• pfcUDFCreate.UDFCustomCreateInstructions.SetScale
• pfcUDFCreate.UDFCustomCreateInstructions.GetScale

14 - 12 J-Link User’s Guide


ScaleType specifies the length units of the UDF in the form of the
UDFScaleType object. This enumerated type takes the following
values:

• UDFSCALE_SAME_SIZE
• UDFSCALE_SAME_DIMS
• UDFSCALE_CUSTOM
• UDFSCALE_nil

Features
Note: The default value is UDFSCALE_SAME_SIZE if this
option is not set.
Scale specifies the scale factor. If the ScaleType is set to
UDFSCALE_CUSTOM, SetScale assigns the user defined scale factor.
Otherwise, this attribute is ignored.

Setting the Appearance of the Non UDF Dimensions


Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetDimDisplayType
• pfcUDFCreate.UDFCustomCreateInstructions.GetDimDisplayType
The pfcUDFCreate.UDFDimensionDisplayType object sets the
options in Pro/ENGINEER for determining the appearance in the
model of UDF dimensions and pattern parameters that were not
variable in the UDF, and therefore cannot be modified in the model.
This enumerated type takes the following values:

• UDFDISPLAY_NORMAL
• UDFDISPLAY_READ_ONLY
• UDFDISPLAY_BLANK
Note: The default value is UDFDISPLAY_NORMAL if this
option is not set.

Setting the Variable Dimensions and Parameters


Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetVariantValues
• pfcUDFCreate.UDFVariantValues.create
• pfcUDFCreate.UDFVariantValues.insert
• pfcUDFCreate.pfcUDFCreate.UDFVariantDimension_Create
• pfcUDFCreate.pfcUDFCreate.UDFVariantPatternParam_Create

Features 14 - 13
pfcUDFVariantValues class represents an array of variable
dimensions and pattern parameters.

Use pfcUDFCreate.UDFVariantValues.create to create an


empty object and then use
pfcUDFCreate.UDFVariantValues.insert to add
pfcUDFCreate.UDFVariantPatternParam or
pfcUDFCreate.UDFVariantDimension objects one by one.
pfcUDFCreate.pfcUDFCreate.UDFVariantDimension_Creat
e is a static method creating a
pfcUDFCreate.UDFVariantDimension. It accepts the following
parameters:

• Name—The symbol that the dimension had when the UDF was
originally defined not the prompt that the UDF uses when it is
created interactively. To make this name easy to remember,
before you define the UDF that you plan to create with the
J-Link, you should modify the symbols of all the dimensions
that you want to select to be variable. If you get the name
wrong, pfcSolid.Solid.CreateUDFGroup will not recognize
the dimension and prompts the user for the value in the usual
way does not modify the value.
• DimensionValue—The new value.
If you do not remember the name, you can find it by creating the
UDF interactively in a test model, then using the
pfcFeature.FeatureGroup.ListUDFDimensions and
pfcUDFGroup.UDFDimension.GetUDFDimensionName to
find out the name.

pfcUDFCreate.pfcUDFCreate.UDFVariantPatternParam_Cr
eate is a static method which creates a
pfcUDFCreate.UDFVariantPatternParam. It accepts the
following parameters:

• name—The string name that the pattern parameter had when


the UDF was originally defined
• number—The new value.
After the pfcUDFCreate.UDFVariantValues object has been
compiled, use
pfcUDFCreate.UDFCustomCreateInstructions.SetVariantV
alues to add the variable dimensions and parameters to the
instructions.

14 - 14 J-Link User’s Guide


Setting the User Defined References
Methods Introduced:

• pfcUDFCreate.UDFReferences.create
• pfcUDFCreate.UDFReferences.insert
• pfcUDFCreate.pfcUDFCreate.UDFReference_Create
• pfcUDFCreate.UDFReference.SetIsExternal
• pfcUDFCreate.UDFReference.SetReferenceItem

Features
• pfcUDFCreate.UDFCustomCreateInstructions.SetReferences
UDFReferences class represents an array of element references.
Use pfcUDFCreate.UDFReferences.create to create an empty
object and then use pfcUDFCreate.UDFReferences.insert to
add UDFReference objects one by one.

The method
pfcUDFCreate.pfcUDFCreate.UDFReference_Create is a
static method creating a UDFReference object. It accepts the
following parameters:

• PromptForReference—The prompt defined for this reference


when the UDF was originally set up. It indicates which
reference this structure is providing. If you get the prompt
wrong, pfcSolid.Solid.CreateUDFGroup will not recognize it
and prompts the user for the reference in the usual way.
• ReferenceItem—Specifies the pfcSelect.Selection object
representing the referenced element. You can set Selection
programmatically or prompt the user for a selection separately.
You cannot set an embedded datum as the UDF refereence.
There are two types of reference:
– Internal—The referenced element belongs directly to the
model that will contain the UDF. For an assembly, this
means that the element belongs to the top level.
– External—The referenced element belongs to an assembly
member other than the placement member.
To set the reference type, use the method
pfcUDFCreate.UDFReference.SetIsExternal.

To set the item to be used for reference, use the method


pfcUDFCreate.UDFReference.SetReferenceItem.

Features 14 - 15
After the UDFReferences object has been set, use
pfcUDFCreate.UDFCustomCreateInstructions.SetReference
s to add the program-defined references.

Setting the Assembly Intersections


Methods Introduced:

• pfcUDFCreate.UDFAssemblyIntersections.create()
• pfcUDFCreate.UDFAssemblyIntersections.insert()
• pfcUDFCreate.pfcUDFCreate.UDFAssemblyIntersection_Create
• pfcUDFCreate.UDFAssemblyIntersection.SetInstanceNames
• pfcUDFCreate.UDFCustomCreateInstructions.SetIntersections
The pfcUDFCreate.UDFAssemblyIntersections class
represents an array of element references.

Use
pfcUDFCreate.pfcUDFCreate.UDFAssemblyIntersections.cr
eate to create an empty object and then use
pfcUDFCreate.UDFAssemblyIntersections.insert to add
pfcUDFCreate.UDFAssemblyIntersection objects one by one.

pfcUDFCreate.pfcUDFCreate.UDFAssemblyIntersection_Cr
eate is a static method creating a pfcUDFCreate.UDFReference
object. It accepts the following parameters:

• ComponentPath—Is an com.ptc.cipjava.intseq type object


representing the component path of the part to be intersected.
• Visibility level—The number that corresponds to the visibility
level of the intersected part in the assembly. If the number is
equal to the length of the component path the feature is visible
in the part that it intersects. If Visibility level is 0, the feature is
visible at the level of the assembly containing the UDF.
pfcUDFCreate.UDFAssemblyIntersection.SetInstanceName
s sets an array of names for the new instances of parts created to
represent the intersection geometry. This method accepts the
following parameters:

• instance names—is a com.ptc.cipjava.stringseq type object


representing the array of new instance names.
After the pfcUDFCreate.UDFAssemblyIntersections object
has been set, use
pfcUDFCreate.UDFCustomCreateInstructions.SetIntersecti
ons to add the assembly intersections.

14 - 16 J-Link User’s Guide


Setting Orientations
Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetOrientations
• pfcUDFCreate.UDFOrientations.create
• pfcUDFCreate.UDFOrientations.insert
pfcUDFCreate.UDFOrientations class represents an array of
orientations that provide the answers to Pro/ENGINEER prompts

Features
that use a flip arrow. Each term is a
pfcUDFCreate.UDFOrientation object that takes the following
values:

• UDFORIENT_INTERACTIVE—Prompt for the orientation


using a flip arrow.
• UDFORIENT_NO_FLIP—Accept the default flip orientation.
• UDFORIENT_FLIP—Invert the orientation from the default
orientation.
Use pfcUDFCreate.UDFOrientations.create to create an empty
object and then use pfcUDFCreate.UDFOrientations.insert to
add pfcUDFCreate.UDFOrientation objects one by one.

The order of orientations should correspond to the order in which


Pro/ENGINEER prompts for them when the UDF is created
interactively. If you do not provide an orientation that
Pro/ENGINEER needs, it uses the default value NO_FLIP.

After the pfcUDFCreate.UDFOrientations object has been set


use
pfcUDFCreate.UDFCustomCreateInstructions.SetOrientati
ons to add the orientations.

Setting Quadrants
Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetQuadrants
The method
pfcUDFCreate.UDFCustomCreateInstructions.SetQuadrant
s sets an array of points, which provide the X, Y, and Z coordinates
that correspond to the picks answering the Pro/ENGINEER
prompts for the feature positions. The order of quadrants should
correspond to the order in which Pro/ENGINEER prompts for them
when the UDF is created interactively.

Features 14 - 17
Setting the External References
Methods Introduced:

• pfcUDFCreate.UDFCustomCreateInstructions.SetExtReferences
The method
pfcUDFCreate.UDFCustomCreateInstructions.SetExtRefere
nces sets an external reference assembly to be used when placing
the UDF. This will be required when placing the UDF in the
component using references outside of that component. References
could be to the top level assembly of another component.

Example Code

The example code places copies of a node UDF at a particular


coordinate system location in a part. The node UDF is a spherical
cut centered at the coordinate system whose diameter is driven by
the 'diam' argument to the method. The method returns the
FeatureGroup object created, or null if an error occurred.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcUDFCreate.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcExceptions.*;

public class pfcUDFCreateExamples {

public static FeatureGroup createNodeUDFInPart (CoordSystem csys,


double diam)
throws com.ptc.cipjava.jxthrowable
{
/* The instructions for the UDF creation */
UDFCustomCreateInstructions instrs =
pfcUDFCreate.UDFCustomCreateInstructions_Create ("node");

/* Make non-variant dimensions blank so they cannot be changed */


instrs.SetDimDisplayType (UDFDimensionDisplayType.UDFDISPLAY_BLANK);

/* Initialize the UDF reference and assign it to the instructions.


The string argument is the reference prompt for the particular
reference. */
Selection csys_sel = pfcSelect.CreateModelItemSelection (csys,null);

UDFReference csys_ref =
pfcUDFCreate.UDFReference_Create ("REF_CSYS", csys_sel);

14 - 18 J-Link User’s Guide


UDFReferences refs = UDFReferences.create();
refs.set (0, csys_ref);

instrs.SetReferences (refs);

/* Initialize the variant dimension and assign it to the


instructions. The string argument is the dimension symbol for the
variant dimension. */

UDFVariantDimension var_diam =
pfcUDFCreate.UDFVariantDimension_Create ("d11", diam);

Features
UDFVariantValues vals = UDFVariantValues.create();
vals.set (0, var_diam);

instrs.SetVariantValues (vals);

/* We need the placement model for the UDF for the call to
CreateUDFGroup(). If you were placing the UDF in a model other
than the owner of the coordinate system, the placement would need
to be provided separately.*/

Solid placement_model = (Solid)csys.GetDBParent();

FeatureGroup group = null;


try
{
group = placement_model.CreateUDFGroup (instrs);
}
catch (XToolkitError xte)
{
System.out.println ("Caught exception: "+xte);
xte.printStackTrace ();
}
return (group);
}
}

Example Code

This example places copies of a hole UDF at a particular location in


an assembly. The hole is embedded in a surface of one of the
assembly's components, and placed a particular location away from
two normal datum planes (the default value for the dimension is
used for this example).
The UDF creation requires a quadrant determining the location for
the UDF (since it could be one of four areas) and intersection
instructions for the assembly members (this example makes the
hole visible down to the part level).

Features 14 - 19
The method returns the FeatureGroup object created, or null if an
error occurred. A usage error may be detected, causing an exception
to be thrown.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcUDFCreate.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcModel.*;

public class pfcUDFCreateExamples {

public static FeatureGroup


createHoleUDFInAssembly (int side_ref_feat_ids[],
ComponentPath reference_path,
int placement_surface_id,
Double scale,
Point3D quadrant)
throws java.lang.Exception
{
if (side_ref_feat_ids.length != 2)
{
throw new Exception ("Error: improper array size.");
}

UDFCustomCreateInstructions instrs =
pfcUDFCreate.UDFCustomCreateInstructions_Create ("hole_quadrant");

if (scale == null)
{
instrs.SetScaleType (UDFScaleType.UDFSCALE_SAME_SIZE);
}
else
{
instrs.SetScaleType (UDFScaleType.UDFSCALE_CUSTOM);
instrs.SetScale (scale);
}

/* The first UDF reference is a surface from a component model in the


assembly. This requires using the ComponentPath to initialize the
Selection, and setting the IsExternal flag to true.
*/
Solid reference_model = reference_path.GetLeaf ();
ModelItem placement_surface =
reference_model.GetItemById (ModelItemType.ITEM_SURFACE,

14 - 20 J-Link User’s Guide


placement_surface_id);

if (!(placement_surface instanceof com.ptc.pfc.pfcGeometry.Surface))


{
throw new Exception("Error: input surface id "+
placement_surface_id+ " is not a
surface.");
}

Selection surf_selection =
pfcSelect.CreateModelItemSelection (placement_surface,

Features
reference_path);

UDFReferences refs = UDFReferences.create();

UDFReference ref_1 =
pfcUDFCreate.UDFReference_Create ("embedding surface?",
surf_selection);
ref_1.SetIsExternal (true);

refs.set (0, ref_1);

/* The next two UDF references are expected to be Datum Plane


features in the assembly.
The reference is constructed using the Surface object contained in the
Datum plane feature. */

Selection [] datum_sel = new Selection [2];

Solid assembly = reference_path.GetRoot();

for (int i = 0; i < 2; i++)


{
ModelItem side_ref =
assembly.GetItemById (ModelItemType.ITEM_FEATURE,
side_ref_feat_ids [i]);

if (!(side_ref instanceof
com.ptc.pfc.pfcDatumPlaneFeat.DatumPlaneFeat))
{
throw new Exception ("Error: input surface id "+
side_ref_feat_ids[i]+
" is not a datum plane.");
}

ModelItems surfs =
((Feature)side_ref).ListSubItems (ModelItemType.ITEM_SURFACE);

Surface datum_plane_surf = (Surface) surfs.get (0);


datum_sel[i] =
pfcSelect.CreateModelItemSelection (datum_plane_surf, null);

Features 14 - 21
}

UDFReference ref_2 = pfcUDFCreate.UDFReference_Create ("front


surface",
datum_sel[0]);
refs.set (1, ref_2);

UDFReference ref_3 = pfcUDFCreate.UDFReference_Create ("right


surface",
datum_sel[1]);
refs.set (2, ref_3);

instrs.SetReferences (refs);

/*
If the UDF and the placement both use two normal datum planes as
dimensioned references, Pro/ENGINEER prompts the user for a pick
to define the quadrant where the UDF will be placed. */

Point3Ds quadrants = Point3Ds.create ();


quadrants.set (0, quadrant);
instrs.SetQuadrants (quadrants);

/*
This hole UDF should be visible down to the component part level.
To direct this, the UDFAssemblyIntersection should be
created with the component ids, and the visibility level argument equal to
the number of component levels. Alternatively, the
visibility level could be 0 to force the UDF to appear in the assembly
only.*/

UDFAssemblyIntersections inters = UDFAssemblyIntersections.create();


ComponentPath [] leafs =
pfcAssemblyUtilities.listEachLeafComponent ((Assembly)assembly);

for (int i = 0; i < leafs.length; i++)


{
intseq ids = leafs[i].GetComponentIds();
UDFAssemblyIntersection inter =
pfcUDFCreate.UDFAssemblyIntersection_Create(ids,
ids.getarraysize());

inters.set (i, inter);


}

instrs.SetIntersections(inters);

/*
Create the assembly group.
*/
FeatureGroup group = null;

14 - 22 J-Link User’s Guide


try
{
group = assembly.CreateUDFGroup (instrs);
}
catch (XToolkitError xte)
{
System.out.println ("Caught exception: "+xte);
xte.printStackTrace ();
}
return (group);

Features
}

class pfcAssemblyUtilities
{
private static Assembly useAsm;
private static java.util.Vector path_array;

/*
This utility method returns an array of all ComponentPath's to all
component parts ('leafs') in an assembly.
*/
public static ComponentPath [] listEachLeafComponent (Assembly assembly)
throws com.ptc.cipjava.jxthrowable
{
useAsm = assembly;
path_array = new java.util.Vector ();

intseq startLevel = intseq.create();


listSubAsmComponents (startLevel);

ComponentPath [] ret = new ComponentPath [path_array.size()];

path_array.copyInto (ret);

return (ret);
}

/*
This method is used to recursively visit all levels of the assembly
structure.
*/
private static void listSubAsmComponents (intseq currentLevel)
throws com.ptc.cipjava.jxthrowable
{
Solid currentComponent;
ComponentPath currentPath = null;

Features 14 - 23
int level = currentLevel.getarraysize();

/* Special case, level = 0 for the top level assembly. */


if (level > 0)
{

currentPath = pfcAssembly.CreateComponentPath (useAsm,


currentLevel);
currentComponent = currentPath.GetLeaf();
}
else
{
currentComponent = useAsm;
}

if (currentComponent.GetType ().equals (ModelType.MDL_PART) && level


> 0)
{
path_array.addElement (currentPath);
}
else
{
/*
Find all component features in the current component object.
Visit each (adjusting the component id paths accordingly).
*/
Features subComponents =
currentComponent.ListFeaturesByType (Boolean.TRUE,
FeatureType.FEATTYPE_COMPONENT);

for (int i = 0; i < subComponents.getarraysize(); i++)


{
Feature componentFeat = subComponents.get (i);
int id = componentFeat.GetId ();

currentLevel.set (level, id);

listSubAsmComponents (currentLevel);
}
}

/* Clean up current level of component ids before returning up one


level. */
if (level != 0)
{
currentLevel.removerange (level-1, level);
}
return;
}
}

14 - 24 J-Link User’s Guide


15
Datum Features

This chapter describes the J-Link methods that provide read access
to the properties of datum features.

Topic Page

Datum Plane Features 15 - 2


Datum Axis Features 15 - 6
General Datum Point Features 15 - 7
Datum Coordinate System Features 15 - 9

15 - 1
Datum Plane Features
The properties of the Datum Plane feature are defined in the
pfcDatumPlaneFeat.DatumPlaneFeat data object.

Methods Introduced:

• pfcDatumPlaneFeat.DatumPlaneFeat.GetFlip
• pfcDatumPlaneFeat.DatumPlaneFeat.GetConstraints
• pfcDatumPlaneFeat.DatumPlaneConstraint.GetConstraintType
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneThroughConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneThroughConstraint.GetThroughRef
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneNormalConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneNormalConstraint.GetNormalRef
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneParallelConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneParallelConstraint.GetParallelRef
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneTangentConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneTangentConstraint.GetTangentRef
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneOffsetConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneOffsetConstraint.GetOffsetRef
• pfcDatumPlaneFeat.DatumPlaneOffsetConstraint.GetOffsetValue
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneOffsetCoordSysConstraint_C
reate
• pfcDatumPlaneFeat.DatumPlaneOffsetCoordSysConstraint.GetCsysAxis
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneAngleConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneAngleConstraint.GetAngleRef
• pfcDatumPlaneFeat.DatumPlaneAngleConstraint.GetAngleValue
• pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneSectionConstraint_Create
• pfcDatumPlaneFeat.DatumPlaneSectionConstraint.GetSectionRef
• pfcDatumPlaneFeat.DatumPlaneSectionConstraint.GetSectionIndex
• pfcDatumPlaneFeat.DatumPlaneDefaultXConstraint.DatumPlaneDefaultXConstrain
t_Create

15 - 2 J-Link User’s Guide


• pfcDatumPlaneFeat.DatumPlaneDefaultYConstraint.DatumPlaneDefaultYConstrain
t_Create
• pfcDatumPlaneFeat.DatumPlaneDefaultZConstraint.DatumPlaneDefaultZConstrain
t_Create
The properties of the pfcDatumPlaneFeat.DatumPlaneFeat
object are described as follows:

• Flip—Specifies whether the datum plane was flipped during

Datum Features
creation. Use the method
pfcDatumPlaneFeat.DatumPlaneFeat.GetFlip to
determine if the datum plane was flipped during creation.
• Constraints—Specifies a collection of constraints (given by the
pfcDatumPlaneFeat.DatumPlaneConstraint object). The
method
pfcDatumPlaneFeat.DatumPlaneFeat.GetConstraints
obtains the collection of constraints defined for the datum
plane.
Use the method
pfcDatumPlaneFeat.DatumPlaneConstraint.GetConstraint
Type to obtain the type of constraint. The type of constraint is
given by the pfcDatumPlaneFeat.DatumPlaneConstraintType
enumerated type. The available types are as follows:

• DTMPLN_THRU—Specifies the Through constraint. The


pfcDatumPlaneFeat.DatumPlaneThroughConstraint
object specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneTh
roughConstraint_Create to create a new object. Use the
method
pfcDatumPlaneFeat.DatumPlaneThroughConstraint.Ge
tThroughRef to get the reference selection handle for the
Through constraint.
• DTMPLN_NORM—Specifies the Normal constraint. The
pfcDatumPlaneFeat.DatumPlaneNormalConstraint object
specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneNo
rmalConstraint_Create to create a new object. Use the
method
pfcDatumPlaneFeat.DatumPlaneNormalConstraint.Get
NormalRef to get the reference selection handle for the
Normal constraint.

Datum Features 15 - 3
• DTMPLN_PRL—Specifies the Parallel constraint. The
pfcDatumPlaneFeat.DatumPlaneParallelConstraint
object specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlanePa
rallelConstraint_Create to create a new object. Use the
method
pfcDatumPlaneFeat.DatumPlaneParallelConstraint.Get
ParallelRef to get the reference selection handle for the
Parallel constraint.
• DTMPLN_TANG—Specifies the Tangent constraint. The
pfcDatumPlaneFeat.DatumPlaneTangentConstraint
specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneTa
ngentConstraint_Create to create a new object. Use the
method
pfcDatumPlaneFeat.DatumPlaneTangentConstraint.Get
TangentRef to get the reference selection handle for the
Tangent constraint.
• DTMPLN_OFFS—Specifies the Offset constraint. The
pfcDatumPlaneFeat.DatumPlaneOffsetConstraint object
specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneOf
fsetConstraint_Create to create a new object. Use the method
pfcDatumPlaneFeat.DatumPlaneOffsetConstraint.GetOf
fsetRef to get the reference selection handle for the Offset
constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneOffsetConstraint.GetOf
fsetValue to get the offset value.
An Offset constraint where the offset reference is a coordinate
system is given by the
pfcDatumPlaneFeat.DatumPlaneOffsetCoordSysConstra
int object. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneOf
fsetCoordSysConstraint_Create to create a new object. Use
the method
pfcDatumPlaneFeat.DatumPlaneOffsetCoordSysConstr
aint.GetCsysAxis to get the reference coordinate axis.
• DTMPLN_ANG—Specifies the Angle constraint. The
pfcDatumPlaneFeat.DatumPlaneAngleConstraint object
specifies this constraint. Use the method
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneAn
gleConstraint_Create to create a new object. Use the method

15 - 4 J-Link User’s Guide


pfcDatumPlaneFeat.DatumPlaneAngleConstraint.GetAn
gleRef to get the reference selection handle for the Angle
constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneAngleConstraint.GetAn
gleValue to get the angle value.
• DTMPLN_SEC—Specifies the Section constraint. The
pfcDatumPlaneFeat.DatumPlaneSectionConstraint
object specifies this constraint. Use the method

Datum Features
pfcDatumPlaneFeat.pfcDatumPlaneFeat.DatumPlaneSe
ctionConstraint_Create to create a new object. Use the
method
pfcDatumPlaneFeat.DatumPlaneSectionConstraint.Get
SectionRef to get the reference selection for the Section
constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneSectionConstraint.Get
SectionIndex to get the section index.
• DTMPLN_DEF_X—Specifies the default RIGHT constraint for
the datum plane. The
pfcDatumPlaneFeat.DatumPlaneDefaultXConstraint
object specifies this constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneDefaultXConstraint.Da
tumPlaneDefaultXConstraint_Create to create a new
object.
• DTMPLN_DEF_Y—Specifies the default TOP constraint for the
datum plane. The
pfcDatumPlaneFeat.DatumPlaneDefaultYConstraint
object specifies this constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneDefaultYConstraint.Da
tumPlaneDefaultYConstraint_Create to create a new
object.
• DTMPLN_DEF_Z—Specifies the default FRONT constraint for
the datum plane. The
pfcDatumPlaneFeat.DatumPlaneDefaultZConstraint
object specifies this constraint. Use the method
pfcDatumPlaneFeat.DatumPlaneDefaultZConstraint.Da
tumPlaneDefaultZConstraint_Create to create a new
object.

Datum Features 15 - 5
Datum Axis Features
The properties of the Datum Axis feature are defined in the
pfcDatumAxisFeat.DatumAxisFeat data object.

Methods Introduced:

• pfcDatumAxisFeat.DatumAxisFeat.GetConstraints
• pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxisConstraint_Create
• pfcDatumAxisFeat.DatumAxisConstraint.GetConstraintType
• pfcDatumAxisFeat.DatumAxisConstraint.GetConstraintRef
• pfcDatumAxisFeat.DatumAxisFeat.GetDimConstraints
• pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxisDimensionConstraint_Create
• pfcDatumAxisFeat.DatumAxisDimensionConstraint.GetDimOffset
• pfcDatumAxisFeat.DatumAxisDimensionConstraint.GetDimRef
The properties of the pfcDatumAxisFeat.DatumAxisFeat object
are described as follows:

• Constraints—Specifies a collection of constraints (given by the


pfcDatumAxisFeat.DatumAxisConstraint object). The
method
pfcDatumAxisFeat.DatumAxisFeat.GetConstraints
obtains the collection of constraints applied to the Datum Axis
feature.
Use the method
pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxisConstr
aint_Create to create a new
pfcDatumAxisFeat.DatumAxisConstraint object. This
object contains the following attributes:
– ConstraintType—Specifies the type of constraint in terms of
the pfcDatumAxisFeat.DatumAxisConstraintType
enumerated type. The constraint type determines the type
of datum axis. The constraint types are:
- DTMAXIS_NORMAL—Specifies the Normal datum
constraint.
- DTMAXIS_THRU—Specifies the Through datum
constraint.
- DTMAXIS_TANGENT—Specifies the Tangent datum
constraint.

15 - 6 J-Link User’s Guide


- DTMAXIS_CENTER—Specifies the Center datum
constraint.
Use the method
pfcDatumAxisFeat.DatumAxisConstraint.GetConstra
intType to get the constraint type.
– ConstraintRef—Specifies the reference selection for the
constraint. Use the method
pfcDatumAxisFeat.DatumAxisConstraint.GetConstra

Datum Features
intRef to get the reference selection handle.
• DimConstraints—Specifies a collection of dimension constraints
(given by the
pfcDatumAxisFeat.DatumAxisDimensionConstraint
object). The method
pfcDatumAxisFeat.DatumAxisFeat.GetDimConstraints
obtains the collection of dimension constraints applied to the
Datum Axis feature.
Use the method
pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxisDimen
sionConstraint_Create to create a new
pfcDatumAxisFeat.DatumAxisDimensionConstraint
object. This object contains the following attributes:
– DimOffset—Specifies the offset value for the dimension
constraint. Use the method
pfcDatumAxisFeat.DatumAxisDimensionConstraint.
GetDimOffset to get the offset value.
– DimRef—Specifies the reference selection for the dimension
constraint. Use the method
pfcDatumAxisFeat.DatumAxisDimensionConstraint.
GetDimRef to get the reference selection handle.

General Datum Point Features


The properties of the General Datum Point feature are defined in
the pfcDatumPointFeat.DatumPointFeat data object.

Datum Features 15 - 7
Methods Introduced:

• pfcDatumPointFeat.DatumPointFeat.GetFeatName
• pfcDatumPointFeat.DatumPointFeat.GetPoints
• pfcDatumPointFeat.GeneralDatumPoint.GetName
• pfcDatumPointFeat.pfcDatumPointFeat.DatumPointPlacementConstraint_Create
• pfcDatumPointFeat.GeneralDatumPoint.GetPlaceConstraints
• pfcDatumPointFeat.pfcDatumPointFeat.DatumPointDimensionConstraint_Create
• pfcDatumPointFeat.GeneralDatumPoint.GetDimConstraints
• pfcDatumPointFeat.DatumPointConstraint.GetConstraintRef
• pfcDatumPointFeat.DatumPointConstraint.GetConstraintType
• pfcDatumPointFeat.DatumPointConstraint.GetValue
The properties of the pfcDatumPointFeat.DatumPointFeat
object are described as follows:

• FeatName—Specifies the name of the General Datum Point


feature. Use the method
pfcDatumPointFeat.DatumPointFeat.GetFeatName to
get the name.
• GeneralDatumPoints—Specifies a collection of general datum
points (given by the
pfcDatumPointFeat.GeneralDatumPoint object). Use the
method pfcDatumPointFeat.DatumPointFeat.GetPoints
to obtain the collection of general datum points. The
pfcDatumPointFeat.GeneralDatumPoint object consists of
the following attributes:
– Name—Specifies the name of the general datum point. Use
the method
pfcDatumPointFeat.GeneralDatumPoint.GetName to
get the name.
– PlaceConstraints—Specifies a collection of placement
constraints (given by the
pfcDatumPointFeat.DatumPointPlacementConstrain
t object). Use the method
pfcDatumPointFeat.pfcDatumPointFeat.DatumPoint
PlacementConstraint_Create to create a new object. Use
the method
pfcDatumPointFeat.GeneralDatumPoint.GetPlaceCo
nstraints to obtain the collection of placement constraints.

15 - 8 J-Link User’s Guide


– DimConstraints—Specifies a collection of dimension
constraints (given by the
pfcDatumPointFeat.DatumPointDimensionConstrain
t object). Use the method
pfcDatumPointFeat.pfcDatumPointFeat.DatumPoint
DimensionConstraint_Create to create a new object. Use
the method
pfcDatumPointFeat.GeneralDatumPoint.GetDimCon
straints to obtain the collection of dimension constraints.

Datum Features
The constraints for a datum point are given by the
pfcDatumPointFeat.DatumPointConstraint object. This
object contains the following attributes:

• ConstraintRef—Specifies the reference selection for the datum


point constraint. Use the method
pfcDatumPointFeat.DatumPointConstraint.GetConstrai
ntRef to get the reference selection handle.
• ConstraintType—Specifies the type of datum point constraint.
in terms of the
pfcDatumPointFeat.DatumPointConstraintType
enumerated type. Use the method
pfcDatumPointFeat.DatumPointConstraint.GetConstrai
ntType to get the constraint type.
• Value—Specifies the constraint reference value with respect to
the datum point. Use the method
pfcDatumPointFeat.DatumPointConstraint.GetValue to
get the value of the constraint reference with respect to the
datum point.
The pfcDatumPointFeat.DatumPointPlacementConstraint
and pfcDatumPointFeat.DatumPointDimensionConstraint
objects inherit from the
pfcDatumPointFeat.DatumPointConstraint object. Use the
methods of the pfcDatumPointFeat.DatumPointConstraint
object for the inherited objects.

Datum Coordinate System Features


The properties of the Datum Coordinate System feature are defined
in the pfcCoordSysFeat.CoordSysFeat object.

Datum Features 15 - 9
Methods Introduced:

• pfcCoordSysFeat.CoordSysFeat.GetOriginConstraints
• pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysOriginConstraint_Create
• pfcCoordSysFeat.DatumCsysOriginConstraint.GetOriginRef
• pfcCoordSysFeat.CoordSysFeat.GetDimensionConstraints
• pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysDimensionConstraint_Create
• pfcCoordSysFeat.DatumCsysDimensionConstraint.GetDimRef
• pfcCoordSysFeat.DatumCsysDimensionConstraint.GetDimValue
• pfcCoordSysFeat.DatumCsysDimensionConstraint.GetDimConstraintType
• pfcCoordSysFeat.CoordSysFeat.GetOrientationConstraints
• pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysOrientMoveConstraint_Create
• pfcCoordSysFeat.DatumCsysOrientMoveConstraint.GetOrientMoveConstraintTyp
e
• pfcCoordSysFeat.DatumCsysOrientMoveConstraint.GetOrientMoveValue
• pfcCoordSysFeat.CoordSysFeat.GetIsNormalToScreen
• pfcCoordSysFeat.CoordSysFeat.GetOffsetType
• pfcCoordSysFeat.CoordSysFeat.GetOnSurfaceType
• pfcCoordSysFeat.CoordSysFeat.GetOrientByMethod
The properties of the pfcCoordSysFeat.CoordSysFeat object
are described as follows:

• OriginConstraints—Specifies a collection of origin constraints


(given by the
pfcCoordSysFeat.DatumCsysOriginConstraint object).
Use the method
pfcCoordSysFeat.CoordSysFeat.GetOriginConstraints to
obtain the collection of origin constraints for the coordinate
system. Use the method
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysOriginCo
nstraint_Create to create a new
pfcCoordSysFeat.DatumCsysOriginConstraint object.
This object contains the following attribute:
– OriginRef—Specifies the selection reference for the origin.
Use the method
pfcCoordSysFeat.DatumCsysOriginConstraint.GetOr
iginRef to get the selection reference handle.

15 - 10 J-Link User’s Guide


• DimensionConstraints—Specifies a collection of dimension
constraints (given by the
pfcCoordSysFeat.DatumCsysDimensionConstraint
object). Use the method
pfcCoordSysFeat.CoordSysFeat.GetDimensionConstrain
ts to obtain the collection of dimension constraints for the
coordinate system. Use the method
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysDimensio
nConstraint_Create to create a new

Datum Features
pfcCoordSysFeat.DatumCsysDimensionConstraint
object. This object contains the following attributes:
– DimRef—Specifies the reference selection for the dimension
constraint. Use the method
pfcCoordSysFeat.DatumCsysDimensionConstraint.G
etDimRef to get the reference selection handle.
– DimValue—Specifies the value of the reference. Use the
method
pfcCoordSysFeat.DatumCsysDimensionConstraint.G
etDimValue to get the value.
– DimConstraintType—Specifies the type of dimension
constraint in terms of the
pfcCoordSysFeat.DatumCsysDimConstraintType
enumerated type. Use the method
pfcCoordSysFeat.DatumCsysDimensionConstraint.G
etDimConstraintType to get the constraint type. The
constraint types are:
- DTMCSYS_DIM_OFFSET—Specifies the offset type
constraint.
- DTMCSYS_DIM_ALIGN—Specifies the align type
constraint.
• OrientationConstraints—Specifies a collection of orientation
constraints (given by the
pfcCoordSysFeat.DatumCsysOrientMoveConstraint
object) Use the method
pfcCoordSysFeat.CoordSysFeat.GetOrientationConstrai
nts to obtain the collection of orientation constraints for the
coordinate system. Use the method
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsysOrientMo
veConstraint_Create to create a new
pfcCoordSysFeat.DatumCsysOrientMoveConstraints
object. This object contains the following attributes:

Datum Features 15 - 11
– OrientMoveConstraintType—Specifies the type of
orientation for the constraint. The orientation type is given
by the
pfcCoordSysFeat.DatumCsysOrientMoveConstraintT
ype enumerated type. Use the method
pfcCoordSysFeat.DatumCsysOrientMoveConstraint.
GetOrientMoveConstraintType to get the orientation
type.
– OrientMoveValue—Specifies the reference value for the
constraint. Use the method
pfcCoordSysFeat.DatumCsysOrientMoveConstraint.
GetOrientMoveValue to get the reference value.
• IsNormalToScreen—Specifies if the coordinate system is
normal to screen. Use the method
pfcCoordSysFeat.CoordSysFeat.GetIsNormalToScreen
to determine if the coordinate system is normal to screen.
• OffsetType—Specifies the offset type of the coordinate system in
terms of the pfcCoordSysFeat.DatumCsysOffsetType
enumerated type. Use the method
pfcCoordSysFeat.CoordSysFeat.GetOffsetType to get the
offset type. The offset types are:
– DTMCSYS_OFFSET_CARTESIAN—Specifies a cartesian
coordinate system that has been defined by setting the
values for the DTMCSYS_MOVE_TRAN_X,
DTMCSYS_MOVE_TRAN_Y, and
DTMCSYS_MOVE_TRAN_Z or DTMCSYS_MOVE_ROT_X,
DTMCSYS_MOVE_ROT_Y, and
DTMCSYS_MOVE_ROT_Z orientation constants.
– DTMCSYS_OFFSET_CYLINDRICAL—Specifies a
cylindrical coordinate system that has been defined by
setting the values for the DTMCSYS_MOVE_RAD,
DTMCSYS_MOVE_THETA, and
DTMCSYS_MOVE_TRAN_ZI orientation constants.
– DTMCSYS_OFFSET_SPHERICAL—Specifies a spherical
coordinate system that has been defined by setting the
values for the DTMCSYS_MOVE_RAD,
DTMCSYS_MOVE_THETA, and
DTMCSYS_MOVE_TRAN_PHI orientation constants.

15 - 12 J-Link User’s Guide


• OnSurfaceType—Specifies the on surface type for the
coordinate system in terms of the
pfcCoordSysFeat.DatumCsysOffsetType enumerated type.
Use the method
pfcCoordSysFeat.CoordSysFeat.GetOnSurfaceType to
get the on surface type property of the coordinate system. The
on surface types are:
– DTMCSYS_ONSURF_LINEAR—Specifies a coordinate

Datum Features
system placed on the selected surface by using two linear
dimensions.
– DTMCSYS_ONSURF_RADIAL—Specifies a coordinate
system placed on the selected surface by using a linear
dimension and an angular dimension. The radius value is
used to specify the linear dimension.
– DTMCSYS_ONSURF_DIAMETER—This type is similar to
the DTMCSYS_ONSURF_RADIAL type, except that the
diameter value is used to specify the linear dimension. It is
available only when planar surfaces are used as the
reference.
• OrientByMethod—Specifies the orientation method in terms of
the pfcCoordSysFeat.DatumCsysOrientByMethod
enumerated type. Use the method
pfcCoordSysFeat.CoordSysFeat.GetOrientByMethod to
get the orientation method. The available orientation types are:
– DTMCSYS_ORIENT_BY_SEL_REFS—Specifies the
orientation by selected references.
– DTMCSYS_ORIENT_BY_SEL_CSYS_AXES—Specifies the
orientation by corordinate system axes.

Example: Reading Properties of Datum Features


This example code demonstrates how to read the basic properties of
datum features.
import com.ptc.cipjava.*;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.Session;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcBase.*;

Datum Features 15 - 13
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcWindow.*;
import com.ptc.pfc.pfcView2D.*;
import com.ptc.pfc.pfcDrawing.*;
import com.ptc.pfc.pfcModelCheck.*;
import com.ptc.pfc.pfcFamily.*;
import com.ptc.pfc.pfcDisplay.*;
import com.ptc.pfc.pfcDatumPlaneFeat.*;
import com.ptc.pfc.pfcDatumAxisFeat.*;
import com.ptc.pfc.pfcDatumPointFeat.*;
import com.ptc.pfc.pfcCoordSysFeat.*;

import java.util.logging.*;
import java.io.*;

import javax.swing.*;

/******************************************************\
CLASS: pfcReadBasicFeatPropertiesExamples
PURPOSE: Read basic feature properties
\******************************************************/
public class pfcReadBasicFeatPropertiesExamples
{

static protected Logger logger;


private FileHandler handler;

static Session session;

private static final String messageFile = "jlexamples.txt";


static PrintWriter pr;

public static void printMsg(String msg)


{
try
{
pr.println(msg);
pr.flush();
}
catch (Exception e)
{
}
}

public static void ReadDatumProperties() throws java.io.IOException


{
try
{

15 - 14 J-Link User’s Guide


pr = new PrintWriter(new BufferedWriter(new
FileWriter("DatumProperties.txt", false)));

Session session = pfcGlobal.GetProESession ();

Models models = session.ListModels();

int no_of_models = models.getarraysize();

Datum Features
if (no_of_models == 0)
{
session.UIDisplayMessage(messageFile, "RBFPNoModelOpen",
null);

return;
}

for (int i=0 ; i<no_of_models ; i++)


{
Model mdl = models.get(i);

printMsg("For MODEL :- " +mdl.GetFullName() );

ModelItems feature_items =
mdl.ListItems(ModelItemType.ITEM_FEATURE);

int no_of_feats = feature_items.getarraysize();

for (int j=0 ; j<no_of_feats ; j++)


{
Feature feat = (Feature)feature_items.get(j);

switch ( feat.GetFeatType().getValue() )
{
case FeatureType._FEATTYPE_DATUM_PLANE :

writeDatumPlaneFeatureProperties(feat);

break;

case FeatureType._FEATTYPE_DATUM_AXIS :

writeDatumAxisFeatureProperties(feat);

break;

case FeatureType._FEATTYPE_DATUM_POINT :

writeDatumPointFeatureProperties (feat);

break;

Datum Features 15 - 15
case FeatureType._FEATTYPE_COORD_SYS :

writeDatumCoordSysFeatureProperties (feat);

break;

}
}
}
}

catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

/* Write datum plane feature properties */


private static void writeDatumPlaneFeatureProperties (Feature feat)
{

try
{
DatumPlaneFeat datumplane = (DatumPlaneFeat)feat;

String datumname = ((Feature)datumplane).GetName();

printMsg("++++++++++++++++++++++++++" );

printMsg(" Datum Plane Name: " +datumname);

Boolean flip = datumplane.GetFlip();

if (flip != null)
{
printMsg(" - Datum Plane Flipped during creation: " +flip);
}

/* Getting constraints */
DatumPlaneConstraints constraints = datumplane.GetConstraints();

if (constraints == null)
printMsg(" - No Constraints (null)");
else if (constraints.getarraysize() < 0)
printMsg(" - No Constraints");
else
{
printMsg(" - No of Constraints = " +constraints.getarraysize());

for (int j = 0 ; j<constraints.getarraysize() ; j++)

15 - 16 J-Link User’s Guide


{
printMsg("+ --------- +" );

switch(((DatumPlaneConstraint)constraints.get(j)).
GetConstraintType().getValue() )
{
case (DatumPlaneConstraintType._DTMPLN_THRU):
{
printMsg(

Datum Features
" - Constraint type = DTMPLN_THRU");

printMsg (" Through Ref Name = "


+((DatumPlaneThroughConstraint)constraints.get(j)).
GetThroughRef().GetSelItem().GetName());

printMsg (" Through Ref Id = "


+((DatumPlaneThroughConstraint)constraints.get(j)).
GetThroughRef().GetSelItem().GetId());

break;
}

case (DatumPlaneConstraintType._DTMPLN_NORM):
{
printMsg(" - Constraint type = DTMPLN_NORM");

printMsg (" Normal Ref Name = "


+((DatumPlaneNormalConstraint)constraints.get(j)).
GetNormalRef().GetSelItem().GetName());

printMsg (" Normal Ref Id = "


+((DatumPlaneNormalConstraint)constraints.get(j)).
GetNormalRef().GetSelItem().GetId());

break;
}

case (DatumPlaneConstraintType._DTMPLN_PRL):
{
printMsg(" - Constraint type = DTMPLN_PRL");

printMsg (" Parallel Ref Name = "


+((DatumPlaneParallelConstraint)constraints.get(j)).
GetParallelRef().GetSelItem().GetName());

printMsg (" Parallel Ref Id = "


+((DatumPlaneParallelConstraint)constraints.get(j)).
GetParallelRef().GetSelItem().GetId());

break;
}

Datum Features 15 - 17
case (DatumPlaneConstraintType._DTMPLN_OFFS):
{
printMsg(" - Constraint type = DTMPLN_OFFS");

printMsg (" Offset Ref Name = "


+((DatumPlaneOffsetConstraint)constraints.get(j)).
GetOffsetRef().GetSelItem().GetName());

printMsg (" Offset Ref Id = "


+((DatumPlaneOffsetConstraint)constraints.get(j)).
GetOffsetRef().GetSelItem().GetId());

if (((DatumPlaneOffsetConstraint)constraints.get(j)).
GetOffsetRef().GetSelItem().GetType() ==
ModelItemType.ITEM_COORD_SYS)
{
printMsg (" Offset Csys Axis = "
+((DatumPlaneOffsetCoordSysConstraint)constraints.get(j)).
GetCsysAxis().getValue());

printMsg (" Offset Csys Value = "


+((DatumPlaneOffsetCoordSysConstraint)constraints.get(j)).
GetOffsetValue());

printMsg (" Offset Value = "


+((DatumPlaneOffsetConstraint)constraints.get(j)).
GetOffsetValue());

break;
}

case (DatumPlaneConstraintType._DTMPLN_ANG):
{
printMsg(" - Constraint type = DTMPLN_ANG");

printMsg (" Angle Ref Name = "


+((DatumPlaneAngleConstraint)constraints.get(j)).
GetAngleRef().GetSelItem().GetName());

printMsg (" Angle Ref Id = "


+((DatumPlaneAngleConstraint)constraints.get(j)).
GetAngleRef().GetSelItem().GetId());

printMsg (" Angle Value = "


+((DatumPlaneAngleConstraint)constraints.get(j)).
GetAngleValue());
break;
}

15 - 18 J-Link User’s Guide


case (DatumPlaneConstraintType._DTMPLN_TANG):
{
printMsg(" - Constraint type = DTMPLN_TANG");

printMsg (" Tangent Ref Name = "


+((DatumPlaneTangentConstraint)constraints.get(j)).
GetTangentRef().GetSelItem().GetName());

Datum Features
printMsg (" Tangent Ref Id = "
+((DatumPlaneTangentConstraint)constraints.get(j)).
GetTangentRef().GetSelItem().GetId());
break;
}

case (DatumPlaneConstraintType._DTMPLN_SEC):
{
printMsg(" - Constraint type = DTMPLN_SEC");

printMsg (" Section Ref Name = "


+((DatumPlaneSectionConstraint)constraints.get(j)).
GetSectionRef().GetSelItem().GetName());

printMsg (" Section Ref Id = "


+((DatumPlaneSectionConstraint)constraints.get(j)).
GetSectionRef().GetSelItem().GetId());

printMsg (" Section Index Value = "


+((DatumPlaneSectionConstraint)constraints.get(j)).
GetSectionIndex());

break;
}

case (DatumPlaneConstraintType._DTMPLN_DEF_X):
{
printMsg(" - Constraint type = DTMPLN_DEF_X");

break;
}

case (DatumPlaneConstraintType._DTMPLN_DEF_Y):
{
printMsg(" - Constraint type = DTMPLN_DEF_Y");

break;
}

case (DatumPlaneConstraintType._DTMPLN_DEF_Z):
{
printMsg(" - Constraint type = DTMPLN_DEF_Z");

Datum Features 15 - 19
break;
}
}/* End of switch case */
}
}
}

catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

/* Write datum axis feature properties */


private static void writeDatumAxisFeatureProperties (Feature feat)
{

try
{
DatumAxisFeat datumaxis = (DatumAxisFeat)feat;

String datumaxisname = ((Feature)datumaxis).GetName();

printMsg("++++++++++++++++++++++++++" );

printMsg (" DatumAxisName =" +datumaxisname);

/* Getting constraints */
DatumAxisConstraints constraints = datumaxis.GetConstraints();

if (constraints == null)
printMsg (" No Constraints (null)");

else if (constraints.getarraysize() < 0)


printMsg (" No Constraints");

else
{
printMsg (" No of Constraints = "
+constraints.getarraysize() );

for (int j = 0 ; j< constraints.getarraysize() ; j++)


{

printMsg("+ --------- +" );


printMsg (" - Constraint Type = "
+constraints.get(j).GetConstraintType().getValue());

if (constraints.get(j).GetConstraintRef()!=null)
{

15 - 20 J-Link User’s Guide


printMsg (" - DatumAxis Constrainttype Name = "
+constraints.get(j).GetConstraintRef().
GetSelItem().GetName());

printMsg (" - ConstraintRef Id = "


+constraints.get(j).GetConstraintRef().
GetSelItem().GetId());

Datum Features
}
}

/* Getting dimension constraints */


DatumAxisDimensionConstraints dimconstraints =
datumaxis.GetDimConstraints();

if (dimconstraints == null)
printMsg (" - No Dimension Constraints (null)");

else if (dimconstraints.getarraysize() < 0)


printMsg (" - No Dimension Constraints");

else
{
printMsg (" - Number of Dimension Constraints = "
+dimconstraints.getarraysize() );

for (int k = 0 ; k< dimconstraints.getarraysize() ; k++)


{
printMsg("+ --------- +" );

printMsg (" - DatumAxis Dimension Constrainttype Name = "


+dimconstraints.get(k).GetDimRef().
GetSelItem().GetName());

printMsg (" - DatumAxis Dimension ConstraintRef Id = "


+dimconstraints.get(k).GetDimRef().
GetSelItem().GetId());

printMsg (" - Offset value set by the dimension = "


+dimconstraints.get(k).GetDimOffset());
}
}

catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}

Datum Features 15 - 21
}
/* Write datum point feature properties */
public static void writeDatumPointFeatureProperties(Feature feat)
{
try
{
DatumPointFeat pointfeat = (DatumPointFeat)feat;

String datumpointfeatname = (pointfeat.GetFeatName());

printMsg("++++++++++++++++++++++++++" );
printMsg (" DatumFeatPointName =" +datumpointfeatname);

/* Getting points */
GeneralDatumPoints points = pointfeat.GetPoints();

if (points == null)
printMsg (" - No General Datum Points (null)");

else if (points.getarraysize() < 0)


printMsg (" - No General Datum Points");

else
{
printMsg (" - No of points = " +points.getarraysize() );
for (int j = 0 ; j< points.getarraysize() ; j++)
{
printMsg("+ --------- +" );

String datumpointname = (points.get(j).GetName());

printMsg (" - DatumPointName =" +datumpointname);

/* Getting placement constraints */


DatumPointPlacementConstraints placeconst =
points.get(j).GetPlaceConstraints();

printMsg (" - No of Placement Constraints ="


+placeconst.getarraysize());

for (int k = 0 ; k< placeconst.getarraysize() ; k++)


{
printMsg("+ --------- +" );

printMsg (" - Placement Constraint Ref Id ="


+placeconst.get(k).GetConstraintRef().
GetSelItem().GetId());

printMsg (" - Placement Constraint Ref Name ="


+placeconst.get(k).GetConstraintRef().

15 - 22 J-Link User’s Guide


GetSelItem().GetName());

printMsg (" - Placement Constraint Type ="


+placeconst.get(k).GetConstraintType()
.getValue());

printMsg (" - Placement Constraint Value ="


+placeconst.get(k).GetValue());
}

Datum Features
/* Getting dimension constraints */
DatumPointDimensionConstraints dimconst =
points.get(j).GetDimConstraints();

printMsg (" - Number of Dimension Constraints ="


+dimconst.getarraysize());

for (int m = 0 ; m< dimconst.getarraysize() ; m++)


{
printMsg("+ --------- +" );

printMsg (" - Dimension Constraint Ref Id ="


+dimconst.get(m).GetConstraintRef().
GetSelItem().GetId());

printMsg (" - Dimension Constraint Ref Name ="


+dimconst.get(m).GetConstraintRef().
GetSelItem().GetName());

printMsg (" - Dimension Constraint Type ="


+dimconst.get(m).GetConstraintType().
getValue());

printMsg (" - Dimension Constraint Value ="


+dimconst.get(m).GetValue());
}
}
}/* end of else if */
}

catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}

/* Write datum coordinate system feature properties */


public static void writeDatumCoordSysFeatureProperties(Feature feat)
{
try

Datum Features 15 - 23
{
CoordSysFeat coordsys = (CoordSysFeat)feat;

String CoordSysName = ((Feature)coordsys).GetName();

printMsg("++++++++++++++++++++++++++" );

printMsg (" - Coordinate System Name ="


+CoordSysName);

/* Getting origin constraints */


DatumCsysOriginConstraints originconstraint =
coordsys.GetOriginConstraints();

printMsg (" - Number of Origin Constraints ="


+originconstraint.getarraysize());

for(int j=0 ;j<originconstraint.getarraysize();j++)


{
printMsg("+ --------- +" );

printMsg (" - Origin Constraints Ref Name ="


+originconstraint.get(j).GetOriginRef().
GetSelItem().GetName());

printMsg (" - Origin Constraints Ref Id ="


+originconstraint.get(j).GetOriginRef().
GetSelItem().GetId());
}

/* Getting dimension constraints */


DatumCsysDimensionConstraints dimconstraint =
coordsys.GetDimensionConstraints();

printMsg (" - No of Dimension Constraints ="


+dimconstraint.getarraysize());

for(int k=0 ;k<dimconstraint.getarraysize();k++)


{
printMsg("+ --------- +" );

printMsg (" - Dimension Constraints Ref Name ="


+dimconstraint.get(k).GetDimRef().
GetSelItem().GetName());

printMsg (" - Dimension Constraints Ref Id ="


+dimconstraint.get(k).GetDimRef().
GetSelItem().GetId());

printMsg (" - Dimension Constraints Type ="


+dimconstraint.get(k).GetDimConstraintType().

15 - 24 J-Link User’s Guide


getValue());

printMsg (" - Dimension Constraints Value ="


+dimconstraint.get(k).GetDimValue());
}

/* Getting orientation constraints */


DatumCsysOrientMoveConstraints orientConstraint =
coordsys.GetOrientationConstraints();

Datum Features
printMsg (" - No of Orientation Constraints ="
+orientConstraint.getarraysize());

for(int l=0 ;l<orientConstraint.getarraysize();l++)


{
printMsg("+ --------- +" );

printMsg (" - Orientation Constraints Type ="


+orientConstraint.get(l).GetOrientMoveConstraintType().getValue());

printMsg (" - Orientation Constraints Value ="


+orientConstraint.get(l).GetOrientMoveValue());
}

printMsg (" - Is Normal To screen ? :"


+coordsys.GetIsNormalToScreen());

printMsg (" - OffsetType ="


+coordsys.GetOffsetType().getValue());

printMsg (" - Orientation Method ="


+coordsys.GetOrientByMethod().getValue());
}

catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}

public pfcReadBasicFeatPropertiesExamples (Session s)


{
session = s;

try
{
handler = new FileHandler
("pfcReadBasicFeatPropertiesExamples.log");
logger = Logger.global;
logger.addHandler(handler);

Datum Features 15 - 25
}
catch (IOException e)
{
printMsg ("Caught exception initializing log file: " + e);
}
}

15 - 26 J-Link User’s Guide


16
Geometry Evaluation

This chapter describes geometry representation and discusses how


to evaluate geometry using J-Link.

Topic Page

Geometry Traversal 16 - 2
Curves and Edges 16 - 3
Contours 16 - 7
Surfaces 16 - 8
Axes, Coordinate Systems, and Points 16 - 12
Interference 16 - 13

16 - 1
Geometry Traversal
Note:
• A simple rectangular face has one contour and four edges.
• A contour will traverse a boundary so that the part face is
always on the right-hand side (RHS). For an external contour
the direction of traversal is clockwise. For an internal contour
the direction of traversal is counterclockwise.
• If a part is extruded from a sketch that has a U-shaped cross
section there will be separate surfaces at each leg of the
U-channel.
• If a part is extruded from a sketch that has a square-shaped
cross section, and a slot feature is then cut into the part to make
it look like a U-channel, there will be one surface across the legs
of the U-channel. The original surface of the part is represented
as one surface with a cut through it.

Geometry Terms
Following are definitions for some geometric terms:

• Surface—An ideal geometric representation, that is, an


infinite plane.
• Face—A trimmed surface. A face has one or more contours.
• Contour—A closed loop on a face. A contour consists of
multiple edges. A contour can belong to one face only.
• Edge—The boundary of a trimmed surface.
An edge of a solid is the intersection of two surfaces. The edge
belongs to those two surfaces and to two contours. An edge of a
datum surface can be either the intersection of two datum
surfaces or the external boundary of the surface.
If the edge is the intersection of two datum surfaces it will
belong to those two surfaces and to two contours. If the edge is
the external boundary of the datum surface it will belong to
that surface alone and to a single contour.

16 - 2 J-Link User’s Guide


Traversing the Geometry of a Solid Block
Methods Introduced:

• pfcModelItem.ModelItemOwner.ListItems
• pfcGeometry.Surface.ListContours
• pfcGeometry.Contour.ListElements

Geometry Evaluation
To traverse the geometry, follow these steps:

1. Starting at the top-level model, use


pfcModelItem.ModelItemOwner.ListItems with an
argument of ModelItemType.ITEM_SURFACE.
2. Use pfcGeometry.Surface.ListContours to list the contours
contained in a specified surface.
3. Use pfcGeometry.Contour.ListElements to list the edges
contained in the contour.

Curves and Edges


Datum curves, surface edges, and solid edges are represented in the
same way in J-Link. You can get edges through geometry traversal
or get a list of edges using the methods presented in the chapter
“ModelItem”.

The t Parameter
The geometry of each edge or curve is represented as a set of three
parametric equations that represent the values of x, y, and z as
functions of an independent parameter, t. The t parameter varies
from 0.0 at the start of the curve to 1.0 at the end of it.

The following figure illustrates curve and edge parameterization.

Geometry Evaluation 16 - 3
t = 1.0

d2C/dt2

dC/dt

t = 0.0
C[x, y, z] = f(t)

Curve and Edge Types


Solid edges and datum curves can be any of the following types:

• LINE—A straight line represented by the class


pfcGeometry.Line.
• ARC—A circular curve represented by the class
pfcGeometry.Arc.
• SPLINE—A nonuniform cubic spline, represented by the class
pfcGeometry.Spline.
• B-SPLINE—A nonuniform rational B-spline curve or edge,
represented by the class pfcGeometry.BSpline.
• COMPOSITE CURVE—A combination of two or more curves,
represented by the class pfcGeometry.CompositeCurve.
This is used for datum curves only.
See the appendix, Geometry Representations, for the
parameterization of each curve type. To determine what type of
curve a pfcGeometry.Edge or pfcGeometry.Curve object
represents, use the Java instanceof operator.

Because each curve class inherits from pfcGeometry.GeomCurve,


you can use all the evaluation methods in GeomCurve on any edge
or curve.

16 - 4 J-Link User’s Guide


The following curve types are not used in solid geometry and are
reserved for future expansion:

• CIRCLE (pfcGeometry.Circle)
• ELLIPSE (pfcGeometry.Ellipse)
• POLYGON (pfcGeometry.Polygon)

Geometry Evaluation
ARROW (pfcGeometry.Arrow)
• TEXT (pfcGeometry.Text)

Evaluation of Curves and Edges


Methods Introduced:

• pfcGeometry.GeomCurve.Eval3DData
• pfcGeometry.GeomCurve.EvalFromLength
• pfcGeometry.GeomCurve.EvalParameter
• pfcGeometry.GeomCurve.EvalLength
• pfcGeometry.GeomCurve.EvalLengthBetween
The methods in GeomCurve provide information about any curve or
edge.

The method pfcGeometry.GeomCurve.Eval3DData returns a


CurveXYZData object with information on the point represented by
the input parameter t. The method
pfcGeometry.GeomCurve.EvalFromLength returns a similar
object with information on the point that is a specified distance
from the starting point.

The method pfcGeometry.GeomCurve.EvalParameter returns


the t parameter that represents the input Point3D object.

Both pfcGeometry.GeomCurve.EvalLength and


pfcGeometry.GeomCurve.EvalLengthBetween return
numerical values for the length of the curve or edge.

Geometry Evaluation 16 - 5
Solid Edge Geometry
Methods Introduced:

• pfcGeometry.Edge.GetSurface1
• pfcGeometry.Edge.GetSurface2
• pfcGeometry.Edge.GetEdge1
• pfcGeometry.Edge.GetEdge2
• pfcGeometry.Edge.EvalUV
• pfcGeometry.Edge.GetDirection
Note: The methods in the interface Edge provide information
only for solid or surface edges.
The methods pfcGeometry.Edge.GetSurface1 and
pfcGeometry.Edge.GetSurface2 return the surfaces bounded by
this edge. The methods pfcGeometry.Edge.GetEdge1 and
pfcGeometry.Edge.GetEdge2 return the next edges in the two
contours that contain this edge.

The method pfcGeometry.Edge.EvalUV evaluates geometry


information based on the UV parameters of one of the bounding
surfaces.

The method pfcGeometry.Edge.GetDirection returns a positive


1 if the edge is parameterized in the same direction as the
containing contour, and –1 if the edge is parameterized opposite to
the containing contour.

Curve Descriptors
A curve descriptor is a data object that describes the geometry of a
curve or edge. A curve descriptor describes the geometry of a curve
without being a part of a specific model.

Methods Introduced:

• pfcGeometry.GeomCurve.GetCurveDescriptor
• pfcGeometry.GeomCurve.GetNURBSRepresentation
Note: To get geometric information for an edge, access the
CurveDescriptor object for one edge using
pfcGeometry.GeomCurve.GetCurveDescriptor.
The method pfcGeometry.GeomCurve.GetCurveDescriptor
returns a curve’s geometry as a data object.

16 - 6 J-Link User’s Guide


The method
pfcGeometry.GeomCurve.GetNURBSRepresentation returns
a Non-Uniform Rational B-Spline Representation of a curve.

Contours

Geometry Evaluation
Methods Introduced:

• pfcGeometry.Surface.ListContours
• pfcGeometry.Contour.GetInternalTraversal
• pfcGeometry.Contour.FindContainingContour
• pfcGeometry.Contour.EvalArea
• pfcGeometry.Contour.EvalOutline
• pfcGeometry.Contour.VerifyUV
Contours are a series of edges that completely bound a surface. A
contour is not a ModelItem. You cannot get contours using the
methods that get different types of ModelItem. Use the method
pfcGeometry.Surface.ListContours to get contours from their
containing surfaces.

The method pfcGeometry.Contour.GetInternalTraversal


returns a ContourTraversal enumerated type that identifies
whether a given contour is on the outside or inside of a containing
surface.

Use the method


pfcGeometry.Contour.FindContainingContour to find the
contour that entirely encloses the specified contour.

The method pfcGeometry.Contour.EvalArea provides the area


enclosed by the contour.

The method pfcGeometry.Contour.EvalOutline returns the


points that make up the bounding rectangle of the contour.

Use the method pfcGeometry.Contour.VerifyUV to determine


whether the given UVParams argument lies inside the contour, on
the boundary, or outside the contour.

Geometry Evaluation 16 - 7
Surfaces
Using J-Link you access datum and solid surfaces in the same way.

UV Parameterization
A surface in Pro/ENGINEER is described as a series of parametric
equations where two parameters, u and v, determine the x, y, and z
coordinates. Unlike the edge parameter, t, these parameters need
not start at 0.0, nor are they limited to 1.0.

The figure on the following page illustrates surface


parameterization.

normal

e2 (second derivative)

u direction

e1 (first derivative)

v direction

S[x, y, z] = f (u, v)

16 - 8 J-Link User’s Guide


Surface Types
Surfaces within Pro/ENGINEER can be any of the following types:

• PLANE—A planar surface represented by the class


pfcGeometry.Plane.
• CYLINDER—A cylindrical surface represented by the class

Geometry Evaluation
pfcGeometry.Cylinder.
• CONE—A conic surface region represented by the class
pfcGeometry.Cone.
• TORUS—A toroidal surface region represented by the class
pfcGeometry.Torus.
• REVOLVED SURFACE—Generated by revolving a curve
about an axis. This is represented by the class
pfcGeometry.RevSurface.
• RULED SURFACE—Generated by interpolating linearly
between two curve entities. This is represented by the class
pfcGeometry.RuledSurface.
• TABULATED CYLINDER—Generated by extruding a curve
linearly. This is represented by the class
pfcGeometry.TabulatedCylinder.
• QUILT—A combination of two or more surfaces. This is
represented by the class pfcGeometry.Quilt.
Note: This is used only for datum surfaces.
• COONS PATCH—A coons patch is used to blend surfaces
together. It is represented by the class
pfcGeometry.CoonsPatch
• FILLET SURFACE—A filleted surface is found where a round
or fillet is placed on a curved edge or an edge with a
non-consistant arc radii. On a straight edge a cylinder is used to
represent a fillet. This is represented by the class
pfcGeometry.FilletedSurface.
• SPLINE SURFACE— A nonuniform bicubic spline surface
that passes through a grid with tangent vectors given at each
point. This is represented by the class
pfcGeometry.SplineSurface.
• NURBS SURFACE—A NURBS surface is defined by basic
functions (in u and v), expandable arrays of knots, weights, and
control points. This is represented by the class
pfcGeometry.NURBSSurface.

Geometry Evaluation 16 - 9
• CYLINDRICAL SPLINE SURFACE— A cylindrical spline
surface is a nonuniform bicubic spline surface that passes
through a grid with tangent vectors given at each point. This is
represented by the class
pfcGeometry.CylindricalSplineSurface.
To determine which type of surface a pfcGeometry.Surface
object represents, access the surface type using
pfcGeometry.Geometry.GetSurfaceType .

Surface Information
Methods Introduced:

• pfcGeometry.Surface.GetSurfaceType
• pfcGeometry.Surface.GetXYZExtents
• pfcGeometry.Surface.GetUVExtents
• pfcGeometry.Surface.GetOrientation

Evaluation of Surfaces
Surface methods allow you to use multiple surface information to
calculate, evaluate, determine, and examine surface functions and
problems.

Methods Introduced:

• pfcGeometry.Surface.GetOwnerQuilt
• pfcGeometry.Surface.EvalClosestPoint
• pfcGeometry.Surface.EvalClosestPointOnSurface
• pfcGeometry.Surface.Eval3DData
• pfcGeometry.Surface.EvalParameters
• pfcGeometry.Surface.EvalArea
• pfcGeometry.Surface.EvalDiameter
• pfcGeometry.Surface.EvalPrincipalCurv
• pfcGeometry.Surface.VerifyUV
• pfcGeometry.Surface.EvalMaximum
• pfcGeometry.Surface.EvalMinimum
• pfcGeometry.Surface.ListSameSurfaces
The method pfcGeometry.Surface.GetOwnerQuilt returns the
Quilt object that contains the datum surface.

16 - 10 J-Link User’s Guide


The method pfcGeometry.Surface.EvalClosestPoint projects a
three-dimensional point onto the surface. Use the method
pfcGeometry.Surface.EvalClosestPointOnSurface to
determine whether the specified three-dimensional point is on the
surface, within the accuracy of the part. If it is, the method returns
the point that is exactly on the surface. Otherwise the method
returns null.

Geometry Evaluation
The method pfcGeometry.Surface.Eval3DData returns a
ISurfXYZData object that contains information about the surface
at the specified u and v parameters. The method
pfcGeometry.Surface.EvalParameters returns the u and v
parameters that correspond to the specified three-dimensional
point.

The method pfcGeometry.Surface.EvalArea returns the area of


the surface, whereas pfcGeometry.Surface.EvalDiameter
returns the diameter of the surface. If the diameter varies the
optionalUVParams argument identifies where the diameter should
be evaluated.

The method pfcGeometry.Surface.EvalPrincipalCurv returns


a CurvatureData object with information regarding the curvature
of the surface at the specified u and v parameters.

Use the method pfcGeometry.Surface.VerifyUV to determine


whether the UVParams are actually within the boundary of the
surface.

The methods pfcGeometry.Surface.EvalMaximum and


pfcGeometry.Surface.EvalMinimum return the
three-dimensional point on the surface that is the furthest in the
direction of (or away from) the specified vector.

The method pfcGeometry.Surface.ListSameSurfaces identifies


other surfaces that are tangent and connect to the given surface.

Geometry Evaluation 16 - 11
Surface Descriptors
A surface descriptor is a data object that describes the shape and
geometry of a specified surface. A surface descriptor allows you to
describe a surface in 3D without an owner ID.

Methods Introduced:

• pfcGeometry.Surface.GetSurfaceDescriptor
• pfcGeometry.Surface.GetNURBSRepresentation
The method pfcGeometry.Surface.GetSurfaceDescriptor
returns a surfaces geometry as a data object.

The method pfcGeometry.Surface.GetNURBSRepresentation


returns a Non-Uniform Rational B-Spline Representation of a
surface.

Axes, Coordinate Systems, and Points


Coordinate axes, datum points, and coordinate systems are all
model items. Use the methods that return ModelItems to get one
of these geometry objects. Refer to the chapter “ModelItem” for
additional information.

Evaluation of ModelItems
Methods Introduced:

• pfcGeometry.Axis.GetSurf
• pfcGeometry.CoordSystem.GetCoordSys
• pfcGeometry.Point.GetPoint
The method pfcGeometry.Axis.GetSurf returns the revolved
surface that uses the axis.

The method pfcGeometry.CoordSystem.GetCoordSys returns


the Transform3D object (which includes the origin and x-, y-, and
z- axes) that defines the coordinate system.

The method pfcGeometry.Point.GetPoint returns the xyz


coordinates of the datum point.

16 - 12 J-Link User’s Guide


Interference
Pro/ENGINEER assemblies can contain interferences between
components when constraint by certain rules defined by the user.
The com.ptc.pfc.pfcInterference package allows the user to
detect and analyze any interferences within the assembly. The
analysis of this functionality should be looked at from two

Geometry Evaluation
standpoints: global and selection based analysis.

Methods Introduced:

• pfcInterference.pfcInterference.CreateGlobalEvaluator
• pfcInterference.GlobalEvaluator.ComputeGlobalInterference
• pfcInterference.GlobalEvaluator.GetAssem
• pfcInterference.GlobalEvaluator.SetAssem
• pfcInterference.GlobalInterference.GetVolume
• pfcInterference.GlobalInterference.GetSelParts
To compute all the interferences within an Assembly one has to call
pfcInterference.pfcInterference.CreateGlobalEvaluator
with a Assembly.Assembly object as an argument. This call
returns a GlobalEvaluator object. The GlobalEvaluator can
be used to extract an assembly object or to set an assembly object
for the interference computation.

The methods pfcInterference.GlobalEvaluator.GetAssem and


pfcInterference.GlobalEvaluator.SetAssem with
pfcAssembly.Assembly as an argument allow you to do exactly
that.

The method
pfcInterference.GlobalEvaluator.ComputeGlobalInterferen
ce determines the set of all the interferences within the assembly.

This method will return a sequence of


pfcInterference.GlobalInterference objects or null if there
are no interfering parts. Each object contains a pair of intersecting
parts and an object representing the interference volume, which
can be extracted by using
pfcInterference.GlobalInterference.GetSelParts and
pfcInterference.GlobalInterference.GetVolume respectively.

Geometry Evaluation 16 - 13
Analyzing Interference Information
Methods Introduced:

• pfcSelect.pfcSelect.SelectionPair_Create
• pfcInterference.pfcInterference.CreateSelectionEvaluator
• pfcInterference.SelectionEvaluator.GetSelections
• pfcInterference.SelectionEvaluator.SetSelections
• pfcInterference.SelectionEvaluator.ComputeInterference
• pfcInterference.SelectionEvaluator.ComputeClearance
• pfcInterference.SelectionEvaluator.ComputeNearestCriticalDistance
The method pfcSelect.pfcSelect.SelectionPair_Create creates
a pfcSelect.SelectionPair object using two
pfcSelect.Selection objects as arguments.

A return from this method will serve as an argument to


pfcInterference.pfcInterference.CreateSelectionEvaluator,
which will provide a way to determine the interference data
between the two selections.

pfcInterference.SelectionEvaluator.GetSelections and
pfcInterference.SelectionEvaluator.SetSelections will extract
and set the object to be evaluated respectively.

pfcInterference.SelectionEvaluator.ComputeInterference
determines the interfering information about the provided
selections. This method will return the
pfcInterference.InterferenceVolume object or null if the
selections do no interfere.

pfcInterference.SelectionEvaluator.ComputeClearance
computes the clearance data for the two selection. This method
returns a pfcInterference.ClearanceData object, which can
be used to obtain and set clearance distance, nearest points
between selections, and a boolean IsInterferening variable.

pfcInterference.SelectionEvaluator.ComputeNearestCritica
lDistance finds a critical point of the distance function between
two selections.

This method returns a


pfcInterference.CriticalDistanceData object, which is
used to determine and set critical points, surface parameters, and
critical distance between points.

16 - 14 J-Link User’s Guide


Analyzing Interference Volume
Methods Introduced:

• pfcInterference.InterferenceVolume.ComputeVolume
• pfcInterference.InterferenceVolume.Highlight
• pfcInterference.InterferenceVolume.GetBoundaries

Geometry Evaluation
The method
pfcInterference.InterferenceVolume.ComputeVolume will
calculate a value for interfering volume.

The method pfcInterference.InterferenceVolume.Highlight


will highlight the interfering volume with the color provided in the
argument to the function.

The method
pfcInterference.InterferenceVolume.GetBoundaries will
return a set of boundary surface descriptors for the interference
volume.

Example Code

This application finds the interference in an assembly, highlights


the interfering surfaces, and highlights calculates the interference
volume.
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcInterference.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcWindow.*;
import com.ptc.cipjava.*;
public class UsrInterference {

public static void showInterferences(com.ptc.pfc.pfcAssembly.Assembly


assembly)
{

try {
BaseSession session = null; //The Pro/ENGINEER Session Object
Assembly inter_assem = null; //The Assembly with interferences.
GlobalEvaluator gbl_eval; //The GlobalEvaluator Object
GlobalInterferences gbl_inters;//A List of Interferences in the
Model
GlobalInterference gbl_inter;//an pfcInterference object
SelectionPair select_pair;//A pfcSelectionPair Object.
Selection sel1, sel2;//Two Selection object

Geometry Evaluation 16 - 15
InterferenceVolume vol;//The interference volume object.
double total_volume;//The interference volume for a particular
interference
gbl_eval = pfcInterference.CreateGlobalEvaluator(assembly);
//Setting this parameter to TRUE will select only the solid geometry
//Setting it to false will through an exception.
gbl_inters = gbl_eval.ComputeGlobalInterference(true);
if (gbl_inters == null)
System.out.println("No Interferences detected in " +
assembly.GetFullName());
else
{
//Find out how many interferences exist in an assembly
int size = gbl_inters.getarraysize();
//Then for each interference object display the interfering surfaces
//and compute the interference volume
System.out.println("The Total Interference Volume: ");
for (int i = 0; i < size; i++)
{
gbl_inter = gbl_inters.get(i);

select_pair = gbl_inter.GetSelParts();
sel1 = select_pair.GetSel1();
sel2 = select_pair.GetSel2();
sel1.Highlight(StdColor.COLOR_HIGHLIGHT);
sel2.Highlight(StdColor.COLOR_HIGHLIGHT);

vol = gbl_inter.GetVolume();
total_volume = vol.ComputeVolume();
System.out.println("Interference " + i + " = " + total_volume);
vol.Highlight(StdColor.COLOR_ERROR);
}
}
}
catch (jxthrowable x)
{
System.out.println("Caught Exception: " + x);
x.printStackTrace();
}
return;
}
}

16 - 16 J-Link User’s Guide


17
Dimensions and Parameters

This chapter describes the J-Link methods and classes that affect
dimensions and parameters.

Topic Page

Overview 17 - 2
The ParamValue Object 17 - 2
Parameter Objects 17 - 3
Dimension Objects 17 - 13

17 - 1
Overview
Dimensions and parameters in Pro/ENGINEER have similar
characteristics but also have significant differences. In J-Link, the
similarities between dimensions and parameters are contained in
the pfcModelItem.BaseParameter interface. This interface
allows access to the parameter or dimension value and to
information regarding a parameter's designation and modification.
The differences between parameters and dimensions are
recognizable because Dimension inherits from the interface
ModelItem, and can be assigned tolerances, whereas parameters
are not ModelItems and cannot have tolerances.

The ParamValue Object


Both parameters and dimension objects contain an object of type
pfcModelItem.ParamValue. This object contains the integer,
real, string, or Boolean value of the parameter or dimension.
Because of the different possible value types that can be associated
with a ParamValue object there are different methods used to
access each value type and some methods will not be applicable for
some ParamValue objects. If you try to use an incorrect method an
exception will be thrown.

Accessing a ParamValue Object


Methods Introduced:

• pfcModelItem.pfcModelItem.CreateIntParamValue
• pfcModelItem.pfcModelItem.CreateDoubleParamValue
• pfcModelItem.pfcModelItem.CreateStringParamValue
• pfcModelItem.pfcModelItem.CreateBoolParamValue
• pfcModelItem.pfcModelItem.CreateNoteParamValue
• pfcModelItem.BaseParameter.GetValue
The pfcModelItem utility class contains methods for creating each
type of ParamValue object. Once you have established the value
type in the object, you can change it. The method
pfcModelItem.BaseParameter.GetValue returns the
ParamValue associated with a particular parameter or dimension.

17 - 2 J-Link User’s Guide


A NoteParamValue is an integer value that refers to the ID of a
specified note. To create a parameter of this type the identified note
must already exist in the model.

Accessing the ParamValue Value


Methods Introduced:

• pfcModelItem.ParamValue.Getdiscr

Dimensions and
Parameters
• pfcModelItem.ParamValue.GetIntValue
• pfcModelItem.ParamValue.SetIntValue
• pfcModelItem.ParamValue.GetDoubleValue
• pfcModelItem.ParamValue.SetDoubleValue
• pfcModelItem.ParamValue.GetStringValue
• pfcModelItem.ParamValue.SetStringValue
• pfcModelItem.ParamValue.GetBoolValue
• pfcModelItem.ParamValue.SetBoolValue
• pfcModelItem.ParamValue.GetNoteId
The method pfcModelItem.ParamValue.Getdiscr returns a
enumeration object that identifies the type of value contained in the
ParamValue object. Use this information with the Get and Set
methods to access the value. If you use an incorrect Get or Set
method an exception of type
pfcExceptions.XBadGetParamValue will be thrown.

Parameter Objects
The following sections describe the J-Link methods that access
parameters. The topics are as follows:

• Creating and Accessing Parameters


• Parameter Selection Options
• Parameter Information
• Parameter Restrictions

Dimensions and Parameters 17 - 3


Creating and Accessing Parameters
Methods Introduced:

• pfcModelItem.ParameterOwner.CreateParam
• pfcModelItem.ParameterOwner.CreateParamWithUnits
• pfcModelItem.ParameterOwner.GetParam
• pfcModelItem.ParameterOwner.ListParams
• pfcModelItem.ParameterOwner.SelectParam
• pfcModelItem.ParameterOwner.SelectParameters
• pfcFamily.FamColParam.GetRefParam
In J-Link, models, features, surfaces, and edges inherit from the
pfcModelItem.ParameterOwner interface, because each of the
objects can be assigned parameters in Pro/ENGINEER.

The method pfcModelItem.ParameterOwner.GetParam gets a


parameter given its name.

The method pfcModelItem.ParameterOwner.ListParams


returns a sequence of all parameters assigned to the object.

To create a new parameter with a name and a specific value, call


the method pfcModelItem.ParameterOwner.CreateParam.

To create a new parameter with a name, a specific value, and units,


call the method
pfcModelItem.ParameterOwner.CreateParamWithUnits.

The method pfcModelItem.ParameterOwner.SelectParam


allows you to select a parameter from the Pro/ENGINEER user
interface. The top model from which the parameters are selected
must be displayed in the current window.

The method
pfcModelItem.ParameterOwner.SelectParameters allows you
to interactively select parameters from the Pro/ENGINEER
Parameter dialog box based on the parameter selection options
specified by the pfcModelItem.ParameterSelectionOptions
object. The top model from which the parameters are selected must
be displayed in the current window. Refer to the section Parameter
Selection Options for more information.

The method pfcFamily.FamColParam.GetRefParam returns


the reference parameter from the parameter column in a family
table.

17 - 4 J-Link User’s Guide


Parameter Selection Options
Parameter selection options in J-Link are represented by the
pfcModelItem.ParameterSelectionOptions interface.

Methods Introduced:

• pfcModelItem.pfcModelItem.ParameterSelectionOptions_Create
• pfcModelItem.ParameterSelectionOptions.SetAllowContextSelection

Dimensions and
Parameters
• pfcModelItem.ParameterSelectionOptions.SetContexts
• pfcModelItem.ParameterSelectionOptions.SetAllowMultipleSelections
• pfcModelItem.ParameterSelectionOptions.SetSelectButtonLabel
The method
pfcModelItem.pfcModelItem.ParameterSelectionOptions_
Create creates a new instance of the
ParameterSelectionOptions object that is used by the method
pfcModelItem.ParameterOwner.SelectParameters().

The parameter selection options are as follows:

• AllowContextSelection—This boolean attribute indicates


whether to allow parameter selection from multiple contexts, or
from the invoking parameter owner. By default, it is false and
allows selection only from the invoking parameter owner. If it is
true and if specific selection contexts are not yet assigned, then
you can select the parameters from any context.
Use the method
pfcModelItem.ParameteSelectionOptions.SetAllowConte
xtSelection to modify the value of this attribute.
• Contexts—The permitted parameter selection contexts in the
form of the pfcModelItem.ParameterSelectionContexts
object. Use the method
pfcModelItem.ParameterSelectionOptions.SetContexts
to assign the parameter selection context. By default, you can
select parameters from any context.
The types of parameter selection contexts are as follows:
– PARAMSELECT_MODEL—Specifies that the top level
model parameters can be selected.
– PARAMSELECT_PART—Specifies that any part’s
parameters (at any level of the top model) can be selected.
– PARAMSELECT_ASM—Specifies that any assembly’s
parameters (at any level of the top model) can be selected.

Dimensions and Parameters 17 - 5


– PARAMSELECT_FEATURE—Specifies that any feature’s
parameters can be selected.
– PARAMSELECT_EDGE—Specifies that any edge’s
parameters can be selected.
– PARAMSELECT_SURFACE—Specifies that any surface’s
parameters can be selected.
– PARAMSELECT_QUILT—Specifies that any quilt’s
parameters can be selected.
– PARAMSELECT_CURVE—Specifies that any curve’s
parameters can be selected.
– PARAMSELECT_COMPOSITE_CURVE—Specifies that
any composite curve’s parameters can be selected.
– PARAMSELECT_INHERITED—Specifies that any
inheritance feature’s parameters can be selected.
– PARAMSELECT_SKELETON—Specifies that any
skeleton’s parameters can be selected.
– PARAMSELECT_COMPONENT—Specifies that any
component’s parameters can be selected.
• AllowMultipleSelections—This boolean attribute indicates
whether or not to allow multiple parameters to be selected from
the dialog box, or only a single parameter. By default, it is true
and allows selection of multiple parameters.
Use the method
pfcModelItem.ParameterSelectionOptions.SetAllowMult
ipleSelections to modify this attribute.
• SelectButtonLabel—The visible label for the select button in the
dialog box.
Use the method
pfcModelItem.ParameterSelectionOptions.SetSelectButt
onLabel to set the label. If not set, the default label in the
language of the active Pro/ENGINEER session is displayed.

17 - 6 J-Link User’s Guide


Parameter Information
Methods Introduced:

• pfcModelItem.BaseParameter.GetValue
• pfcModelItem.BaseParameter.SetValue
• pfcModelItem.Parameter.GetScaledValue

Dimensions and
• pfcModelItem.Parameter.SetScaledValue

Parameters
• pfcModelItem.Parameter.GetUnits
• pfcModelItem.BaseParameter.GetIsDesignated
• pfcModelItem.BaseParameter.SetIsDesignated
• pfcModelItem.BaseParameter.GetIsModified
• pfcModelItem.BaseParameter.ResetFromBackup
• pfcModelItem.Parameter.GetDescription
• pfcModelItem.Parameter.SetDescription
• pfcModelItem.Parameter.GetRestriction
• pfcModelItem.Parameter.GetDriverType
• pfcModelItem.Parameter.Reorder
• pfcModelItem.Parameter.Delete
• pfcModelItem.NamedModelItem.GetName
Parameters inherit methods from the BaseParameter,
Parameter, and NamedModelItem interfaces.

The method pfcModelItem.BaseParameter.GetValue returns


the value of the parameter or dimension.

The method pfcModelItem.BaseParameter.SetValue assigns a


particular value to a parameter or dimension.

The method pfcModelItem.Parameter.GetScaledValue returns


the parameter value in the units of the parameter, instead of the
units of the owner model as returned by
pfcModelItem.BaseParameter.GetValue.

The method pfcModelItem.Parameter.SetScaledValue assigns


the parameter value in the units provided, instead of using the
units of the owner model as assumed by
pfcModelItem.BaseParameter.GetValue.

The method pfcModelItem.Parameter.GetUnits returns the


units assigned to the parameter.

Dimensions and Parameters 17 - 7


You can access the designation status of the parameter using the
methods pfcModelItem.BaseParameter.GetIsDesignated and
pfcModelItem.BaseParameter.SetIsDesignated.

The methods pfcModelItem.BaseParameter.GetIsModified


and pfcModelItem.BaseParameter.ResetFromBackup enable
you to identify a modified parameter or dimension, and reset it to
the last stored value. A parameter is said to be "modified" when the
value has been changed but the parameter's owner has not yet been
regenerated.

The method pfcModelItem.Parameter.GetDescription returns


the parameter description, or null, if no description is assigned.

The method pfcModelItem.Parameter.SetDescription assigns


the parameter description.

The method pfcModelItem.Parameter.GetRestriction


identifies if the parameter’s value is restricted to a certain range or
enumeration. It returns the
pfcModelItem.ParameterRestriction object. Refer to the section
Parameter Restrictions for more information.

The methodpfcModelItem.Parameter.GetDriverType returns


the driver type for a material parameter. The driver types are as
follows:

• PARAMDRIVER_PARAM—Specifies that the parameter value


is driven by another parameter.
• PARAMDRIVER_FUNCTION—Specifies that the parameter
value is driven by a function.
• PARAMDRIVER_RELATION—Specifies that the parameter
value is driven by a relation. This is equivalent to the value
obtained using
pfcModelItem.BaseParameter.GetIsRelationDriven for a
parameter object type.
The method pfcModelItem.Parameter.Reorder reorders the
given parameter to come immediately after the indicated parameter
in the Parameter dialog box and information files generated by
Pro/ENGINEER.

The method pfcModelItem.Parameter.Delete permanently


removes a specified parameter.

The method pfcModelItem.NamedModelItem.GetName


accesses the name of the specified parameter.

17 - 8 J-Link User’s Guide


Parameter Restrictions
Pro/ENGINEER allows users to assign specified limitations to the
value allowed for a given parameter (wherever the parameter
appears in the model). You can only read the details of the
permitted restrictions from J-Link, but not modify the permitted
values or range of values. Parameter restrictions in J-Link are
represented by the interface
pfcModelItem.ParameterRestriction.

Dimensions and
Parameters
Method Introduced:

• pfcModelItem.ParameterRestriction.GetType
The method pfcModelItem.ParameterRestriction.GetType
returns the pfcModelItem.RestrictionType object containing the
types of parameter restrictions. The parameter restrictions are of
the following types:

• PARAMSELECT_ENUMERATION—Specifies that the


parameter is restricted to a list of permitted values.
• PARAMSELECT_RANGE—Specifies that the parameter is
limited to a specified range of numeric values.

Enumeration Restriction
The PARAMSELECT_ENUMERATION type of parameter
restriction is represented by the interface
pfcModelItem.ParameterEnumeration. It is a child of the
pfcModelItem.ParameterRestriction interface.

Method Introduced:

• pfcModelItem.ParameterEnumeration.GetPermittedValues
The method
pfcModelItem.ParameterEnumeration.GetPermittedValues
returns a list of permitted parameter values allowed by this
restriction in the form of a sequence of the
pfcModelItem.ParamValue objects.

Range Restriction
The PARAMSELECT_RANGE type of parameter restriction is
represented by the interface pfcModelItem.ParameterRange. It
is a child of the pfcModelItem.ParameterRestriction interface.

Dimensions and Parameters 17 - 9


Methods Introduced:

• pfcModelItem.ParameterRange.GetMaximum
• pfcModelItem.ParameterRange.GetMinimum
• pfcModelItem.ParameterLimit.GetType
• pfcModelItem.ParameterLimit.GetValue
The method pfcModelItem.ParameterRange.GetMaximum
returns the maximum value limit for the parameter in the form of
the pfcModelItem.ParameterLimit object.

The method pfcModelItem.ParameterRange.GetMinimum


returns the minimum value limit for the parameter in the form of
the pfcModelItem.ParameterLimit object.

The method pfcModelItem.ParameterLimit.GetType returns


the pfcModelItem.ParameterLimitType containing the types of
parameter limits. The parameter limits are of the following types:

• PARAMLIMIT_LESS_THAN—Specifies that the parameter


must be less than the indicated value.
• PARAMLIMIT_LESS_THAN_OR_EQUAL—Specifies that the
parameter must be less than or equal to the indicated value.
• PARAMLIMIT_GREATER_THAN—Specifies that the
parameter must be greater than the indicated value.
• PARAMLIMIT_GREATER_THAN_OR_EQUAL—Specifies
that the parameter must be greater than or equal to the
indicated value.
The method pfcModelItem.ParameterLimit.GetValue retruns
the boundary value of the parameter limit in the form of the
pfcModelItem.ParamValue object.

Example Code: Updating Model Parameters

The following example code contains a single static utility method.


This method reads a Java "properties" file and creates or updates
model parameters for each property which exists in the file. Since
each property value is returned as a String, a utility method parses
the String into int, double, or boolean values if possible.

17 - 10 J-Link User’s Guide


import com.ptc.pfc.pfcModelItem.*;
import com.ptc.cipjava.jxthrowable;

import com.ptc.pfcu.pfcuParamValue; // utility method - create param


//value from String

import java.util.*; //contains Properties and Enumeration classes


import java.io.*; // needed for read from file
public class pfcParameterExamples {

Dimensions and
Parameters
//** createParametersFromProperties () demonstrates how
Java can read in *system-dependent stored information
using a "properties" file. Note that the *ParameterOwner
argument could refer to a model, a feature, a surface, or
an *edge.**/
public static void createParametersFromProperties
(ParameterOwner p_owner) throws com.ptc.cipjava.jxthrowable {
String prop_value;
String propsfile = "params.properties";
ParamValue pv;
Parameter p;

Properties props = new Properties (); //empty properties object

try {
props.load (new BufferedInputStream( new FileInputStream
(propsfile)));
}
catch (IOException e)
{
System.out.println ("File: "+propsfile+ "cannot be opened.");
System.out.println ("Cannot load parameters.");
return;
}
Enumeration e = props.propertyNames (); /* Enumeration allows you to
loop through all properties without determining
how many there are*/
ffor (String prop_name = (String)e.nextElement();
e.hasMoreElements();
prop_name = (String)e.nextElement())
{
prop_value = props.getProperty(prop_name);
pv = pfcuParamValue.createParamValueFromString(prop_value);
p = p_owner.GetParam(prop_name);
if (p == null) // GetParam returns null if it can't find the param.
{
p_owner.CreateParam (prop_name, pv);
}
else
{
p.SetValue (pv);

Dimensions and Parameters 17 - 11


}
}
}
}

package com.ptc.pfcu;
import com.ptc.pfc.pfcModelItem.ParamValue;
import com.ptc.pfc.pfcModelItem.pfcModelItem;

public class pfcuParamValue {

/**
* Parses a string into a ParamValue object. Useful for reading
* ParamValues from file or from UI TextComponent entry. This method
* checks if the value is a proper integer, double, or boolean, and if
* so, returns a value of that type. If the value is not a number or
boolean,
* the method returns a String ParamValue;
*/
public static ParamValue createParamValueFromString(String s)
throws com.ptc.cipjava.jxthrowable
{

try {
int i = Integer.valueOf (s).intValue();
return pfcModelItem.CreateIntParamValue(i);
}
catch (NumberFormatException e)
{
//string is not an int, try double
try
{
double d = Double.valueOf (s).doubleValue();
return pfcModelItem.CreateDoubleParamValue(d);
}
catch (NumberFormatException e2)
{
//string is not int/double, check if Boolean
if (s.equalsIgnoreCase("Y") ||
s.equalsIgnoreCase ("true"))
{
return pfcModelItem.CreateBoolParamValue (true);
}
else if (s.equalsIgnoreCase("N") ||
s.equalsIgnoreCase ("false"))
{
return pfcModelItem.CreateBoolParamValue (false);
}
else
{
return pfcModelItem.CreateStringParamValue(s);

17 - 12 J-Link User’s Guide


}
}
}
}
}

Dimension Objects

Dimensions and
Parameters
Dimension objects include standard Pro/ENGINEER dimensions as
well as reference dimensions. Dimension objects enable you to
access dimension tolerances and enable you to set the value for the
dimension. Reference dimensions allow neither of these actions.

Getting Dimensions
Dimensions and reference dimensions are Pro/ENGINEER model
items. See the section “Getting ModelItem Objects” for methods
that can return Dimension and RefDimension objects.

Dimension Information
Methods Introduced:

• pfcModelItem.BaseParameter.GetValue
• pfcModelItem.BaseParameter.SetValue
• pfcModelItem.BaseDimension.GetDimValue
• pfcModelItem.BaseDimension.SetDimValue
• pfcModelItem.BaseParameter.GetIsDesignated
• pfcModelItem.BaseParameter.SetIsDesignated
• pfcModelItem.BaseParameter.GetIsModified
• pfcModelItem.BaseParameter.ResetFromBackup
• pfcModelItem.BaseParameter.GetIsRelationDriven
• pfcDimension.BaseDimension.GetDimType
• pfcDimension.BaseDimension.GetSymbol
• pfcDimension.BaseDimension.GetTexts
• pfcDimension.BaseDimension.SetTexts
All the BaseParameter methods are accessible to Dimensions as
well as Parameters. See the section “Parameter Objects” for brief
descriptions.

Dimensions and Parameters 17 - 13


Note: You cannot set the value or designation status of
reference dimension objects.
The methods pfcModelItem.BaseDimension.GetDimValue and
pfcModelItem.BaseDimension.SetDimValue access the
dimension value as a double. These methods provide a shortcut for
accessing the dimensions' values without using a ParamValue
object.

The pfcModelItem.BaseParameter.GetIsRelationDriven
method identifies whether the part or assembly relations control a
dimension.

The method pfcDimension.BaseDimension.GetDimType


returns an enumeration object that identifies whether a dimension
is linear, radial, angular, or diametrical.

The method pfcDimension.BaseDimension.GetSymbol returns


the dimension or reference dimension symbol (that is, “d#” or
“rd#”).

The pfcDimension.BaseDimension.GetTexts and


pfcDimension.BaseDimension.SetTexts methods allow access
to the text strings that precede or follow the dimension value.

Dimension Tolerances
Methods Introduced:

• pfcDimension.Dimension.GetTolerance
• pfcDimension.Dimension.SetTolerance
• pfcDimension.pfcDimension.DimTolPlusMinus_Create
• pfcDimension.pfcDimension.DimTolSymmetric_Create
• pfcDimension.pfcDimension.DimTolLimits_Create
• pfcDimension.pfcDimension.DimTolSymSuperscript_Create
• pfcDimension.pfcDimension.DimTolISODIN_Create
Only true dimension objects can have geometric tolerances.

The methods pfcDimension.Dimension.GetTolerance and


pfcDimension.Dimension.SetTolerance enable you to access
the dimension tolerance. The object types for the dimension
tolerance are:

• DimTolLimits—Displays dimension tolerances as upper and


lower limits.

17 - 14 J-Link User’s Guide


Note: This format is not available when only the tolerance
value for a dimension is displayed.
• DimTolPlusMinus—Displays dimensions as nominal with
plus-minus tolerances. The positive and negative values are
independent.
• DimTolSymmetric—Displays dimensions as nominal with a
single value for both the positive and the negative tolerance.

Dimensions and
• DimTolSymSuperscript—Displays dimensions as nominal

Parameters
with a single value for positive and negative tolerance. The text
of the tolerance is displayed in a superscript format with
respect to the dimension text.
• DimTolISODIN—Displays the tolerance table type, table
column, and table name, if the dimension tolerance is set to a
hole or shaft table (DIN/ISO standard).
A null value is similar to the nominal option in Pro/ENGINEER.

To determine whether a given tolerance is plus/minus, symmetric,


limits, or superscript use instanceof.

Example Code: Setting Tolerences to a Specified Range

The following example code shows a utility method that sets


angular tolerances to a specified range. First, the program
determines whether the dimension passed to it is angular. If it is,
the method gets the dimension value and adds or subtracts the
range to it to get the upper and lower limits. The program then
initializes a DimTolLimits tolerance object and assigns it to the
dimension.

Because the BaseParameter used in this example is a dimension,


you know that its ParamValue object must contain a double value.
Therefore, you do not have to check the ParamValueType using the
method pfcModelItem.pfcParamValue.Getdiscr.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcDimension.*;

public class UtilDim {

public static Dimension setAngularToleranceToLimits (


Dimension dimension, double range)
{
DimensionType dtype;
ParamValue pvalue;

DimTolLimits limits;

Dimensions and Parameters 17 - 15


double dvalue, upper, lower;

try {
dtype = dimension.GetDimType(); // from interface BaseDimension

if (dtype.equals (DimensionType.DIM_ANGULAR))
{
pvalue = dimension.GetValue(); //from interface BaseParameter
dvalue = pvalue.GetDoubleValue();

upper = dvalue + range/2.0;


lower = dvalue - range/2.0;

limits = pfcDimension.DimTolLimits_Create (new Double (upper),


new Double (lower));

dimension.SetTolerance (limits); // from interface Dimension


}
}
catch (jxthrowable x)
{
System.out.println ("Exception caught: "+x);
System.out.println ("Unable to set angular tolerance");
}
finally {
return (dimension);
}
}
}

17 - 16 J-Link User’s Guide


18
Relations

This chapter describes how to access relations on all models and


model items in Pro/ENGINEER using the methods provided in
J-Link.

Topic Page

Accessing Relations 18 - 2
Adding a Customized Function to the Relations Dialog Box in
Pro/ENGINEER 18 - 4

18 - 1
Accessing Relations
In J-Link, the set of relations on any model or model item is
represented by the pfcModelItem.RelationOwner interface.
Models, features, surfaces, and edges inherit from this interface,
because each object can be assigned relations in Pro/ENGINEER.

Methods Introduced:

• pfcModelItem.RelationOwner.RegenerateRelations
• pfcModelItem.RelationOwner.DeleteRelations
• pfcModelItem.RelationOwner.GetRelations
• pfcModelItem.RelationOwner.SetRelations
• pfcModelItem.RelationOwner.EvaluateExpression
The method
pfcModelItem.RelationOwner.RegenerateRelations
regenerates the relations assigned to the owner item. It also
determines whether the specified relation set is valid.

The method pfcModelItem.RelationOwner.DeleteRelations


deletes all the relations assigned to the owner item.

The method pfcModelItem.RelationOwner.GetRelations


returns the list of actual relations assigned to the owner item as a
sequence of strings.

The method pfcModelItem.RelationOwner.SetRelations


assigns the sequence of strings as the new relations to the owner
item.

The method
pfcModelItem.RelationOwner.EvaluateExpression evaluates
the given relations-based expression, and returns the resulting
value in the form of the pfcModelItem.ParamValue object. Refer
to the section, The ParamValue Object in the chapter, Dimensions
and Parameters for more information on this object.

Example 1: Adding Relations between Parameters in a Solid Model


/*=====================================================================*\
FUNCTION: createParamDimRelation
PURPOSE: This function creates parameters for all dimensions in the
input features of a part model and adds relation between them.
\*=====================================================================*/
public static void createParamDimRelation(Features features)
{
Feature feature;

18 - 2 J-Link User’s Guide


int i,j;
stringseq relations;
ModelItems items;
ModelItem item;
String dimName , paramName;
double dimValue;
Boolean paramAdded;
Parameter param ;
ParamValue paramValue;

try

Relations
{
for(i=0;i<features.getarraysize();i++)
{
/*=====================================================================*\
Get the selected feature
\*=====================================================================*/
feature = features.get(i);
if (feature == null)
{
continue;
}

/*=====================================================================*\
Get the dimensions in the current feature
\*=====================================================================*/
items = feature.ListSubItems(ModelItemType.ITEM_DIMENSION);
if ((items == null) || (items.getarraysize() == 0))
{
continue;
}

relations = stringseq.create();

/*=====================================================================*\
Loop through all the dimensions and create relations
\*=====================================================================*/
for(j=0;j<items.getarraysize(); j++)
{
item = items.get(j);
dimName = item.GetName();
paramName = "PARAM_" + dimName;
dimValue = ((Dimension)item).GetDimValue();

param = feature.GetParam(paramName);
paramAdded = Boolean.FALSE;
if (param == null)
{
paramValue = pfcModelItem.CreateDoubleParamValue(dimValue);
feature.CreateParam (paramName, paramValue);
paramAdded = Boolean.TRUE;

Relations 18 - 3
}
else
{
if (param.GetValue().Getdiscr() == ParamValueType.PARAM_DOUBLE)
{
paramValue = pfcModelItem.CreateDoubleParamValue(dimValue);
param.SetValue(paramValue);
paramAdded = Boolean.TRUE;
}
}

if (paramAdded == Boolean.TRUE)
{
relations.append(dimName + " = " + paramName);
}
param = null ;
}
feature.SetRelations(relations);
}
catch(jxthrowable x)
{
System.out.println("Exception in createParamDimRelation(): "+x);
return;
}
}
}

Adding a Customized Function to the


Relations Dialog Box in Pro/ENGINEER
Methods Introduced:

• pfcSession.BaseSession.RegisterRelationFunction
The method
pfcSession.BaseSession.RegisterRelationFunction registers a
custom function that is included in the function list of the Relations
dialog box in Pro/ENGINEER. You can add the custom function to
relations that are added to models, features, or other relation
owners. The registration method takes the following input
arguments:

• Name—The name of the custom function.


• RelationFunctionOptions—This object contains the options that
determine the behavior of the custom relation function. Refer to
the section ‘Relation Function Options’ for more information.

18 - 4 J-Link User’s Guide


• RelationFunctionListener—This object contains the action
listener methods for the implementation of the custom function.
Refer to the section ‘Relation Function Listeners’ for more
information.
Note: J-Link relation functions are valid only when the
custom function has been registered by the application.
If the application is not running or not present, models
that contain user-defined relations cannot evaluate
these relations. In this situation, the relations are

Relations
marked as errors. However, these errors can be
commented until needed at a later time when the
relations functions are reactivated in a
Pro/ENGINEEER session.

Relation Function Options


Methods Introduced:

• pfcRelations.pfcRelations.RelationFunctionOptions_Create
• pfcRelations.RelationFunctionOptions.SetArgumentTypes
• pfcRelations.pfcRelations.RelationFunctionArgument_Create
• pfcRelations.RelationFunctionArgument.SetType
• pfcRelations.RelationFunctionArgument.SetIsOptional
• pfcRelations.RelationFunctionOptions.SetEnableTypeChecking
• pfcRelations.RelationFunctionOptions.SetEnableArgumentCheckMethod
• pfcRelations.RelationFunctionOptions.SetEnableExpressionEvaluationMethod
• pfcRelations.RelationFunctionOptions.SetEnableValueAssignmentMethod
Use the method
pfcRelations.pfcRelations.RelationFunctionOptions_Create
to create the pfcRelations.RelationFunctionOptions object
containing the options to enable or disable various relation function
related features. Use the methods listed above to access and modify
the options. These options are as follows:

• ArgumentTypes—The types of arguments in the form of the


pfcRelations.RelationFunctionArgument object. By
default, this parameter is null, indicating that no arguments
are permitted.

Relations 18 - 5
Use the method
pfcRelations.pfcRelations.RelationFunctionArgument_C
reate to create the
pfcRelations.RelationFunctionArgument object containing
the attributes of the arguments passed to the custom relation
function. These attributes are as follows:
– Type—The type of argument value such as double, integer,
and so on in the form of the
pfcModelItem.ParamValueType object.
– IsOptional—This boolean attribute specifies whether the
argument is optional, indicating that it can be skipped
when a call to the custom relation function is made. The
optional arguments must fall at the end of the argument
list. By default, this attribute is false.
• EnableTypeChecking—This boolean attribute determines
whether or not to check the argument types internally. By
default, it is false. If this attribute is set to false,
Pro/ENGINEER does not need to know the contents of the
arguments array. The custom function must handle all user
errors in such a situation.
• EnableArgumentCheckMethod—This boolean attribute
determines whether or not to enable the arguments check
listener function. By default, it is false.
• EnableExpressionEvaluationMethod—This boolean attribute
determines whether or not to enable the evaluate listener
function. By default, it is true.
• EnableValueAssignmentMethod—This boolean attribute
determines whether or not to enable the value assignment
listener function. By default, it is false.

Relation Function Listeners


The interface pfcRelations.RelationFunctionListener provides
the method signatures to implement a custom relation function.

Methods Introduced:

• pfcRelations.RelationFunctionListener.CheckArguments
• pfcRelations.RelationFunctionListener.AssignValue
• pfcRelations.RelationFunctionListener.EvaluateFunction

18 - 6 J-Link User’s Guide


The method
pfcRelations.RelationFunctionListener.CheckArguments
checks the validity of the arguments passed to the custom function.
This listener method takes the following input arguments:

• The owner of the relation being evaluated


• The custom function name
• A sequence of arguments passed to the custom function
If the implementation of this method determines that the

Relations
arguments are not valid for the custom function, then the listener
method returns false. Otherwise, it returns true.

The method
pfcRelations.RelationFunctionListener.EvaluateFunction
evaluates a custom relation function invoked on the right hand side
of a relation. This listener method takes the following input
arguments:

• The owner of the relation being evaluated


• The custom function name
• A sequence of arguments passed to the custom function
You must return the computed result of the custom relation
function.

The method
pfcRelations.RelationFunctionListener.AssignValue
evaluates a custom relation function invoked on the left hand side
of a relation. It allows you to initialize properties to be stored and
used by your application. This listener method takes the following
input arguments:

• The owner of the relation being evaluated


• The custom function name
• A sequence of arguments passed to the custom function
• The value obtained by Pro/ENGINEER from evaluating the
right hand side of the relation

Relations 18 - 7
Example 2: Adding and Implementing a New Custom Relation
Function
This example code consists two classes such as
pfcRelationExamples and RelationListener. The
pfcRelationExamples class contains methods that define the
options for the custom relation function and register it in the
current session. The RelationListener class contains the
AssignValue and EvaluateFunction listener methods that are
called when the custom function is used.
package com.ptc.jlinkexamples;

import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcCommand.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcDimension.*;
import com.ptc.pfc.pfcExceptions.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcRelations.*;

public class pfcRelationExamples


{

/*=====================================================================*\
FUNCTION: addCustomRelation
PURPOSE: This function adds new custom relation functions.
\*=====================================================================*/
public static void addCustomRelation(Session session)
{

RelationListener listenerObj;
RelationFunctionOptions setOptions , getOptions;
RelationFunctionArgument arg;
RelationFunctionArguments args;
try
{
listenerObj = new RelationListener();

/*---------------------------------------------------------------------*\
Create options for custom functions and register them in current session
\*---------------------------------------------------------------------*/
setOptions = pfcRelations.RelationFunctionOptions_Create ();
setOptions.SetEnableArgumentCheckMethod(Boolean.FALSE);

18 - 8 J-Link User’s Guide


setOptions.SetEnableExpressionEvaluationMethod(Boolean.FALSE);
setOptions.SetEnableTypeChecking (Boolean.FALSE);
setOptions.SetEnableValueAssignmentMethod (Boolean.TRUE);

session.RegisterRelationFunction("SET_A", listenerObj, setOptions );


session.RegisterRelationFunction("SET_B", listenerObj, setOptions );
getOptions = pfcRelations.RelationFunctionOptions_Create ();
args = RelationFunctionArguments.create();
arg = pfcRelations.RelationFunctionArgument_Create
(ParamValueType.PARAM_DOUBLE);
args.set ( 0, arg);

Relations
getOptions.SetArgumentTypes(args);

getOptions.SetEnableExpressionEvaluationMethod(Boolean.TRUE);
getOptions.SetEnableTypeChecking (Boolean.FALSE);
getOptions.SetEnableValueAssignmentMethod (Boolean.FALSE);

session.RegisterRelationFunction("EVAL_AX_B", listenerObj,
getOptions);
}
catch (Throwable e)
{

System.out.println ("Exception caught in addCustomRelation() : "+e);


e.printStackTrace ();
}
}

/*=====================================================================*\
CLASS: RelationListener
PURPOSE: This class implemented method will be called when the custom
relation function is used
\*=====================================================================*/
class RelationListener extends DefaultRelationFunctionListener
{
double aValue = 1;
double bValue = 0;

/*=====================================================================*\
FUNCTION: AssignValue
PURPOSE: Function called when value is assigned to custom relation
function
\*=====================================================================*/

public void AssignValue (RelationOwner Owner, String FunctionName,


ParamValues Arguments, ParamValue Assignment)
throws com.ptc.cipjava.jxthrowable
{
if(Assignment.Getdiscr() != ParamValueType.PARAM_DOUBLE)
{
return;

Relations 18 - 9
}

if (FunctionName.equals("SET_A") )
{
aValue = Assignment.GetDoubleValue();
}

if (FunctionName.equals("SET_B"))
{
bValue = Assignment.GetDoubleValue();
}
}

/*=====================================================================*\
FUNCTION: EvaluateFunction
PURPOSE: Function called when value is to be returned from custom
relation function.
\*=====================================================================*/
public ParamValue EvaluateFunction (RelationOwner Owner, String
FunctionName, ParamValues Arguments)
throws com.ptc.cipjava.jxthrowable
{
ParamValue paramValue = null;
double ret;

if (FunctionName.equals("EVAL_AX_B"))
{
ret = (aValue * (Arguments.get(0).GetDoubleValue())) + bValue;
paramValue = pfcModelItem.CreateDoubleParamValue(ret);
}
return paramValue;
}
}

18 - 10 J-Link User’s Guide


19
Assemblies and Components

This chapter describes the J-Link functions that access the


functions of a Pro/ENGINEER assembly. You must be familiar with
the following before you read this section:

• The Selection Object


• Coordinate Systems
• The Geometry section

Topic Page

Structure of Assemblies and Assembly Objects 19 - 2


Assembling Components 19 - 9
Redefining and Rerouting Assembly Components 19 - 14
Exploded Assemblies 19 - 20
Skeleton Models 19 - 21

19 - 1
Structure of Assemblies and Assembly
Objects
The object Assembly is an instance of Solid. The Assembly object
can therefore be used as input to any of the Solid and Model
methods applicable to assemblies. However assemblies do not
contain solid geometry items. The only geometry in the assembly is
datums (points, planes, axes, coordinate systems, curves, and
surfaces). Therefore solid assembly features such as holes and slots
will not contain active surfaces or edges in the assembly model.

The solid geometry of an assembly is contained in its components. A


component is a feature of type
pfcComponentFeat.ComponentFeat, which is a reference to a
part or another assembly, and a set of parametric constraints for
determining its geometrical location within the parent assembly.

Assembly features that are solid, such as holes and slots, and
therefore affect the solid geometry of parts in the assembly
hierarchy, do not themselves contain the geometry items that
describe those modifications. These items are always contained in
the parts whose geometry is modified, within local features created
for that purpose.

The important J-Link functions for assemblies are those that


operate on the components of an assembly. The object
ComponentFeat, which is an instance of Feature is defined for
that purpose. Each assembly component is treated as a variety of
feature, and the integer identifier of the component is also the
feature identifier.

An assembly can contain a hierarchy of assemblies and parts at


many levels, in which some assemblies and parts may appear more
than once. To identify the role of any database item in the context of
the root assembly, it is not sufficient to have the integer identifier of
the item and the handle to its owning part or assembly, as would be
provided by its Feature description.

It is also necessary to give the full path of the assembly-component


references down from the root assembly to the part or assembly
that owns the database item. This is the purpose of the object
ComponentPath, which is used as the input to J-Link assembly
functions.

The following figure shows an assembly hierarchy with two


examples of the contents of a ComponentPath object.

19 - 2 J-Link User’s Guide


component identifiers
A

2 7 3 11
C
Level 1

Assemblies and
4 6

Components
2 8
2
9
Level 2

2 3 2 2 4 7 2
5
3 12
Level 3
AB
2
5 3 2 4 3 2 3
AB 6
Level 4

2 3 A B’’
3 9
Level 5 4
A B’
= assembly or subassembly

= part

In the assembly shown in the figure, subassembly C is component


identifier 11 within assembly A, Part B is component identifier 3
within assembly AB, and so on. The subassembly AB occurs twice.
To refer to the two occurrences of part B, use the following:
(?)Component B’ Component B"

ComponentIds.get(0) = 2 ComponentIds.get(1) = 11
ComponentIds.get(1) = 2 ComponentIds.get(2) = 6
ComponentIds.get(2) = 5 ComponentIds.get(3) = 12
ComponentIds.get(3) = 2 ComponentIds.get(4) = 3
ComponentIds.get(4) = 3

The object ComponentPath is one of the main portions of the


Selection object.

Assemblies and Components 19 - 3


Assembly Components
Methods Introduced:

• pfcComponentFeat.ComponentFeat.GetIsBulkitem
• pfcComponentFeat.ComponentFeat.GetIsSubstitute
• pfcComponentFeat.ComponentFeat.GetCompType
• pfcComponentFeat.ComponentFeat.SetCompType
• pfcComponentFeat.ComponentFeat.GetModelDescr
• pfcComponentFeat.ComponentFeat.GetIsPlaced
• pfcComponentFeat.ComponentFeat.SetIsPlaced
• pfcComponentFeat.ComponentFeat.GetIsPackaged
• pfcComponentFeat.ComponentFeat.GetIsUnderconstrained
• pfcComponentFeat.ComponentFeat.GetIsFrozen
• pfcComponentFeat.ComponentFeat.GetPosition
• pfcComponentFeat.ComponentFeat.CopyTemplateContents
• pfcComponentFeat.ComponentFeat.CreateReplaceOp
The method
pfcComponentFeat.ComponentFeat.GetIsBulkitem identifies
whether an assembly component is a bulk item. A bulk item is a
non-geometric assembly feature that should appear in an assembly
bill of materials.

The method
pfcComponentFeat.ComponentFeat.GetIsSubstitute returns
a true value if the component is substituted, else it returns a false.
When you substitute a component in a simplified representation,
you temporarily exclude the substituted component and
superimpose the substituting component in its place.

The method
pfcComponentFeat.ComponentFeat.GetCompType returns
the type of the assembly component.

The method
pfcComponentFeat.ComponentFeat.SetCompType enables
you to set the type of the assembly component. The component type
identifies the purpose of the component in a manufacturing
assembly.

19 - 4 J-Link User’s Guide


The method
pfcComponentFeat.ComponentFeat.GetModelDescr returns
the model descriptor of the component part or subassembly.

Note: From Pro/ENGINEER Wildfire 4.0 onwards, the


method
pfcComponentFeat.ComponentFeat.GetModelDes
cr throws an exception
pfcExceptions.XtoolkitCantOpen if called on an

Assemblies and
assembly component whose immediate generic is not in

Components
session. Handle this exception and typecast the
assembly component as pfcSolid.Solid, which in
turn can be typecast as pfcFamily.FamilyMember,
and use the method
pfcFamily.FamilyMember.GetImmediateGenericI
nfo to get the model descriptor of the immediate generic
model. If you wish to switch off this behavior and
continue to run legacy applications in the pre-Wildfire
4.0 mode, set the configuration option
retrieve_instance_dependencies to
"instance_and_generic_deps".
The method
pfcCompontentFeat.ComponentFeat.GetIsPlaced determines
whether the component is placed.

The method pfcCompontentFeat.ComponentFeat.SetIsPlaced


forces the component to be considered placed. The value of this
parameter is important in assembly Bill of Materials.

Note: Once a component is constrained or packaged, it cannot


be made unplaced again.
A component of an assembly that is either partially constrained or
unconstrained is known as a packaged component. Use the method
pfcCompontentFeat.ComponentFeat.GetIsPackaged to
determine if the specified component is packaged.

The method
pfcCompontentFeat.ComponentFeat.GetIsUnderconstraine
d determines if the specified component is underconstrained, that
is, it possesses some constraints but is not fully constrained.

The method
pfcCompontentFeat.ComponentFeat.GetIsFrozen determines
if the specified component is frozen. The frozen component behaves
similar to the packaged component and does not follow the
constraints that you specify.

Assemblies and Components 19 - 5


The method pfcCompontentFeat.ComponentFeat.GetPosition
retrieves the component’s initial position before constraints and
movements have been applied. If the component is packaged this
position is the same as the constraint’s actual position. This method
modifies the assembly component data but does not regenerate the
assembly component. To regenerate the component, use the method
pfcComponentFeat.ComponentFeat.Regenerate.

The method
pfcComponentFeat.ComponentFeat.CopyTemplateContents
copies the template model into the model of the specified
component.

The method
pfcCompontentFeat.ComponentFeat.CreateReplaceOp
creates a replacement operation used to swap a component
automatically with a related component. The replacement
operation can be used as an argument to
pfcSolid.Solid.ExecuteFeatureOps.

Example Code: Replacing Instances

The following example code contains a single static utility method.


This method takes an assembly for an argument. It searches
through the assembly for all components that are instances of the
model "bolt". It then replaces all such occurrences with a different
instance of bolt.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.Session;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSolid.Solid;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;

public class pfcComponentFeatExamples {

/**
* replaceBolts automatically replaces all occurrences of the
* bolt "phillips7_8" with a new instance "slot7_8". It uses
* the methods available in the ComponentFeat class, including
* CreateModelReplace (), which creates a replacement operation
* for a component, and GetModelDescr (), which returns the model
* descr corresponding to a particular component feature.

19 - 6 J-Link User’s Guide


*/

public static void replaceBolts (com.ptc.pfc.pfcAssembly.Assembly


assembly)
{
Session session = null; //The Pro/ENGINEER session object
Solid bolt = null; // The bolt solid model
FamilyTableRow row = null; // The family table row corresponding
// to the new instance

Assemblies and
Solid newBolt; // The new bolt instance

Components
Features components; //List of components in the assembly
ComponentFeat component;
ModelDescriptor desc; // Component model descriptor
CompModelReplace replace;
FeatureOperations replaceOps;
String oldInstance = "PHILLIPS7_8";
String newInstance = "SLOT7_8";
try {
session = pfcGlobal.GetProESession();
bolt = (Solid)session.GetModel ("BOLT", ModelType.MDL_PART);
}
catch (jxthrowable x)
{
System.out.println ("Caught exception: "+x);
x.printStackTrace();
return;
}
try {
row = bolt.GetRow (newInstance);
newBolt = (Solid)row.CreateInstance();
replaceOps = FeatureOperations.create();
components = assembly.ListFeaturesByType (Boolean.FALSE,
FeatureType.FEATTYPE_COMPONENT);
for (int ii = 0; ii < components.getarraysize(); ii++)
{
component = (ComponentFeat)components.get(ii);
desc = component.GetModelDescr();
if (desc.GetInstanceName().equals(oldInstance))
{
replace = component.CreateReplaceOp (newBolt);
replaceOps.insert(0, replace);
}
}
assembly.ExecuteFeatureOps (replaceOps, null);
}
catch (jxthrowable x)
{
System.out.println ("Caught exception: "+x);
x.printStackTrace();
return;
}

Assemblies and Components 19 - 7


return;
}
}

Regenerating an Assembly Component


Method Introduced:

• pfcComponentFeat.ComponentFeat.Regenerate
The method pfcComponentFeat.ComponentFeat.Regenerate
regenerates an assembly component. The method regenerates the
assembly component just as in an interactive Pro/ENGINEER
session.

Creating a Component Path


Methods Introduced

• pfcAssembly.pfcAssembly.CreateComponentPath
The method
pfcAssembly.pfcAssembly.CreateComponentPath returns a
component path object, given the Assembly model and the integer
id path to the desired component.

Component Path Information


Methods Introduced:

• pfcAssembly.ComponentPath.GetRoot
• pfcAssembly.ComponentPath.SetRoot
• pfcAssembly.ComponentPath.GetComponentIds
• pfcAssembly.ComponentPath.SetComponentIds
• pfcAssembly.ComponentPath.GetLeaf
• pfcAssembly.ComponentPath.GetTransform
• pfcAssembly.ComponentPath.SetTransform
• pfcAssembly.ComponentPath.GetIsVisible
The method pfcAssembly.ComponentPath.GetRoot returns the
assembly at the head of the component path object.

The method pfcAssembly.ComponentPath.SetRoot sets the


assembly at the head of the component path object as the root
assembly.

19 - 8 J-Link User’s Guide


The method pfcAssembly.ComponentPath.GetComponentIds
returns the sequence of ids which is the path to the particular
component.

The method pfcAssembly.ComponentPath.SetComponentIds


sets the path from the root assembly to the component through
various subassemblies containing this component.

The method pfcAssembly.ComponentPath.GetLeaf returns the

Assemblies and
solid model at the end of the component path.

Components
The method pfcAssembly.ComponentPath.GetTransform
returns the coordinate system transformation between the
assembly and the particular component. It has an option to provide
the transformation from bottom to top, or from top to bottom. This
method describes the current position and the orientation of the
assembly component in the root assembly.

The method pfcAssembly.ComponentPath.SetTransform


applies a temporary transformation to the assembly component,
similar to the transformation that takes place in an exploded state.
The transformation will only be applied if the assembly is using
DynamicPositioning.

The method pfcAssembly.ComponentPath.GetIsVisible


identifies if a particular component is visible in any simplified
representation.

Assembling Components
Methods Introduced:

• pfcAssembly.Assembly.AssembleComponent
• pfcAssembly.Assembly.AssembleByCopy
• pfcComponentFeat.ComponentFeat.GetConstraints
• pfcComponentFeat.ComponentFeat.SetConstraints
The method pfcAssembly.Assembly.AssembleComponent adds
a specified component model to the assembly at the specified initial
position. The position is specified in the format defined by the
interface pfcBase.Transform3D. Specify the orientation of the
three axes and the position of the origin of the component
coordinate system, with respect to the target assembly coordinate
system.

Assemblies and Components 19 - 9


The method pfcAssembly.Assembly.AssembleByCopy creates a
new component in the specified assembly by copying from the
specified component. If no model is specified, then the new
component is created empty. The input parameters for this method
are:

• LeaveUnplaced—If true the component is unplaced. If false the


component is placed at a default location in the assembly.
Unplaced components belong to an assembly without being
assembled or packaged. These components appear in the model
tree, but not in the graphic window. Unplaced components can
be constrained or packaged by selecting them from the model
tree for redefinition. When its parent assembly is retrieved into
memory, an unplaced component is also retrieved.
• ModelToCopy—Specify the model to be copied into the assembly
• NewModelName—Specify a name for the copied model
The method
pfcComponentFeat.ComponentFeat.GetConstraints retrieves
the constraints for a given assembly component.

The method
pfcComponentFeat.ComponentFeat.SetConstraints allows
you to set the constraints for a specified assembly component. The
input parameters for this method are:

• Constraints—Constraints for the assembly component. These


constraints are explained in detail in the later sections.
• ReferenceAssembly—The path to the owner assembly, if the
constraints have external references to other members of the
top level assembly. If the constraints are applied only to the
assembly component then the value of this parameter should be
null.
This method modifies the component feature data but does not
regenerate the assembly component. To regenerate the assembly
use the method pfcSolid.Solid.Regenerate.

19 - 10 J-Link User’s Guide


Constraint Attributes
Methods Introduced:

• pfcComponentFeat.pfcComponentFeat.ConstraintAttributes_Create
• pfcComponentFeat.ConstraintAttributes.GetForce
• pfcComponentFeat.ConstraintAttributes.SetForce

Assemblies and
pfcComponentFeat.ConstraintAttributes.GetIgnore

Components
• pfcComponentFeat.ConstraintAttributes.SetIgnore
The method
pfcComponentFeat.pfcComponentFeat.ConstraintAttribute
s_Create returns the constraint attributes object based on the
values of the following input parameters:

• Ignore—Constraint is ignored during regeneration. Use this


capability to store extra constraints on the component, which
allows you to quickly toggle between different constraints.
• Force—Constraint has to be forced for line and point alignment.
• None—No constraint attributes. This is the default value.
Use the Get methods to retrieve the values of the input parameters
specified above and the Set methods to modify the values of these
input parameters.

Assembling a Component Parametrically


You can position a component relative to its neighbors (components
or assembly features) so that its position is updated as its neighbors
move or change. This is called parametric assembly.
Pro/ENGINEER allows you to specify constraints to determine how
and where the component relates to the assembly. You can add as
many constraints as you need to make sure that the assembly
meets the design intent.

Assemblies and Components 19 - 11


Methods Introduced:

• pfcComponentFeat.pfcComponentFeat.ComponentConstraint_Create
• pfcComponentFeat.ComponentConstraint.GetType
• pfcComponentFeat.ComponentConstraint.SetType
• pfcComponentFeat.ComponentConstraint.SetAssemblyReference
• pfcComponentFeat.ComponentConstraint.GetAssemblyReference
• pfcComponentFeat.ComponentConstraint.SetAssemblyDatumSide
• pfcComponentFeat.ComponentConstraint.GetAssemblyDatumSide
• pfcComponentFeat.ComponentConstraint.SetComponentReference
• pfcComponentFeat.ComponentConstraint.GetComponentReference
• pfcComponentFeat.ComponentConstraint.SetComponentDatumSide
• pfcComponentFeat.ComponentConstraint.GetComponentDatumSide
• pfcComponentFeat.ComponentConstraint.SetOffset
• pfcComponentFeat.ComponentConstraint.GetOffset
• pfcComponentFeat.ComponentConstraint.SetAttributes
• pfcComponentFeat.ComponentConstraint.GetAttributes
• pfcComponentFeat.ComponentConstraint.SetUserDefinedData
• pfcComponentFeat.ComponentConstraint.GetUserDefinedData
The method
pfcComponentFeat.pfcComponentFeat.ComponentConstrai
nt_Create returns the component constraint object having the
following parameters:

• ComponentConstraintType—Using the TYPE options, you can


specify the placement constraint types. They are as follows:
– ASM_CONSTRAINT_MATE—Use this option to make two
surfaces touch one another, that is coincident and facing
each other.
– ASM_CONSTRAINT_MATE_OFF—Use this option to
make two planar surfaces parallel and facing each other.
– ASM_CONSTRAINT_ALIGN—Use this option to make two
planes coplanar, two axes coaxial and two points coincident.
You can also align revolved surfaces or edges.
– ASM_CONSTRAINT_ALIGN_OFF—Use this option to
align two planar surfaces at an offset.

19 - 12 J-Link User’s Guide


– ASM_CONSTRAINT_INSERT—Use this option to insert a
``male'' revolved surface into a ``female'' revolved surface,
making their respective axes coaxial.
– ASM_CONSTRAINT_ORIENT—Use this option to make
two planar surfaces to be parallel in the same direction.
– ASM_CONSTRAINT_CSYS—Use this option to place a
component in an assembly by aligning the coordinate
system of the component with the coordinate system of the

Assemblies and
Components
assembly.
– ASM_CONSTRAINT_TANGENT——Use this option to
control the contact of two surfaces at their tangents.
– ASM_CONSTRAINT_PNT_ON_SRF—Use this option to
control the contact of a surface with a point.
– ASM_CONSTRAINT_EDGE_ON_SRF—Use this option to
control the contact of a surface with a straight edge.
– ASM_CONSTRAINT_DEF_PLACEMENT—Use this option
to align the default coordinate system of the component to
the default coordinate system of the assembly.
– ASM_CONSTRAINT_SUBSTITUTE—Use this option in
simplified representations when a component has been
substituted with some other model
– ASM_CONSTRAINT_PNT_ON_LINE—Use this option to
control the contact of a line with a point.
– ASM_CONSTRAINT_FIX—Use this option to force the
component to remain in its current packaged position.
– ASM_CONSTRAINT_AUTO—Use this option in the user
interface to allow an automatic choice of constraint type
based upon the references.
• AssemblyReference—A reference in the assembly.
• AssemblyDatumSide—Orientation of the assembly. This can
have the following values:
– Yellow—The primary side of the datum plane which is the
default direction of the arrow.
– Red—The secondary side of the datum plane which is the
direction opposite to that of the arrow.
• ComponentReference—A reference on the placed component.
• ComponentDatumSide—Orientation of the assembly
component. This can have the following values:

Assemblies and Components 19 - 13


– Yellow—The primary side of the datum plane which is the
default direction of the arrow.
– Red—The secondary side of the datum plane which is the
direction opposite to that of the arrow.
• Offset—The mate or align offset value from the reference.
• Attributes—Constraint attributes for a given constraint
• UserDefinedData—A string that specifies user data for the
given constraint.
Use the Get methods to retrieve the values of the input parameters
specified above and the Set methods to modify the values of these
input parameters.

Redefining and Rerouting Assembly


Components
These functions enable you to reroute previously assembled
components, just as in an interactive Pro/ENGINEER session.

Methods Introduced:

• pfcComponentFeat.ComponentFeat.RedefineThroughUI
• pfcComponentFeat.ComponentFeat.MoveThroughUI
The method
pfcComponentFeat.ComponentFeat.RedefineThroughUI
must be used in interactive J-Link applications. This method
displays the Pro/ENGINEER Constraint dialog box. This enables
the end user to redefine the constraints interactively. The control
returns to J-Link application when the user selects OK or Cancel
and the dialog box is closed.

The method
pfcComponentFeat.ComponentFeat.MoveThroughUI invokes
a dialog box that prompts the user to interactively reposition the
components. This interface enables the user to specify the
translation and rotation values. The control returns to J-Link
application when the user selects OK or Cancel and the dialog box
is closed.

Example: Component Constraints

This function displays each constraint of the component visually on


the screen, and includes a text explanation for each constraint.

19 - 14 J-Link User’s Guide


import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.Session;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSolid.Solid;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcBase.*;

Assemblies and
import com.ptc.pfc.pfcSelect.*;

Components
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
public class pfcComponentFeatExamples {

/*=====================================================================*\
FUNCTION: highlightConstraints
PURPOSE: Highlights and labels a component's constraints
\*=====================================================================*/
public static void highlightConstraints ()
throws com.ptc.cipjava.jxthrowable
{
/*---------------------------------------------------------------------*\
Get the constraints for the component.
\*---------------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
SelectionOptions options = pfcSelect.SelectionOptions_Create
("membfeat");
options.SetMaxNumSels (new Integer (1));
Selections selections = session.Select (options, null);
if (selections == null || selections.getarraysize () == 0)
return;
ModelItem item = selections.get (0).GetSelItem ();
Feature feature = (Feature)item;
if (feature.GetFeatType () != FeatureType.FEATTYPE_COMPONENT)
return;
ComponentFeat asmcomp = (ComponentFeat) item;
ComponentConstraints constrs = asmcomp.GetConstraints ();
if (constrs == null || constrs.getarraysize() == 0)
return;
for (int i = 0; i < constrs.getarraysize(); i++)
{
/*---------------------------------------------------------------------*\
Highlight the assembly reference geometry
\*---------------------------------------------------------------------*/
ComponentConstraint c = constrs.get (i);
Selection asmRef = c.GetAssemblyReference ();
if (asmRef != null)
asmRef.Highlight (StdColor.COLOR_ERROR);
/*---------------------------------------------------------------------*\
Highlight the component reference geometry
\*---------------------------------------------------------------------*/

Assemblies and Components 19 - 15


Selection compRef = c.GetComponentReference ();
if (compRef != null)
compRef.Highlight (StdColor.COLOR_WARNING);
/*---------------------------------------------------------------------*\
Prepare and display the message text.
\*---------------------------------------------------------------------*/
Double offset = c.GetOffset ();
String offsetString = "";
if (offset != null)
offsetString = ", offset of "+offset;
ComponentConstraintType cType = c.GetType ();
String cTypeString = constraintTypeToString (cType);
stringseq texts = stringseq.create ();
texts.set (0, new String (""+(i+1)));
texts.set (1, new String (""+constrs.getarraysize()));
texts.set (2, cTypeString);
texts.set (3, offsetString);
session.UIDisplayMessage ("jlexamples.txt",
"JLEX Showing constraint %0s of %1s %2s%3s.
Hit <CR> to continue.", texts);
session.UIReadStringMessage (null);
/*---------------------------------------------------------------------*\
Clean up the UI for the next constraint
\*---------------------------------------------------------------------*/
if (asmRef != null)
{
asmRef.UnHighlight ();
}
if (compRef != null)
{
compRef.UnHighlight ();
}
}
}
/*=====================================================================*\
FUNCTION: constraintTypeToString
PURPOSE: Utility: convert the constraint type to a string for printing
\*=====================================================================*/
private static String constraintTypeToString (ComponentConstraintType
type)
{
switch (type.getValue())
{
case ComponentConstraintType._ASM_CONSTRAINT_MATE:
return ("(Mate)");
case ComponentConstraintType._ASM_CONSTRAINT_MATE_OFF:
return ("(Mate Offset)");
case ComponentConstraintType._ASM_CONSTRAINT_ALIGN:
return ("(Align)");
case ComponentConstraintType._ASM_CONSTRAINT_ALIGN_OFF:
return ("(Align Offset)");

19 - 16 J-Link User’s Guide


case ComponentConstraintType._ASM_CONSTRAINT_INSERT:
return ("(Insert)");
case ComponentConstraintType._ASM_CONSTRAINT_ORIENT:
return ("(Orient)");
case ComponentConstraintType._ASM_CONSTRAINT_CSYS:
return ("(Csys)");
case ComponentConstraintType._ASM_CONSTRAINT_TANGENT:
return ("(Tangent)");
case ComponentConstraintType._ASM_CONSTRAINT_PNT_ON_SRF:

Assemblies and
return ("(Point on Surf)");

Components
case ComponentConstraintType._ASM_CONSTRAINT_EDGE_ON_SRF:
return ("(Edge on Surf)");
case ComponentConstraintType._ASM_CONSTRAINT_DEF_PLACEMENT:
return ("(Default)");
case ComponentConstraintType._ASM_CONSTRAINT_SUBSTITUTE:
return ("(Substitute)");
case ComponentConstraintType._ASM_CONSTRAINT_PNT_ON_LINE:
return ("(Point on Line)");
case ComponentConstraintType._ASM_CONSTRAINT_FIX:
return ("(Fix)");
case ComponentConstraintType._ASM_CONSTRAINT_AUTO:
return ("(Auto)");
default:
return ("(Unrecognized Type)");
}
}
}

Example: Assembling Components

The following example demonstrates how to assemble a component


into an assembly, and how to constrain the component by aligning
datum planes. If the complete set of datum planes is not found, the
function will show the component constraint dialog to the user to
allow them to adjust the placement.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.pfcGlobal;
import com.ptc.pfc.pfcSession.Session;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSolid.Solid;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSelect.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcAssembly.*;
public class pfcComponentFeatExamples {

Assemblies and Components 19 - 17


/*=====================================================================*\
FUNCTION: UserAssembleByDatums
PURPOSE: Assemble a component by aligning named datums.
\*=====================================================================*/
public static void assembleByDatums (String componentFilename )
throws com.ptc.cipjava.jxthrowable
{
boolean interactFlag = false;
Matrix3D identityMatrix = Matrix3D.create ();
for (int x = 0; x < 4; x++)
for (int y = 0; y < 4; y++)
{
if (x == y)
identityMatrix.set (x, y, 1.0);
else
identityMatrix.set (x, y, 0.0);
}
Transform3D transf = pfcBase.Transform3D_Create (identityMatrix);
/*-----------------------------------------------------------------*\
Get the current assembly
\*-----------------------------------------------------------------*/
Session session = pfcGlobal.GetProESession ();
Model model = session.GetCurrentModel ();
if (model == null || model.GetType() != ModelType.MDL_ASSEMBLY)
throw new RuntimeException ("Current model is not an
assembly.");

Assembly assembly = (Assembly) model;


ModelDescriptor descr =
pfcModel.ModelDescriptor_CreateFromFileName
(componentFilename);
Solid componentModel = (Solid)session.GetModelFromDescr (descr);
if (componentModel == null)
{
componentModel = (Solid) session.RetrieveModel (descr);
}

/*-----------------------------------------------------------------*\
Set up the arrays of datum names
\*-----------------------------------------------------------------*/
String [] asmDatums = {"ASM_D_FRONT", "ASM_D_TOP", "ASM_D_RIGHT"};
String [] compDatums = {"COMP_D_FRONT",
"COMP_D_TOP",
"COMP_D_RIGHT"};
/*-----------------------------------------------------------------*\
Package the component initially
\*-----------------------------------------------------------------*/
ComponentFeat asmcomp =
(ComponentFeat) assembly.AssembleComponent (componentModel,
transf);
/*-----------------------------------------------------------------*\

19 - 18 J-Link User’s Guide


Prepare the constraints array
\*-----------------------------------------------------------------*/
ComponentConstraints constrs = ComponentConstraints.create ();
for (int i = 0; i < 3; i++)
{
/*-----------------------------------------------------------------*\
Find the assembly datum
\*-----------------------------------------------------------------*/
ModelItem asmItem =

Assemblies and
assembly.GetItemByName (ModelItemType.ITEM_SURFACE,

Components
asmDatums [i]);
if (asmItem == null)
{
interactFlag = true;
continue;
}
/*-----------------------------------------------------------------*\
Find the component datum
\*-----------------------------------------------------------------*/
ModelItem compItem =
componentModel.GetItemByName (ModelItemType.ITEM_SURFACE,
compDatums [i]);
if (compItem == null)
{
interactFlag = true;
continue;
}

/*-----------------------------------------------------------------*\
For the assembly reference, initialize a component path.
This is necessary even if the reference geometry is in the assembly.
\*-----------------------------------------------------------------*/
intseq ids = intseq.create ();
ComponentPath path = pfcAssembly.CreateComponentPath (assembly,
ids);
/*-----------------------------------------------------------------*\
Allocate the references
\*-----------------------------------------------------------------*/
Selection asmSel =
pfcSelect.CreateModelItemSelection (asmItem, path);
Selection compSel =
pfcSelect.CreateModelItemSelection (compItem, null);
/*-----------------------------------------------------------------*\
Allocate and fill the constraint.
\*-----------------------------------------------------------------*/
ComponentConstraint constr =
pfcComponentFeat.ComponentConstraint_Create
(ComponentConstraintType.ASM_CONSTRAINT_ALIGN);
constr.SetAssemblyReference (asmSel);
constr.SetComponentReference (compSel);
constrs.insert (constrs.getarraysize(), constr);

Assemblies and Components 19 - 19


}
/*-----------------------------------------------------------------*\
Set the assembly component constraints and regenerate the assembly.
\*-----------------------------------------------------------------*/
asmcomp.SetConstraints (constrs, null);
assembly.Regenerate (null);
session.GetModelWindow (assembly).Repaint();
/*-----------------------------------------------------------------*\
If any of the expect datums was not found, prompt the user to constrain
the new component.
\*-----------------------------------------------------------------*/
if (interactFlag)
{
session.UIDisplayMessage ("jlexamples.txt",
"JLEX Unable to locate all required datum references.
New component is packaged.", null);
asmcomp.RedefineThroughUI();
}
}
}

Exploded Assemblies
These methods enable you to determine and change the explode
status of the assembly object.

Methods Introduced:

• pfcAssembly.Assembly.GetIsExploded
• pfcAssembly.Assembly.Explode
• pfcAssembly.Assembly.UnExplode
• pfcAssembly.Assembly.GetActiveExplodedState
• pfcAssembly.Assembly.GetDefaultExplodedState
• pfcAssembly.ExplodedState.Activate
The methods pfcAssembly.Assembly.Explode and
pfcAssembly.Assembly.UnExplode enable you to determine and
change the explode status of the assembly object.

The method pfcAssembly.Assembly.GetIsExploded reports


whether the specified assembly is currently exploded.

The method pfcAssembly.Assembly.GetActiveExplodedState


returns the current active explode state.

19 - 20 J-Link User’s Guide


The method pfcAssembly.Assembly.GetDefaultExplodedState
returns the default explode state.

The method pfcAssembly.ExplodedState.Activate activates the


specified explode state representation.

Skeleton Models

Assemblies and
Components
Skeleton models are a 3-dimensional layout of the assembly. These
models are holders or distributors of critical design information,
and can represent space requirements, important mounting
locations, and motion.

Methods Introduced:

• pfcAssembly.Assembly.AssembleSkeleton
• pfcAssembly.Assembly.AssembleSkeletonByCopy
• pfcAssembly.Assembly.GetSkeleton
• pfcAssembly.Assembly.DeleteSkeleton
• pfcSolid.Solid.GetIsSkeleton
The method pfcAssembly.Assembly.AssembleSkeleton adds an
existing skeleton model to the specified assembly.

The method pfcAssembly.Assembly.GetSkeleton returns the


skeleton model of the specified assembly.

The method pfcAssembly.Assembly.DeleteSkeleton deletes a


skeleton model component from the specified assembly.

The method pfcAssembly.Assembly.AssembleSkeletonByCopy


adds a specified skeleton model to the assembly. The input
parameters for this method are:

• SkeletonToCopy—Specify the skeleton model to be copied into


the assembly
• NewSkeletonName—Specify a name for the copied skeleton
model
The method pfcSolid.Solid.GetIsSkeleton determines if the
specified part model is a skeleton model or a concept model. It
returns a true if the model is a skeleton else it returns a false.

Assemblies and Components 19 - 21


20
Family Tables

This chapter describes how to use J-Link classes and methods to


access and manipulate family table information.

Topic Page

Working with Family Tables 20 - 2


Creating Family Table Instances 20 - 5
Creating Family Table Columns 20 - 5

20 - 1
Working with Family Tables
J-Link provides several methods for accessing family table
information. Because every model inherits from the interface
pfcFamily.FamilyMember, every model can have a family table
associated with it.

Accessing Instances
Methods Introduced:

• pfcFamily.FamilyMember.GetParent
• pfcFamily.FamilyMember.GetImmediateGenericInfo
• pfcFamily.FamilyMember.GetTopGenericInfo
• pfcFamily.FamilyTableRow.CreateInstance
• pfcFamily.FamilyMember.ListRows
• pfcFamily.FamilyMember.GetRow
• pfcFamily.FamilyMember.RemoveRow
• pfcFamily.FamilyTableRow.GetInstanceName
• pfcFamily.FamilyTableRow.GetIsLocked
• pfcFamily.FamilyTableRow.SetIsLocked
To get the generic model for an instance, call the method
pfcFamily.FamilyMember.GetParent.

From Pro/ENGINEER Wildfire 4.0 onwards, the behavior of the


method pfcFamily.FamilyMember.GetParent has changed as a
result of performance improvement in family table retrieval
mechanism. When you now call the method
pfcFamily.FamilyMember.GetParent, it throws an exception
pfcExceptions.XToolkitCantOpen, if the immediate generic of
a model instance in a nested family table is currently not in session.
Handle this exception and use the method
pfcFamily.FamilyMember.GetImmediateGenericInfo to get
the model descriptor of the immediate generic model. This
information can be used to retrieve the immediate generic model.

If you wish to switch off the above behavior and continue to run
legacy applications in the pre-Wildfire 4.0 mode, set the
configuration option retrieve_instance_dependencies to
"instance_and_generic_deps".

To get the model descriptor of the top generic model, call the
method pfcFamily.FamilyMember.GetTopGenericInfo.

20 - 2 J-Link User’s Guide


Similarly, the method
pfcFamily.FamilyTableRow.CreateInstance returns an
instance model created from the information stored in the
FamilyTableRow object.

The method pfcFamily.FamilyMember.ListRows returns a


sequence of all rows in the family table, whereas
pfcFamily.FamilyMember.GetRow gets the row object with the
name you specify.

Family Tables
Use the method pfcFamily.FamilyMember.RemoveRow to
permanently delete the row from the family table.

The method pfcFamily.FamilyTableRow.GetInstanceName


returns the name that corresponds to the invoking row object.

To control whether the instance can be changed or removed, call the


methods pfcFamily.FamilyTableRow.GetIsLocked and
pfcFamily.FamilyTableRow.SetIsLocked.

Accessing Columns
Methods Introduced:

• pfcFamily.FamilyMember.ListColumns
• pfcFamily.FamilyMember.GetColumn
• pfcFamily.FamilyMember.RemoveColumn
• pfcFamily.FamilyTableColumn.GetSymbol
• pfcFamily.FamilyTableColumn.GetType
• pfcFamily.FamColModelItem.GetRefItem
• pfcFamily.FamColParam.GetRefParam
The method pfcFamily.FamilyMember.ListColumns returns a
sequence of all columns in the family table.

The method pfcFamily.FamilyMember.GetColumn returns a


family table column, given its symbolic name.

To permanently delete the column from the family table and all
changed values in all instances, call the method
pfcFamily.FamilyMember.RemoveColumn.

The method pfcFamily.FamilyTableColumn.GetSymbol


returns the string symbol at the top of the column, such as D4 or
F5.

Family Tables 20 - 3
The method pfcFamily.FamilyTableColumn.GetType returns
an enumerated value indicating the type of parameter governed by
the column in the family table.

The method pfcFamily.FamColModelItem.GetRefItem returns


the ModelItem (Feature or Dimension) controlled by the
column, whereas pfcFamily.FamColParam.GetRefParam
returns the Parameter controlled by the column.

Accessing Cell Information


Methods Introduced:

• pfcFamily.FamilyMember.GetCell
• pfcFamily.FamilyMember.GetCellIsDefault
• pfcFamily.FamilyMember.SetCell
• pfcModelItem.ParamValue.GetStringValue
• pfcModelItem.ParamValue.GetIntValue
• pfcModelItem.ParamValue.GetDoubleValue
• pfcModelItem.ParamValue.GetBoolValue
The method pfcFamily.FamilyMember.GetCell returns a string
ParamValue that corresponds to the cell at the intersection of the
row and column arguments. Use the method
pfcFamily.FamilyMember.GetCellIsDefault to check if the
value of the specified cell is the default value, which is the value of
the specified cell in the generic model.

The method pfcFamily.FamilyMember.SetCell assigns a value


to a column in a particular family table instance.

The pfcModelItem.ParamValue.GetStringValue,
pfcModelItem.ParamValue.GetIntValue,
pfcModelItem.ParamValue.GetDoubleValue, and
pfcModelItem.ParamValue.GetBoolValue methods are used to
get the different types of parameter values.

20 - 4 J-Link User’s Guide


Creating Family Table Instances
Methods Introduced:

• pfcFamily.FamilyMember.AddRow
• pfcModelItem.pfcModelItem.CreateStringParamValue
• pfcModelItem.pfcModelItem.CreateIntParamValue

Family Tables
pfcModelItem.pfcModelItem.CreateDoubleParamValue
• pfcModelItem.pfcModelItem.CreateBoolParamValue
Use the method pfcFamily.FamilyMember.AddRow to create a
new instance with the specified name, and, optionally, the specified
values for each column. If you do not pass in a set of values, the
value “*” will be assigned to each column. This value indicates that
the instance uses the generic value.

Creating Family Table Columns


Methods Introduced:

• pfcFamily.FamilyMember.CreateDimensionColumn
• pfcFamily.FamilyMember.CreateParamColumn
• pfcFamily.FamilyMember.CreateFeatureColumn
• pfcFamily.FamilyMember.CreateComponentColumn
• pfcFamily.FamilyMember.CreateCompModelColumn
• pfcFamily.FamilyMember.CreateGroupColumn
• pfcFamily.FamilyMember.CreateMergePartColumn
• pfcFamily.FamilyMember.CreateColumn
• pfcFamily.FamilyMember.AddColumn
• pfcModelItem.pfcModelItem.CreateStringParamValue
• pfcModelItem.ParamValues.create
The above methods initialize a column based on the input
argument. These methods assign the proper symbol to the column
header.

Family Tables 20 - 5
The method pfcFamily.FamilyMember.CreateColumn creates
a new column given a properly defined symbol and column type.
The results of this call should be passed to the method
pfcFamily.FamilyMember.AddColumn to add the column to the
model's family table.

The method pfcFamily.FamilyMember.AddColumn adds the


column to the family table. You can specify the values; if you pass
nothing for the values, the method assigns the value “*” to each
instance to accept the column’s default value.

Example Code: Adding Dimensions to a Family Table

The following example code shows a utility method that adds all the
dimensions to a family table. The program lists the dependencies of
the assembly and loops through each dependency, assigning the
model to a new FamColDimension column object. All the
dimensions, parameters, features, and components could be added
to the family table using a similar method.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcDimension.*;
import com.ptc.pfc.pfcFamily.*;
public class pfcFamilyMemberExamples {

public static void addHoleDiameterColumns (Solid solid)


{
Session session;
Features hole_features; //hole features in the model
Feature hole_feat; //a hole feature
ModelItems dimensions; //dimensions in the hole_feat
Dimension dim; //a dimension
FamColDimension dim_column; // dimension column in the family table

try {
session = pfcGlobal.GetProESession();
}
catch (jxthrowable x)
{
System.out.println("Unable to initialize Pro/ENGINEER session:
"+x);
return;
}
try {
// list all holes in the solid model

20 - 6 J-Link User’s Guide


hole_features = solid.ListFeaturesByType (Boolean.TRUE,
FeatureType.FEATTYPE_HOLE);
for (int ii =0; ii<hole_features.getarraysize(); ii++)
{
hole_feat = hole_features.get(ii);
// list all dimensions int the feature
dimensions = hole_feat.ListSubItems(ModelItemType.ITEM_DIMENSION);

for (int jj = 0; jj<dimensions.getarraysize(); jj++)


{

Family Tables
dim = (Dimension) dimensions.get(jj);
// determine if the dimension is a diameter dim.
if (dim.GetDimType().equals(DimensionType.DIM_DIAMETER))
{
// create the family table column
//(method from interface FamilyMember)
dim_column = solid.CreateDimensionColumn(dim);
// add the column to the Solid
// instead of null, you could pass any array of
ParamValues
// for the initial column values
solid.AddColumn(dim_column, null);
}
}
}
}
catch (jxthrowable x)
{
System.out.println("Exception caught: "+x);
return;
}
}
}
/*====================================================================*\
FUNCTION: addHoleDiameterColumns
PURPOSE: Add all hole diameters to the family table of a model.
\*====================================================================*/
function addHoleDiameterColumns ()
{
/*------------------------------------------------------------------*\
Use the current solid model.
\*------------------------------------------------------------------*/
var session = pfcCreate ("MpfcCOMGlobal").GetProESession ();
var solid = session.CurrentModel;
modelTypeClass = pfcCreate ("pfcModelType");

if (solid == void null || (solid.Type != modelTypeClass.MDL_PART &&


solid.Type != modelTypeClass.MDL_ASSEMBLY))
{
throw new Error (0, "Current model is not a part or assembly.");
}

Family Tables 20 - 7
/*------------------------------------------------------------------*\
List all holes in the solid model
\*------------------------------------------------------------------*/
var holeFeatures = solid.ListFeaturesByType (true,
pfcCreate ("pfcFeatureType").FEATTYPE_HOLE);
for (var ii =0; ii < holeFeatures.Count; ii++)
{
var holeFeat = holeFeatures.Item(ii);

/*------------------------------------------------------------------*\
List all dimensions in the feature
\*------------------------------------------------------------------*/
dimensions =
holeFeat.ListSubItems(pfcCreate
("pfcModelItemType").ITEM_DIMENSION);

for (var jj = 0; jj < dimensions.Count; jj++)


{
var dim = dimensions.Item(jj);

/*------------------------------------------------------------------*\
Determine if the dimension is a diameter dimension
\*------------------------------------------------------------------*/
if (dim.DimType == pfcCreate
("pfcDimensionType").DIM_DIAMETER)
{
/*------------------------------------------------------------------*\
Create the family table column (from pfcFamilyMember class)
\*------------------------------------------------------------------*/
var dimColumn = solid.CreateDimensionColumn(dim);
/*------------------------------------------------------------------*\
Add the column to the family table. Second argument could be
a sequence of pfcParamValues to use for each family table instance.
\*------------------------------------------------------------------*/
solid.AddColumn(dimColumn, void null);
}
}
}
}

20 - 8 J-Link User’s Guide


21
Action Listeners

This chapter describes the J-Link methods that enable you to use
action listeners.

Topic Page

J-Link Action Listeners 21 - 2


Creating an ActionListener Implementation 21 - 2
Action Sources 21 - 3
Types of Action Listeners 21 - 4
Cancelling an ActionListener Operation 21 - 11

21 - 1
J-Link Action Listeners
An ActionListener in Java is a class that is assigned to respond
to certain events. In J-Link, you can assign action listeners to
respond to events involving the following tasks:

• Changing windows
• Changing working directories
• Model operations
• Regenerating
• Creating, deleting, and redefining features
• Checking for regeneration failures
All action listeners in J-Link are defined by these classes:

• Interface—Named <Object>ActionListener. This


interface defines the methods that can respond to various
events.
• Default class—Named
Default<Object>ActionListener. This class has every
available method overridden by an empty implementation. You
create your own action listeners by extending the default class
and overriding the methods for events that interest you.

Creating an ActionListener Implementation


You can create a proper ActionListener class using either of the
following methods:

Define a separate class within the java file.


Example:
public class MyApp {
session.AddActionListener (new SolidAL1());
}

class SolidAL1 extends DefaultSolidActionListener {


// Include overridden methods here
}

21 - 2 J-Link User’s Guide


To use your action listener in different Java applications,
define it in a separate file.
Example:
MyApp.java:
import solidAL1;

public class MyApp {


session.AddActionListener (new SolidAL1());

Action Listeners
}

SolidAL1.java:
public class SolidAL1 extends DefaultSolidActionListener {
// Include overridden methods here.
}

Action Sources
Methods introduced:

• pfcBase.ActionSource.AddActionListener
• pfcBase.ActionSource.RemoveActionListener
Many J-Link classes inherit the ActionSource interface, but only
the following classes currently make calls to the methods of
registered ActionListeners:

• pfcSession.Session
– Session Action Listener
– Model Action Listener
– Solid Action Listener
– Model Event Action Listener
– Feature Action Listener
• pfcCommand.UICommand
– UI Action Listener
• pfcModel.Model (and it’s subclasses)
– Model Action Listener
– Parameter Action Listener
• pfcSolid.Solid (and it’s subclasses)
– Solid Action Listener
– Feature Action Listener

Action Listeners 21 - 3
• pfcFeature.Feature (and it’s subclasses)
– Feature Action Listener
Note: Assigning an action listener to a source not related to it
will not cause an error but the listener method will
never be called.

Types of Action Listeners


The following sections describe the different kinds of action
listeners: session, UI command, solid, and feature.

Session Level Action Listeners


Methods introduced:

• pfcSession.SessionActionListener.OnAfterDirectoryChange
• pfcSession.SessionActionListener.OnAfterWindowChange
• pfcSession.SessionActionListener.OnAfterModelDisplay
• pfcSession.SessionActionListener.OnBeforeModelErase
• pfcSession.SessionActionListener.OnBeforeModelDelete
• pfcSession.SessionActionListener.OnBeforeModelRename
• pfcSession.SessionActionListener.OnBeforeModelSave
• pfcSession.SessionActionListener.OnBeforeModelPurge
• pfcSession.SessionActionListener.OnBeforeModelCopy
• pfcSession.SessionActionListener.OnAfterModelPurge
The
pfcSession.SessionActionListener.OnAfterDirectoryChange
method activates after the user changes the working directory. This
method takes the new directory path as an argument.

The
pfcSession.SessionActionListener.OnAfterWindowChange
method activates when the user activates a window other than the
current one. Pass the new window to the method as an argument.

21 - 4 J-Link User’s Guide


The pfcSession.SessionActionListener.OnAfterModelDisplay
method activates every time a model is displayed in a window.

Note: Model display events happen when windows are moved,


opened and closed, repainted, or the model is
regenerated. The event can occur more than once in
succession.
The methods

Action Listeners
pfcSession.SessionActionListener.OnBeforeModelErase,
pfcSession.SessionActionListener.OnBeforeModelRename,
pfcSession.SessionActionListener.OnBeforeModelSave, and
pfcSession.SessionActionListener.OnBeforeModelCopy take
special arguments. They are designed to allow you to fill in the
arguments and pass this data back to Pro/ENGINEER. The model
names placed in the descriptors will be used by Pro/ENGINEER as
the default names in the user interface.

UI Command Action Listeners


Methods introduced:

• pfcSession.Session.UICreateCommand
• pfcCommand.UICommandActionListener.OnCommand
The pfcSession.Session.UICreateCommand method takes a
UICommandActionListener argument and returns a UICommand
action source with that action listener already registered. This
UICommand object is subsequently passed as an argument to the
Session.AddUIButton method that adds a command button to a
Pro/ENGINEER menu. The
pfcCommand.UICommandActionListener.OnCommand
method of the registered UICommandActionListener is called
whenever the command button is clicked.

Model Level Action listeners


Methods introduced:

• pfcModel.ModelActionListener.OnAfterModelSave
• pfcModel.ModelEventActionListener.OnAfterModelCopy
• pfcModel.ModelEventActionListener.OnAfterModelRename
• pfcModel.ModelEventActionListener.OnAfterModelErase
• pfcModel.ModelEventActionListener.OnAfterModelDelete
• pfcModel.ModelActionListener.OnAfterModelRetrieve

Action Listeners 21 - 5
• pfcModel.ModelActionListener.OnBeforeModelDisplay
• pfcModel.ModelActionListener.OnAfterModelCreate
• pfcModel.ModelActionListener.OnAfterModelSaveAll
• pfcModel.ModelEventActionListener.OnAfterModelCopyAll
• pfcModel.ModelActionListener.OnAfterModelEraseAll
• pfcModel.ModelActionListener.OnAfterModelDeleteAll
• pfcModel.ModelActionListener.OnAfterModelRetrieveAll
Methods ending in All are called after any event of the specified
type. The call is made even if the user did not explicitly request that
the action take place. Methods that do not end in All are only
called when the user specifically requests that the event occurs.

The method
pfcModel.ModelActionListener.OnAfterModelSave is called
after successfully saving a model.

The method
pfcModel.ModelEventActionListener.OnAfterModelCopy is
called after successfully copying a model.

The method
pfcModel.ModelEventActionListener.OnAfterModelRename
is called after successfully renaming a model.

The method
pfcModel.ModelEventActionListener.OnAfterModelErase is
called after successfully erasing a model.

The method
pfcModel.ModelEventActionListener.OnAfterModelDelete is
called after successfully deleting a model.

The method
pfcModel.ModelActionListener.OnAfterModelRetrieve is
called after successfully retrieving a model.

The method
pfcModel.ModelActionListener.OnBeforeModelDisplay is
called before displaying a model.

The method
pfcModel.ModelActionListener.OnAfterModelCreate is called
after the successful creation of a model.

21 - 6 J-Link User’s Guide


Example Code
This example demonstrates the use of two J-Link listener methods
(OnAfterModelCopy and OnAfterModelRename in
ModelEventActionListener). It uses these listeners to create or
update parameters in the copied or renamed models which tell the
history of the last event that happened to the model.
package com.ptc.jlinkexamples;

Action Listeners
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModelItem.*;

public class pfcModelEventExamples


{

public static void addEventListener (Session s) throws jxthrowable


{
s.AddActionListener (new ModelEventListenerExample ());
}
}

class ModelEventListenerExample
extends com.ptc.pfc.pfcModel.DefaultModelEventActionListener
{
public void OnAfterModelCopy (ModelDescriptor From,
ModelDescriptor To) throws jxthrowable
{
Session s = pfcGlobal.GetProESession ();
Model m = s.GetModelFromDescr (To);

if (m == null)
{
/* Couldn't find the new model handle - might happen, for
example, when a copy is saved to disk but not retrieved into
memory */
return;
}

ParamValue pv =
pfcModelItem.CreateStringParamValue
(From.GetFullName().toUpperCase());
Parameter p = m.GetParam ("COPIED_FROM");
if (p == null)
m.CreateParam ("COPIED_FROM", pv);
else
p.SetValue (pv);
}

Action Listeners 21 - 7
public void OnAfterModelRename (ModelDescriptor From,
ModelDescriptor To) throws jxthrowable
{
Session s = pfcGlobal.GetProESession ();
Model m = s.GetModelFromDescr (To);

if (m == null)
{
/* Couldn't find the new model handle in memory */
return;
}

ParamValue pv =
pfcModelItem.CreateStringParamValue
(From.GetFullName().toUpperCase());
Parameter p = m.GetParam ("RENAMED_FROM");
if (p == null)
m.CreateParam ("RENAMED_FROM", pv);
else
p.SetValue (pv);
}
}

Solid Level Action Listeners


Methods introduced:

• pfcSolid.SolidActionListener.OnBeforeRegen
• pfcSolid.SolidActionListener.OnAfterRegen
• pfcSolid.SolidActionListener.OnBeforeUnitConvert
• pfcSolid.SolidActionListener.OnAfterUnitConvert
• pfcSolid.SolidActionListener.OnBeforeFeatureCreate
• pfcSolid.SolidActionListener.OnAfterFeatureCreate
• pfcSolid.SolidActionListener.OnAfterFeatureDelete
The pfcSolid.SolidActionListener.OnBeforeRegen and
pfcSolid.SolidActionListener.OnAfterRegen methods occur
when the user regenerates a solid object within the ActionSource
to which the listener is assigned. These methods take the first
feature to be regenerated and a handle to the Solid object as
arguments.

In addition, the method


pfcSolid.SolidActionListener.OnAfterRegenerate includes a
Boolean argument that indicates whether regeneration was
successful.

21 - 8 J-Link User’s Guide


Note:
– It is not recommended to modify geometry or dimensions
using the
pfcSolid.SolidActionListener.OnBeforeRegenerate
method call.
– A regeneration that did not take place because nothing was
modified is identified as a regeneration failure.

Action Listeners
The pfcSolid.SolidActionListener.OnBeforeUnitConvert and
pfcSolid.SolidActionListener.OnAfterUnitConvert methods
activate when a user modifies the unit scheme (by selecting the
Pro/ENGINEER command Set Up, Units). The methods receive
the Solid object to be converted and a Boolean flag that identifies
whether the conversion changed the dimension values to keep the
object the same size.

Note: SolidActionListeners can be registered with the


session object so that its methods are called when these
events occur for any solid model that is in session.
The pfcSolid.SolidActionListener.OnBeforeFeatureCreate
method activates when the user starts to create a feature that
requires the Feature Creation dialog box. Because this event occurs
only after the dialog box is displayed, it will not occur at all for
datums and other features that do not use this dialog box. This
method takes two arguments: the solid model that will contain the
feature and the ModelItem identifier.

The pfcSolid.SolidActionListener.OnAfterFeatureCreate
method activates after any feature, including datums, has been
created. This method takes the new Feature object as an
argument.

The pfcSolid.SolidActionListener.OnAfterFeatureDelete
method activates after any feature has been deleted. The method
receives the solid that contained the feature and the (now defunct)
ModelItem identifier.

Action Listeners 21 - 9
Feature Level Action Listeners
Methods Introduced:

• pfcFeature.FeatureActionListener.OnBeforeDelete
• pfcFeature.FeatureActionListener.OnBeforeSuppress
• pfcFeature.FeatureActionListener.OnAfterSuppress
• pfcFeature.FeatureActionListener.OnBeforeRegen
• pfcFeature.FeatureActionListener.OnAfterRegen
• pfcFeature.FeatureActionListener.OnRegenFailure
• pfcFeature.FeatureActionListener.OnBeforeRedefine
• pfcFeature.FeatureActionListener.OnAfterCopy
• pfcFeature.FeatureActionListener.OnBeforeParameterDelete
Each method in FeatureActionListener takes as an argument
the feature that triggered the event.

FeatureActionListeners can be registered with the Session


object so that the action listener’s methods are called whenever
these events occur for any feature that is in session or with a solid
model to react to changes only in that model.

The method
pfcFeature.FeatureActionListener.OnBeforeDelete is called
before a feature is deleted.

The method
pfcFeature.FeatureActionListener.OnBeforeSuppress is
called before a feature is suppressed.

The method
pfcFeature.FeatureActionListener.OnAfterSuppress is called
after a successful feature suppression.

The method
pfcFeature.FeatureActionListener.OnBeforeRegen is called
before a feature is regenerated.

The method
pfcFeature.FeatureActionListener.OnAfterRegen is called
after a successful feature regeneration.

The method
pfcFeature.FeatureActionListener.OnRegenFailure is called
when a feature fails regeneration.

21 - 10 J-Link User’s Guide


The method
pfcFeature.FeatureActionListener.OnBeforeRedefine is
called before a feature is redefined.

The method pfcFeature.FeatureActionListener.OnAfterCopy


is called after a feature has been successfully copied.

The method
pfcFeature.FeatureActionListener.OnBeforeParameterDele

Action Listeners
te is called before a feature parameter is deleted.

Cancelling an ActionListener Operation


J-Link allows you to cancel certain notification events, registered
by the action listeners.

Methods Introduced:

• pfcExceptions.XCancelProEAction.Throw
The static method pfcExceptions.XCancelProEAction.Throw
must be called from the body of an action listener to cancel the
impending Pro/ENGINEER operation.This method will throw a
J-Link exception signalling to Pro/ENGINEER to cancel the
listener event.

Note: Your application should not catch the J-Link exception, or


should rethrow it if caught, so that Pro/ENGINEER is forced to
handle it.

The following events can be cancelled using this technique:

• pfcSession.SessionActionListener.OnBeforeModelErase
• pfcSession.SessionActionListener.OnBeforeModelDelete
• pfcSession.SessionActionListener.OnBeforeModelRename
• pfcSession.SessionActionListener.OnBeforeModelSave
• pfcSession.SessionActionListener.OnBeforeModelPurge
• pfcSession.SessionActionListener.OnBeforeModelCopy
• pfcModel.ModelActionListener.OnBeforeParameterCreate
• pfcModel.ModelActionListener.OnBeforeParameterDelete
• pfcModel.ModelActionListener.OnBeforeParameterModify
• pfcFeature.FeatureActionListener.OnBeforeDelete
• pfcFeature.FeatureActionListener.OnBeforeSuppress

Action Listeners 21 - 11
• pfcFeature.FeatureActionListener.OnBeforeParameterDelete
• pfcFeature.FeatureActionListener.OnBeforeParameterCreate
• pfcFeature.FeatureActionListener.OnBeforeRedefine

21 - 12 J-Link User’s Guide


22
Interface

This chapter describes various methods of importing and exporting


files in J-Link.

Topic Page

Exporting Files and 2D Models 22 - 2


Exporting to PDF and U3D 22 - 6
Exporting 3D Geometry 22 - 13
Shrinkwrap Export 22 - 18
Importing Files 22 - 26
Importing 3D Geometry 22 - 29
Plotting Files 22 - 32
Printing Files 22 - 33
Solid Operations 22 - 41
Window Operations 22 - 43

22 - 1
Exporting Files and 2D Models
Method Introduced:

• pfcModel.Model.Export
The method pfcModel.Model.Export exports model data to a file.
The exported files are placed in the current Pro/ENGINEER
working directory. The input parameters are:

• filename—Output file name including extensions


• exportdata—The pfcModel.ExportInstructions object that
controls the export operation. The type of data that is exported
is given by the pfcModel.ExportType object.
There are four general categories of files to which you can export
models:

• File types whose instructions inherit from


pfcModel.GeomExportInstructions.
These instructions export files that contain precise geometric
information used by other CAD systems.
• File types whose instructions inherit from
pfcModel.CoordSysExportInstructions.
These instructions export files that contain coordinate
information describing faceted, solid models (without datums
and surfaces).
• File types whose instructions inherit from
pfcModel.FeatIdExportInstructions.
These instructions export information about a specific feature.
• General file types that inherit only from
pfcModel.ExportInstructions.
These instructions provide conversions to file types such as
BOM (bill of materials).
For information on exporting to a specific format, see the J-Link
APIWizard and online help for the Pro/ENGINEER interface.

22 - 2 J-Link User’s Guide


Export Instructions
Methods Introduced:

• pfcModel.pfcModel.RelationExportInstructions_Create
• pfcModel.pfcModel.ModelInfoExportInstructions_Create
• pfcModel.pfcModel.ProgramExportInstructions_Create
• pfcModel.pfcModel.IGESFileExportInstructions_Create

Interface
• pfcModel.pfcModel.DXFExportInstructions_Create
• pfcModel.pfcModel.RenderExportInstructions_Create
• pfcModel.pfcModel.STLASCIIExportInstructions_Create
• pfcModel.pfcModel.STLBinaryExportInstructions_Create
• pfcModel.pfcModel.BOMExportInstructions_Create
• pfcModel.pfcModel.DWGSetupExportInstructions_Create
• pfcModel.pfcModel.FeatInfoExportInstructions_Create
• pfcModel.pfcModel.MFGFeatCLExportInstructions_Create
• pfcModel.pfcModel.MFGOperCLExportInstructions_Create
• pfcModel.pfcModel.MaterialExportInstructions_Create
• pfcModel.pfcModel.CGMFILEExportInstructions_Create
• pfcModel.pfcModel.InventorExportInstructions_Create
• pfcModel.pfcModel.FIATExportInstructions_Create
• pfcModel.pfcModel.ConnectorParamExportInstructions_Create
• pfcModel.pfcModel.CableParamsFileInstructions_Create
• pfcModel.pfcModel.CATIAFacetsExportInstructions_Create
• pfcModel.pfcModel.VRMLModelExportInstructions_Create
• pfcModel.pfcModel.STEP2DExportInstructions_Create
• pfcModel.pfcModel.MedusaExportInstructions_Create
• pfcExport.pfcExport.CADDSExportInstructions_Create
• pfcExport.pfcExport.NEUTRALFileExportInstructions_Create
• pfcExport.pfcExport.ProductViewExportInstructions_Create
• pfcSession.BaseSession.ExportDirectVRML

Interface 22 - 3
Export Instructions Table

Interface Used to Export


RelationExportInstructions A list of the relations and parameters in
a part or assembly
ModelInfoExportInstructions Information about a model, including
units information, features, and
children
ProgramExportInstructions A program file for a part or assembly
that can be edited to change the model
IGESExportInstructions A drawing in IGES format
DXFExportInstructions A drawing in DXF format
RenderExportInstructions A part or assembly in RENDER format
STLASCIIExportInstructions A part or assembly to an ASCII STL file
STLBinaryExportInstructions A part or assembly in a binary STL file
BOMExportInstructions A BOM for an assembly
DWGSetupExportInstructions A drawing setup file
FeatInfoExportInstructions Information about one feature in a part
or assembly
MfgFeatCLExportInstructions A cutter location (CL) file for one NC
sequence in a manufacturing assembly
MfgOperClExportInstructions A cutter location (CL) file for all the NC
sequences in a manufacturing assembly
MaterialExportInstructions A material from a part
CGMFILEExportInstructions A drawing in CGM format
InventorExportInstructions A part or assembly in Inventor format
FIATExportInstructions A part or assembly in FIAT format
ConnectorParamExportInstructions The parameters of a connector to a text
file
CableParamsFileInstructions Cable parameters from an assembly
CATIAFacetsExportInstructions A part or assembly in CATIA format (as
a faceted model)
VRMLModelExportInstructions A part or assembly in VRML format
STEP2DExportInstructions A two-dimensional STEP format file
MedusaExportInstructions A drawing in MEDUSA file
CADDSExportInstructions A CADDS5 solid model

22 - 4 J-Link User’s Guide


Interface Used to Export
NEUTRALFileExportInstructions A Pro/ENGINEER part to neutral
format
ProductViewExportInstructions A part, assembly, or drawing in
ProductView format

Note: The New Instruction Classes replace the following


Deprecated Classes:

Interface
Deprecated Classes New Instruction Classes
IGES3DExportInstructions IGES3DNewExportInstructions
STEPExportInstructions STEP3DExportInstructions
VDAExportInstructions VDA3DExportInstructions
SETExportInstructions SET3DExportInstructions
CATIAExportInstructions CATIA3DExportInstructions

Exporting Drawing Sheets


The options required to export multiple sheets of a drawing are
given by the pfcModel.Export2DOption object.

Methods Introduced:

• pfcModel.pfcModel.Export2DOption_Create
• pfcModel.Export2DOption.SetExportSheetOption
• pfcModel.Export2DOption.SetModelSpaceSheet
• pfcModel.Export2DOption.SetSheets
The method pfcModel.pfcModel.Export2DOptions_Create
creates a new instance of the pfcModel.Export2DOption object.
This object contains the following options:

• ExportSheetOption—Specifies the option for exporting multiple


drawing sheets. Use the method
pfcModel.Export2DOption.SetExportSheetOption to set
the option for exporting multiple drawing sheets. The options
are given by the pfcModel.Export2DSheetOption class and
can be of the following types:
– EXPORT_CURRENT_TO_MODEL_SPACE—Exports only
the drawing’s current sheet as model space to a single file.
This is the default type.

Interface 22 - 5
– EXPORT_CURRENT_TO_PAPER_SPACE—Exports only
the drawing’s current sheet as paper space to a single file.
This type is the same as
EXPORT_CURRENT_TO_MODEL_SPACE for formats
that do not support the concept of model space and paper
space.
– EXPORT_ALL—Exports all the sheets in a drawing to a
single file as paper space, if applicable for the format type.
– EXPORT_SELECTED—Exports selected sheets in a
drawing as paper space and one sheet as model space.
• ModelSpaceSheet—Specifies the sheet number that needs be
exported as model space. This option is applicable only if the
export formats support the concept of model space and paper
space and if ExportSheetOption is set to EXPORT_SELECTED.
Use the method
pfcModel.Export2DOption.SetModelSpaceSheet to set
this option.
• Sheets—Specifies the sheet numbers that need to be exported
as paper space. This option is applicable only if
ExportSheetOption is set to EXPORT_SELECTED. Use the
method pfcModel.Export2DOption.SetSheets to set this
option.

Exporting to PDF and U3D


The methods described in this section support the export of
Pro/ENGINEER drawings and solid models to Portable Document
Format (PDF) and U3D format. You can export a drawing or a 2D
model as a 2D raster image embedded in a PDF file. You can export
Pro/ENGINEER solid models in the following ways:

• As a U3D model embedded in a one-page PDF file


• As 2D raster images embedded in the pages of a PDF file
representing saved views
• As a standalone U3D file
While exporting multiple sheets of a Pro/ENGINEER drawing to a
PDF file, you can choose to export all sheets, the current sheet, or
selected sheets.

These methods also allow you to insert a variety of non-geometric


information to improve document content, navigation, and search.

22 - 6 J-Link User’s Guide


Methods Introduced:

• pfcExport.pfcExport.PDFExportInstructions_Create
• pfcExport.PDFExportInstructions.SetFilePath
• pfcExport.PDFExportInstructions.SetOptions
• pfcExport.pfcExport.PDFOption_Create
• pfcExport.PDFOption.SetOptionType
• pfcExport.PDFOption.SetOptionValue

Interface
The method
pfcExport.pfcExport.PDFExportInstructions_Create creates
a new instance of the pfcExport.PDFExportInstructions data
object that describes how to export Pro/ENGINEER drawings or
solid models to the PDF and U3D formats. The options in this object
are described as follows:

• FilePath—Specifies the name of the output file. Use the method


pfcExport.PDFExportInstructions.SetFilePath to set the
name of the output file.
• Options—Specifies a collection of PDF export options of the type
pfcExport.PDFOption. Create a new instance of this object
using the method pfcExport.pfcExport.PDFOption_Create.
This object contains the following attributes:
– OptionType—Specifies the type of option in terms of the
pfcExport.PDFOptionType class. Set this option using
the method pfcExport.PDFOption.SetOptionType.
– OptionValue—Specifies the value of the option in terms of
the pfcArgument.ArgValue object. Set this option using
the method pfcExport.PDFOption.SetOptionValue.
Use the method
pfcExport.PDFExportInstructions.SetOptions to set the
collection of PDF export options.
The types of options (given by the pfcExport.PDFOptionType
class) available for export to PDF and U3D formats are described as
follows:

• PDFOPT_FONT_STROKE—Allows you to switch between


using TrueType fonts or “stroking” text in the resulting
document. This option is given by the
pfcExport.PDFFontStrokeMode class and takes the
following values:
– PDF_USE_TRUE_TYPE_FONTS—Specifies TrueType
fonts. This is the default type.

Interface 22 - 7
– PDF_STROKE_ALL_FONTS—Specifies the option to
stroke all fonts.
• PDFOPT_COLOR_DEPTH—Allows you to choose between
color, grayscale, or monochrome output. This option is given by
the pfcExport.PDFColorDepth class and takes the following
values:
– PDF_CD_COLOR—Specifies color output. This is the
default value.
– PDF_CD_GRAY—Specifies grayscale output.
– PDF_CD_MONO—Specifies monochrome output.
• PDFOPT_HIDDENLINE_MODE—Enables you to set the style
for hidden lines in the resulting PDF document. This option is
given by the pfcExport.PDFHiddenLineMode class and takes
the following values:
– PDF_HLM_SOLID—Specifies solid hidden lines.
– PDF_HLM_DASHED—Specifies dashed hidden lines. This
is the default type.
• PDFOPT_SEARCHABLE_TEXT—If true, stroked text is
searchable. The default value is true.
• PDFOPT_RASTER_DPI—Allows you to set the resolution for
the output of any shaded views in DPI. It can take a value
between 100 and 600. The default value is 300.
• PDFOPT_LAUNCH_VIEWER—If true, launches the Adobe
Acrobat Reader. The default value is true.
• PDFOPT_LAYER_MODE—Enables you to set the availability
of layers in the document. It is given by the
pfcExport.PDFLayerMode class and takes the following
values:
– PDF_LAYERS_ALL—Exports the visible layers and
entities. This is the default.
– PDF_LAYERS_VISIBLE—Exports only visible layers in a
drawing.
– PDF_LAYERS_NONE—Exports only the visible entities in
the drawing, but not the layers on which they are placed.
• PDFOPT_PARAM_MODE—Enables you to set the availability
of model parameters as searchable metadata in the PDF
document. It is given by the pfcExport.PDFParameterMode
class and takes the following values:

22 - 8 J-Link User’s Guide


– PDF_PARAMS_ALL—Exports the drawing and the model
parameters to PDF. This is the default.
– PDF_PARAMS_DESIGNATED—Exports only the specified
model parameters in the PDF metadata.
– PDF_PARAMS_NONE—Exports the drawing to PDF
without the model parameters.
• PDFOPT_HYPERLINKS—Sets hyperlinks to be exported as
label text only or sets the underlying hyperlink URLs as active.
The default value is true, specifying that the hyperlinks are

Interface
active.
• PDFOPT_BOOKMARK_ZONES—If true, adds bookmarks to
the PDF showing zoomed in regions or zones in the drawing
sheet. The zone on an A4-size drawing sheet is ignored.
• PDFOPT_BOOKMARK_VIEWS—If true, adds bookmarks to
the PDF document showing zoomed in views on the drawing.
• PDFOPT_BOOKMARK_SHEETS—If true, adds bookmarks to
the PDF document showing each of the drawing sheets.
• PDFOPT_BOOKMARK_FLAG_NOTES—If true, adds
bookmarks to the PDF document showing the text of the flag
note.
• PDFOPT_TITLE—Specifies a title for the PDF document.
• PDFOPT_AUTHOR—Specifies the name of the person
generating the PDF document.
• PDFOPT_SUBJECT—Specifies the subject of the PDF
document.
• PDFOPT_KEYWORDS—Specifies relevant keywords in the
PDF document.
• PDFOPT_PASSWORD_TO_OPEN—Sets a password to open
the PDF document. By default, this option is NULL, which
means anyone can open the PDF document without a password.
• PDFOPT_MASTER_PASSWORD—Sets a password to restrict
or limit the operations that the viewer can perform on the
opened PDF document. By default, this option is NULL, which
means you can make any changes to the PDF document
regardless of the settings of the modification flags
PDFOPT_ALLOW_*.
• PDFOPT_RESTRICT_OPERATIONS—If true, enables you to
restrict or limit operations on the PDF document. By default, is
is false.

Interface 22 - 9
• PDFOPT_ALLOW_MODE—Enables you to set the security
settings for the PDF document. This option must be set if
PDFOPT_RESTRICT_OPERATIONS is set to true. It is given
by the pfcExport.PDFRestrictOperationsMode class and
takes the following values:
– PDF_RESTRICT_NONE—Specifies that the user can
perform any of the permitted viewer operations on the PDF
document. This is the default value.
– PDF_RESTRICT_FORMS_SIGNING—Restricts the user
from adding digital signatures to the PDF document.
– PDF_RESTRICT_INSERT_DELETE_ROTATE—Restricts
the user from inserting, deleting, or rotating the pages in
the PDF document.
– PDF_RESTRICT_COMMENT_FORM_SIGNING—Restricts t
he user from adding or editing comments in the PDF
document.
– PDF_RESTRICT_EXTRACTING—Restricts the user from
extracting pages from the PDF document.
• PDFOPT_ALLOW_PRINTING—If true, allows you to print the
PDF document. By default, it is true.
• PDFOPT_ALLOW_PRINTING_MODE—Enables you to set the
print resolution. It is given by the
pfcExport.PDFPrintingMode class and takes the following
values:
– PDF_PRINTING_LOW_RES—Specifies low resolution for
printing.
– PDF_PRINTING_HIGH_RES—Specifies high resolution
for printing. This is the default value.
• PDFOPT_ALLOW_COPYING—If true, allows you to copy
content from the PDF document. By default, it is true.
• PDFOPT_ALLOW_ACCESSIBILITY—If true, enables
visually-impaired screen reader devices to extract data
independent of the value given by the
pfcExport.PDFRestrictOperationsMode class. The default
value is true.
• PDFOPT_PENTABLE—If true, uses the standard
Pro/ENGINEER pentable to control the line weight, line style,
and line color of the exported geometry. The default value is
false.

22 - 10 J-Link User’s Guide


• PDFOPT_LINECAP—Enables you to control the treatment of
the ends of the geometry lines exported to PDF. It is given by
the pfcExport.PDFLinecap class and takes the following
values:
– PDF_LINECAP_BUTT—Specifies the butt cap square end.
This is the default value.
– PDF_LINECAP_ROUND—Specifies the round cap end.
– PDF_LINECAP_PROJECTING_SQUARE—Specifies the
projecting square cap end.

Interface
• PDFOPT_LINEJOIN—Enables you to control the treatment of
the joined corners of connected lines exported to PDF. It is
given by the pfcExport.PDFLinejoin class and takes the
following values:
– PDF_LINEJOIN_MITER—Specifies the miter join. This is
the default.
– PDF_LINEJOIN_ROUND—Specifies the round join.
– PDF_LINEJOIN_BEVEL—Specifies the bevel join.
• PDFOPT_SHEETS—Allows you to specify the sheets from a
Pro/ENGINEER drawing that are to be exported to PDF. It is
given by the pfcExport.PrintSheets class and takes the
following values:
– PRINT_CURRENT_SHEET—Only the current sheet is
exported to PDF.
– PRINT_ALL_SHEETS—All the sheets are exported to PDF.
This is the default value.
– PRINT_SELECTED_SHEETS—Sheets of a specified range
are exported to PDF. If this value is assigned, then the
value of the option PDFOPT_SHEET_RANGE must also be
known.
• PDFOPT_SHEET_RANGE—Specifies the range of sheets in a
drawing that are to be exported to PDF. If this option is set,
then the option PDFOPT_SHEETS must be set to the value
PRINT_SELECTED_SHEETS.
• PDFOPT_EXPORT_MODE—Enables you to select the object to
be exported to PDF and the export format. It is given by the
pfcExport.PDFExportMode class and takes the following
values:
– PDF_2D_DRAWING—Only drawings are exported to PDF.
This is the default value.

Interface 22 - 11
– PDF_3D_AS_NAMED_VIEWS—3D models are exported as
2D raster images embedded in PDF files.
– PDF_3D_AS_U3D_PDF—3D models are exported as U3D
models embedded in one-page PDF files.
– PDF_3D_AS_U3D—A 3D model is exported as a U3D
(.u3d) file. This value ignores the options set for the
pfcExport.PDFOptionType class.
• PDFOPT_LIGHT_DEFAULT—Enables you to set the default
lighting style used while exporting 3D models in the U3D
format to a one-page PDF file, that is when the option
PDFOPT_EXPORT_MODE is set to PDF_3D_AS_U3D. The
values for this option are given by the
pfcExport.PDFU3DLightingMode class.
• PDFOPT_RENDER_STYLE_DEFAULT—Enables you to set
the default rendering style used while exporting
Pro/ENGINEER models in the U3D format to a one-page PDF
file, that is when the option PDFOPT_EXPORT_MODE is set to
PDF_3D_AS_U3D. The values for this option are given by the
pfcModel.PDFU3DRenderMode class.
• PDFOPT_SIZE—Allows you to specify the page size of the
exported PDF file. The values for this option are given by the
pfcExport.PlotPaperSize class. If the value is set to
VARIABLESIZEPLOT, you also need to set the options
PDFOPT_HEIGHT and PDFOPT_WIDTH.
• PDFOPT_HEIGHT—Enables you to set the height for a
user-defined page size of the exported PDF file. The default
value is 0.0.
• PDFOPT_WIDTH—Enables you to set the width for a
user-defined page size of the exported PDF file. The default
value is 0.0.
• PDFOPT_ORIENTATION—Enables you to specify the
orientation of the pages in the exported PDF file. It is given by
the pfcSheet.SheetOrientation class.
– ORIENT_PORTRAIT—Exports the pages in portrait
orientation. This is the default value.
– ORIENT_LANDSCAPE—Exports the pages in landscape
orientation.
• PDFOPT_TOP_MARGIN—Allows you to specify the top margin
of the view port. The default value is 0.0.
• PDFOPT_LEFT_MARGIN—Allows you to specify the left
margin of the view port. The default value is 0.0.

22 - 12 J-Link User’s Guide


• PDFOPT_BACKGROUND_COLOR_RED—Specifies the
default red background color that appears behind the U3D
model. You can set any value within the range of 0.0 to 1.0. The
default value is 1.0.
• PDFOPT_BACKGROUND_COLOR_GREEN—Specifies the
default green background color that appears behind the U3D
model. You can set any value within the range of 0.0 to 1.0. The
default value is 1.0.
• PDFOPT_BACKGROUND_COLOR_BLUE—Specifies the

Interface
default blue background color that appears behind the U3D
model. You can set any value within the range of 0.0 to 1.0. The
default value is 1.0.
• PDFOPT_ADD_VIEWS—If true, allows you to add view
definitions to the U3D model from a file. By default, it is true.
• PDFOPT_VIEW_TO_EXPORT—Specifies the view or views to
be exported to the PDF file. It is given by the
pfcExport.PDFSelectedViewMode class and takes the
following values:
– PDF_VIEW_SELECT_CURRENT—Exports the current
graphical area to a one-page PDF file.
– PDF_VIEW_SELECT_ALL—Exports all the views to a
multi-page PDF file. Each page contains one view with the
view name displayed at the bottom center of the view port.
– PDF_VIEW_SELECT_BY_NAME—Exports the selected
view to a one-page PDF file with the view name printed at
the bottom center of the view port. If this value is assigned,
then the option PDFOPT_SELECTED_VIEW must also be
set.
• PDFOPT_SELECTED_VIEW—Sets the option
PDFOPT_VIEW_TO_EXPORT to the value
PDF_VIEW_SELECT_BY_NAME, if the corresponding view is
successfully found.

Exporting 3D Geometry
J-Link allows you to export three dimensional geometry to various
formats. Pass the instructions object containing information about
the desired export file to the method pfcModel.Model.Export.

Interface 22 - 13
Export Instructions
Methods Introduced:

• pfcExport.Export3DInstructions.GetConfiguration
• pfcExport.Export3DInstructions.SetConfiguration
• pfcExport.Export3DInstructions.GetReferenceSystem
• pfcExport.Export3DInstructions.SetReferenceSystem
• pfcExport.Export3DInstructions.GetGeometry
• pfcExport.Export3DInstructions.SetGeometry
• pfcExport.Export3DInstructions.GetIncludedEntities
• pfcExport.Export3DInstructions.SetIncludedEntities
• pfcExport.Export3DInstructions.GetLayerOptions
• pfcExport.Export3DInstructions.SetLayerOptions
• pfcExport.pfcExport.GeometryFlags_Create
• pfcExport.pfcExport.InclusionFlags_Create
• pfcExport.pfcExport.LayerExportOptions_Create
• pfcExport.pfcExport.STEP3DExportInstructions_Create
• pfcExport.pfcExport.SET3DExportInstructions_Create
• pfcExport.pfcExport.VDA3DExportInstructions_Create
• pfcExport.pfcExport.IGES3DNewExportInstructions_Create
• pfcExport.pfcExport.CATIA3DExportInstructions_Create
• pfcExport.pfcExport.CATIAModel3DExportInstructions_Create
• pfcExport.pfcExport.PDGS3DExportInstructions_Create
• pfcExport.pfcExport.ACIS3DExportInstructions_Create
• pfcExport.pfcExport.CatiaPart3DExportInstructions_Create
• pfcExport.pfcExport.CatiaProduct3DExportInstructions_Create
• pfcExport.pfcExport.CatiaCGR3DExportInstructions_Create
• pfcExport.pfcExport.JT3DExportInstructions_Create
• pfcExport.pfcExport.ParaSolid3DExportInstructions_Create
• pfcExport.Export.UG3DExportInstructions_Create
The interface pfcExport.Export3DInstructions contains data to
export a part or an assembly to a specifed 3D format. The fields of
this interface are:

22 - 14 J-Link User’s Guide


• AssemblyConfiguration—While exporting an assembly you
can specify the structure and contents of the output files. The
options are:
– EXPORT_ASM_FLAT_FILE—Exports all the geometry of
the assembly to a single file as if it were a part.
– EXPORT_ASM_SINGLE_FILE—Exports an assembly
structure to a file with external references to component
files. This file contains only top-level geometry.
– EXPORT_ASM_MULTI_FILE—Exports an assembly

Interface
structure to a single file and the components to component
files. It creates component parts and subassemblies with
their respective geometry and external references. This
option supports all levels of hierarchy.
– EXPORT_ASM_ASSEMBLY_FILE—Exports an assembly
as multiple files containing geometry information of its
components and assembly features.
• CoordSystem—The reference coordinate system used for
export. If this value is null, the system uses the default
coordinate system.
• GeometryFlags—The object describing the type of geometry to
export. The pfcExport.pfcExport.GeometryFlags_Create
returns this instruction object. The types of geometry supported
by the export operation are:
– Wireframe—Export edges only.
– Solid—Export surfaces along with topology.
– Surfaces—Export all model surfaces.
– Quilts—Export as quilt.
• InclusionFlags—The object returned by the method
pfcExport.pfcExport.InclusionFlags_Create that
determines whether to include certain entities. The entities are:
– Datums—Determines whether datum curves are included
when exporting files. If true the datum curve information is
included during export. The default value is false.
– Blanked—Determines whether entities on blanked layers
are exported. If true entities on blanked layers are
exported. The default value is false.

Interface 22 - 15
• LayerExportOptions—The instructions object returned by
the method
pfcExport.pfcExport.LayerExportOptions_Create that
describes how to export layers. To export layers you can specify
the following:
– UseAutoId—Enables you to set or remove an interface layer
ID. A layer is recognized with this ID when exporting the
file to a specified output format. If true, automatically
assigns interface IDs to layers not assigned IDs and exports
them. The default value is false.
– LayerSetupFile—Specifies the name and complete path of
the layer setup file. This file contains the layer assignment
information which includes the name of the layer, its
display status, the interface ID and number of sub layers.

Export 3D Instructions Table

Interface Used to Export


STEP3DExportInstructions A part or assembly in STEP format
VDA3DExportInstructions A part or assembly in VDA format
SET3DExportInstructions A class that defines a ruled surface
IGES3DNewExportInstructions A part or assembly in IGES format
CATIA3DExportInstructions A part or assembly in CATIA format (as
precise geometry)
CATIAModel3DExportInstructions A part or assembly in CATIA MODEL
format
PDGS3DExportInstructions A part or assembly in PDGS format
ACIS3DExportInstructions A part or assembly in ACIS format
CatiaPart3DExportInstructions A part or assembly in CATIA PART
format
CatiaProduct3DExportInstructions A part or assembly in CATIA
PRODUCT format
CatiaCGR3DExportInstructions A part or assembly in CATIA CGR
format
JT3DExportInstructions A part or assembly in JT format
ParaSolid3DExportInstructions A part or assembly in PARASOLID
format
UG3DExportInstructions A part or assembly in UG format

22 - 16 J-Link User’s Guide


Export Utilities
Methods Introduced:

• pfcSession.BaseSession.IsConfigurationSupported
• pfcSession.BaseSession.IsGeometryRepSupported
The method
pfcSession.BaseSession.IsConfigurationSupported checks
whether the specified assembly configuration is valid for a

Interface
particular model and the specified export format. The input
parameters for this method are:

• Configuration—Specifies the structure and content of the


output files.
• Type—Specifies the output file type to create.
The method returns a true value if the configuration is supported
for the specified export type.

The method
pfcSession.BaseSession.IsGeometryRepSupported checks
whether the specified geometric representation is valid for a
particular export format. The input parameters are :

• Flags—The type of geometry supported by the export operation.


• Type—The output file type to create.
The method returns a true value if the geometry combination is
valid for the specified model and export type.

The methods
pfcSession.BaseSession.IsConfigurationSupported and
pfcSession.BaseSession.IsGeometryRepSupported() must be
called before exporting an assembly to the specified export formats
except for the CADDS and STEP2D formats. The return values of
both the methods must be true for the export operation to be
successful.

Use the method Model.Model.Export to export the assembly to


the specified output format.

Interface 22 - 17
Shrinkwrap Export
To improve performance in a large assembly design, you can export
lightweight representations of models called shrinkwrap models. A
shrinkwrap model is based on the external surfaces of the source
part or asssembly model and captures the outer shape of the source
model.

You can create the following types of nonassociative exported


shrinkwrap models:

• Surface Subset—This type consists of a subset of the original


model’s surfaces.
• Faceted Solid—This type is a faceted solid representing the
original solid.
• Merged Solid—The external components from the reference
assembly model are merged into a single part representing the
solid geometry in all collected components.

Methods Introduced:

• pfcSolid.Solid.ExportShrinkwrap
You can export the specified solid model as a shrinkwrap model
using the method pfcSolid.Solid.ExportShrinkwrap. This
method takes the ShrinkwrapExportInstruction object as an
argument.

Use the appropriate interface given in the following table to create


the required type of shrinkwrap. All the interfaces have their own
static method to create an object of the specified type. The object
created by these interfaces can be used as an object of type
ShrinkwrapExportInstructions or
ShrinkwrapModelExportInstructions.

Type of Shrinkwrap Model Interface to Use


Surface Subset ShrinkwrapSurfaceSubsetInstructions
Faceted Part ShrinkwrapFacetedPartInstructions
Faceted VRML ShrinkwrapFacetedVRMLInstructions
Faceted STL ShrinkwrapFacetedSTLInstructions
Merged Solid ShrinkwrapMergedSolidInstructions

22 - 18 J-Link User’s Guide


Setting Shrinkwrap Options
The interface ShrinkwrapModelExportInstructions contains
the general methods available for all the types of shrinkwrap
models. The object created by any of the interfaces specified in the
preceeding table can be used with these methods.

Methods Introduced:

• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetMethod

Interface
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetQuality
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetQuality
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetAutoHoleFilling
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetAutoHoleFilling
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIgnoreSkeleton
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIgnoreSkeleton
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIgnoreQuilts
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIgnoreQuilts
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetAssignMassProperties
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetAssignMassProperties
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIgnoreSmallSurfaces
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIgnoreSmallSurfaces
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetSmallSurfPercentage
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetSmallSurfPercentage
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetDatumReferences
• pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetDatumReferences
The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetM
ethod returns the method used to create the shrinkwrap. The types
of shrinkwrap methods are:

• SWCREATE_SURF_SUBSET—Surface Subset
• SWCREATE_FACETED_SOLID—Faceted Solid
• SWCREATE_MERGED_SOLID—Merged Solid

Interface 22 - 19
The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetQ
uality specifies the quality level for the system to use when
identifying surfaces or components that contribute to the
shrinkwrap model. Quality ranges from 1 which produces the
coarsest representation of the model in the fastest time, to 10 which
produces the most exact representation. Use the method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetQu
ality to set the quality level for the system during the shrinkwrap
export. The default value is 1.

The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetAu
toHoleFilling returns true if auto hole filling is enabled during
Shrinkwrap export. The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetAu
toHoleFilling sets a flag that forces Pro/ENGINEER to identify all
holes and surfaces that intersect a single surface and fills those
holes during shrinkwrap. The default value is true.

The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIg
noreSkeleton and
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIg
noreSkeleton determine whether the skeleton model geometry
must be included in the shrinkwrap model.

The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIg
noreQuilts and
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIg
noreQuilts determines whether external quilts must be included
in the shrinkwrap model.

The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetAs
signMassProperties determines the mass property of the model.
The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetAs
signMassProperties assigns mass properties to the shrinkwrap
model. The default value is false and the mass properties of the
original model is assigned to the shrinkwrap model. If the value is
set to true, the user must assign a value for the mass properties.

22 - 20 J-Link User’s Guide


The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetIg
noreSmallSurfaces specifies whether small surfaces are ignored
during the creation of a shrinkwrap model. The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetIg
noreSmallSurfaces sets a flag that forces Pro/ENGINEER to skip
surfaces smaller than a certain size. The default value is false. The
size of the surface is specified as a percentage of the model’s size.
This size can be modified using the methods
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetS

Interface
mallSurfPercentage and
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetSm
allSurfPercentage.

The method
pfcShrinkwrap.ShrinkwrapModelExportInstructions.GetDa
tumReferences and
pfcShrinkwrap.ShrinkwrapModelExportInstructions.SetDa
tumReferences specify and select the datum planes, points,
curves, axes, and coordinate system references to be included in the
shrinkwrap model.

Surface Subset Options


Methods Introduced:

• pfcShrinkwrap.pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions_Create
• pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.GetAdditionalSurfaces
• pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.SetAdditionalSurfaces
• pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.GetOutputModel
• pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.SetOutputModel
The static method
pfcShrinkwrap.Shrinkwrap.ShrinkwrapSurfaceSubsetInstr
uctions_Create returns an object used to create a shrinkwrap
model of surface subset type. Specify the name of the output model
in which the shrinkwrap is to be created as an input to this method.

The method
pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.Get
AdditionalSurfaces specifies the surfaces included in the
shrinkwrap model while the method
pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.SetA
dditionalSurfaces selects individual surfaces to be included in the
shrinkwrap model.

Interface 22 - 21
The method
pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.Get
OutputModel returns the template model where the shrinkwrap
geometry is to be created while the method
pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions.SetO
utputModel sets the template model.

Faceted Solid Options


The ShrinkwrapFacetedFormatInstructions interface consists of
the following types:

• SWFACETED_PART—Pro/ENGINEER part with normal


geometry. This is the default format type.
• SWFACETED_STL—An STL file.
• SWFACETED_VRML—A VRML file.
Use the Create method to create the object of the specified type.
Upcast the object to use the general methods available in this
interface.

Methods Intoduced:

• pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.GetFormat
• pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.GetFramesFile
• pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.SetFramesFile
The method
pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.Get
Format returns the the output file format of the shrinkwrap
model.

The methods
pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.Get
FramesFile and
pfcShrinkwrap.ShrinkwrapFacetedFormatInstructions.Set
FramesFile enable you to select a frame file to create a faceted
solid motion envelope model that represents the full motion of the
mechanism captured in the frame file. Specify the name and
complete path of the frame file.

22 - 22 J-Link User’s Guide


Faceted Part Options
Methods Introduced:

• pfcShrinkwrap.pfcShrinkwrap.ShrinkwrapFacetedPartInstructions_Create
• pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.GetLightweight
• pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.SetLightweight
The static method
pfcShrinkwrap.Shrinkwrap.ShrinkwrapFacetedPartInstru

Interface
ctions_Create returns an object used to create a shrinkwrap
model of shrinkwrap faceted type. The input parameters of this
method are:

• OutputModel—Specify the output model where the shrinkwrap


must be created.
• Lightweight—Specify this value as True if the shrinkwrap
model is a Lightweight Pro/ENGINEER part.
The method
pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.GetLig
htweight returns a true value if the output file format of the
shrinkwrap model is a Lightweight Pro/ENGINEER part. The
method
pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.SetLig
htweight specifies if the Pro/ENGINEER part is exported as a
light weight faceted geometry.

VRML Export Options


Methods Introduced:

• pfcShrinkwrap.pfcShrinkwrap.ShrinkwrapVRMLInstructions_Create
• pfcShrinkwrap.ShrinkwrapVRMLInstructions.GetOutputFile
• pfcShrinkwrap.ShrinkwrapVRMLInstructions.SetOutputFile
The static method
pfcShrinkwrap.Shrinkwrap.ShrinkwrapVRMLInstructions_
Create returns an object used to create a shrinkwrap model of
shrinkwrap VRML format. Specify the name of the output model as
an input to this method.

The method
pfcShrinkwrap.ShrinkwrapVRMLInstructions.GetOutputFi
le returns the name of the output file to be created and the method
pfcShrinkwrap.ShrinkwrapVRMLInstructions.SetOutputFi
le specifies the name of the output file to be created.

Interface 22 - 23
STL Export Options
Methods Introduced:

• pfcShrinkwrap.pfcShrinkwrap.ShrinkwrapVRMLInstructions_Create
• pfcShrinkwrap.ShrinkwrapVRMLInstructions.GetOutputFile
• pfcShrinkwrap.ShrinkwrapVRMLInstructions.SetOutputFile
The static method
pfcShrinkwrap.Shrinkwrap.ShrinkwrapVRMLInstructions_
Create returns an object used to create a shrinkwrap model of
shrinkwrap STL format. Specify the name of the output model as
an input to this method.

The method
pfcShrinkwrap.ShrinkwrapSTLInstructions.GetOutputFile
returns the name of the output file to be created and the method
pfcShrinkwrap.ShrinkwrapSTLInstructions.SetOutputFile
specifies the name of the output file to be created.

Merged Solid Options


Methods Introduced:

• pfcShrinkwrap.pfcShrinkwrap.ShrinkwrapMergedSolidInstructions_Create
• pfcShrinkwrap.ShrinkwrapMergedSolidInstructions.GetAdditionalComponents
• pfcShrinkwrap.ShrinkwrapMergedSolidInstructions.SetAdditionalComponents
The static method
pfcShrinkwrap.Shrinkwrap.ShrinkwrapMergedSolidInstru
ctions_Create returns an object used to create a shrinkwrap
model of merged solids format. Specify the name of the output
model as an input to this method.

The methods
pfcShrinkwrap.ShrinkwrapMergedSolidInstructions.GetAd
ditionalComponents specifies individual components of the
assembly to be merged into the shrinkwrap model. Use the method
pfcShrinkwrap.ShrinkwrapMergedSolidInstructions.SetAd
ditionalComponents to select individual components of the
assembly to be merged into the shrinkwrap model.

22 - 24 J-Link User’s Guide


VRML Representation
Example Code

The following example code leverages the fact that when a model
with a model program attached is erased or deleted the stop method
of the model program is called. This example code uses the stop
method to produce a VRML representation of the model in a
standard directory for Web publishing.

Interface
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcGlobal.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;

/**
* The class MakeVRMLOnEraseExample is intended to be used as a model
* program. The program automatically creates VRML file(s) in a standard
* directory when the model is erased. The "stop" method will be called
* when the model is erased.*/

public class MakeVRMLOnEraseExample {


static final String VRMLdirectory = "w:\\www\\engineering\\models";
// NT/Win95 directory structure. Use double "\\" because '\' signals a
special character.
// Unix directory would look like: "/www/engineering/models"
static Session session;
static Model model;
// static variables for access within start/stop methods
public static void start ()
{
ModelType modelType = ModelType.MDL_PART;
String modelName = "starter";

try {
session = pfcGlobal.GetProESession();
/* GetModel when the model program is activated (start). Even if
the model is renamed, the model variable reference will still
be valid. */
model = session.GetModel (modelName, modelType);
}
catch (jxthrowable x)
{
System.out.println ("Caught exception: "+x);
x.printStackTrace ();
}
}
public static void stop ()
{
try {

Interface 22 - 25
VRMLModelExportInstructions vrml_instrs;

vrml_instrs =
pfcModel.VRMLModelExportInstructions_Create(VRMLdirectory);
model.Export("", vrml_instrs); // Export() ignores filename for VRML
export
}
catch (jxthrowable x)
{
System.out.println ("Caught exception :"+x);
x.printStackTrace ();
}
}
}

Importing Files
Method Introduced:

• pfcModel.Model.Import
The method pfcModel.Model.Import reads a file into
Pro/ENGINEER. The format must be the same as it would be if
these files were created by Pro/ENGINEER. The parameters are:

• FilePath—Absolute path of the file to be imported along with its


extension.
• ImportData—The ImportInstructions object that controls
the import operation.

Import Instructions
Methods Introduced:

• pfcModel.pfcModel.RelationImportInstructions_Create
• pfcModel.pfcModel.IGESSectionImportInstructions_Create
• pfcModel.pfcModel.ProgramImportInstructions_Create
• pfcModel.pfcModel.ConfigImportInstructions_Create
• pfcModel.pfcModel.DWGSetupImportInstructions_Create
• pfcModel.pfcModel.SpoolImportInstructions_Create
• pfcModel.pfcModel.ConnectorParamsImportInstructions_Create
• pfcModel.pfcModel.ASSEMTreeCFGImportInstructions_Create
• pfcModel.pfcModel.WireListImportInstructions_Create

22 - 26 J-Link User’s Guide


• pfcModel.pfcModel.CableParamsImportInstructions_Create
• pfcModel.pfcModel.STEPImport2DInstructions_Create
• pfcModel.pfcModel.IGESImport2DInstructions_Create
• pfcModel.pfcModel.DXFImport2DInstructions_Create
• pfcModel.pfcModel.DWGImport2DInstructions_Create
• pfcModel.pfcModel.SETImport2DInstructions_Create
The methods described in this section create an instructions data

Interface
object to import a file of a specified type into Pro/ENGINEER. The
details are as shown in the table below:

Interface Used to Import


RelationImportInstructions A list of relations and parameters in a
part or assembly.
IGESSectionImportInstructions A section model in IGES format.
ProgramImportInstructions A program file for a part or assembly
that can be edited to change the
model.
ConfigImportInstructions Configuration instructions.
DWGSetupImportInstructions A drawing s/u file.
SpoolImportInstructions Spool instructions.
ConnectorParamsImportInstructions Connector parameter instructions.
ASSEMTreeCFGImportInstructions Assembly tree CFG instructions.
WireListImportInstructions Wirelist instructions.
CableParamsImportInstructions Cable parameters from an assembly.
STEPImport2DInstructions A part or assembly in STEP format.
IGESImport2DInstructions A part or assembly in IGES format.
DXFImport2DInstructions A drawing in DXF format.
DWGImport2DInstructions A drawing in DWG format.
SETImport2DInstructions A class that defines a ruled surface.

Note:
– The method pfcModel.Model.Import does not support
importing of CADAM type of files.

Interface 22 - 27
– If a model or the file type STEP, IGES, DWX, or SET
already exists, the imported model is appended to the
current model. For more information on methods that
return models of the types STEP, IGES, DWX, and SET,
refer to Getting a Model Object.

Importing 2D Models
Method Introduced:

• pfcSession.BaseSession.Import2DModel
The method pfcSession.BaseSession.Import2DModel imports a
two dimensional model based on the following parameters:

• NewModelName—Specifies the name of the new model.


• Type—Specifies the type of the model. The type can be one of
the following:
– STEP
– IGES
– DXF
– DWG
– SET
• FilePath—Specifies the location of the file to be imported along
with the file extension
• Instructions—Specifies the
pfcModel.Import2DInstructions object that controls the
import operation.
The interface pfcModel.Import2DInstructions contains
the following attributes:
– Import2DViews—Defines whether to import 2D drawing
views.
– ScaleToFit—If the current model has a different sheet size
than that specified by the imported file, set the parameter
to true to retain the current sheet size. Set the parameter to
false to retain the sheet size of the imported file.
– FitToLeftCorner—If this parameter is set to true, the
bottom left corner of the imported file is adjusted to the
bottom left corner of the current model. If it is set to false,
the size of imported file is retained.

22 - 28 J-Link User’s Guide


Note: The method
pfcSession.BaseSession.Import2DModel does not
support importing of CADAM type of files.

Importing 3D Geometry
Methods Introduced:

• pfcSession.BaseSession.GetImportSourceType

Interface
• pfcSession.BaseSession.ImportNewModel
• pfcImport.LayerImportFilter.OnLayerImport
For some input formats, the method
pfcSession.BaseSession.GetImportSourceType returns the
type of model that can be imported using a designated file. The
input parameters of this method are:

• FileToImport—Specifies the path of the file along with its name


and extension
• NewModelImportType—Specifies the type of model to be
imported.
The method pfcSession.BaseSession.ImportNewModel is used
to import an external 3D format file and creates a new model or set
of models of type pfcModel.Model. The input parameters of this
method are:

• FileToImport—Specifies the path to the file along with its name


and extension
• NewModelImportType—Specifies the type of model to be
imported. The types of models that can be imported are as
follows:
– IMPORT_NEW_IGES
– IMPORT_NEW_SET
– IMPORT_NEW_VDA
– IMPORT_NEW_NEUTRAL
– IMPORT_NEW_CADDS
– IMPORT_NEW_STEP
– IMPORT_NEW_STL
– IMPORT_NEW_VRML
– IMPORT_NEW_POLTXT

Interface 22 - 29
– IMPORT_NEW_CATIA_SESSION
– IMPORT_NEW_CATIA_MODEL
– IMPORT_NEW_DXF
– IMPORT_NEW_ACIS
– IMPORT_NEW_PARASOLID
– IMPORT_NEW_ICEM
– IMPORT_NEW_DESKTOP
– IMPORT_NEW_CATIA_PART
– IMPORT_NEW_UG
– IMPORT_NEW_PRODUCTVIEW
– IMPORT_NEW_CATIA_CGR
– IMPORT_NEW_JT
• ModelType—Specifies the type of the model. It can be a part,
assembly or drawing.
• NewModelName—Specifies a name for the imported model.
• LayerImportFilter—Specifies the layer filter. This parameter is
optional.
The interface pfcImport.LayerImportFilter has a call back
function pfcImport.LayerImportFilter.OnLayerImport.
Pro/ENGINEER passes the object pfcImport.ImportedLayer
describing each imported layer to the layer filter to allow you to
perform changes on each layer as it is imported.

The method pfcExceptions.XCancelProEAction.Throw can be


called from the body of the method
pfcImport.LayerImportFilter.OnLayerImport to end the
filtering of the layers.

Modifying the Imported Layers


Layers help you organize model items so that you can perform
operations on those items collectively. These operations primarily
include ways of showing the items in the model, such as displaying
or blanking, selecting, and suppressing. The methods described in
this section modify the attributes of the imported layers.

22 - 30 J-Link User’s Guide


Methods Introduced:

• pfcImport.ImportedLayer.GetName
• pfcImport.ImportedLayer.SetNewName
• pfcImport.ImportedLayer.GetSurfaceCount
• pfcImport.ImportedLayer.GetCurveCount
• pfcImport.ImportedLayer.GetTrimmedSurfaceCount
• pfcImport.ImportedLayer.SetAction

Interface
Layers are identified by their names. The method
pfcImport.ImportedLayer.GetName returns the name of the
layer while the method
pfcImport.ImportedLayer.SetNewName can be used to set the
name of the layer. The name can be numeric or alphanumeric.

The method pfcImport.ImportedLayer.GetSurfaceCount


returns the number of curves on the layer.

The method
pfcImport.ImportedLayer.GetTrimmedSurfaceCount returns
the number of trimmed surfaces on the layer and the method
pfcImport.ImportedLayer.GetCurveCount returns the number
of curves on the layer.

The method pfcImport.ImportedLayer.SetAction sets the


display of the imported layers. The input parameter for this method
is ImportAction. The types of actions that can be performed on the
imported layers are:

• IMPORT_LAYER_DISPLAY—Displays the imported layer.


• IMPORT_LAYER_SKIP—Does not import entities on this
layer.
• IMPORT_LAYER_BLANK—Blanks the selected layer.
• IMPORT_LAYER_IGNORE—Imports only entities on this
layer but not the layer.
The default action type is IMPORT_LAYER_DISPLAY.

Interface 22 - 31
Plotting Files
From Pro/ENGINEER Wilfire 5.0 onwards, the
pfcModel.PlotInstructions object containing the instructions
for plotting files has been deprecated. All the methods listed below
for creating and accessing the instruction attributes in
pfcModel.PlotInstructions have also been deprecated. Use
the new interface type pfcExport.PrinterInstructions and
its methods described in the next section.

Methods Deprecated:

• pfcModel.pfcModel.PlotInstructions_Create
• pfcModel.PlotInstructions.GetPlotterName
• pfcModel.PlotInstructions.SetPlotterName
• pfcModel.PlotInstructions.GetOutputQuality
• pfcModel.PlotInstructions.SetOutputQuality
• pfcModel.PlotInstructions.GetUserScale
• pfcModel.PlotInstructions.SetUserScale
• pfcModel.PlotInstructions.GetPenSlew
• pfcModel.PlotInstructions.SetPenSlew
• pfcModel.PlotInstructions.GetPenVelocityX
• pfcModel.PlotInstructions.SetPenVelocityX
• pfcModel.PlotInstructions.GetPenVelocityY
• pfcModel.PlotInstructions.SetPenVelocityY
• pfcModel.PlotInstructions.GetSegmentedOutput
• pfcModel.PlotInstructions.SetSegmentedOutput
• pfcModel.PlotInstructions.GetLabelPlot
• pfcModel.PlotInstructions.SetLabelPlot
• pfcModel.PlotInstructions.GetSeparatePlotFiles
• pfcModel.PlotInstructions.SetSeparatePlotFiles
• pfcModel.PlotInstructions.GetPaperSize
• pfcModel.PlotInstructions.SetPaperSize

22 - 32 J-Link User’s Guide


• pfcModel.PlotInstructions.GetPageRangeChoice
• pfcModel.PlotInstructions.SetPageRangeChoice
• pfcModel.PlotInstructions.GetPaperSizeX
• pfcModel.PlotInstructions.SetPaperSizeY
• pfcModel.PlotInstructions.GetFirstPage
• pfcModel.PlotInstructions.SetFirstPage
• pfcModel.PlotInstructions.GetLastPage

Interface
• pfcModel.PlotInstructions.SetLastPage

Printing Files
The printer instructions for printing a file are defined in
pfcExport.PrinterInstructions data object.

Methods Introduced:

• pfcExport.pfcExport.PrinterInstructions_Create
• pfcExport.PrinterInstructions.SetPrinterOption
• pfcExport.PrinterInstructions.SetPlacementOption
• pfcExport.PrinterInstructions.SetModelOption
• pfcExport.PrinterInstructions.SetWindowId
The method pfcExport.pfcExport.PrinterInstructions_Create
creates a new instance of the pfcExport.PrinterInstructions
object. The object contains the following instruction attributes:

• PrinterOption—Specifies the printer settings for printing a file


in terms of the pfcExport.PrintPrinterOption object. Set
this attribute using the method
pfcExport.PrinterInstructions.SetPrinterOption.
• PlacementOption—Specifies the placement options for printing
purpose in terms of the pfcExport.PrintMdlOption object.
Set this attribute using the method
pfcExport.PrinterInstructions.SetPlacementOption.
• ModelOption—Specifies the model options for printing purpose
in terms of the pfcExport.PrintPlacementOption object.
Set this attribute using the method
pfcExport.PrinterInstructions.SetModelOption.

Interface 22 - 33
• WindowId—Specifies the current window identifier. Set this
attribute using the method
pfcExport.PrinterInstructions.SetWindowId.

Printer Options
The printer settings for printing a file are defined in the
pfcExport.PrintPrinterOption object.

Methods Introduced:

• pfcExport.pfcExport.PrintPrinterOption_Create
• pfcSession.BaseSession.GetPrintPrinterOptions
• pfcExport.PrintPrinterOption.SetDeleteAfter
• pfcExport.PrintPrinterOption.SetFileName
• pfcExport.PrintPrinterOption.SetPaperSize
• pfcExport.Export.PrintSize_Create
• pfcExport.PrintSize.SetHeight
• pfcExport.PrintSize.SetWidth
• pfcExport.PrintSize.SetPaperSize
• pfcExport.PrintPrinterOption.SetPenTable
• pfcExport.PrintPrinterOption.SetPrintCommand
• pfcExport.PrintPrinterOption.SetPrinterType
• pfcExport.PrintPrinterOption.SetQuantity
• pfcExport.PrintPrinterOption.SetRollMedia
• pfcExport.PrintPrinterOption.SetRotatePlot
• pfcExport.PrintPrinterOption.SetSaveMethod
• pfcExport.PrintPrinterOption.SetSaveToFile
• pfcExport.PrintPrinterOption.SetSendToPrinter
• pfcExport.PrintPrinterOption.SetSlew
• pfcExport.PrintPrinterOption.SetSwHandshake
• pfcExport.PrintPrinterOption.SetUseTtf
The method pfcExport.pfcExport.PrintPrinterOption_Create
creates a new instance of the pfcExport.PrintPrinterOption
object.

22 - 34 J-Link User’s Guide


The method pfcSession.BaseSession.GetPrintPrinterOptions
retrieves the printer settings.

The pfcExport.PrintPrinterOption object contains the


following options:

• DeleteAfter—Determines if the file is deleted after printing. Set


it to true to delete the file after printing. Use the method
pfcExport.PrintPrinterOption.SetDeleteAfter to assign
this option.

Interface
• FileName—Specifies the name of the file to be printed. Use the
method pfcExport.PrintPrinterOption.SetFileName to set
the name.
• PaperSize—Specifies the parameters of the paper to be printed
in terms of the pfcExport.PrintSize object. The method
pfcExport.PrintPrinterOption.SetPaperSize assigns the
PaperSize option. Use the method
pfcExport.Export.PrintSize_Create to create a new
instance of the pfcExport.PrintSize object. This object
contains the following options:
– Height—Specifies the height of paper. Use the method
pfcExport.PrintSize.SetHeight to set the paper height.
– Width—Specifies the width of paper. Use the method
pfcExport.PrintSize.SetWidth to set the paper width.
– PaperSize—Specifies the size of the paper used for the plot
in terms of the pfcModel.PlotPaperSize object. Use the
method pfcExport.PrintSize.SetPaperSize to set the
paper size.
• PenTable—Specifies the file containing the pen table. Use the
method pfcExport.PrintPrinterOption.SetPenTable to set
this option.
• PrintCommand—Specifies the command to be used for
printing. Use the method
pfcExport.PrintPrinterOption.SetPrintCommand to set
the command.
• PrinterType—Specifies the printer type. Use the method
pfcExport.PrintPrinterOption.SetPrinterType to assign
the type.
• Quantity—Specifies the number of copies to be printed. Use the
method pfcExport.PrintPrinterOption.SetQuantity to
assign the quantity.

Interface 22 - 35
• RollMedia—Determines if roll media is to be used for printing.
Set it to true to use roll media. Use the method
pfcExport.PrintPrinterOption.SetRollMedia to assign this
option.
• RotatePlot—Determines if the plot is rotated by 90 degrees. Set
it to true to rotate the plot. Use the method
pfcExport.PrintPrinterOption.SetRotatePlot to set this
option.
• SaveMethod—Specifies the save method in terms of the
pfcExport.PrintSaveMethod class. Use the method
pfcExport.PrintPrinterOption.SetSaveMethod to specify
the save method. The available methods are as follows:
– PRINT_SAVE_SINGLE_FILE—Plot is saved to a single
file.
– PRINT_SAVE_MULTIPLE_FILE—Plot is saved to
multiple files.
– PRINT_SAVE_APPEND_TO_FILE—Plot is appended to a
file.
• SaveToFile—Determines if the file is saved after printing. Set it
to true to save the file after printing. Use the method
pfcExport.PrintPrinterOption.SetSaveToFile to assign
this option.
• SendToPrinter—Determines if the plot is directly sent to the
printer. Set it to true to send the plot to the printer. Use the
method pfcExport.PrintPrinterOption.SetSendToPrinter
to set this option.
• Slew—Specifies the speed of the pen in centimeters per second
in X and Y direction. Use the method
pfcExport.PrintPrinterOption.SetSlew to set this option.
• SwHandshake—Determines if the software handshake method
is to be used for printing. Set it to true to use the software
handshake method. Use the method
pfcExport.PrintPrinterOption.SetSwHandshake to set
this option.
• UseTtf—Specifies whether TrueType fonts or stroked text is
used for printing. Set this option to true to use TrueType fonts
and to false to stroke all text. Use the method
pfcExport.PrintPrinterOption.SetUseTtf to set this option.

22 - 36 J-Link User’s Guide


Placement Options
The placement options for printing purpose are defined in the
pfcExport.PrintPlacementOption object.

Methods Introduced:

• pfcExport.pfcExport.PrintPlacementOption_Create
• pfcSession.BaseSession.GetPrintPlacementOptions
• pfcExport.PrintPlacementOption.SetBottomOffset

Interface
• pfcExport.PrintPlacementOption.SetClipPlot
• pfcExport.PrintPlacementOption.SetKeepPanzoom
• pfcExport.PrintPlacementOption.SetLabelHeight
• pfcExport.PrintPlacementOption.SetPlaceLabel
• pfcExport.PrintPlacementOption.SetScale
• pfcExport.PrintPlacementOption.SetShiftAllCorner
• pfcExport.PrintPlacementOption.SetSideOffset
• pfcExport.PrintPlacementOption.SetX1ClipPosition
• pfcExport.PrintPlacementOption.SetX2ClipPosition
• pfcExport.PrintPlacementOption.SetY1ClipPosition
• pfcExport.PrintPlacementOption.SetY2ClipPosition
The method
pfcExport.pfcExport.PrintPlacementOption_Create creates a
new instance of the pfcExport.PrintPlacementOption object.

The method
pfcSession.BaseSession.GetPrintPlacementOptions retrieves
the placement options.

The pfcExport.PrintPlacementOption object contains the


following options:

• BottomOffset—Specifies the offset from the lower-left corner of


the plot. Use the method
pfcExport.PrintPlacementOption.SetBottomOffset to set
this option.
• ClipPlot—Specifies whether the plot is clipped. Set this option
to true to clip the plot or to false to avoid clipping of plot. Use
the method pfcExport.PrintPlacementOption.SetClipPlot
to set this option.

Interface 22 - 37
• KeepPanzoom—Determines whether pan and zoom values of
the window are used. Set this option to true use pan and zoom
and false to skip them. Use the method
pfcExport.PrintPlacementOption.SetKeepPanzoom to
set this option.
• LabelHeight—Specifies the height of the label in inches. Use
the method
pfcExport.PrintPlacementOption.SetLabelHeight to set
this option.
• PlaceLabel—Specifies whether you want to place the label on
the plot. Use the method
pfcExport.PrintPlacementOption.SetPlaceLabel to set
this option.
• Scale—Specifies the scale used for the plot. Use the method
pfcExport.PrintPlacementOption.SetScale to set this
option.
• ShiftAllCorner—Determines whether all corners are shifted.Set
this option to true to shift all corners or to false to skip shifting
of corners. Use the method
pfcExport.PrintPlacementOption.SetShiftAllCorner to
set this option.
• SideOffset—Specifies the offset from the sides. Use the method
pfcExport.PrintPlacementOption.SetSideOffset to set
this option.
• X1ClipPosition—Specifies the first X parameter for defining the
clip position. Use the method
pfcExport.PrintPlacementOption.SetX1ClipPosition to
set this option.
• X2ClipPosition—Specifies the second X parameter for defining
the clip position. Use the method
pfcExport.PrintPlacementOption.SetX2ClipPosition to
set this option.
• Y1ClipPosition—Specifies the first Y parameter for defining the
clip position. Use the method
pfcExport.PrintPlacementOption.SetY1ClipPosition to
set this option.
• Y2ClipPosition—Specifies the second Y parameter for defining
the clip position. Use the method
pfcExport.PrintPlacementOption.SetY2ClipPosition to
set this option.

22 - 38 J-Link User’s Guide


Model Options
The model options for printing purpose are defined in the
pfcExport.PrintMdlOption object.

Methods Introduced:

• pfcExport.pfcExport.PrintMdlOption_Create
• pfcSession.BaseSession.GetPrintMdlOptions
• pfcExport.PrintMdlOption.SetDrawFormat

Interface
• pfcExport.PrintMdlOption.SetFirstPage
• pfcExport.PrintMdlOption.SetLastPage
• pfcExport.PrintMdlOption.SetLayerName
• pfcExport.PrintMdlOption.SetLayerOnly
• pfcExport.PrintMdlOption.SetMdl
• pfcExport.PrintMdlOption.SetQuality
• pfcExport.PrintMdlOption.SetSegmented
• pfcExport.PrintMdlOption.SetSheets
• pfcExport.PrintMdlOption.SetUseDrawingSize
• pfcExport.PrintMdlOption.SetUseSolidScale
The method pfcExport.pfcExport.PrintMdlOption_Create
creates a new instance of the pfcExport.PrintMdlOption object.

The method pfcSession.BaseSession.GetPrintMdlOptions


retrieves the model options.

The pfcExport.PrintMdlOption object contains the following


options:

• DrawFormat—Displays the drawing format used for printing.


Use the method
pfcExport.PrintMdlOption.SetDrawFormat to set this
option.
• FirstPage—Specifies the first page number. Use the method
pfcExport.PrintMdlOption.SetFirstPage to set this option.
• LastPage—Specifies the last page number. Use the method
pfcExport.PrintMdlOption.SetLastPage to set this option.
• LayerName—Specifies the name of the layer. Use the method
pfcExport.PrintMdlOption.SetLayerName to set the name.

Interface 22 - 39
• LayerOnly—Prints the specified layer only. Set this option to
true to print the specified layer. Use the method
pfcExport.PrintMdlOption.SetLayerOnly to set this
option.
• Mdl—Specifies the model to be printed. Use the method
pfcExport.PrintMdlOption.SetMdl to set this option.
• Quality—Determines the quality of the model to be printed. It
checks for no line, no overlap, simple overlap, and complex
overlap. Use the method
pfcExport.PrintMdlOption.SetQuality to set this option.
• Segmented—If set to true, the printer prints the drawing in
full size, but in segments that are compatible with the selected
paper size. This option is available only if you are plotting a
single page. Use the method
pfcExport.PrintMdlOption.SetSegmented to set this
option.
• Sheets—Specifies the sheets that need to be printed in terms of
the pfcExport.PrintSheets class. Use the method
pfcExport.PrintMdlOption.SetSheets to specify the sheets.
The sheets can be of the following types:
– PRINT_CURRENT_SHEET—Only the current sheet is
printed.
– PRINT_ALL_SHEETS—All the sheets are printed.
– PRINT_SELECTED_SHEETS—Sheets of a specified range
are printed.
• UseDrawingSize—Overrides the paper size specified in the
printer options with the drawing size. Set this option to true to
use the drawing size. Use the method
pfcExport.PrintMdlOption.SetUseDrawingSize to set this
option.
• UseSolidScale—Prints with the scale used in the solid model.
Set this option to true to use solid scale. Use the method
pfcExport.PrintMdlOption.SetUseSolidScale to set this
option.

Plotter Configuration File (PCF) Options


The printing options for PCF file are defined in the
pfcExport.PrinterPCFOptions object.

22 - 40 J-Link User’s Guide


Methods Introduced:

• pfcExport.pfcExport.PrinterPCFOptions_Create
• pfcExport.PrinterPCFOptions.SetPrinterOption
• pfcExport.PrinterPCFOptions.SetPlacementOption
• pfcExport.PrinterPCFOptions.SetModelOption
The method pfcExport.pfcExport.PrinterPCFOptions_Create
creates a new instance of the pfcExport.PrinterPCFOptions

Interface
object.

The pfcExport.PrinterPCFOptions object contains the


following options:

• PrinterOption—Specifies the printer settings for printing a file


in terms of the pfcExport.PrintPrinterOption object. Set
this attribute using the method
pfcExport.PrinterPCFOptions.SetPrinterOption.
• PlacementOption—Specifies the placement options for printing
purpose in terms of the pfcExport.PrintMdlOption object.
Set this attribute using the method
pfcExport.PrinterPCFOptions.SetPlacementOption.
• ModelOption—Specifies the model options for printing purpose
in terms of the pfcExport.PrintPlacementOption object.
Set this attribute using the method
pfcExport.PrinterPCFOptions.SetModelOption.

Solid Operations
Method Introduced:

• pfcSolid.Solid.CreateImportFeat
The method pfcSolid.Solid.CreateImportFeat creates a new
import feature in the solid and takes the following input
arguments:

• IntfData—The source of data from which to create the import


feature. It is given by the pfcModel.IntfDataSource object.
The type of source data that can be imported is given by the
pfcModel.IntfType class and can be of the following types:
– INTF_NEUTRAL
– INTF_NEUTRAL_FILE
– INTF_IGES

Interface 22 - 41
– INTF_STEP
– INTF_VDA
– INTF_SET
– INTF_PDGS
– INTF_ICEM
– INTF_ACIS
– INTF_DXF
– INTF_CDRS
– INTF_STL
– INTF_VRML
– INTF_PARASOLID
– INTF_AI
– INTF_CATIA_PART
– INTF_UG
– INTF_PRODUCTVIEW
– INTF_CATIA_CGR
– INTF_JT
• CoordSys—The pointer to a reference coordinate system. If this
is NULL, the function uses the default coordinate system.
• FeatAttr—The attributes for creation of the new import feature
given by the pfcModel.ImportFeatAttr object. If this
pointer is NULL, the function uses the default attributes.

Example Code: Returning a Feature Object

This method will return a feature object when provided with a solid
coordinate system name and an import feature's file name. The
method will find the coordinate system in the model, set the Import
Feature Attributes, and create an import feature. Then the feature
is returned.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcGeometry.*;
public class pfcImportFeatureExample {

22 - 42 J-Link User’s Guide


public Feature createImportFeatureFromDataFile (Solid solid,
String csys,
String filename)
{
IntfNeutralFile data_source;
ModelItems c_systems;
CoordSystem c_system = null;
Feature import_feature = null;
ImportFeatAttr feat_attr;
try {
data_source = pfcModel.IntfNeutralFile_Create(filename);

Interface
c_systems = solid.ListItems(ModelItemType.ITEM_COORD_SYS);
for (int i = 0; i < c_systems.getarraysize(); i++)
{
if (c_systems.get(i).GetName().equals(csys))
{
c_system = (CoordSystem)c_systems.get(i);
break;
}
}
/*
* Create the import ImportFeatAttr structure
* Join surfaces, make solids from every closed quilt
* using the add operation
*/
feat_attr = pfcModel.ImportFeatAttr_Create();
feat_attr.SetJoinSurfs(true);
feat_attr.SetMakeSolid(true);
feat_attr.SetOperation(OperationType.ADD_OPERATION);
import_feature = solid.CreateImportFeat(data_source,
c_system,
feat_attr);
}
catch (jxthrowable x)
{
System.out.println("Exception Occured:" + x);
}
return import_feature;
}
}

Window Operations
Method Introduced:

• pfcWindow.Window.ExportRasterImage
The method pfcWindow.Window.ExportRasterImage outputs a
standard Pro/ENGINEER raster output file.

Interface 22 - 43
Example Code: Generating Raster Files

The following code is used to generate raster image files using a


specified window and file type.
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcWindow.*;
import com.ptc.cipjava.jxthrowable;
public class pfcWindowExamples {
/**
* outputImage takes a Window and outputs a raster image file
* depicting the window. This method takes as an argument the type of
* the raster file, but the size and image quality of the raster file are
* hardcoded.*/
public static void outputImage (Window window, RasterType type)
{

try {
RasterImageExportInstructions instructions =
getRasterInstructions (type);
String ext = getExt (type);
window.ExportRasterImage ("pfcoutput"+ext, instructions);
}
catch (UnsupportedRasterTypeException u)
{
System.out.println ("Unsupported raster file type. No output file
produced.");
return;
}
catch (jxthrowable x)
{
System.out.println ("Exception caught: "+x);
x.printStackTrace();
return;
}
return;
}
/**
* outputScreen takes a BaseSession and outputs a raster image file
* depicting the current window. This method takes as an argument the
* type of the raster file, but the size and image quality of the raster
* file are hardcoded.

public static void outputScreen (Session session, RasterType type)


{

try {
RasterImageExportInstructions instructions =
getRasterInstructions (type);
String ext = getExt (type);
session.ExportCurrentRasterImage ("pfcoutput"+ext, instructions);

22 - 44 J-Link User’s Guide


}
catch (UnsupportedRasterTypeException u)
{
System.out.println ("Unsupported raster file type. No output file
produced.");
return;
}
catch (jxthrowable x)
{
System.out.println ("Exception caught: "+x);
x.printStackTrace();

Interface
return;
}
return;
}
/**
* A helper method which creates a RasterImageExportInstructions object
*based on the type.*/
private static RasterImageExportInstructions getRasterInstructions
(RasterType type) throws jxthrowable, UnsupportedRasterTypeException
{
double rasterHeight = 7.5;
double rasterWidth = 10.0;
DotsPerInch dpi = DotsPerInch.RASTERDPI_100;
RasterDepth depth = RasterDepth.RASTERDEPTH_24;
RasterImageExportInstructions instructions;

switch (type.getValue())
{
case RasterType._RASTER_BMP:
BitmapImageExportInstructions bmp_instrs =
pfcWindow.BitmapImageExportInstructions_Create (rasterHeight,
rasterWidth);
instructions = bmp_instrs;
break;
case RasterType._RASTER_TIFF:
TIFFImageExportInstructions tiff_instrs =
pfcWindow.TIFFImageExportInstructions_Create (rasterHeight, rasterWidth);
instructions = tiff_instrs;
break;
case RasterType._RASTER_JPEG:
JPEGImageExportInstructions jpeg_instrs =
pfcWindow.JPEGImageExportInstructions_Create (rasterHeight, rasterWidth);
instructions = jpeg_instrs;
break;
case RasterType._RASTER_EPS:
EPSImageExportInstructions eps_instrs =
pfcWindow.EPSImageExportInstructions_Create (rasterHeight, rasterWidth);
instructions = eps_instrs;
break;
default:

Interface 22 - 45
throw new UnsupportedRasterTypeException(type);
// This is not required, but it maintains the code even if new Raster
types are added in a future release. The method will throw and catch the
exception until the code can be updated with new types.
}
instructions.SetImageDepth (depth);
instructions.SetDotsPerInch (dpi);
return instructions;
}
/**
* Helper method to get the file extension corresponding to a RasterType.
*/
private static String getExt (RasterType type)
{
switch (type.getValue())
{
case RasterType._RASTER_BMP:
return ".bmp";
case RasterType._RASTER_TIFF:
return ".tiff";
case RasterType._RASTER_JPEG:
return ".jpg";
case RasterType._RASTER_EPS:
return ".eps";
default:
return "Invalid";
}
}
}

22 - 46 J-Link User’s Guide


23
Simplified Representations

J-Link gives programmatic access to all the simplified


representation functionality of Pro/ENGINEER. Create simplified
representations either permanently or on the fly and save, retrieve,
or modify them by adding or deleting items.

Topic Page

Overview 23 - 2
Retrieving Simplified Representations 23 - 3
Creating and Deleting Simplified Representations 23 - 4
Extracting Information About Simplified Representations 23 - 5
Modifying Simplified Representations 23 - 8
Simplified Representation Utilities 23 - 9

23 - 1
Overview
Using J-Link, you can create and manipulate assembly simplified
representations just as you can using Pro/ENGINEER
interactively.

Note: J-Link supports simplified representation of assemblies


only, not parts.
Simplified representations are identified by the
pfcSimpRep.SimRep class. This class is a child of
pfcModelItem.ModelItem, so you can use the methods dealing
with ModelItems to collect, inspect, and modify simplified
representations.

The information required to create and modify a simplified


representation is stored in a class called
pfcSimpRep.SimpRepInstructions which contains several data
objects and fields, including:

• String—The name of the simplified representation


• pfcSimpRep.SimpRepAction—The rule that controls the
default treatment of items in the simplified representation.
• pfcSimpRep.SimpRepItem—An array of assembly
components and the actions applied to them in the simplified
representation.
A pfcSimpRep.SimpRepItem is identified by the assembly
component path to that item. Each pfcSimpRep.SimpRepItem
has it’s own pfcSimpRep.SimpRepAction assigned to it.
pfcSimpRep.SimpRepAction is a visible data object that includes
a field of type pfcSimpRep.SimpRepActionType.

pfcSimpRep.SimpActionType is an enumerated type that


specifies the possible treatment of items in a simplified
representation. The possible values are as follows

Values Action
SIMPREP_NONE No action is specified.
SIMPREP_REVERSE Reverse the default rule for
this component (for example,
include it if the default rule is
exclude).
SIMPREP_INCLUDE Include this component in the
simplified representation.

23 - 2 J-Link User’s Guide


Values Action
SIMPREP_EXCLUDE Exclude this component from
the simplified representation.
SIMPREP_SUBSTITUTE Substitute the component in
the simplified representation.
SIMPREP_GEOM Use only the geometrical
representation of the

Representations
component.

Simplified
SIMPREP_GRAPHICS Use only the graphics
representation of the
component.

Retrieving Simplified Representations


Methods Introduced:

• pfcSession.BaseSession.RetrieveAssemSimpRep
• pfcSession.BaseSession.RetrieveGeomSimpRep
• pfcSession.BaseSession.RetrieveGraphicsSimpRep
• pfcSession.BaseSession.RetrieveSymbolicSimpRep
• pfcSimpRep.pfcSimpRep.RetrieveExistingSimpRepInstructions_Create
You can retrieve a named simplified representation from a model
using the method
pfcSession.BaseSession.RetrieveAssemSimpRep, which is
analogous to the Assembly mode option Retrieve Rep in the
SIMPLFD REP menu. This method retrieves the object of an existing
simplified representation from an assembly without fetching the
generic representation into memory. The method takes two
arguments, the name of the assembly and the simplified
representation data.

To retrieve an existing simplified representation, pass an instance


of
pfcSimpRep.pfcSimpRep.RetrieveExistingSimpRepInstruct
ions_Create and specify its name as the second argument to this
method. Pro/ENGINEER retrieves that representation and any
active submodels and returns the object to the simplified
representation as a pfcAssembly.Assembly object.

Simplified Representations 23 - 3
You can retrieve geometry, graphics, and symbolic simplified
representations into session using the methods
pfcSession.BaseSession.RetrieveGeomSimpRep,
pfcSession.BaseSession.RetrieveGraphicsSimpRep, and
pfcSession.BaseSession.RetrieveSymbolicSimpRep
respectively. Like
pfcSession.BaseSession.RetrieveAssemSimpRep, these
methods retrieve the simplified representation without bringing the
master representation into memory. Supply the name of the
assembly whose simplified representation is to be retrieved as the
input parameter for these methods. The methods output the
assembly. They do not display the simplified representation.

Creating and Deleting Simplified


Representations
Methods Introduced:

• pfcSimpRep.pfcSimpRep.CreateNewSimpRepInstructions_Create
• pfcSolid.Solid.CreateSimpRep
• pfcSolid.Solid.DeleteSimpRep
To create a simplified representation, you must allocate and fill a
pfcSimpRep.SimpRepInstructions object by calling the method
pfcSimpRep.pfcSimpRep.CreateNewSimpRepInstructions_
Create. Specify the name of the new simplified representation as
an input to this method. You should also set the default action type
and add SimpRepItems to the object.

To generate the new simplified representation, call


pfcSolid.Solid.CreateSimpRep. This method returns the
pfcSimpRep.SimpRep object for the new representation.

The method pfcSolid.Solid.DeleteSimpRep deletes a simplified


representation from its model owner. The method requires only the
pfcSimpRep.SimpRep object as input.

23 - 4 J-Link User’s Guide


Extracting Information About Simplified
Representations
Methods Introduced:

• pfcSimpRep.SimpRep.GetInstructions
• pfcSimpRep.SimpRepInstructions.GetDefaultAction

Representations
• pfcSimpRep.CreateNewSimpRepInstructions.GetNewSimpName

Simplified
• pfcSimpRep.SimpRepInstructions.GetIsTemporary
• pfcSimpRep.SimpRepInstructions.GetItems
Given the object to a simplified representation,
pfcSimpRep.SimpRep.GetInstructions fills out the
pfcSimpRep.SimpRepInstructions object.

The pfcSimpRep.SimpRepInstructions.GetDefaultAction,
pfcSimpRep.CreateNewSimpRepInstructions.GetNewSimp
Name, and
pfcSimpRep.SimpRepInstructions.GetIsTemporary methods
return the associated values contained in the
pfcSimpRep.SimpRepInstructions object.

The method pfcSimpRep.SimpRepInstructions.GetItems


returns all the items that make up the simplified representation.

Example 1: Working with Simplified Representation


This code demonstrates the functionality used when working with
existing simplified representations in Pro/ENGINEER. This
function matchSimpRepItem returns an array of simplified
representation matching a ComponentPath for a certain feature as
well as the SimpRepActionType for that item's action in the
representation. If none are found the method prints the <NOT
FOUND> message and returns null.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcAssembly.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcSimpRep.*;
import java.util.*;
public class pfcSimpRepExamples
{
public static SimpRep [] matchSimpRepItem
(com.ptc.pfc.pfcAssembly.ComponentPath path,

Simplified Representations 23 - 5
com.ptc.pfc.pfcSimpRep.SimpRepActionType type)
{
try{
Assembly root_assembly;//The parent assembly
ModelItems mitems;//All modelitems of type ITEM_SIMPREP from the
assembly
ModelItem mitem;//A modelitem of type ITEM_SIMPREP
int num_simpreps;//The total number of simp. reps. in the assembly.
CreateNewSimpRepInstructions instrs;//The instruction object
//for the simplified
representation.
SimpRepItems simprepitems;//the components of the simplified rep.
int num_inst;//the number of components in a simp rep.
SimpRepItem simitem;//a single component in a simp rep.
SimpRepActionType action;//the action of a certain SimpRepItem
boolean found = false;//a check for the match in the outer loop
boolean equal_intseq = false;//a check if the two sequences are equal
intseq item_path;//A int sequence path to a given comp of a SimpRep
SimpRep[] simpreps;//an array of found simpreps to be passed back to
user
Vector simpr = new Vector();//a vector for storing the found reps
root_assembly = path.GetRoot();
mitems = root_assembly.ListItems(ModelItemType.ITEM_SIMPREP);
num_simpreps = mitems.getarraysize();
if (mitems == null)
{
System.out.println("No Simplified Representations exist");
return null;
}
for (int i = 0; i < num_simpreps; i++)
{
SimpRep rep = (SimpRep)mitems.get(i);
System.out.println("Found Simplified representation: " + Sname);
instrs = (CreateNewSimpRepInstructions)rep.GetInstructions();
simprepitems = instrs.GetItems();
num_inst = simprepitems.getarraysize();
for (int j = 0; j < num_inst; j++)
{
simitem = simprepitems.get(i);
if (simitem.GetItemPath() instanceof SimpRepCompItemPath)
{
item_path =
((SimpRepCompItemPath)simitem.GetItemPath()).GetItemPath();
equal_intseq = CompareSeq(item_path, path.GetComponentIds());
if (equal_intseq)
{
action = simitem.GetAction().GetType();
if (action .equals(type))
{
System.out.println("Found a match: SimpRep: " + srep.GetName());
simpr.addElement(srep);

23 - 6 J-Link User’s Guide


break;
}
}
}
}
}
if (simpr.size() == 0)
{
System.out.println("No Simplified Representations match the

Representations
description");
return null;

Simplified
}
else
{
simpreps = new SimpRep [simpr.size()];
simpr.copyInto(simpreps);
return simpreps;
}
}
catch (jxthrowable x)
{
System.out.println("Exception Caught " + x);
x.printStackTrace();
}
return null;
}
/**
* This method compares to intseq object for equivalence
**/
public static boolean CompareSeq(intseq seq1, intseq seq2) throws
jxthrowable
{
int len1 = seq1.getarraysize();
int len2 = seq2.getarraysize();
if (len1 != len2)
return false;
for (int i = 0; i < len1; i++)
if (seq1.get(i) != seq2.get(i))
return false;
return true;
}
}

Simplified Representations 23 - 7
Modifying Simplified Representations
Methods Introduced:

• pfcSimpRep.SimpRep.GetInstructions
• pfcSimpRep.SimpRep.SetInstructions
• pfcSimpRep.SimpRepInstructions.SetDefaultAction
• pfcSimpRep.CreateNewSimpRepInstructions.SetNewSimpName
• pfcSimpRep.SimpRepInstructions.SetIsTemporary
Using J-Link, you can modify the attributes of existing simplified
representations. After you create or retrieve a simplified
representation, you can make calls to the set methods listed in this
section to designate new values for the fields in the
pfcSimpRep.SimpRepInstructions object.

To modify an existing simplified representation retrieve it and then


get the pfcSimpRep.SimpRepInstructions object by calling
pfcSimpRep.SimpRep.GetInstructions. If you created the
representation programmatically within the same application, the
pfcSimpRep.SimpRepInstructions object is already available.
Once you have modified the data object, reassign it to the
corresponding simplified representation by calling the method
pfcSimpRep.SimpRep.SetInstructions.

Adding Items to and Deleting Items from a Simplified


Representation
Methods Introduced:

• pfcSimpRep.SimpRepInstructions.SetItems
• pfcSimpRep.pfcSimpRep.SimpRepItem_Create
• pfcSimpRep.SimpRep.SetInstructions
• pfcSimpRep.pfcSimpRep.SimpRepReverse_Create
• pfcSimpRep.pfcSimpRep.SimpRepInclude_Create
• pfcSimpRep.pfcSimpRep.SimpRepExclude_Create
• pfcSimpRep.pfcSimpRep.SimpRepSubstitute_Create
• pfcSimpRep.pfcSimpRep.SimpRepGeom_Create
• pfcSimpRep.pfcSimpRep.SimpRepGraphics_Create

23 - 8 J-Link User’s Guide


You can add and delete items from the list of components in a
simplified representation using J-Link. If you created a simplified
representation using the option Exclude as the default rule, you
would generate a list containing the items you want to include.
Similarly, if the default rule for a simplified representation is
Include, you can add the items that you want to be excluded from
the simplified representation to the list, setting the value of the
pfcSimpRep.SimpRepActionType to SIMPREP_EXCLUDE.

Representations
How to Add Items

Simplified
1. Get the pfcSimpRep.SimpRepInstructions object, as
described in the previous section.
2. Specify the action to be applied to the item with a call to one of
following methods.
3. Initialize a pfcSimpRep.SimpRepItem object for the item by
calling the method
pfcSimpRep.pfcSimpRep.SimpRepItem_Create .
4. Add the item to the pfcSimpRep.SimpRepItem sequence. Put
the new pfcSimpRep.SimpRepInstructions using
pfcSimpRep.SimpRepInstructions.SetItems .
5. Reassign the pfcSimpRep.SimpRepInstructions object to
the corresponding pfcSimpRep.SimpRep object by calling
pfcSimpRep.SimpRep.SetInstructions .

How to Remove Items


Follow the procedure above, except remove the unwanted
pfcSimpRep.SimpRepItem from the sequence.

Simplified Representation Utilities


Methods Introduced:

• pfcModelItem.ModelItemOwner.ListItems
• pfcModelItem.ModelItemOwner.GetItemById
• pfcSolid.Solid.GetSimpRep
• pfcSolid.Solid.SelectSimpRep
• pfcSolid.Solid.ActivateSimpRep
• pfcSolid.Solid.GetActiveSimpRep

Simplified Representations 23 - 9
This section describes the utility methods that relate to simplified
representations.

The method pfcModelItem.ModelItemOwner.ListItems can list


all of the simplified representations in a Solid.

The method pfcModelItem.ModelItemOwner.GetItemById


initializes a pfcSimpRep.SimpRep object. It takes an integer id.

Note: J-Link supports simplified representation of Assemblies


only, not Parts.
The method pfcSolid.Solid.GetSimpRep initializes a
pfcSimpRep.SimpRep object. The method takes the following
arguments:

• SimpRepname— The name of the simplified representation in


the solid. If you specify this argument, the method ignores the
rep_id.
The method pfcSolid.Solid.SelectSimpRep creates a
Pro/ENGINEER menu to enable interactive selection. The method
takes the owning solid as input, and outputs the object to the
selected simplified representation. If you choose the Quit menu
button, the method throws an exception XToolkitUserAbort.

The methods pfcSolid.Solid.GetActiveSimpRep and


pfcSolid.Solid.ActivateSimpRep enable you to find and get the
currently active simplified representation, respectively. Given an
assembly object,pfcSolid.Solid.GetActiveSimpRep() returns the
object to the currently active simplified representation. If the
current representation is the master representation, the return is
null.

The method pfcSolid.Solid.ActivateSimpRep activates the


requested simplified representation.

To set a simplified representation to be the currently displayed


model, you must also call pfcModel.ModelDisplay().

23 - 10 J-Link User’s Guide


24
Asynchronous Mode

This chapter explains how to use J-Link in Asynchronous Mode.

Topic Page

Overview 24 - 2
Starting and Stopping Pro/ENGINEER 24 - 4
Connecting to a Pro/ENGINEER Process 24 - 7
Full Asynchronous Mode 24 - 9
Troubleshooting Asynchronous J-Link 24 - 14

24 - 1
Overview
Asynchronous mode is a multiprocess mode in which the J-Link
application and Pro/ENGINEER can perform concurrent
operations. Unlike the synchronous modes, asynchronous mode
uses JNI (Java Native Interface) and RPC (remote procedure calls)
as the means of communication between the application and
Pro/ENGINEER.

Another important difference between synchronous and


asynchronous modes is in the startup of the J-Link application. In
synchronous mode, the application is started by Pro/ENGINEER,
based on information contained in the registry file. In asynchronous
mode, the application (containing its own main() method) is started
independently of Pro/ENGINEER and subsequently either starts or
connects to a Pro/ENGINEER process.

Note: An asynchronous application that starts


Pro/ENGINEER will not appear in the Auxiliary
Applications dialog box.
The use of RPC causes asynchronous mode to perform more slowly
than synchronous mode. For this reason, apply asynchronous mode
only when it is needed.

An asynchronous mode is not the only mode in which your


application has explicit control over Pro/ENGINEER. Because
Pro/ENGINEER calls a Java start method when an application
starts, your synchronous application can take control by initiating
all operations in Java start method (thus interrupting any user
interaction). This technique is important when you want to run
Pro/ENGINEER in batch mode.

Depending on how your asynchronous application handles


messages from Pro/ENGINEER, your application can be classified
as either simple or full. The following sections describe simple and
full asynchronous mode.

Setting up an Asynchronous J-Link Application


For your asynchronous application to communicate with
Pro/ENGINEER, you must set the environment variable
PRO_COMM_MSG_EXE to the full path of the executable
pro_comm_msg.

On UNIX systems, set PRO_COMM_MSG_EXE using the following


command:

24 - 2 J-Link User’s Guide


% setenv PRO_COMM_MSG_EXE
<Pro/ENGINEER>/<MACHINE>/obj/pro_comm_msg

In this command, % signifies the shell prompt while


<Pro/ENGINEER> and <MACHINE> refer to your Pro/ENGINEER
installation directory.

On Windows NT systems, set PRO_COMM_MSG_EXE in the

Asynchronous Mode
Environment section of the System window that you access from
the Control Panel.

To support the asynchronous mode, use the jar file pfcasync.jar


in your CLASSPATH. This file is available at <Pro/E
loadpoint>/text/java. This file contains all required classes
for running with asynchronous J-Link.

Note: Asynchronous applications are incompatible with the


classes in the synchronous .jar files. You must build
and run your application classes specifically to run in
asynchronous mode.
You must add the asynchronous library, pfcasyncmt, to your
environment that launches the J-Link application. This library is
stored in <Pro/E loadpoint><Machine>/<lib>.

Note: The library has prefix and extension specifiers for a


dynamically loaded library for the platform being used.

System Library Path


sun4_solaris_ libpfcasyncm setenv LD_LIBRARY_PATH
64 t.so “<Pro/E
loadpoint>/sun4_solaris_64/lib:
$LD_LIBRARY_PATH”
hpux_pa64 libpfcasyncm setenv SHLIB_PATH
t.sl “<Pro/E
loadpoint>/jlink/hpux_pa64/lib:
$SHLIB_PATH”
i486_nt, pfcasyncmt.d set PATH=<Pro/E loadpoint>/i486_nt
x86e_win64 ll <Machine Type>/lib;%PATH%
i486_linux libpfcasyncm setenv LD_LIBRARY_PATH "<Pro/E
t.so loadpoint>/i486_linux/lib:
$LD_LIBRARY_PATH"

Asynchronous Mode 24 - 3
Asynchronous J-Link applications must load the pfcasyncmt
library prior to calls made to the asynchronous methods. This can
be accomplished by adding the following line to your application.

System.loadLibrary (“pfcasyncmt”)

Simple Asynchronous Mode


A simple asynchronous application does not implement a way to
handle requests from Pro/ENGINEER. Therefore, J-Link cannot
plant listeners to be notified when events happen in
Pro/ENGINEER. Consequently, Pro/ENGINEER cannot invoke the
methods that must be supplied when you add, for example, menu
buttons to Pro/ENGINEER.

Despite this limitation, a simple asynchronous mode application


can be used to automate processes in Pro/ENGINEER. The
application may either start or connect to an existing
Pro/ENGINEER session, and may access Pro/ENGINEER in
interactive or in a non graphical, non interactive mode. When
Pro/ENGINEER is running with graphics, it is an interactive
process available to the user.

When you design a J-Link application to run in simple


asynchronous mode, keep the following points in mind:

• The Pro/ENGINEER process and the application perform


operations concurrently.
• None of the application’s listener methods can be invoked by
Pro/ENGINEER.
Simple asynchronous mode supports normal J-Link methods but
does not support ActionListeners. These considerations imply that
the J-Link application does not know the state (the current mode,
for example) of the Pro/ENGINEER process at any moment.

Starting and Stopping Pro/ENGINEER


The following methods are used to start and stop Pro/ENGINEER
when using J-Link applications.

Methods Introduced:

• pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_Start
• pfcAsyncConnection.AsyncConnection.End

24 - 4 J-Link User’s Guide


A simple asynchronous application can spawn and connect to a
Pro/ENGINEER process with the method
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start. The Pro/ENGINEER process listens for requests from the
application and acts on the requests at suitable breakpoints,
usually between commands.

Unlike applications running in synchronous mode, asynchronous

Asynchronous Mode
applications are not terminated when Pro/ENGINEER terminates.
This is useful when the application needs to perform
Pro/ENGINEER operations intermittently, and therefore, must
start and stop Pro/ENGINEER more than once during a session.

The application can connect to or start only one Pro/ENGINEER


session at any time. If the J-Link application spawns a second
session, connection to the first session is lost.

To end any Pro/ENGINEER process that the application is


connected to, call the method
pfcAsyncConnection.AsyncConnection.End.

Setting Up a Noninteractive Session


You can spawn a Pro/ENGINEER session that is both
noninteractive and nongraphical. In asynchronous mode, include
the following strings in the Pro/ENGINEER start or connect call to
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start:

• -g:no_graphics—Turn off the graphics display.


• -i:rpc_input—Causes Pro/ENGINEER to expect input from
your asynchronous application only.
Note: Both of these arguments are required, but the order is
not important.
The syntax of the call for a noninteractive, nongraphical session is
as follows:
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_Start
(“pro -g:no_graphics -i:rpc_input”,<text_dir>);

where pro is the command to start Pro/ENGINEER.

Asynchronous Mode 24 - 5
Example Code
This example demonstrates how to use J-Link in asynchronous
mode. The method starts Pro/ENGINEER asynchronously,
retrieves a Session, and opens a model in Pro/ENGINEER.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcAsyncConnection.*;

/**
* This asynchronous class is a simple asynchronous application. It makes
* Pro/ENGINEER run in batch mode, without user input. The application
* starts Pro/ENGINEER, performs the designated operations, and shuts down
* Pro/ENGINEER.
*/
public class pfcAsyncStartExample {

public static void main (String [] args)


{
System.loadLibrary("pfcasyncmt");
runProE();
}

public static void runProE()


{
try
{
// Second Argument: String path to menu and msg files.
// null assumes no msg and menu files used in this batch
application.
// -i and -g flags make Pro/ENGINEER run in non-graphic,
non-interactive mode.

AsyncConnection connection =
pfcAsyncConnection.AsyncConnection_Start
("pro -g:no_graphics -i:rpc_input", null);

Session session = connection.GetSession();

/* J-Link processing calls here */

//null third argument designates model is not an instance.


ModelDescriptor desc = pfcModel.ModelDescriptor_Create
(ModelType.MDL_PART, "modelname",null);

Model model = session.RetrieveModel(desc);

// end the Pro/ENGINEER process when done

24 - 6 J-Link User’s Guide


connection.End();
}

catch (jxthrowable x)
{
System.out.println("Exception: " + x);
}
}

Asynchronous Mode
Connecting to a Pro/ENGINEER Process
Methods Introduced:

• pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_Connect
• pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_ConnectWS
• pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_GetActive
Connection
• pfcAsyncConnection.AsyncConnection.Disconnect
A simple asynchronous application can also connect to a
Pro/ENGINEER process that is already running on a local
computer. The method
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Connect performs this connection. This method fails to connect if
multiple Pro/ENGINEER sessions are running. If several versions
of Pro/ENGINEER are running on the same computer, try to
connect by specifying user and display parameters. However, if
several versions of Pro/ENGINEER are running in the same user
and display parameters, the connection may not be possible.

pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_ConnectWS connects to both Pro/ENGINEER and
Pro/INTRALINK 3.x workspaces simultaneously.

pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_GetActiveConnection returns the current connection to a
Pro/ENGINEER session.

To disconnect from a Pro/ENGINEER process, call the method


pfcAsyncConnection.AsyncConnection.Disconnect. This
method can be called only if you used the method
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Connect to get the connection.

Asynchronous Mode 24 - 7
The connection to a Pro/ENGINEER process uses information
provided by the name service daemon. The name service daemon
accepts and supplies information about the processes running on
the specified hosts. The application manager, for example, uses the
name service when it starts up Pro/ENGINEER and other
processes. The name service daemon is set up as part of the
Pro/ENGINEER installation.

Connecting Via Connection ID


Methods Introduced:

• pfcAsyncConnection.AsyncConnection.GetConnectionId
• pfcAsyncConnection.ConnectionId.GetExternalRep
• pfcSession.BaseSession.GetConnectionId
• pfcAsyncConnection.pfcAsyncConnection.ConnectionId_Create
• pfcAsyncConnection.pfcAsyncConnection.AsyncConnection_ConnectById
Each Pro/ENGINEER process maintains a unique identity for
communications purposes. Use this ID to reconnect to a
Pro/ENGINEER process.

The method
pfcAsyncConnection.AsyncConnection.GetConnectionId
returns a data structure containing the connection ID.

If the connection id must be passed to some other application the


method pfcAsyncConnection.ConnectionId.GetExternalRep
provides the string external representation for the connection ID.

The method pfcSession.BaseSession.GetConnectionId


provides access to the asynchronous connection ID for the current
Pro/ENGINEER session. This ID can be passed to any
asynchronous mode application that needs to connect to the current
session of Pro/ENGINEER.

The method
pfcAsyncConnection.pfcAsyncConnection.ConnectionId_Cr
eate takes a string representation and creates a ConnectionId
data object. The method
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_ConnectById connects to Pro/ENGINEER at the specified
connection ID.

Note: Connection IDs are unique for each Pro/ENGINEER


process and are not maintained after you quit
Pro/ENGINEER.

24 - 8 J-Link User’s Guide


Status of a Pro/ENGINEER Process
Method Introduced:

• pfcAsyncConnection.AsyncConnection.IsRunning
To find out whether a Pro/ENGINEER process is running, use the
method pfcAsyncConnectionAsyncConnection.IsRunning.

Asynchronous Mode
Getting the Session Object
Method Introduced:

• pfcAsyncConnection.AsyncConnection.GetSession
The method
pfcAsyncConnection.AsyncConnection.GetSession returns
the session object representing the Pro/ENGINEER session. Use
this object to access the contents of the Pro/ENGINEER session.
See the Session Objects chapter for additional information.

Full Asynchronous Mode


Full asynchronous mode is identical to the simple asynchronous
mode except in the way the J-Link application handles requests
from Pro/ENGINEER. In simple asynchronous mode, it is not
possible to process these requests. In full asynchronous mode, the
application implements a control loop that ‘‘listens’’ for messages
from Pro/ENGINEER. As a result, Pro/ENGINEER can call
functions in the application, including callback functions for menu
buttons and notifications.

Note: Using full asynchronous mode requires starting or


connecting to Pro/ENGINEER using the methods
described in the previous sections. The difference is that
the application must provide an event loop to process
calls from menu buttons and listeners.

Methods Introduced:

• pfcAsyncConnection.AsyncConnection.EventProcess
• pfcAsyncConnection.AsyncConnection.WaitForEvents
• pfcAsyncConnection.AsyncConnection.InterruptEventProcessing
• pfcAsyncConnection.AsyncActionListener.OnTerminate

Asynchronous Mode 24 - 9
The control loop of an application running in full asynchronous
mode must contain a call to the method
pfcAsyncConnection.AsyncConnection.EventProcess, which
takes no arguments. This method allows the application to respond
to messages sent from Pro/ENGINEER. For example, if the user
selects a menu button that is added by your application,
pfcAsyncConnection.AsyncConnection.EventProcess
processes the call to your listener and returns when the call
completes. For more information on listeners and adding menu
buttons, see the Session Objects chapter.

The method
pfcAsyncConnection.AsyncConnection.WaitForEvents
provides an alternative to the development of an event processing
loop in a full asynchronous mode application. Call this function to
have the application wait in a loop for events to be passed from
Pro/ENGINEER. No other processing takes place while the
application is waiting. The loop continues until
pfcAsyncConnection.AsyncConnection.InterruptEventProc
essing is called from a J-Linkcallback action, or until the
application detects the termination of Pro/ENGINEER.

It is often necessary for your full asynchronous application to be


notified of the termination of the Pro/ENGINEER process. In
particular, your control loop need not continue to listen for
Pro/ENGINEER messages if Pro/ENGINEER is no longer running.

An AsyncConnection object can be assigned an Action Listener to


bind a termination action that is executed upon the termination of
Pro/ENGINEER. The method
pfcAsyncConnection.AsyncActionListener.OnTerminate
handles the termination that you must override. It sends a member
of the class pfcAsyncConnection.TerminationStatus, which
is one of the following:

• TERM_EXIT—Normal exit (the user clicks Exit on the menu).


• TERM_ABNORMAL—Quit with error status.
• TERM_SIGNAL—Fatal signal raised.
Your application can interpret the termination type and take
appropriate action. For more information on Action Listeners, see
the Action Listeners chapter.

24 - 10 J-Link User’s Guide


Example Code
The following asynchronous class is a fully asynchronous
application. It follows the procedure for a full asynchronous
application:

1. The application establishes listeners for Pro/ENGINEER


events, in this case, the menu button and the termination

Asynchronous Mode
listener.
2. The application goes into a control loop calling EventProcess
which allows the application to respond to the Pro/ENGINEER
events.
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcCommand.*;
import com.ptc.pfc.pfcAsyncConnection.*;
import com.ptc.pfc.pfcExceptions.*;

public class pfcAsyncFullExample extends AsyncActionListener_u


{
private AsyncConnection connection;
private boolean exit_flag = false;
public static void main (String [] args) throws
com.ptc.cipjava.jxthrowable
{
if (args.length != 2)
{
printMsg ("Incorrect argument list.");
printMsg ("Arguments: java
com.ptc.jlinkasyncexamples.pfcAsyncFullExample <pro/E command> <text
path>");
return;
}
try
{
System.loadLibrary ("pfcasyncmt");
}
catch (UnsatisfiedLinkError error)
{
printMsg ("Could not load J-Link library pfcasyncmt.");
return;
}
new pfcAsyncFullExample (args);
}
// Constructor
private pfcAsyncFullExample (String args[]) throws
com.ptc.cipjava.jxthrowable
{
startProE (args);

Asynchronous Mode 24 - 11
addTerminationListener ();
addMenuButton();
while (!exit_flag)
{
// Could do other regular processing here, but the
EventProcess()calls should happen regularly, so that
Pro/ENGINEER does not appear slow in responding to menu
button picks //

try
{
connection.EventProcess ();
Thread.sleep (100);
}
catch (java.lang.InterruptedException ex)
{
}
}
// Wait here a bit so Pro/ENGINEER can finish shutting down.

try
{
Thread.sleep (2000);
connection.EventProcess ();
}
catch (java.lang.InterruptedException ex)
{
}
}
/**
* Starts Pro/ENGINEER.
*/
void startProE (String[] args) throws com.ptc.cipjava.jxthrowable
{
try
{
// args[0] = Pro/ENGINEER command
// args[1] = text path for menu/message files
connection = pfcAsyncConnection.AsyncConnection_Start (args [0],
args[1]);
}
catch (XToolkitGeneralError error)
{
printMsg ("Could not start Pro/ENGINEER.");
System.exit (0);
}
return;
}
/**Adds a menu and a menu button to the Pro/E menubar.*/
void addMenuButton () throws com.ptc.cipjava.jxthrowable
{

24 - 12 J-Link User’s Guide


Session s = connection.GetSession ();
UICommand cmd = s.UICreateCommand ( "AsyncCommand",
(UICommandActionListener) new ButtonListener());
s.UIAddMenu ("J-Link", "Applications", "menu_text.txt", null);
s.UIAddButton (cmd, "J-Link", null, "AsyncApp", "AsyncAppHelp",
"menu_text.txt");
}
/**Adds a handler for Pro/ENGINEER's exit.*/

Asynchronous Mode
void addTerminationListener () throws com.ptc.cipjava.jxthrowable
{
connection.AddActionListener ((AsyncActionListener)this);
printMsg ("Termination listener added.");
}

/**Termination handler - from the AsyncActionListener interface.*/


public void OnTerminate (TerminationStatus status)
{
printMsg ("Pro/ENGINEER shutting down.");
exit_flag = true;
}
public static void printMsg (String msg)
{
System.out.println (msg);
}
}
class ButtonListener extends DefaultUICommandActionListener
{
/**
* Menu button action - from interface UICommandActionListener
*/
public void OnCommand ()
{
pfcAsyncFullExample.printMsg ("User menu button pushed.");

}
}

Message and Menu File


J-Link
J-Link
#
#
AsyncApp
Hit me!
#
#
AsyncAppHelp
Launch async application callback
#
#

Asynchronous Mode 24 - 13
Troubleshooting Asynchronous J-Link
General Problems

UnsatisfiedLinkError in System.loadLibrary ("pfcasyncmt")

Add $PRO_DIRECTORY/$PRO_MACHINE_TYPE/lib to your library


path:

• Windows and Windows XP 64bit:$PATH (separated with


semicolon)
• UNIX (separated with colon):
• sun4_solaris_64, i486_linux: $LD_LIBRARY_PATH
• hpux_pa64: $SHLIB_PATH
Java gives this exception when it has any trouble loading the
library, not just when the library is not in the library path. If you
are working in a non-standard configuration make sure that all of
these libraries are in your library path (subject to your OS naming,
for example cipstdmtz is libcipstdmtz.so on Solaris and
cipstdmtz.dll on Windows):

• pfcasyncmt
• jnicipjavamtz
• jniadaptsmtz
• cipstdmtz
• ctoolsmtz
• baselibmtz
• i18nmtz
Look at what is printed on stdout/stderr. There can be
unresolved symbols. NT usually reports unresolved symbols in a
pop-up dialog so you will see it immediately. UNIX systems will
print the error to stderr. If that does not help, then enable the
debug output from the operating system's dynamic loader, start
with reading the main page.

UnsatisfiedLinkError on first call to a JLink method

Ensure that you executed the System.loadLibrary


("pfcasyncmt"). Put a debug printout right after it to ensure it
gets loaded.

24 - 14 J-Link User’s Guide


In most cases the J-Link jar files (pfcasync.jar) are loaded using
a non-system class loader. Java lets you load native libraries from
classes loaded with either the system class loader
(pfcasync.jar)must be in the default CLASSPATH), or a signed
class loader. Java will not throw an exception on
System.loadLibrary. For this reason everything will appear to
be fine until the first call to a native method. At this point you will
get an UnsatisfiedLinkError. Add J-Link jar files to the default

Asynchronous Mode
CLASSPATH, usually to the CLASSPATH environment or an
appropriate place in your servlet engine's configuration.

NullPointerException from a JLink method early in


program execution.

Make sure that you have jar files from only one version of J-Link in
your CLASSPATH. If you have both async and sync jar files, the
VM will pick up incorrect classes.

• Sync J-Link jars: pfc.jar


• Async J-Link jars: pfcasync.jar

pfcExceptions.XToolkitNotFound exception on the first call


to
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start on Windows.

Make sure your Pro/ENGINEER command is correct. If it's not a


full path to a script/executable, make sure $PATH is set correctly.
Try full path in the command: if it works, then your $PATH is
incorrect.

pfcExceptions.XToolkitGeneralError or
pfcExceptions.CommError on the first call to
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start or
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Connect.

• Make sure the environment variable PRO_COMM_MSG_EXE is set


to full path to pro_comm_msg, including file name, including
.exe on Windows.
• Make sure the environment variable PRO_DIRECTORY is set to
Pro/ENGINEER installation directory.
• Make sure name service (nmsd) is running.

Asynchronous Mode 24 - 15
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start hangs, even though Pro/ENGINEER already started.

Make sure name service (nmsd) is also started with


Pro/ENGINEER. Open Task Manager and look for nmsd.exe in the
process listing.

Problems Specific to Servlets and JSP

pfcExceptions.XToolkitGeneralError or
pfcExceptions.CommError on the first call to
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Start or
pfcAsyncConnection.pfcAsyncConnection.AsyncConnection
_Connect

• Make sure you have PRO_COMM_MSG_EXE and PRO_DIRECTORY


set correctly.
• On Windows, servlet engine deployments typically belong to the
SYSTEM account and not a local user account. So, you must set
PRO_COMM_MSG_EXE and PRO_DIRECTORY in your system
environment and restart Windows to cause this change to take
effect.

24 - 16 J-Link User’s Guide


25
Task Based Application
Libraries

Applications created using different Pro/ENGINEER API products


are interoperable. These products use Pro/ENGINEER as the
medium of interaction, eliminating the task of writing
native-platform specific interactions between different
programming languages.

Application interoperability allows J-Link applications to call into


Pro/TOOLKIT from areas not covered in the native interface. It
allows you to put a Java front end on legacy Pro/TOOLKIT
applications, and also allows you to use J-Link applications and
listeners in conjunction with a Pro/Web.Link or asynchronous
J-Link application.

J-Link can call Pro/ENGINEER web pages belonging to


Pro/Web.Link, and functions in Pro/TOOLKIT DLLs. J-Link
synchronous applications can also register tasks for use by other
applications.

Topic Page

Managing Application Arguments 25 - 2


Launching a Pro/Toolkit DLL 25 - 4
Creating J-Link Task Libraries 25 - 6
Launching Tasks from J-Link Task Libraries 25 - 7

25 - 1
Managing Application Arguments
J-Link passes application data to and from tasks in other
applications as members of a sequence of pfcArgument.Argument
objects. Application arguments consist of a label and a value. The
value may be of any one of the following types:

• Integer
• Double
• Boolean
• ASCII string (a non-encoded string, provided for compatibility
with arguments provided from C applications)
• String (a fully encoded string)
• pfcSelect.Selection (a selection of an item in a
Pro/ENGINEER session)
• pfcBase.Transform3D (a coordinate system transformation
matrix)

Methods Introduced:

• pfcArgument.pfcArgument.CreateIntArgValue
• pfcArgument.pfcArgument.CreateDoubleArgValue
• pfcArgument.pfcArgument.CreateBoolArgValue
• pfcArgument.pfcArgument.CreateASCIIStringArgValue
• pfcArgument.pfcArgument.CreateStringArgValue
• pfcArgument.pfcArgument.CreateSelectionArgValue
• pfcArgument.pfcArgument.CreateTransformArgValue
• pfcArgument.ArgValue.Getdiscr
• pfcArgument.ArgValue.GetIntValue
• pfcArgument.ArgValue.SetIntValue
• pfcArgument.ArgValue.GetDoubleValue
• pfcArgument.ArgValue.SetDoubleValue
• pfcArgument.ArgValue.GetBoolValue
• pfcArgument.ArgValue.SetBoolValue
• pfcArgument.ArgValue.GetASCIIStringValue
• pfcArgument.ArgValue.SetASCIIStringValue

25 - 2 J-Link User’s Guide


• pfcArgument.ArgValue.GetStringValue
• pfcArgument.ArgValue.SetStringValue
• pfcArgument.ArgValue.GetSelectionValue
• pfcArgument.ArgValue.SetSelectionValue
• pfcArgument.ArgValue.GetTransformValue

Application Libraries
• pfcArgument.ArgValue.SetTransformValue
The class pfcArgument.ArgValue contains one of the seven types

Task Based
of values. J-Link provides different methods to create each of the
seven types of argument values.

The method pfcArgument.ArgValue.Getdiscr returns the type


of value contained in the argument value object.

Use the methods listed above to access and modify the argument
values.

Modifying Arguments
Methods Introduced:

• pfcArgument.pfcArgument.Argument_Create
• pfcArgument.Arguments.create
• pfcArgument.Argument.GetLabel
• pfcArgument.Argument.SetLabel
• pfcArgument.Argument.GetValue
• pfcArgument.Argument.SetValue
The method pfcArgument.pfcArgument.Argument_Create
creates a new argument. Provide a name and value as the input
arguments of this method.

The method pfcArgument.Arguments.create creates a new


empty sequence of task arguments.

The method pfcArgument.Argument.GetLabel returns the label


of the argument. The method pfcArgument.Argument.SetLabel
sets the label of the argument.

The method pfcArgument.Argument.GetValue returns the


value of the argument. The method
pfcArgument.Argument.SetValue sets the value of the
argument.

Task Based Application Libraries 25 - 3


Launching a Pro/Toolkit DLL
The methods described in this section enable a J-Link user to
register and launch a Pro/TOOLKIT DLL from a J-Link
application. The ability to launch and control a Pro/TOOLKIT
application enables the following:

• Reuse of existing Pro/TOOLKIT code with J-Link applications.


• ATB operations.

Methods Introduced:

• pfcSession.BaseSession.LoadProToolkitDll
• pfcSession.BaseSession.LoadProToolkitLegacyDll
• pfcSession.BaseSession.GetProToolkitDll
• pfcProToolkit.Dll.ExecuteFunction
• pfcProToolkit.Dll.GetId
• pfcProToolkit.Dll.IsActive
• pfcProToolkit.Dll.Unload
Use the method pfcSession.BaseSession.LoadProToolkitDll to
register and start a Pro/TOOLKIT DLL. The input parameters of
this method are similar to the fields of a registry file and are as
follows:

• ApplicationName—The name of the application to initialize.


• DllPath—The full path to the DLL binary file.
• TextPath—The path to the application’s message and user
interface text files.
• UserDisplay—Set this parameter to true to register the
application in the Pro/ENGINEER user interface and to see
error messages if the application fails. If this parameter is
false, the application will be invisible to the user.
The application's user_initialize() function is called when the
application is started. The method returns a handle to the loaded
Pro/TOOLKIT DLL.

25 - 4 J-Link User’s Guide


In order to register and start a legacy Pro/TOOLKIT DLL that is
not Unicode-compliant, use the method
pfcSession.BaseSession.LoadProToolkitLegacyDll. This
method conveys to Pro/ENGINEER that the loaded DLL
application is not Unicode-compliant and built in the pre-Wildfire
4.0 environment. It takes the same input parameters as the earlier
method pfcSession.BaseSession.LoadProToolkitDll.

Application Libraries
Note: The method
pfcSession.BaseSession.LoadProToolkitLegacyDll

Task Based
must be used only by a pre-Widlfire 4.0 J-Link
application to load a pre-Wildfire 4.0 Pro/TOOLKIT
DLL.
Use the method pfcSession.BaseSession.GetProToolkitDll to
obtain a Pro/TOOLKIT DLL handle. Specify the Application_Id,
that is, the DLL’s identifier string as the input parameter of this
method. The method returns the DLL object or null if the DLL was
not in session. The Application_Id can be determined as follows:

• Use the function ProToolkitDllIdGet() within the DLL


application to get a string representation of the DLL
application. Pass NULL to the first argument of
ProToolkitDllIdGet() to get the string identifier for the
calling application.
• Use the Get method for the Id attribute in the DLL interface.
The method pfcProToolkit.Dll.GetId() returns the DLL
identifier string.
Use the method pfcProToolkit.Dll.ExecuteFunction to call a
properly designated function in the Pro/TOOLKIT DLL library. The
input parameters of this method are:

• FunctionName—Name of the function in the Pro/TOOLKIT


DLL application.
• InputArguments—Input arguments to be passed to the library
function.
The method returns an object of interface
com.ptc.pfc.pfcProToolkit.FunctionReturn. This interface
contains data returned by a Pro/TOOLKIT function call. The object
contains the return value, as integer, of the executed function and
the output arguments passed back from the function call.

The method pfcProToolkit.Dll.IsActive determines whether a


Pro/TOOLKIT DLL previously loaded by the method
pfcSession.BaseSession.LoadProToolkitDll is still active.

Task Based Application Libraries 25 - 5


The method pfcProToolkit.Dll.Unload is used to shutdown a
Pro/TOOLKIT DLL previously loaded by the method
pfcSession.BaseSession.LoadProToolkitDll and the
application's user_terminate() function is called.

Creating J-Link Task Libraries


The methods described in this section allow you to setup J-Link
libraries to be used and called from other custom Pro/ENGINEER
applications in Pro/TOOLKIT or J-Link.

J-Link task libraries must be compiled using the synchronous


J-Link library called pfc.jar. Each task must be registered within
the application for it to be called from external applications.
Provide the following information to the application to use your
J-Link application as a task library:

1. The required CLASSPATH settings.


2. The name of the invocation class containing the static start and
stop methods.
3. The name of static Start() and Stop() methods
4. The path to the text files, if the application deals with messages
or menus.
5. The registration name of the task.
6. The input argument names and types.
7. The output argument names and types.

Methods Introduced:

• pfcSession.BaseSession.RegisterTask
• pfcJLink.JLinkTaskListener.OnExecute
• pfcSession.BaseSession.UnregisterTask
Use the method pfcSession.BaseSession.RegisterTask to
register the task or tasks to be executed. This method has two input
parameters:

• The name of the task. This name must be provided by calling


applications.
• Object implementing the interface JLinkTaskListener that
has the pfcJLinkTaskListener.OnExecute callback method
overridden. The class pfcLink.DefaultJLinkTaskListener
makes extending the interface easier.

25 - 6 J-Link User’s Guide


The method pfcJLinkTaskListener.OnExecute is called when
the calling application tries to invoke a registered task. This
method must contain the body of the J-Link task. The method
signature includes a sequence of input arguments and allows you to
return a sequence of output arguments to the caller.

Use the method pfcSession.BaseSession.UnregisterTask to


delete a task that is no longer needed. This method must be called

Application Libraries
when you exit the application using the application's stop method.

Task Based
Launching Tasks from J-Link Task Libraries
The methods described in this section allow you to launch tasks
from a predefined J-Link task library.

Methods Introduced:

• pfcSession.BaseSession.StartJLinkApplication
• pfcJLink.JLinkApplication.ExecuteTask
• pfcJLink.JLinkApplication.IsActive
• pfcJLink.JLinkApplication.Stop
Use the method
pfcSession.BaseSession.StartJLinkApplication to start a
J-Link application. The input parameters of this method are
similar to the fields of a registry file and are as follows:

• ApplicationName—Assigns a unique name to this J-Link


application.
• ClassName—Specifies the name of the Java class that contains
the J-Link application’s start and stop method. This should be a
fully qualified Java package and class name.
• StartMethod—Specifies the start method of the J-Link
application.
• StopMethod—Specifies the stop method of the J-Link
application.
• AdditionalClassPath—Specifies the locations of packages and
classes that must be loaded when starting this J-Link
application. If this parameter is specified as null, the default
classpath locations are used.
• TextPath—Specifies the application text path for menus and
messages. If this parameter is specified as null, the default text
locations are used.

Task Based Application Libraries 25 - 7


• UserDisplay—Specifies whether to display the application in
the Auxiliary Applications dialog box in Pro/ENGINEER.
Upon starting the application, the static start() method is invoked.
The method returns a pfcJLink.JLinkApplication referring to
the J-Link application.

The method pfcJLink.JLinkApplication.ExecuteTask calls a


registered task method in a J-Link application. The input
parameters of this method are:

• Name of the task to be executed.


• A sequence of name value pair arguments contained by the
interface pfcArguments.Arguments.
The method outputs an array of output arguments. These
arguments are returned by the task’s implementation of the
pfcJLinkTaskListener.OnExecute call back method.

The method pfcJLink.JLinkApplication.IsActive returns a


True value if the application specified by the
pfcJLink.JLinkApplication object is active.

The method pfcJLink.JLinkApplication.Stop stops the


application specified by the pfcJLink.JLinkApplication object.
This method activates the application’s static Stop() method.

25 - 8 J-Link User’s Guide


26
Graphics

This chapter covers J-Link Graphics including displaying lists,


displaying text and using the mouse.

Topic Page

Overview 26 - 2
Getting Mouse Input 26 - 2
Displaying Graphics 26 - 3
Display Lists and Graphics 26 - 8

26 - 1
Overview
The methods described in this section allow you to draw temporary
graphics in a display window. Methods that are identified as 2D are
used to draw entities (arcs, polygons, and text) in screen
coordinates. Other entities may be drawn using the current model’s
coordinate system or the screen coordinate system’s lines, circles,
and polylines. Methods are also included for manipulating text
properties and accessing mouse inputs.

Getting Mouse Input


The following methods are used to read the mouse position in
screen coordinates with the mouse button depressed. Each method
outputs the position and an enumerated type description of which
mouse button was pressed when the mouse was at that position.
These values are contained in the class
pfcSession.MouseStatus.

The enumerated values are defined in pfcSession.MouseButton


and are as follows:

• MOUSE_BTN_LEFT
• MOUSE_BTN_RIGHT
• MOUSE_BTN_MIDDLE
• MOUSE_BTN_LEFT_DOUBLECLICK

Methods Introduced:

• pfcSession.Session.UIGetNextMousePick
• pfcSession.Session.UIGetCurrentMouseStatus
The method pfcSession.Session.UIGetNextMousePick returns
the mouse position when you press a mouse button. The input
argument is the mouse button that you expect the user to select.

The method pfcSession.Session.UIGetCurrentMouseStatus


returns a value whenever the mouse is moved or a button is
pressed. With this method a button does not have to be pressed for
a value to be returned. You can use an input argument to flag
whether or not the returned positions are snapped to the window
grid.

26 - 2 J-Link User’s Guide


Drawing a Mouse Box
This method allows you to draw a mouse box.

Method Introduced:

• pfcSession.Session.UIPickMouseBox
The method pfcSession.Session.UIPickMouseBox draws a
dynamic rectangle from a specified point in screen coordinates to
the current mouse position until the user presses the left mouse

Graphics
button. The return value for this method is of the type
pfcBase.Outline3D.

You can supply the first corner location programmatically or you


can allow the user to select both corners of the box.

Displaying Graphics
All the methods in this section draw graphics in the
Pro/ENGINEER current window and use the color and linestyle set
by calls to pfcSession.BaseSession.SetStdColorFromRGB and
pfcSession.BaseSession.SetLineStyle. The methods draw the
graphics in the Pro/ENGINEER graphics color. The default
graphics color is white.

The methods in this section are called using the interface


pfcDisplay.Display. The Display interface is extended by the
pfcSession.BaseSession interface. This architecture allows you
to call all these methods on any Session object.

By default graphic elements are not stored in the Pro/ENGINEER


display list. Thus, they do not get redrawn by Pro/ENGINEER
when the user selects View, Repaint or View, Orientation.
However, if you store graphic elements in either 2-D or 3-D display
lists, Pro/ENGINEER will redraw them when appropriate. See the
section on “Display Lists and Graphics” for more information.

Methods Introduced:

• pfcDisplay.Display.SetPenPosition
• pfcDisplay.Display.DrawLine
• pfcDisplay.Display.DrawPolyline
• pfcDisplay.Display.DrawCircle
• pfcDisplay.Display.DrawArc2D
• pfcDisplay.Display.DrawPolygon2D

Graphics 26 - 3
The method pfcDisplay.Display.SetPenPosition sets the point
at which you want to start drawing a line. The method
pfcDisplay.Display.DrawLine draws a line to the given point
from the position given in the last call to either of the two methods.
Call pfcDisplay.Display.SetPenPosition() for the start of the
polyline, and pfcDisplay.Display.DrawLine for each vertex. If
you use these methods in two-dimensional modes, use screen
coordinates instead of solid coordinates.

The method pfcDisplay.Display.DrawCircle uses solid


coordinates for the center of the circle and the radius value. The
circle will be placed to the XY plane of the model.

The method pfcDisplay.Display.DrawPolyline also draws


polylines, using an array to define the polyline.

In two-dimensional models the Display Graphics methods draw


graphics at the specified screen coordinates.

The method pfcDisplay.Display.DrawPolygon2D draws a


polygon in screen coordinates. The method
pfcDisplay.Display.DrawArc2D draws an arc in screen
coordinates.

Controlling Graphics Display


Methods Introduced:

• pfcDisplay.Display.GetCurrentGraphicsColor
• pfcDisplay.Display.SetCurrentGraphicsColor
• pfcDisplay.Display.GetCurrentGraphicsMode
• pfcDisplay.Display.SetCurrentGraphicsMode
The method pfcDisplay.Display.GetCurrentGraphicsColor
returns the Pro/ENGINEER standard color used to display
graphics. The Pro/ENGINEER default is COLOR_DRAWING
(white). The method
pfcDisplay.Display.SetCurrentGraphicsColor allows you to
change the color used to draw subsequent graphics.

The method pfcDisplay.Display.GetCurrentGraphicsMode


returns the mode used to draw graphics:

• DRAW_GRAPHICS_NORMAL—Pro/ENGINEER draws
graphics in the required color in each invocation.

26 - 4 J-Link User’s Guide


• DRAW_GRAPHICS_COMPLEMENT—Pro/ENGINEER draws
graphics normally, but will erase graphics drawn a second time
in the same location. This allows you to create rubber band
lines.
The method pfcDisplay.Display.GetCurrentGraphicsMode
allows you to set the current graphics mode.

Example Code: Creating Graphics On Screen


This example demonstrates the use of mouse-tracking methods to

Graphics
draw graphics on the screen. The static method
DrawRubberbandLine prompts the user to pick a screen point.
The example uses the ‘complement mode’ to cause the line to
display and erase as the user moves the mouse around the window.

Note: This example uses the method transformPosition to


convert the coordinates into the 3D coordinate system of
a solid model, if one is displayed.
package com.ptc.jlinkexamples;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcDisplay.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcView.*;
import com.ptc.cipjava.*;

public class pfcDisplayExamples


{
/* For prompt message */
public static final String MSGFILE = "display_ex.txt";

/* Static method to draw a rubberband line based on user mouse picks */


public static void DrawRubberbandLine (Session session) throws jxthrowable
{
MouseStatus mouse = null;

session.UIDisplayMessage (MSGFILE,
"USER Pick first location for rubberband line",
null);
/* Expect the user to pick with left button */
mouse = session.UIGetNextMousePick (MouseButton.MOUSE_BTN_LEFT);

/* Transform screen point -> model location, if necessary */


Point3D first_pos = transformPosition (session,mouse.GetPosition());

/*Set graphics mode to complement, so that graphics erase after use */


GraphicsMode current_mode = session.GetCurrentGraphicsMode();
session.SetCurrentGraphicsMode(GraphicsMode.DRAW_GRAPHICS_COMPLEMENT);

Graphics 26 - 5
/*Get mouse position */
mouse = session.UIGetCurrentMouseStatus (false);
while (mouse.GetSelectedButton () == null)
{
session.SetPenPosition (first_pos);
Point3D second_pos = transformPosition (session,mouse.GetPosition());

/* Draw rubberband line */


session.DrawLine (second_pos);

mouse = session.UIGetCurrentMouseStatus (false);

/* Erase previously drawn line */


session.SetPenPosition (first_pos);
session.DrawLine (second_pos);
}

session.SetCurrentGraphicsMode (current_mode);
return;
}

/* This method transforms the 2D screen coordinates into


3D model coordinates - if necessary. */
private static Point3D transformPosition (Session s, Point3D in) throws
jxthrowable
{
Model mdl = s.GetCurrentModel ();

/* Skip transform if not in 3D model */


if (mdl == null)
return in;
ModelType type = mdl.GetType();
boolean isSolid = type.equals (ModelType.MDL_PART) ||
type.equals (ModelType.MDL_ASSEMBLY) ||
type.equals (ModelType.MDL_MFG);
if (!isSolid)
return in;

/* Get current view's orientation and invert it */


View curr_view = mdl.GetCurrentView();
Transform3D inv_orient = curr_view.GetTransform();
inv_orient.Invert();

/* Get the model point */


Point3D out = inv_orient.TransformPoint (in);

return out;
}
}

26 - 6 J-Link User’s Guide


Display example text
%C PUSER Pick first location for rubberband line
Pick first location for rubberband line
#
#

Displaying Text in the Graphics Window


Method Introduced:

Graphics
• pfcDisplay.Display.DrawText2D
The method pfcDisplay.Display.DrawText2D places text at a
position specified in screen coordinates. If you want to add text to a
particular position on the solid, you must transform the solid
coordinates into screen coordinates by using the view matrix.

Text items drawn are not known to Pro/ENGINEER and therefore


are not redrawn when you select View, Repaint. To notify the
Pro/ENGINEER of these objects, create them inside the
OnDisplay() method of the Display Listener.

Controlling Text Attributes


Methods Introduced:

• pfcDisplay.Display.GetTextHeight
• pfcDisplay.Display.SetTextHeight
• pfcDisplay.Display.GetWidthFactor
• pfcDisplay.Display.SetWidthFactor
• pfcDisplay.Display.GetRotationAngle
• pfcDisplay.Display.SetRotationAngle
• pfcDisplay.Display.GetSlantAngle
• pfcDisplay.Display.SetSlantAngle
These methods control the attributes of text added by calls to
pfcDisplay.Display.DrawText2D.

You can get and set the following information:

• Text height (in screen coordinates)


• Width ratio of each character, including the gap, as a proportion
of the height
• Rotation angle of the whole text, in counterclockwise degrees

Graphics 26 - 7
• Slant angle of the text, in clockwise degrees

Controlling Text Fonts


Methods Introduced:

• pfcDisplay.Display.GetDefaultFont
• pfcDisplay.Display.GetCurrentFont
• pfcDisplay.Display.SetCurrentFont
• pfcDisplay.Display.GetFontById
• pfcDisplay.Display.GetFontByName
The method pfcDisplay.Display.GetDefaultFont returns the
default Pro/ENGINEER text font. The text fonts are identified in
Pro/ENGINEER by names and by integer identifiers. To find a
specific font, use the methods pfcDisplay.Display.GetFontById
or pfcDisplay.Display.GetFontByName.

Display Lists and Graphics


When generating a display of a solid in a window, Pro/ENGINEER
maintains two display lists. A display list contains a set of vectors
that are used to represent the shape of the solid in the view. A 3D
display list contains a set of three-dimensional vectors that
represent an approximation to the geometry of the edges of the
solid. This list gets rebuilt every time the solid is regenerated.

A 2D display list contains the two-dimensional projections of the


edges of the solid 3D display list onto the current window. It is
rebuilt from the 3D display list when the orientation of the solid
changes. The methods in this section enable you to add your own
vectors to the display lists, so that the graphics will be redisplayed
automatically by Pro/ENGINEER until the display lists are rebuilt.

When you add graphics items to the 2D display list, they will be
regenerated after each repaint (when zooming and panning) and
will be included in plots created by Pro/ENGINEER. When you add
graphics to the 3D display list, you get the further benefit that the
graphics survive a change to the orientation of the solid and are
displayed even when you spin the solid dynamically.

26 - 8 J-Link User’s Guide


Methods Introduced:

• pfcDisplay.DisplayListener.OnDisplay
• pfcDisplay.Display.CreateDisplayList2D
• pfcDisplay.Display.CreateDisplayList3D
• pfcDisplay.DisplayList2D.Display
• pfcDisplay.DisplayList3D.Display
• pfcDisplay.DisplayList2D.Delete

Graphics
• pfcDisplay.DisplayList3D.Delete
A display listener is a class that acts similarly to an action listener.
You must implement the method inherited from the
pfcDisplay.DisplayListener interface. The implementation
should provide calls to methods on the provided
pfcDisplay.Display object to produce 2D or 3D graphics.

In order to create a display list in Pro/ENGINEER, you call


pfcDisplay.Display.CreateDisplayList2D or
pfcDisplay.Display.CreateDisplayList3D to tell
Pro/ENGINEER to use your listener to create the display list
vectors.

pfcDisplay.DisplayList2D.Display or
pfcDisplay.DisplayList3D.Display will display or redisplay the
elements in your display list. The application should delete the
display list data when it is no longer needed.

The methods pfcDisplay.DisplayList2D.Delete and the method


pfcDisplay.DisplayList3D.Delete will remove both the specified
display list from a session.

Note: The method pfcWindow.Window.Refresh does not


cause either of the display lists to be regenerated, but
simply repaints the window using the 2-D display list.

Exceptions
Possible exceptions that might be thrown by displaying graphics
methods are shown in the following table:

Graphics 26 - 9
Exception Reason
XToolkitNotExist The display list is empty.
XToolkitNotFound The method could not find the display
list or the font specified in a previous
call to
pfcDisplay.Display.SetCurrentFon
t was not found.
XToolkitCantOpen The use of display lists is disabled.
XToolkitAbort The display was aborted.
XToolkitNotValid The specified display list is invalid.
XToolkitInvalidItem There is an invalid item in the display
list.
XToolkitGeneralError The specified display list is already in
the process of being displayed.

Example Code
This example demonstrates the use of pfcDisplay methods with
3D display lists. The static method AddCircleDisplay() creates a
new 3D display list whose graphics are generated by the code in the
OnDisplay() method of the Display Circles class. This display list
places circles at all of the vertices of a part model on the screen.
package com.ptc.jlinkexamples;

import com.ptc.pfc.pfcDisplay.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.cipjava.*;

public class pfcDisplayListExamples


{
static DisplayList3D list3D;

/* Static method to create the display list */


public static void AddCircleDisplay (Session session) throws jxthrowable
{
list3D = session.CreateDisplayList3D (1, new DisplayCircles ());
// Id is an arbitrary number but should be unique to the application

/* Show the changes */

26 - 10 J-Link User’s Guide


session.GetCurrentWindow().Repaint();
}

/* Static method to delete the display list */


public static void DeleteDisplay (Session session) throws jxthrowable
{
list3D.Delete();

/* Show the changes */


session.GetCurrentWindow().Repaint();
}

Graphics
}

/*======================================================================*
\
CLASS: DisplayCircles
PURPOSE: Display list listener class - determines how the display
list
shows the graphics.
\*======================================================================*
\
class DisplayCircles extends DefaultDisplayListener
{
private static final double RADIUS = 0.5; // Constant for circle size

/* This methods' signature inherited from DisplayListener */


public void OnDisplay (Display display) throws jxthrowable
{

StdColor curr_color = display.GetCurrentGraphicsColor ();

display.SetCurrentGraphicsColor (StdColor.COLOR_ERROR);
// Use error color: magenta

/* Downcast Display to Session object */


Session s = (Session)display;
Model model = s.GetCurrentModel();

/* Error checking - make sure we have a part */


if (model == null) return;
ModelType type = model.GetType();
if (!type.equals(ModelType.MDL_PART))
return;

/* Circle all vertices */


ModelItems edges = model.ListItems (ModelItemType.ITEM_EDGE);

for (int i = 0; i < edges.getarraysize(); i++)


{
Edge edge = (Edge)edges.get(i);

Graphics 26 - 11
Point3D vertex_1 = edge.Eval3DData(0.0).GetPoint();
Point3D vertex_2 = edge.Eval3DData(1.0).GetPoint();

display.DrawCircle (vertex_1, RADIUS);


display.DrawCircle (vertex_2, RADIUS);
}

/* Restore graphics color to original */


display.SetCurrentGraphicsColor (curr_color);
}
}

26 - 12 J-Link User’s Guide


27
External Data

This chapter explains using External Data in J-Link.

Topic Page

External Data 27 - 2
Exceptions 27 - 9

27 - 1
External Data
This chapter describes how to store and retrieve external data.
External data enables a J-Link application to store its own data in
a Pro/ENGINEER database in such a way that it is invisible to the
Pro/ENGINEER user. This method is different from other means of
storage accessible through the Pro/ENGINEER user interface.

Introduction to External Data


External data provides a way for the Pro/ENGINEER application to
store its own private information about a Pro/ENGINEER model
within the model file. The data is built and interrogated by the
application as a workspace data structure. It is saved to the model
file when the model is saved, and retrieved when the model is
retrieved. The external data is otherwise ignored by
Pro/ENGINEER; the application has complete control over form
and content.

The external data for a specific Pro/ENGINEER model is broken


down into classes and slots. A class is a named ‘‘bin’’ for your data,
and identifies it as yours so no other Pro/ENGINEER API
application (or other classes in your own application) will use it by
mistake. An application usually needs only one class. The class
name should be unique for each application and describe the role of
the data in your application.

Each class contains a set of data slots. Each slot is identified by an


identifier and optionally, a name. A slot contains a single data item
of one of the following types:

J-Link Type Data


com.ptc.pfc.pfcExternal.ExternalDataType.EXTDATA_INTEGER integer
com.ptc.pfc.pfcExternal.ExternalDataType.EXTDATA_DOUBLE double
com.ptc.pfc.pfcExternal.ExternalDataType.EXTDATA_STRING string

The J-Link interfaces used to access external data in


Pro/ENGINEER are:

J-Link Type Data Type


pfcExternal.ExternalDataAccess This is the top level object and is created
when attempting to access external data.
pfcExternal.ExternalDataClass This is a class of external data and is
identified by a unique name.

27 - 2 J-Link User’s Guide


J-Link Type Data Type
pfcExternal.ExternalDataSlot This is a container for one item of data. Each
slot is stored in a class.
pfcExternal.ExternalData This is a compact data structure that
contains either an integer, double or string
value.

Compatibility with Pro/TOOLKIT

External Data
J-Link and Pro/TOOLKIT share external data in the same manner.
J-Link external data is accessible by Pro/TOOLKIT and the reverse
is also true. However, an error will result if J-Link attempts to
access external data previously stored by Pro/TOOLKIT as a
stream.

Accessing External Data


Methods Introduced:

• pfcModel.Model.AccessExternalData
• pfcModel.Model.TerminateExternalData
• pfcExternal.ExternalDataAccess.IsValid
The method pfcModel.Model.AccessExternalData prepares
Pro/ENGINEER to read external data from the model file. It
returns the pfcExternal.ExternalDataAccess object that is
used to read and write data. This method should be called only once
for any given model in session.

The method pfcModel.Model.TerminateExternalData stops


Pro/ENGINEER from accessing external data in a model. When you
use this method all external data in the model will be removed.
Permanent removal will occur when the model is saved.

Note: If you need to preserve the external data created in


session, you must save the model before calling this
function. Otherwise, your data will be lost.
The method pfcExternal.ExternalDataAccess.IsValid
determines if the ExternalDataAccess object can be used to read
and write data.

External Data 27 - 3
Storing External Data
Methods Introduced:

• pfcExternal.ExternalDataAccess.CreateClass
• pfcExternal.ExternalDataClass.CreateSlot
• pfcExternal.ExternalDataSlot.SetValue
The first step in storing external data in a new class and slot is to
set up a class using the method
pfcExternal.ExternalDataAccess.CreateClass, which provides
the class name. The method outputs
pfcExternal.ExternalDataClass, used by the application to
reference the class.

The next step is to use


pfcExternal.ExternalDataClass.CreateSlot to create an empty
data slot and input a slot name. The method outputs a
pfcExternal.ExternalDataSlot object to identify the new slot.

Note: Slot names cannot begin with a number.


The method pfcExternal.ExternalDataSlot.SetValue specifies
the data type of a slot and writes an item of that type to the slot.
The input is a pfcExternal.ExternalData object that you can
create by calling any one of the methods in the next section.

Initializing Data Objects


Methods Introduced:

• pfcExternal.pfcExternal.CreateIntExternalData
• pfcExternal.pfcExternal.CreateDoubleExternalData
• pfcExternal.pfcExternal.CreateStringExternalData
These methods initialize a pfcExternal.ExternalData object
with the appropriate data inputs.

27 - 4 J-Link User’s Guide


Retrieving External Data
Methods Introduced:

• pfcExternal.ExternalDataAccess.LoadAll
• pfcExternal.ExternalDataAccess.ListClasses
• pfcExternal.ExternalDataClass.ListSlots
• pfcExternal.ExternalDataSlot.GetValue

External Data
• pfcExternal.ExternalData.Getdiscr
• pfcExternal.ExternalData.GetIntegerValue
• pfcExternal.ExternalData.GetDoubleValue
• pfcExternal.ExternalData.GetStringValue
For improved performance, external data is not loaded
automatically into memory with the model. When the model is in
session, call the method
pfcExternal.ExternalDataAccess.LoadAll to retrieve all the
external data for the specified model from the Pro/ENGINEER
model file and put it in the workspace. The method needs to be
called only once to retrieve all the data.

The method pfcExternal.ExternalDataAccess.ListClasses


returns a sequence of ExternalDataClasses registered in the
model. The method pfcExternal.ExternalDataClass.ListSlots
provide a sequence of ExternalDataSlots existing for each class.

The method pfcExternal.ExternalDataSlot.GetValue reads the


pfcExternal.ExternalData from a specified slot.

To find out a data type of a pfcExternal.ExternalData, call


pfcExternal.ExternalData.Getdiscr and then call one of these
methods to get the data, depending on the data type:

• pfcExternal.ExternalData.GetIntegerValue
• pfcExternal.ExternalData.GetDoubleValue
• pfcExternal.ExternalData.GetStringValue

External Data 27 - 5
Example Code
This example demonstrates the usage of external data in J-Link. It
provides utility methods to convert a Java hashtable
(java.util.Hashtable) to a model's external data, and to convert
external data to a hashtable.

The conversion process makes some assumptions about the type of


data to store in each data slot:

+ Short, Byte, Integer = integer external data

+ Float, Double = double external data

+ Any other Java object = String external data using the object's
toString() method.
package com.ptc.jlinkexamples;
import com.ptc.pfc.pfcExternal.*;
import com.ptc.pfc.pfcModel.*;

public class pfcExternalDataExamples


{
/* This method stores the contents of the Java hashtable
in the model's external data */
public static void StoreExternalDataHashtable(java.util.Hashtable table,
Model the_model,
String classname)
throws com.ptc.cipjava.jxthrowable
{
/* Get or create the external data class */
ExternalDataAccess access = the_model.AccessExternalData();
ExternalDataClass the_class = GetClassByName (access, classname);
if (the_class == null)
{
the_class = access.CreateClass (classname);
}

/* Loop on all keys in the hashtable */


java.util.Enumeration keys = table.keys();
while (keys.hasMoreElements())
{
Object key = keys.nextElement();
Object value;
ExternalData data; /* The external data (int, double, string).
*/

/* Class names must be Strings */


if (!(key instanceof String))
continue;

value = table.get (key);

27 - 6 J-Link User’s Guide


if (value instanceof Short || value instanceof Byte ||
value instanceof Integer)
{
int int_value = ((Number)value).intValue();
data = pfcExternal.CreateIntExternalData (int_value);
}
else if (value instanceof Float || value instanceof Double)
{
double dbl_value = ((Number)value).doubleValue();
data = pfcExternal.CreateDoubleExternalData (dbl_value);

External Data
}
else
{
/* If value is a String, toString() returns its value.
Else, value becomes the String representation of the
Object.*/
String str_value = value.toString();
data = pfcExternal.CreateStringExternalData (str_value);
}

/* Get or create the slot and assign the value */


ExternalDataSlot the_slot = GetSlotByName (the_class,
(String)key);
if (the_slot == null)
the_slot = the_class.CreateSlot ((String)key);
the_slot.SetValue (data);
}

/* Store the external data changes */


the_model.Save();

return;
}

/* This method stores the contents of the hashtable in the


model's external data */
public static java.util.Hashtable
RetrieveExternalDataHashtable (Model the_model, String classname)
throws com.ptc.cipjava.jxthrowable
{
/* Find the external data class */
java.util.Hashtable ret = new java.util.Hashtable();
ExternalDataAccess access = the_model.AccessExternalData();
ExternalDataClass the_class = GetClassByName (access, classname);

if (the_class != null)
{
ExternalDataSlots slots = the_class.ListSlots();

for (int i = 0; i< slots.getarraysize(); i++)


{

External Data 27 - 7
Object value = null; /* Holder for slot value */
ExternalDataSlot the_slot = slots.get(i);

/* Assign the value to a Java object */


ExternalData data = the_slot.GetValue();
switch (data.Getdiscr().getValue())
{
case ExternalDataType._EXTDATA_STRING:
{
value = (Object)data.GetStringValue();
break;
}
case ExternalDataType._EXTDATA_INTEGER:
{
value = (Object) new Integer (data.GetIntegerValue());
break;
}
case ExternalDataType._EXTDATA_DOUBLE:
{
value = (Object) new Double (data.GetDoubleValue());
break;
}
}
ret.put (the_slot.GetName(), value);
}
}
/* Returns the filled hashtable, or an empty one if class doesn't
exist*/
return ret;
}

/* This utility method returns a class, given its name,


or null if not found */
public static ExternalDataClass GetClassByName(ExternalDataAccess
the_access,
String name)
throws com.ptc.cipjava.jxthrowable
{
ExternalDataClasses classes = the_access.ListClasses();

for (int i = 0; i < classes.getarraysize(); i++)


{
ExternalDataClass the_class = classes.get(i);
if (the_class.GetName().equals (name))
return the_class;
}
/* Class not found */
return null;
}

27 - 8 J-Link User’s Guide


/* This utility method returns a slot, given its name,
or null if not found */
public static ExternalDataSlot GetSlotByName (ExternalDataClass
the_class,
String name)
throws com.ptc.cipjava.jxthrowable
{
ExternalDataSlots slots = the_class.ListSlots();

for (int i = 0; i < slots.getarraysize(); i++)

External Data
{
ExternalDataSlot the_slot = slots.get(i);
if (the_slot.GetName().equals (name))
return the_slot;
}
/* Slot not found */
return null;
}

Exceptions
Most exceptions thrown by external data methods in J-Link extend
pfcExceptions.XExternalDataError, which is a subclass of
pfcExceptions.XToolkitError.

An additional exception thrown by external data methods is


pfcExceptions.XBadExternalData. This exception signals an
error accessing data. For example, external data access might have
been terminated or the model might contain stream data from
Pro/TOOLKIT.

The following table lists these exceptions.

Exception Cause
pfcXExternalDataInvalidObject Generated when a model or class is
invalid.
pfcXExternalDataClassOrSlotExists Generated when creating a class or
slot and the proposed class or slot
already exists.
pfcXExternalDataNamesTooLong Generated when a class or slot
name is too long.
pfcXExternalDataSlotNotFound Generated when a specified class or
slot does not exist.

External Data 27 - 9
Exception Cause
pfcXExternalDataEmptySlot Generated when the slot you are
attempting to read is empty.
pfcXExternalDataInvalidSlotName Generated when a specified slot
name is invalid.
pfcXBadGetExternalData Generated when you try to access an
incorrect data type in a
pfcExternal.ExternalData
object.

27 - 10 J-Link User’s Guide


28
Windchill Connectivity APIs

Pro/ENGINEER has the capability to be directly connected to


Windchill solutions, including Windchill Foundation, ProjectLink,
PDMLink, and Windchill ProductPoint servers. This access allows
users to manage and control the product data seamlessly from
within Pro/ENGINEER.

This chapter lists J-Link APIs that support Windchill servers and
server operations in a connected Pro/ENGINEER session.

Topic Page

Introduction 28 - 2
Accessing a Windchill Server from a Pro/ENGINEER Session 28 - 2
Accessing Workspaces 28 - 6
Workflow to Register a Server 28 - 8
Aliased URL 28 - 9
Server Operations 28 - 10
Utility APIs 28 - 37
Sample Batch Workflow 28 - 38

28 - 1
Introduction
The methods introduced in this chapter provide support for the
basic Windchill server operations from within Pro/ENGINEER.
With these methods, operations such as registering a Windchill
server, managing workspaces, and check in or check out of objects
will be possible via J-Link. The capabilities of these APIs are
similar to the operations available from within the Pro/ENGINEER
Wildfire client, with some restrictions.

Windchill ProductPoint does not have the concept of a workspace.


New objects are directly stored to a user-specified folder in the
Windchill ProductPoint server. New iteration of the objects are
stored in the same folder as the previous iteration. Hence some of
the APIs related to Workspace operations may not be supported for
customizations using Windchill ProductPoint.

Non-Interactive Mode Operations


Some of the APIs specified in this section operate only in batch
mode and cannot be used in the normal Pro/ENGINEER interactive
mode. This restriction is mainly centered around the J-Link
registered servers, that is, servers registered by J-Link are not
available in the Pro/ENGINEER Server Registry or in other
locations in the Pro/ENGINEER user interface such as the Folder
Navigator and embedded browser. If a J-Link customization
requires the user to have interactive access to the server, the server
must be registered via the normal Pro/ENGINEER techniques, that
is, either by entry in the Server Registry or by automatic
registration of a previously registered server.

All of these APIs are supported from a non-interactive, that is,


batch mode application or asynchronous application. For more
information about batch mode and asynchronous mode, refer to the
chapter "Asynchronous Mode".

Accessing a Windchill Server from a


Pro/ENGINEER Session
Pro/ENGINEER allows you to register Windchill servers as a
connection between the Windchill database and Pro/ENGINEER.
Although the represented Windchill database can be from
Windchill Foundation, Windchill ProjectLink,Windchill PDMLink,
or Windchill ProductPoint, all types of databases are represented in
the same way.

28 - 2 J-Link User’s Guide


You can use the following identifiers when referring to Windchill
servers in J-Link:

• Codebase URL—This is the root portion of the URL that is used


to connect to a Windchill server. For example
http://wcserver.company.com/Windchill.
• Server Alias—A server alias is used to refer to the server after
it has been registered. The alias is also used to construct paths

Connectivity APIs
to files in the server workspaces and commonspaces. The server
alias is chosen by the user or application and it need not have

Windchill
any direct relationship to the codebase URL. An alias can be
any normal name, such as my_alias.

Accessing Information Before Registering a Server


To start working with a Windchill server, you must establish a
connection by registering the server in Pro/ENGINEER. The
methods described in this section allow you to connect to a
Windchill server and access information related to the server.

Methods Introduced:

• pfcSession.BaseSession.AuthenticateBrowser
• pfcSession.BaseSession.GetServerLocation
• pfcServer.ServerLocation.GetClass
• pfcServer.ServerLocation.GetLocation
• pfcServer.ServerLocation.GetVersion
• pfcServer.ServerLocation.ListContexts
• pfcServer.ServerLocation.CollectWorkspaces
Use the method pfcSession.BaseSession.AuthenticateBrowser
to set the authentication context using a valid username and
password. A successful call to this method allows the
Pro/ENGINEER session to register with any server that accepts the
username and password combination. A successful call to this
method also ensures that an authentication dialog box does not
appear during the registration process. You can call this method
any number of times to set the authentication context for any
number of Windchill servers, provided that you register the
appropriate servers or servers immediately after setting the
context.

Windchill Connectivity APIs 28 - 3


The method pfcServer.ServerLocation.GetLocation returns a
pfcServer.ServerLocation object representing the codebase
URL for a possible server. The server may not have been registered
yet, but you can use this object and the methods it contains to
gather information about the server prior to registration.

The method pfcServer.ServerLocation.GetClass returns the


class of the server or server location. The values are:

• Windchill—Denotes either a Windchill Classic PDM server or a


Windchill PDMLink server.
• ProjectLink—Denotes Windchill ProjectLink type of servers.
• productpoint—Denotes a Windchill ProductPoint server.
The method pfcServer.ServerLocation.GetVersion returns the
version of Windchill that is configured on the server or server
location, for example, "7.0" or "8.0." This method accepts the server
codebase URL as the input.

Note: pfcServer.ServerLocation.GetVersion works only


for Windchill servers and throws the
pfcExceptions.XToolkitUnsupported exception, if
the server is not aWindchill server.
The method pfcServer.ServerLocation.ListContexts gives a list
of all the available contexts for a specified server. A context is used
to associate a workspace with a product, project, or library.

The method pfcServer.ServerLocation.CollectWorkspaces


returns the list of available workspaces for the specified server. The
workspace objects returned contain the name of each workspace
and its context.

Note: This method is not supported for Windchill


ProductPoint.

Registering and Activating a Server


The methods described in this section are restricted to the
non-interactive mode only. Refer to the section, Non-Interactive
Mode Operations, for more information.

Methods Introduced:

• pfcSession.BaseSession.RegisterServer
• pfcServer.Server.Activate
• pfcServer.Server.Unregister

28 - 4 J-Link User’s Guide


The method pfcSession.BaseSession.RegisterServer registers
the specified server with the codebase URL. A successful call to
pfcSession.BaseSession.AuthenticateBrowser with a valid
username and password is essential for
pfcSession.BaseSession.RegisterServer to register the server
without launching the authentication dialog box. Registration of
the server establishes the server alias. You must designate an
existing workspace to use when registering the server. After the

Connectivity APIs
server has been registered, you may create a new workspace.

Windchill
Note: While working with the Windchill ProductPoint server,
specify the value of the input argument
WorkspaceName as NULL for this method.
The method pfcServer.Server.Activate sets the specified server
as the active server in the Pro/ENGINEER session.

The method pfcServer.Server.Unregister unregisters the


specified server. This is similar to Server Registry>Delete
through the user interface.

Accessing Information From a Registered Server


Methods Introduced:

• pfcServer.Server.GetIsActive
• pfcServer.Server.GetAlias
• pfcServer.Server.GetContext
• pfcWPP.WPPServer.GetServerTargetfolder
• pfcWPP.WPPServer.SetServerTargetfolder
The method pfcServer.Server.GetIsActive specifies if the server
is active.

The method pfcServer.Server.GetAlias returns the alias of a


server if you specify the codebase URL.

The method pfcServer.Server.GetContext returns the active


context of the active server.

Note: This function is not supported while working with a


Windchill ProductPoint server.

Windchill Connectivity APIs 28 - 5


The method pfcWPP.WPPServer.GetServerTargetfolder
returns a location on the Windchill ProductPoint server where you
can save new product items. Specify the location of the target folder
on the Windchill ProductPoint server using the method
pfcWPP.WPPServer.SetServerTargetfolder. These methods
are applicable only when working with a Windchill ProductPoint
server.

Information on Servers in Session


Methods Introduced:

• pfcSession.BaseSession.GetActiveServer
• pfcSession.BaseSession.GetServerByAlias
• pfcSession.BaseSession.GetServerByUrl
• pfcSession.BaseSession.ListServers
The method pfcSession.BaseSession.GetActiveServer returns
returns the active server handle.

The method pfcSession.BaseSession.GetServerByAlias returns


the handle to the server matching the given server alias, if it exists
in session.

The method pfcSession.BaseSession.GetServerByUrl returns


the handle to the server matching the given server URL and
workspace name, if it exists in session.

The method pfcSession.BaseSession.ListServers returns a list


of servers registered in this session.

Accessing Workspaces
For every workspace, a new distinct storage location is maintained
in the user’s personal folder on the server (server-side workspace)
and on the client (client-side workspace cache). Together, the
server-side workspace and the client-side workspace cache make up
the workspace.

Note: Windchill ProductPoint does not have the concept of a


workspace or active workspace. Therefore, many
methods in this section are not applicable for this
product.

28 - 6 J-Link User’s Guide


Methods Introduced:

• pfcServer.pfcServer.WorkspaceDefinition_Create
• pfcServer.WorkspaceDefinition.GetWorkspaceName
• pfcServer.WorkspaceDefinition.GetWorkspaceContext
• pfcServer.WorkspaceDefinition.SetWorkspaceName
• pfcServer.WorkspaceDefinition.SetWorkspaceContext

Connectivity APIs
The interface pfcServer.WorkspaceDefinition contains the

Windchill
name and context of the workspace. The method
pfcServer.ServerLocation.CollectWorkspaces returns an
array of workspace data. Workspace data is also required for the
method pfcServer.Server.CreateWorkspace to create a
workspace with a given name and a specific context.

The method
pfcServer.pfcServer.WorkspaceDefinition_Create creates a
new workspace definition object suitable for use when creating a
new workspace on the server.

The method
pfcServer.WorkspaceDefinition.GetWorkspaceName
retrieves the name of the workspace.

The method
pfcServer.WorkspaceDefinition.GetWorkspaceContext
retrieves the context of the workspace.

The method
pfcServer.WorkspaceDefinition.SetWorkspaceName sets the
name of the workspace.

The method
pfcServer.WorkspaceDefinition.SetWorkspaceContext sets
the context of the workspace.

Creating and Modifying the Workspace


Methods Introduced:

• pfcServer.Server.CreateWorkspace
• pfcServer.Server.GetActiveWorkspace
• pfcServer.Server.SetActiveWorkspace
• pfcServer.ServerLocation.DeleteWorkspace

Windchill Connectivity APIs 28 - 7


All methods described in this section, except
pfcServer.Server.GetActiveWorkspace, are permitted only in
the non-interactive mode. Refer to the section, Non-Interactive
Mode Operations, for more information.

The method pfcServer.Server.CreateWorkspace creates and


activates a new workspace.

The method pfcServer.Server.GetActiveWorkspace retrieves


the name of the active workspace.

The method pfcServer.Server.SetActiveWorkspace sets a


specified workspace as an active workspace.

The method pfcServer.ServerLocation.DeleteWorkspace


deletes the specified workspace. The method deletes the workspace
only if the following conditions are met:

• The workspace is not the active workspace.


• The workspace does not contain any checked out objects.
Use one of the following techniques to delete an active workspace:

• Make the required workspace inactive using


pfcServer.Server.SetActiveWorkspace with the name of
some other workspace and then call
pfcServer.ServerLocation.DeleteWorkspace.
• Unregister the server using pfcServer.Server.Unregister
and delete the workspace.

Workflow to Register a Server


To Register a Server with an Existing Workspace
Perform the following steps to register a Windchill server with an
existing workspace:

1. Set the appropriate authentication context using the method


pfcSession.BaseSession.AuthenticateBrowser with a valid
username and password.
2. Look up the list of workspaces using the method
pfcServer.ServerLocation.CollectWorkspaces. If you
already know the name of the workspace on the server, then
ignore this step.

28 - 8 J-Link User’s Guide


3. Register the workspace using the method
pfcSession.BaseSession.RegisterServer with an existing
workspace name on the server.
4. Activate the server using the method
pfcServer.Server.Activate.

To Register a Server with a New Workspace

Connectivity APIs
Perform the following steps to register a Windchill server with a
new workspace:

Windchill
1. Perform steps 1 to 4 in the preceding section to register the
Windchill server with an existing workspace.
2. Use the method pfcServer.ServerLocation.ListContexts to
choose the required context for the server.
3. Create a new workspace with the required context using the
method pfcServer.Server.CreateWorkspace. This method
automatically makes the created workspace active.
Note: You can create a workspace only after the server is
registered.

Aliased URL
An aliased URL serves as a handle to the server objects. You can
access the server objects in the commonspace (shared folders) and
the workspace using an aliased URL. An aliased URL is a unique
identifier for the server object and its format is as follows:

• Object in workspace has a prefix wtws


wtws://<server_alias>/<workspace_name>/<object_se
rver_name>
where <object_server_name> includes
<object_name>.<object_extension>
For example,
wtws://my_server/my_workspace/abcd.prt,
wtws://my_server/my_workspace/intf_file.igs
where
<server_alias> is my_server
<workspace_name> is my_workspace
• Object in commonspace has a prefix wtpub

Windchill Connectivity APIs 28 - 9


wtpub://<server_alias>/<folder_location>/<object_
server_name>
For example,
wtpub://my_server/path/to/cs_folder/abcd.prt
where
<server_alias> is my_server
<folder_location> is path/to/cs_folder
Note:
• object_server_name must be in lowercase.
• The APIs are case-sensitive to the aliased URL.
• <object_extension> should not contain Pro/ENGINEER
versions, for example, .1 or .2, and so on.
• For Windchill ProductPoint servers, you can specify a large
number of URL variations as long as the base server URL is
included. For example,
– wpp://<Server_Alias>/ProdA/ProENGINEER/Document/
jan.prt
– <Server_Alias>/ProdA/ProENGINEER/Documents/jan.p
rt
You can also specify only the part name and the object will be
accessed from the server, if the server is the default location
being explored.

Server Operations
After registering the Windchill server with Pro/ENGINEER, you
can start accessing the data on the Windchill servers. The
Pro/ENGINEER interaction with Windchill servers leverages the
following locations:

• Commonspace (Shared folders)


• Workspace (Server-side workspace)
• Workspace local cache (Client-side workspace)
• Pro/ENGINEER session
• Local disk

28 - 10 J-Link User’s Guide


The methods described in this section enable you to perform the
basic server operations. The following illustration shows how data
is transferred among these locations.

Connectivity APIs
Windchill
Save
Methods Introduced:

• pfcModel.Model.Save
• pfcWPP.pfcWPP.ServerSynchronizeConflict_Create
• pfcWPP.WPPServer.SynchronizeServer
• pfcWPP.ServerSynchronizeConflict.GetDescription
• pfcWPP.WPPServer.GetServerSynchronizationState

Windchill Connectivity APIs 28 - 11


The method pfcModel.Model.Save stores the object from the
session in the local workspace cache, when a server is active. For
Windchill ProductPoint servers, this method saves an existing
model to the location from where it was retrieved. To save a new
object to a specified location on the ProductPoint server, first use
the method pfcWPP.WPPServer.SetServerTargetfolder to set
the target folder location on the server and then call the method
pfcModel.Model.Save. If you do not set the target folder location,
the method pfcModel.Model.Save saves the new objects to the
top-level folder of the active product or context.

The method
pfcWPP.pfcWPP.ServerSynchronizeConflict_Create creates
the ServerSynchronizeConflicts object containing the
description of the conflicts encountered during server
synchronization.

The method pfcWPP.WPPServer.SynchronizeServer


synchronizes the objects in the local cache with the contents in the
Windchill ProductPoint server. Specify NULL as the value of the
input synchronization options. The method returns the
synchronization conflict object created by the method
pfcWPP.pfcWPP.ServerSynchronizeConflict_Create. Use the
method pfcWPP.ServerSynchronizeConflict.GetDescription
to access the description of the synchronization conflict.

The method
pfcWPP.WPPServer.GetServerSynchronizationState
specifies if the contents of the Windchill ProductPoint server are
synchronized with the local cache. This method returns true if the
server is synchronized, and false, if otherwise.

Upload
An upload transfers Pro/ENGINEER files and any other
dependencies from the local workspace cache to the server-side
workspace.

Methods Introduced:

• pfcServer.Server.UploadObjects
• pfcServer.Server.UploadObjectsWithOptions
• pfcServer.pfcServer.UploadOptions_Create

28 - 12 J-Link User’s Guide


The method pfcServer.Server.UploadObjects uploads the object
to the workspace. The object to be uploaded must be present in the
current Pro/ENGINEER session. You must save the object to the
workspace using pfcModel.Model.Save, or import it into the
workspace using pfcSession.BaseSession.ImportToCurrentWS
before attempting to upload it.

The method pfcServer.Server.UploadObjectsWithOptions


uploads objects to the workspace using the options specified in the

Connectivity APIs
pfcServer.UploadOptions interface. These options allow you to

Windchill
upload the entire workspace, auto-resolve missing references, and
indicate the target folder location for the new content during the
upload. You must save the object to the workspace using
pfcModel.Model.Save, or import it to the workspace using
pfcSession.BaseSession.ImportToCurrentWS before
attempting to upload it.

Create the pfcServer.UploadOptions object using the method


pfcServer.pfcServer.UploadOptions_Create.

The methods available for setting the upload options are described
in the following section.

CheckIn
After you have finished working on objects in your workspace, you
can share the design changes with other users. The checkin
operation copies the information and files associated with all
changed objects from the workspace to the Windchill database.

Note: The methods described in this section are not applicable


to Windchill ProductPoint server operations.

Methods Introduced:

• pfcServer.Server.CheckinObjects
• pfcServer.pfcServer.CheckinOptions_Create
• pfcServer.UploadBaseOptions.SetDefaultFolder
• pfcServer.UploadBaseOptions.SetNonDefaultFolderAssignments
• pfcServer.UploadBaseOptions.SetAutoresolveOption
• pfcServer.CheckinOptions.SetBaselineName
• pfcServer.CheckinOptions.SetBaselineNumber
• pfcServer.CheckinOptions.SetBaselineLocation

Windchill Connectivity APIs 28 - 13


• pfcServer.CheckinOptions.GetBaselineLifecycle
• pfcServer.CheckinOptions.SetKeepCheckedout
The method pfcServer.Server.CheckinObjects checks in an
object into the database. The object to be checked in must be
present in the current Pro/ENGINEER session. Changes made to
the object are not included unless you save the object to the
workspace using the method pfcModel.Model.Save before you
check it in.

If you pass NULL as the value of the options parameter, the checkin
operation is similar to the Auto Check-In option in
Pro/ENGINEER. For more details on Auto Check-In, refer to the
online help for Pro/ENGINEER.

Use the method pfcServer.pfcServer.CheckinOptions_Create


to create a new CheckinOptions object.

By using an appropriately constructed options argument, you can


control the checkin operation. Use the APIs listed above to access
and modify the checkin options. The checkin options are as follows:

• DefaultFolder—Specifies the default folder location on the


server for the automatic checkin operation.
• NonDefaultFolderAssignment—Specifies the folder location on
the server to which the objects will be checked in.
• AutoresolveOption—Specifies the option used for auto-resolving
missing references. These options are defined in the
ServerAutoresolveOption class, and are as follows:
– SERVER_DONT_AUTORESOLVE—Model references
missing from the workspace are not automatically resolved.
This may result in a conflict upon checkin. This option is
used by default.
– SERVER_AUTORESOLVE_IGNORE—Missing references
are automatically resolved by ignoring them.
– SERVER_AUTORESOLVE_UPDATE_IGNORE—
Missing references are automatically resolved by updating
them in the database and ignoring them if not found.
• Baseline—Specifies the baseline information for the objects
upon checkin. The baseline information for a checkin operation
is as follows:
– BaselineName—Specifies the name of the baseline.
– BaselineNumber—Specifies the number of the baseline.

28 - 14 J-Link User’s Guide


The default format for the baseline name and baseline number
is “Username + time (GMT) in milliseconds”
– BaselineLocation—Specifies the location of the baseline.
– BaselineLifecycle—Specifies the name of the lifecycle.
• KeepCheckedout—If the value specified is true, then the
contents of the selected object are checked into the Windchill
server and automatically checked out again for further

Connectivity APIs
modification.

Windchill
Retrieval
Standard J-Link provides several methods that are capable of
retrieving models. When using these methods with Windchill
servers, remember that these methods do not check out the object to
allow modifications.

Methods Introduced:

• pfcSession.BaseSession.RetrieveModel
• pfcSession.BaseSession.RetrieveModelWithOpts
• pfcSession.BaseSession.OpenFile
The methods pfcSession.BaseSession.RetrieveModel,
pfcSession.BaseSession.RetrieveModelWithOpts, and
pfcSession.BaseSession.OpenFile load an object into a session
given its name and type. The methods search for the object in the
active workspace, the local directory, and any other paths specified
by the search_path configuration option. For Windchill
ProductPoint servers, the method
pfcSession.BaseSession.RetrieveModelWithOpts supports the
instance<generic> notation for the name of the object.

Checkout and Download


To modify an object from the commonspace, you must check out the
object. The process of checking out communicates your intention to
modify a design to the Windchill server. The object in the database
is locked, so that other users can obtain read-only copies of the
object, and are prevented from modifying the object while you have
checked it out.

Checkout is often accompanied by a download action, where the


objects are brought from the server-side workspace to the local
workspace cache. In J-Link, both operations are covered by the
same set of methods.

Windchill Connectivity APIs 28 - 15


Note: The methods described in this section are not applicable
to Windchill ProductPoint server operations.

Methods Introduced:

• pfcServer.Server.CheckoutObjects
• pfcServer.Server.CheckoutMultipleObjects
• pfcServer.pfcServer.CheckoutOptions_Create
• pfcServer.CheckoutOptions.SetDependency
• pfcServer.CheckoutOptions.SetSelectedIncludes
• pfcServer.CheckoutOptions.SetIncludeInstances
• pfcServer.CheckoutOptions.SetVersion
• pfcServer.CheckoutOptions.SetDownload
• pfcServer.CheckoutOptions.SetReadonly
The method pfcServer.Server.CheckoutObjects checks out and
optionally downloads the object to the workspace based on the
configuration specifications of the workspace. The input arguments
of this method are as follows:

• Mdl—Specifies the object to be checked out. This is applicable if


the model has already been retrieved without checking it out.
• File—Specifies the top-level object to be checked out.
• Checkout—The checkout flag. If you specify the value of this
argument as true, the selected object is checked out.
Otherwise, the object is downloaded without being checked out.
The download action enables you to bring read-only copies of
objects into your workspace. This allows you to examine the
object without locking it.
• Options—Specifies the checkout options object. If you pass
NULL as the value of this argument, then the default
Pro/ENGINEER checkout rules apply. Use the method
pfcServer.pfcServer.CheckoutOptions_Create to create a
new CheckoutOptions object.
Use the method pfcServer.Server.CheckoutMultipleObjects to
check out and download multiple objects to the workspace based on
the configuration specifications of the workspace. This method
takes the same input arguments as listed above, except for Mdl and
File. Instead it takes the argument Files that specifies the sequence
of the objects to check out or download.

28 - 16 J-Link User’s Guide


By using an appropriately constructed options argument in the
above functions, you can control the checkout operation. Use the
APIs listed above to modify the checkout options. The checkout
options are as follows:

• Dependency—Specifies the dependency rule used while


checking out dependents of the object selected for checkout. The
types of dependencies given by the ServerDependency class
are as follows:

Connectivity APIs
– SERVER_DEPENDENCY_ALL—All objects that are

Windchill
dependent on the selected object are checked out.
– SERVER_DEPENDENCY_REQUIRED—All models
required to successfully retrieve the originally selected
model from the CAD application are selected for checkout.
– SERVER_DEPENDENCY_NONE—None of the dependent
objects are checked out.
• IncludeInstances—Specifies the rule for including instances
from the family table during checkout. The type of instances
given by the ServerIncludeInstances class are as follows:
– SERVER_INCLUDE_ALL—All the instances of the
selected object are checked out.
– SERVER_INCLUDE_SELECTED—The application can
select the family table instance members to be included
during checkout.
– SERVER_INCLUDE_NONE—No additional instances from
the family table are added to the object list.
• SelectedIncludes—Specifies the sequence of URLs to the
selected instances, if IncludeInstances is of type
SERVER_INCLUDE_SELECTED.
• Version—Specifies the version of the checked out object. If this
value is set to NULL, the object is checked out according to the
current workspace configuration.
• Download—Specifies the checkout type as download or link.
The value download specifies that the object content is
downloaded and checked out, while link specifies that only the
metadata is downloaded and checked out.
• Readonly—Specifies the checkout type as a read-only checkout.
This option is applicable only if the checkout type is link.

Windchill Connectivity APIs 28 - 17


The following truth table explains the dependencies of the different
control factors in the method
pfcServer.Server.CheckoutObjects and the effect of different
combinations on the end result.

Argument pfcServer. pfcServer. Result


checkout CheckoutOptio CheckoutOptio
in ns.SetDownload ns.SetReadonly
pfcServer.Server.
CheckoutObjects
true true NA Object is checked
out and its
content is
downloaded.
true true NA Object is checked
out but content is
not downloaded.
false NA true Object is
downloaded
without checkout.
false NA false Not supported

Undo Checkout
Method Introduced:

• pfcServer.Server.UndoCheckout
Use the method pfcServer.Server.UndoCheckout to undo a
checkout of the specified object. When you undo a checkout, the
changes that you have made to the content and metadata of the
object are discarded and the content, as stored in the server, is
downloaded to the workspace. This method is applicable only for
the model in the active Pro/ENGINEER session.

Import and Export


J-Link provides you with the capability of transferring specified
objects to and from a workspace. Import and export operations
must take place in a session with no models. An import operation
transfers a file from the local disk to the workspace.

Methods Introduced:

• pfcWPP.WPPServer.SetWsimpexFolderoption
• pfcSession.BaseSession.ExportFromCurrentWS

28 - 18 J-Link User’s Guide


• pfcSession.BaseSession.ImportToCurrentWS
• pfcSession.WSImportExportMessage.GetDescription
• pfcSession.WSImportExportMessage.GetFileName
• pfcSession.WSImportExportMessage.GetMessageType
• pfcSession.WSImportExportMessage.GetResolution
• pfcSession.WSImportExportMessage.GetSucceeded

Connectivity APIs
• pfcSession.BaseSession.SetWSExportOptions

Windchill
• pfcSession.pfcSession.WSExportOptions_Create
• pfcSession.WSExportOptions.SetIncludeSecondaryContent
The method pfcWPP.WPPServer.SetWsimpexFolderoption
sets the target folder to import data or the source folder to the
Windchill ProductPoint servers or to export data from these
servers. Set the target folder location using this method before calls
to pfcSession.BaseSession.ExportFromCurrentWS and
pfcSession.BaseSession.ImportToCurrentWS. This function is
used for Windchill ProductPoint servers only.

The method pfcSession.BaseSession.ExportFromCurrentWS


exports the specified objects from the current workspace to a disk in
a linked session of Pro/ENGINEER. For Windchill ProductPoint
servers this function exports files from the specified source folder
location on the server to a disk.

The method pfcSession.BaseSession.ImportToCurrentWS


imports the specified objects from a disk to the current workspace
in a linked session of Pro/ENGINEER. For Windchill ProductPoint
servers this method copies files from the local disk to the specified
target folder location on the server.

Both pfcSession.BaseSession.ExportFromCurrentWS and


pfcSession.BaseSession.ImportToCurrentWS allow you to
specify a dependency criterion to process the following items:

• All external dependencies


• Only required dependencies
• No external dependencies

Windchill Connectivity APIs 28 - 19


Both pfcSession.BaseSession.ExportFromCurrentWS and
pfcSession.BaseSession.ImportToCurrentWS return the
messages generated during the export or import operation in the
form of the pfcSession.WSImportExportMessages object. Use
the APIs listed above to access the contents of a message. The
message specified by the pfcSession.WSImportExportMessage
object contains the following items:

• Description—Specifies the description of the problem or the


message information.
• FileName—Specifies the object name or the name of the object
path.
• MessageType—Specifies the severity of the message in the form
of the WSImportExportMessageType class. The severity is
one of the following types:
– WSIMPEX_MSG_INFO—Specifies an informational type of
message.
– WSIMPEX_MSG_WARNING—Specifies a low severity
problem that can be resolved according to the configured
rules.
– WSIMPEX_MSG_CONFLICT—Specifies a conflict that can
be overridden.
– WSIMPEX_MSG_ERROR—Specifies a conflict that cannot
be overridden or a serious problem that prevents processing
of an object.
• Resolution—Specifies the resolution applied to resolve a conflict
that can be overridden. This is applicable when the message is
of the type WSIMPEX_MSG_CONFLICT.
• Succeeded—Determines whether the resolution succeeded or
not. This is applicable when the message is of the type
WSIMPEX_MSG_CONFLICT.
The method pfcSession.BaseSession.SetWSExportOptions
sets the export options used while exporting the objects from a
workspace in the form of the pfcSession.WSExportOptions
object. Create this object using the method
pfcSession.pfcSession.WSExportOptions_Create. The export
options are as follows:

– Include Secondary Content—Indicates whether or not to


include secondary content while exporting the primary
Pro/ENGINEER model files. Use the method
pfcSession.WSExportOptions.SetIncludeSecondaryC
ontent to set this option.

28 - 20 J-Link User’s Guide


File Copy
J-Link provides you with the capability of copying a file from the
workspace or target folder to a location on the disk and vice-versa.

Methods Introduced:

• pfcSession.BaseSession.CopyFileToWS

Connectivity APIs
• pfcSession.BaseSession.CopyFileFromWS
Use the method pfcSession.BaseSession.CopyFileToWS to copy

Windchill
a file from the disk to the workspace. The file can optionally be
added as secondary content to a given workspace file. For Windchill
ProductPoint servers, use this method to copy a viewable file from
disk as a new item in the target folder specified by the method
pfcWPP.WPPServer.SetServerTargetfolder. If the viewable
file is added as secondary content, a dependency is created between
the Pro/ENGINEER model and the viewable file.

Use the method pfcSession.BaseSession.CopyFileFromWS to


copy a file from the workspace to a location on disk. For Windchill
ProductPoint servers, use this method to copy a single file from the
current target folder specified by the method
pfcWPP.WPPServer.SetServerTargetfolder to the local disk.

When importing or exporting Pro/ENGINEER models, PTC


recommends that you use methods
pfcSession.BaseSession.ImportToCurrentWS and
pfcSession.BaseSession.ExportFromCurrentWS, respectively,
to perform the import or export operation. Methods that copy
individual files do not traverse Pro/ENGINEER model
dependencies, and therefore do not copy a fully retrievable set of
models at the same time.
Additionally, only the methods
pfcSession.BaseSession.ImportToCurrentWS and
pfcSession.BaseSession.ExportFromCurrentWS provide full
metadata exchange and support. That means
pfcSession.BaseSession.ImportToCurrentWS can
communicate all the Pro/ENGINEER designated parameters,
dependencies, and family table information to a PDM system while
pfcSession.BaseSession.ExportFromCurrentWS can update
exported Pro/ENGINEER data with PDM system changes to
designated and system parameters, dependencies, and family table
information. Hence PTC recommends the use of
pfcSession.BaseSession.CopyFileToWS and
pfcSession.BaseSession.CopyFileFromWS to process only
non-Pro/ENGINEER files.

Windchill Connectivity APIs 28 - 21


Server Object Status
Methods Introduced:

• pfcServer.Server.IsObjectCheckedOut
• pfcServer.Server.IsObjectModified
The methods described in this section verify the current status of
the object in the workspace. The method
pfcServer.Server.IsObjectCheckedOut specifies whether the
object is checked out for modification.

The method pfcServer.Server.IsObjectModified specifies


whether the object has been modified since checkout. This method
returns the value false if newly created objects have not been
uploaded.

Note: These methods are not applicable for Windchill


ProductPoint server operations.

Object Lock Status


In comparison with other Windchill servers, Windchill
ProductPoint does not have the concept of a workspace. This means
that as soon as changes are saved to the server, they are visible to
all users with access to work-in-progress versions. The functions
described in this section enable you to establish an exclusive lock
when modifying a server-managed part in Pro/ENGINEER. The
functions described in this section are applicable only for Windchill
ProductPoint server operations.

Methods Introduced:

• pfcWPP.WPPServer.LockServerObjects
• pfcWPP.pfcWPP.ServerLockConflict_Create
• pfcWPP.ServerLockConflict.GetObjectName
• pfcWPP.ServerLockConflict.GetConflictMessage
• pfcWPP.WPPServer.GetServerObjectLockStatus
• pfcWPP.WPPServer.GetServerObjectsLockStatus
• pfcWPP.pfcWPP.ServerLockStat_Create
• pfcWPP.ServerLockStat.GetObjectName
• pfcWPP.ServerLockStat.GetStatus

28 - 22 J-Link User’s Guide


• pfcWPP.ServerLockStat.GetStatusMessage
• pfcWPP.WPPServer.UnlockServerObjects
The method pfcWPP.WPPServer.LockServerObjects
establishes an explicit lock on the specified objects on the server.
Specify the full path, name, and extension for the input objects.
This method returns the pfcServerLockConflict object that
contains the details of conflicts, if any, that occurred during the lock

Connectivity APIs
operation. Use the method
pfcWPP.ServerLockConflict.GetObjectName to access the

Windchill
name of the object for which the lock conflict occurred. Use the
method pfcWPP.ServerLockConflict.GetConflictMessage to
get details of the lock conflict.

The method pfcWPP.WPPServer.GetServerObjectLockStatus


checks the lock status of the specified object on the Windchill
ProductPoint server. Specify the full path, name, and extension for
the input object. The method returns the pfcServerLockStat
object that contains information regarding the lock status.

The method
pfcWPP.WPPServer.GetServerObjectsLockStatus checks the
lock status of a set of objects on the Windchill ProductPoint server.
Specify the full path, name, and extension for the input objects. The
method returns an array of pfcServerLockStat objects that
contain information regarding the lock status of the input objects.

Use the method pfcWPP.ServerLockStat.GetObjectName to


access the name of the object, including the extension, for which the
lock status is described.

Use the method pfcWPP.ServerLockStat.GetStatus to access


the status of the lock on the object on the server.

• PRO_OBJ_LOCK_STAT_UNSET—Specifies that no lock has


been applied on the object.
• PRO_OBJ_LOCK_STAT_HARDLOCK—Specifies that objects
are locked and that the current user is not the owner of the
locks. Therefore, this user cannot modify or release the lock.
• PRO_OBJ_LOCK_STAT_SOFTLOCK—Specifies that the
objects are locked and the current user is the owner of the
locks. Therefore, this user can release the lock.
• PRO_OBJ_LOCK_STAT_UNLOCKED—Specifies that the
explicit or implicit lock has been removed from the object and it
is available for editing.

Windchill Connectivity APIs 28 - 23


Use the method pfcWPP.ServerLockStat.GetStatusMessage to
access the status of the object on the server. It provides the name of
the user who locked the object and the time of locking.

The method pfcWPP.WPPServer.UnlockServerObjects unlocks


a set of objects that have been explicitly locked on the product
server. This method returns the pfcServerLockConflict object
that contains the details of conflicts, if any, that occurred during
the unlock operation.

Delete Objects
Method Introduced:

• pfcServer.Server.RemoveObjects
The method pfcServer.Server.RemoveObjects deletes the array
of objects from the workspace. When passed with the ModelNames
array as NULL, this method removes all the objects in the active
workspace.

Conflicts During Server Operations


Method Introduced:

• pfcExceptions.XToolkitCheckoutConflict.GetConflictDescription
An exception is provided to capture the error condition while
performing the following server operations using the specified APIs:

Operation API
Checkin an object or workspace pfcServer.Server.CheckinObjects
Checkout an object pfcServer.Server.CheckoutObjects
Undo checkout of an object pfcServer.Server.UndoCheckout
Upload object pfcServer.Server.UploadObjects
Download object pfcServer.Server.CheckoutObjects (with
download as true)
Delete workspace pfcServer.ServerLocation.DeleteWorkspace
Remove object pfcServer.Server.RemoveObjects

28 - 24 J-Link User’s Guide


These APIs throw a common exception
XToolkitCheckoutConflict if an error is encountered during
server operations. Use the method
pfcExceptions.XToolkitCheckoutConflict.GetConflictDescri
ption to extract details of the error condition. This description is
similar to the description displayed by the Pro/ENGINEER HTML
user interface in the conflict report.

Connectivity APIs
Example Code: Server APIs

Windchill
The following code demonstrates the implementation of the
Windchill server APIs described in the previous sections.
package com.ptc.jlinkexamples;

import com.ptc.cipjava.*;
import com.ptc.pfc.pfcServer.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcModel2D.*;
import com.ptc.pfc.pfcModelItem.ParamValue;
import com.ptc.pfc.pfcModelItem.Parameter;
import com.ptc.pfc.pfcModelItem.pfcModelItem;
import com.ptc.pfc.pfcExport.*;
import com.ptc.pfc.pfcFamily.FamColParam;
import com.ptc.pfc.pfcFamily.FamilyMember;
import com.ptc.pfc.pfcFamily.FamilyTableRow;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcComponentFeat.*;
import com.ptc.pfc.pfcExceptions.*;

import java.util.logging.*;
import java.io.IOException;

import java.util.*;

public class pfcServerExamples


{
protected Logger logger;
private FileHandler handler;

/**
* The Pro/ENGINEER session.
*/
protected Session session;

/**
* The active server for the session.
*/

Windchill Connectivity APIs 28 - 25


private Server activeServer = null;

/**
* The workspace path for the server (needed to copy content to this
location).
*/
private String workspacePath = null;

/**
* Indicator for whether the session is interactive or not.
*/
private boolean interactiveSession = true;

/**
* Message file name for information to be shown to the user.
*/
private static final String messageFile = "jlexamples.txt";

private static final String locationParamName = "PTC_WM_LOCATION";

private static final String instanceParamName = "PROTK_INSTANCE_PARAM";

private static final String versionParamName = "PTC_WM_VERSION";

/**
* Builds a workspace path String from the given server and workspace
*/
protected static String makeWSPath (Server server, String workspaceName)
throws jxthrowable
{
return ("wtws://"+server.GetAlias()+"/"+workspaceName);
}

/**
* Builds a ProjectLink path String from the given server/context
*/
protected String makeProjectLinkFolder (Server server, String path)
throws jxthrowable
{
String serverClass = server.GetClass();

if (serverClass.equals ("ProjectLink"))
{
return ("wtpub://"+server.GetAlias()+"/"+path);
}
else
{
return
("wtpub://"+server.GetAlias()+"/Projects/"+server.GetContext()+"/"+path);
}
}

28 - 26 J-Link User’s Guide


/**
* Builds a server path String from the given server and folderpath
*/
protected String makeServerFolder (Server server, String path)
throws jxthrowable
{
return ("wtpub://"+server.GetAlias()+"/"+path);
}

Connectivity APIs
/**

Windchill
* Outputs details on a checkout or other server error.
*/
protected void handleConflict (XToolkitCheckoutConflict xtcc)
{
try
{
String conflictDescription = xtcc.GetConflictDescription();

logger.log(Level.WARNING, "Conflict occurred: ", xtcc);


logger.log(Level.WARNING, "Conflict details: " + conflictDescription);

if (interactiveSession)
{
stringseq messageArguments = stringseq.create();
messageArguments.set(0, conflictDescription);
session.UIDisplayLocalizedMessage(messageFile, "JLServerEX Conflict",
messageArguments);
}
else
{
System.out.println ("Conflict occurred: " + xtcc);
}
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

public void addInstance ()


{
try
{
String targetFolder = null;

/*--------------------------------------------------------------------*\
Check if the current object is modifiable.
\*--------------------------------------------------------------------*/

Windchill Connectivity APIs 28 - 27


Server activeServer = session.GetActiveServer();

Model model = session.GetCurrentModel();

Parameter locationParam = model.GetParam(locationParamName);

if (locationParam != null)
{
String locationParamValue = locationParam.GetValue().GetStringValue();

if (locationParamValue.length() > 0)
{
targetFolder = makeServerFolder (activeServer, locationParamValue);
}
}

boolean modifiable =
activeServer.IsObjectCheckedOut(activeServer.GetActiveWorkspace(),
model.GetFileName());

if (!modifiable)
{
activeServer.CheckoutObjects(null, model.GetFileName(), true, null);
}

/*--------------------------------------------------------------------*\
Look for a parameter used by this example. If its not in the
model, create it.
\*--------------------------------------------------------------------*/
Parameter instanceParam = model.GetParam(instanceParamName);

if (instanceParam == null)
{
ParamValue instanceParamValue =
pfcModelItem.CreateStringParamValue("Generic");
instanceParam = model.CreateParam(instanceParamName, instanceParamValue);
}

/*--------------------------------------------------------------------*\
Add the parameter to the family table, if not already present.
\*--------------------------------------------------------------------*/

FamilyMember genericModel = (FamilyMember)model;

FamColParam column = genericModel.CreateParamColumn(instanceParam);


if (genericModel.GetColumn(column.GetSymbol()) == null)
genericModel.AddColumn(column, null);

/*--------------------------------------------------------------------*\
Use the version of the model to construct a unique new instance
name for this example.

28 - 28 J-Link User’s Guide


\*--------------------------------------------------------------------*/
Parameter versionParam = model.GetParam(versionParamName);

String version = versionParam.GetValue().GetStringValue();

String instanceName = model.GetInstanceName().toLowerCase() + "_" +


version.replace('.', '_');

/*--------------------------------------------------------------------*\

Connectivity APIs
Add the new instance and set the value of the example parameter
for this instance.

Windchill
\*--------------------------------------------------------------------*/

FamilyTableRow newInstance = genericModel.AddRow(instanceName, null);

ParamValue instanceValue = pfcModelItem.CreateStringParamValue("Instance


"+ version);
genericModel.SetCell(column, newInstance, instanceValue);

/*--------------------------------------------------------------------*\
Instantiate the instance. This also serves to verify the
instance, allowing it to be checked in.
\*--------------------------------------------------------------------*/

Model instance = newInstance.CreateInstance();

instance.Erase();

/*--------------------------------------------------------------------*\
Save and checkin the changed model.
\*--------------------------------------------------------------------*/
model.Save();

activeServer.CheckinObjects(model, null);
}
catch (XToolkitCheckoutConflict xtcc)
{
handleConflict (xtcc);
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
catch (Throwable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

/**
* Action for each part in the assembly. Checkout the part,

Windchill Connectivity APIs 28 - 29


* export it to IGES, and copy the result as secondary content to
* the part in the workspace.
*/
private boolean convertModelToIGES (Model model) throws jxthrowable
{
activeServer.CheckoutObjects(model, null, true, null);

ExportInstructions instrs;
GeometryFlags flags = pfcExport.GeometryFlags_Create();
flags.SetAsSolids(true);
IGES3DNewExportInstructions igesInstrs =

pfcExport.IGES3DNewExportInstructions_Create(AssemblyConfiguration.EXPORT
_ASM_SINGLE_FILE,
flags);
instrs = igesInstrs;
String outputPath = model.GetInstanceName().toLowerCase() + ".igs";

model.Export(outputPath, instrs);

session.CopyFileToWS(outputPath, workspacePath, model.GetFileName());

return true;
}

/**
* Recursive method to collect a list of distinct component parts in the
assembly
*/
private HashMap buildAssemblyPartMap (Solid solid, HashMap map) throws
jxthrowable
{
/*--------------------------------------------------------------------*\
If the part is not already in the map, add it, unless its an instance.
If its an instance, add the generic instead.
\*--------------------------------------------------------------------*/
if (solid.GetType() == ModelType.MDL_PART)
{
String genericName = solid.GetGenericName();

while (genericName != null)


{
solid = (Solid)solid.GetParent();
genericName = solid.GetGenericName();
}
String modelName = solid.GetFileName();
if (!map.containsKey(modelName))
{
map.put(modelName, solid);
}
}

28 - 30 J-Link User’s Guide


else
{
/*--------------------------------------------------------------------*\
Process all subcomponents in the assembly
\*--------------------------------------------------------------------*/
Features components = solid.ListFeaturesByType(Boolean.TRUE,
FeatureType.FEATTYPE_COMPONENT);
if (components != null)
{

Connectivity APIs
for (int i = 0; i < components.getarraysize(); i++)
{

Windchill
ComponentFeat component = (ComponentFeat)components.get(i);
ModelDescriptor descr = component.GetModelDescr();
Solid componentModel = (Solid)session.GetModelFromDescr(descr);

buildAssemblyPartMap (componentModel, map);


}
}
}
return map;
}

/**
* Add an IGES file as secondary content for each part in the assembly.
*/
public void addIGESToAllParts ()
{
/*--------------------------------------------------------------------*\
Get the target models to be processed: the active part or assembly,
or the current solid in the active drawing
\*--------------------------------------------------------------------*/
try
{
Model m = session.GetCurrentModel();

if (m.GetType() == ModelType.MDL_DRAWING)
{
Model2D m2d = (Model2D) m;

m = m2d.ListModels().get(0);
}

/*--------------------------------------------------------------------*\
Save some details about the active server to use for each visited
model.
\*--------------------------------------------------------------------*/
activeServer = session.GetActiveServer();
String workspaceName = activeServer.GetActiveWorkspace();
workspacePath = makeWSPath (activeServer, workspaceName);

/*--------------------------------------------------------------------*\

Windchill Connectivity APIs 28 - 31


Process the single part, or all displayed parts in the assembly
\*--------------------------------------------------------------------*/
if (m.GetType() == ModelType.MDL_PART)
{
convertModelToIGES (m);
}
else
{
HashMap allModels = new HashMap ();
allModels = buildAssemblyPartMap ((Solid)m, allModels);

Iterator models = allModels.values().iterator();


while (models.hasNext())
{
Model partModel = (Model)models.next();
convertModelToIGES (partModel);
}
}

/*--------------------------------------------------------------------*\
Check in all changes
\*--------------------------------------------------------------------*/
activeServer.CheckinObjects(null, null);

session.UIDisplayMessage(messageFile, "JLServerEX parts succeeded",


null);
}
catch (XToolkitCheckoutConflict xtcc)
{
handleConflict (xtcc);
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
catch (Throwable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

/**
* Add a primary content DXF file to the server (generated from the active
drawing).
*/
public void createOrUpdateDXF ()
{
/*--------------------------------------------------------------------*\
Obtain current drawing handle and export to DXF
\*--------------------------------------------------------------------*/
try

28 - 32 J-Link User’s Guide


{
activeServer = session.GetActiveServer();
String workspaceName = activeServer.GetActiveWorkspace();
workspacePath = makeWSPath (activeServer, workspaceName);

Model m = session.GetCurrentModel();

String dxfName = m.GetFullName().toLowerCase()+"_drw.dxf";

Connectivity APIs
DXFExportInstructions exportInstructions =
pfcModel.DXFExportInstructions_Create();

Windchill
m.Export(dxfName, exportInstructions);

/*--------------------------------------------------------------------*\
If the DXF file already exists in the project, check it out by its
object name.
\*--------------------------------------------------------------------*/

try
{
String dxfPath = activeServer.GetAliasedUrl(dxfName);
if (dxfPath != null)
{
activeServer.CheckoutObjects(null, dxfName, true, null);
}
}
catch (XToolkitNotFound xtnf)
{
/*--------------------------------------------------------------------*\
Ignore XToolkitNotFound as this signals that the file is not already
on the server.
\*--------------------------------------------------------------------*/
}

/*--------------------------------------------------------------------*\
Get the full disk path to the output DXF file as the source of the
File Copy operation.
\*--------------------------------------------------------------------*/
String currentDirectory = session.GetCurrentDirectory();

String diskDXFPath = currentDirectory + dxfName;

/*--------------------------------------------------------------------*\
Copy the file to the workspace as a top-level object.
\*--------------------------------------------------------------------*/
session.CopyFileToWS(diskDXFPath, workspacePath, null);

/*--------------------------------------------------------------------*\
Checkin the workspace. If the object is new, it will go to
the Plans folder.

Windchill Connectivity APIs 28 - 33


\*--------------------------------------------------------------------*/
String plansFolder = makeProjectLinkFolder (activeServer, "Plans");

CheckinOptions options = pfcServer.CheckinOptions_Create();


options.SetDefaultFolder(plansFolder);

activeServer.CheckinObjects(null, options);

session.UIDisplayMessage(messageFile, "JLServerEX DXF succeeded", null);


}
catch (XToolkitCheckoutConflict xtcc)
{
handleConflict (xtcc);
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

public void importAndCheckinModelsInteractive ()


{
try
{
/*--------------------------------------------------------------------*\
Prompt user to select folder containing models to import
\*--------------------------------------------------------------------*/
session.UIDisplayLocalizedMessage(messageFile, "JLServerEX Enter the
directory", null);

String modelsPath = session.UIReadStringMessage(Boolean.FALSE);

stringseq designModels = session.ListFiles("*.prt,*.asm",


FileListOpt.FILE_LIST_LATEST, modelsPath);

stringseq planModels = session.ListFiles("*.drw",


FileListOpt.FILE_LIST_LATEST, modelsPath);

if (designModels.getarraysize() == 0 && planModels.getarraysize() == 0)


{
stringseq texts = stringseq.create();
texts.append(modelsPath);
session.UIDisplayLocalizedMessage(messageFile, "JLServerEX No models
found", texts);
}
else
{
importAndCheckinModels (designModels, planModels);
session.UIDisplayLocalizedMessage(messageFile, "JLServerEX Import and
checkin completed", null);
}

28 - 34 J-Link User’s Guide


}
catch (XToolkitCheckoutConflict xtcc)
{
handleConflict (xtcc);
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}

Connectivity APIs
catch (Exception x)
{

Windchill
logger.log(Level.SEVERE, "Caught exception: ", x);
}
}

public void importAndCheckinModels (stringseq designModels, stringseq


planModels)
{
try
{
/*--------------------------------------------------------------------*\
Import part and assembly models.
\*--------------------------------------------------------------------*/

activeServer = session.GetActiveServer();

if (designModels != null)
{
session.ImportToCurrentWS(designModels, RelCriterion.FILE_INCLUDE_ALL);
}

String designFolder = makeProjectLinkFolder (activeServer, "Designs");

/*--------------------------------------------------------------------*\
Prepare the checkin options; by default the imported parts
and assemblies go in the "Designs" folder.
\*--------------------------------------------------------------------*/
CheckinOptions options = pfcServer.CheckinOptions_Create();
options.SetDefaultFolder(designFolder);

/*--------------------------------------------------------------------*\
Import drawing models.
\*--------------------------------------------------------------------*/
if (planModels != null)
{
session.ImportToCurrentWS(planModels, RelCriterion.FILE_INCLUDE_NONE);

/*--------------------------------------------------------------------*\
The imported drawings go in the "Plans" folder.
\*--------------------------------------------------------------------*/
String plansFolder = makeProjectLinkFolder (activeServer, "Plans");

Windchill Connectivity APIs 28 - 35


FolderAssignments assignments = FolderAssignments.create();
for (int i = 0; i < planModels.getarraysize(); i++)
{
/*--------------------------------------------------------------------*\
Each item is assigned to the checkin options using its
model name.
\*--------------------------------------------------------------------*/
String drawingPath = planModels.get(i);
String drawingName =
drawingPath.substring(drawingPath.lastIndexOf("\\")+1);

FolderAssignment assignment =
pfcServer.FolderAssignment_Create(plansFolder, drawingName);
assignments.append(assignment);
}
options.SetNonDefaultFolderAssignments(assignments);
}

/*--------------------------------------------------------------------*\
Check in the entire workspace using the options.
\*--------------------------------------------------------------------*/
activeServer.CheckinObjects(null, options);

/*--------------------------------------------------------------------*\
Clean the workspace, and free allocated memory
\*--------------------------------------------------------------------*/
activeServer.RemoveObjects(null);
}
catch (XToolkitCheckoutConflict xtcc)
{
handleConflict (xtcc);
}
catch (jxthrowable x)
{
logger.log(Level.SEVERE, "Caught exception: ", x);
}

public pfcServerExamples (Session s)


{
session = s;
try
{
handler = new FileHandler ("pfcServerExamples.log");
logger = Logger.global;
logger.addHandler(handler);
}
catch (IOException e)

28 - 36 J-Link User’s Guide


{
System.out.println ("Caught exception initializing log file: " + e);
}
}

Connectivity APIs
Utility APIs

Windchill
The methods specified in this section enable you to obtain the
handle to the server objects to access them. The handle may be the
aliased URL or the model name of the http URL. These utilities
enable the conversion of one type of handle to another.

Methods Introduced:

• pfcServer.Server.GetAliasedUrl
• pfcSession.BaseSession.GetModelNameFromAliasedUrl
• pfcSession.BaseSession.GetAliasFromAliasedUrl
• pfcSession.BaseSession.GetUrlFromAliasedUrl
The method pfcServer.Server.GetAliasedUrl enables you to
search for a server object by its name. Specify the complete
filename of the object as the input, for example, test_part.prt.
The method returns the aliased URL for a model on the server. For
more information regarding the aliased URL, refer to the section
Aliased URL. During the search operation, the workspace takes
precedence over the shared space.

You can also use this method to search for files that are not in the
Pro/ENGINEER format. For example, my_text.txt, prodev.dat,
intf_file.stp, and so on.

The method
pfcSession.BaseSession.GetModelNameFromAliasedUrl
returns the name of the object from the given aliased URL on the
server.

The method pfcSession.BaseSession.GetUrlFromAliasedUrl


converts an aliased URL to a standard URL for the objects on the
server.

For example, wtws://my_alias/Wildfire/abcd.prt is


converted to an appropriate URL on the server as
http://server.mycompany.com/Windchill.

Windchill Connectivity APIs 28 - 37


For Windchill ProductPoint, the aliased URL
wpp://<Server_Alias>/ProdA/ProENGINEER/Document/jan.
prt is converted to an appropriate URL on server, for example,
http://server.mycompany.com/.

The method pfcSession.BaseSession.GetAliasFromAliasedUrl


returns the server alias from aliased URL.

Sample Batch Workflow


A typical workflow using the Windchill APIs for an asynchronous
non-graphical application is as follows:

1. Start a Pro/ENGINEER session using the method


pfcAsyncConnection.pfcAsyncConnection.AsyncConnect
ion_Connect.
2. Authenticate the browser using the method
pfcSession.BaseSession.AuthenticateBrowser.
3. Register the server with the new workspace using the method
pfcSession.BaseSession.RegisterServer.
4. Activate the server using the method
pfcServer.Server.Activate.
5. Check out and retrieve the model from the vault URL using the
method pfcServer.Server.CheckoutObjects followed by
pfcSession.BaseSession.RetrieveModel.
6. Modify the model according to the application logic.
7. Save the model to the workspace using the method
pfcModel.Model.Save.
8. Check in the modified model back to the server using the
method pfcServer.Server.CheckinObjects.
9. After processing all models, unregister from the server using
the method pfcServer.Server.Unregister.
10. Delete the workspace using
pfcServer.ServerLocation.DeleteWorkspace.
11. Stop Pro/ENGINEER using the method
pfcAsyncConnection.AsyncConnection.End.

28 - 38 J-Link User’s Guide


A
Summary of Technical
Changes

This appendix contains a list of new and enhanced capabilities for


J-Link under Pro/ENGINEER Wildfire 5.0. See the APIWizard
online browser for complete descriptions of the functions.

Each release of J-Link includes a README file in the loadpoint


directory. Check the README file for the most current
information.

Topic Page

Critical Technical Changes A-2


New Methods A-3
Superseded Methods A - 12
Miscellaneous Technical Changes A - 12

Note: Reference information on all capabilities is available in


the J-Link APIWizard online browser. Use the
APIWizard Search function to find information on a
function. See section “Online Documentation—J-Link
API Wizard” for information on the APIWizard.

A-1
Critical Technical Changes
This section describes the changes in Pro/ENGINEER Wildfire 5.0
and J-Link that might require alteration of existing J-Link
applications.

pfcDetail.DetailSymbolInstItem.GetInstructions
The method pfcDetail.DetailSymbolInstItem.GetInstructions
now takes a new Boolean argument GiveParametersAsNames. Set
this argument to true to display symbolic representations of
parameters and drawing properties in the symbol instance. Set it to
false to display the actual text seen by the user. To ensure that
the compilation succeeds, rebuild your existing J-Link applications
calling the method
pfcDetail.DetailSymbolInstItem.GetInstructions.

Printing Instructions
The interface pfcModel.PlotInstructions containing the
instructions for plotting files has been deprecated. Existing J-Link
methods for creating and accessing the instruction attributes have
also been deprecated. Use the new interface type
pfcExport.PrinterInstructions and its methods instead.
Refer to the Superseded Methods section for the complete list of
methods that have been deprecated.

The following new interface types have also been added:

• pfcExport.PrintPrinterOption for printer settings


• pfcExport.PrintMdlOption for the definition of the model
for printing
• pfcExport.PrintPlacementOption for the placement
options for use while printing
• pfcExport.PrinterPCFOptions for the definition of the
printing options for a Plotter Configuration File (PCF)

A-2 J-Link User’s Guide


No-Resolve Mode
Pro/ENGINEER Wildfire 5.0 introduces No-Resolve mode, wherein
if a model and feature regeneration fails, failed features and
children of failed features are created and the regeneration of other
features continues. By default, Pro/ENGINEER Wildfire 5.0
operates in No-Resolve mode. However, J-Link does not support
regeneration in this mode. If Pro/ENGINEER is running in

Technical Changes
No-Resolve mode, the methods pfcSolid.Solid.Regenerate and

Summary of
pfcSolid.Solid.ExecuteFeatureOps throw an exception
pfcExceptions.XToolkitBadContext.

To continue with the behavior of Pro/ENGINEER Wildfire 4.0 in


Resolve mode, set the configuration option
regen_failure_handling to resolve_mode in the
Pro/ENGINEER session. Setting the configuration option to switch
to Resolve mode ensures the old behavior as long as you do not
retrieve the models saved under No-Resolve mode. To consistently
preserve the old behavior, use Resolve mode from the beginning
and throughout your Pro/ENGINEER session.

New Methods
The following section describes the new J-Link methods.

Drawings

New Method Description


pfcModel.pfcModel.MedusaExportInstructions_ Creates a new instructions
Create object for export of a drawing
in EXPORT_MEDUSA format
(using
pfcModel.Model.Export).
pfcModel.pfcModel.Export2DOption_Create Accesses the options to export
pfcModel.Export2DOption.SetExportSheetOption multiple sheets of a drawing
pfcModel.Export2DOption.SetModelSpaceSheet to 2D formats.
pfcModel.Export2DOption.SetSheets

Summary of Technical Changes A-3


3D Export

New Method Description


pfcExport.pfcExport.CatiaPart3DExportInstructio Creates a new instructions
ns_Create object for import of the
pfcExport.pfcExport.CatiaProduct3DExportInstru following 3D import formats:
ctions_Create • EXPORT_CATIA_PART
pfcExport.pfcExport.CatiaCGR3DExportInstructi • EXPORT_CATIA_PRODUCT
ons_Create • EXPORT_CATIA_CGR
pfcExport.pfcExport.JT3DExportInstructions_ • EXPORT_JT
Create • EXPORT_PARASOLID
pfcExport.pfcExport.ParaSolid3DExportInstructio • EXPORT_UG
ns_Create
pfcExport.Export.UG3DExportInstructions_
Create

Datum Features

New Method Description


Datum Plane Feature
pfcDatumPlaneFeat.DatumPlaneFeat.GetFlip Provides read access to the
pfcDatumPlaneFeat.DatumPlaneFeat.GetConstra properties of the Datum Plane
ints feature.
pfcDatumPlaneFeat.DatumPlaneConstraint.Get
ConstraintType
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneThroughConstraint_Create
pfcDatumPlaneFeat.DatumPlaneThroughConstra
int.GetThroughRef
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneNormalConstraint_Create
pfcDatumPlaneFeat.DatumPlaneNormalConstrai
nt.GetNormalRef
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneParallelConstraint_Create
pfcDatumPlaneFeat.DatumPlaneParallelConstrai
nt.GetParallelRef

A-4 J-Link User’s Guide


New Method Description
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum Provides read access to the
PlaneTangentConstraint_Create properties of the Datum Plane
pfcDatumPlaneFeat.DatumPlaneTangentConstra feature.
int.GetTangentRef
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneOffsetConstraint_Create

Technical Changes
pfcDatumPlaneFeat.DatumPlaneOffsetConstraint

Summary of
.GetOffsetRef
pfcDatumPlaneFeat.DatumPlaneOffsetConstraint
.GetOffsetValue
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneOffsetCoordSysConstraint_Create
pfcDatumPlaneFeat.DatumPlaneOffsetCoordSys
Constraint.GetCsysAxis
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneAngleConstraint_Create
pfcDatumPlaneFeat.DatumPlaneAngleConstraint
.GetAngleRef
pfcDatumPlaneFeat.DatumPlaneAngleConstraint
.GetAngleValue
pfcDatumPlaneFeat.pfcDatumPlaneFeat.Datum
PlaneSectionConstraint_Create
pfcDatumPlaneFeat.DatumPlaneSectionConstrai
nt.GetSectionRef
pfcDatumPlaneFeat.DatumPlaneSectionConstrai
nt.GetSectionIndex
pfcDatumPlaneFeat.DatumPlaneDefaultXConstr
aint.DatumPlaneDefaultXConstraint_Create
pfcDatumPlaneFeat.DatumPlaneDefaultYConstr
aint.DatumPlaneDefaultYConstraint_Create
pfcDatumPlaneFeat.DatumPlaneDefaultZConstra
int.DatumPlaneDefaultZConstraint_Create
Datum Axis Feature
pfcDatumAxisFeat.DatumAxisFeat.GetConstrain Provides read access to the
ts properties of the Datum Axis
pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxis feature.
Constraint_Create
pfcDatumAxisFeat.DatumAxisConstraint.Get
ConstraintType

Summary of Technical Changes A-5


New Method Description
pfcDatumAxisFeat.DatumAxisConstraint.Get Provides read access to the
ConstraintRef properties of the Datum Axis
pfcDatumAxisFeat.DatumAxisFeat.GetDim feature.
Constraints
pfcDatumAxisFeat.pfcDatumAxisFeat.DatumAxis
DimensionConstraint_Create
pfcDatumAxisFeat.DatumAxisDimensionConstrai
nt.GetDimOffset
pfcDatumAxisFeat.DatumAxisDimensionConstrai
nt.GetDimRef
General Datum Point Feature
pfcDatumPointFeat.DatumPointFeat.GetFeat Provides read access to the
Name properties of the General
pfcDatumPointFeat.DatumPointFeat.GetPoints Datum Point feature.
pfcDatumPointFeat.GeneralDatumPoint.Get
Name
pfcDatumPointFeat.pfcDatumPointFeat.Datum
PointPlacementConstraint_Create
pfcDatumPointFeat.GeneralDatumPoint.GetPlace
Constraints
pfcDatumPointFeat.pfcDatumPointFeat.Datum
PointDimensionConstraint_Create
pfcDatumPointFeat.GeneralDatumPoint.GetDim
Constraints
pfcDatumPointFeat.DatumPointConstraint.Get
ConstraintRef
pfcDatumPointFeat.DatumPointConstraint.Get
ConstraintType
pfcDatumPointFeat.DatumPointConstraint.Get
Value
Datum Coordinate System Feature
pfcCoordSysFeat.CoordSysFeat.GetOrigin Provides read access to the
Constraints properties of the Datum
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsys Coordinate System feature.
OriginConstraint_Create
pfcCoordSysFeat.DatumCsysOriginConstraint.
GetOriginRef
pfcCoordSysFeat.CoordSysFeat.GetDimension
Constraints

A-6 J-Link User’s Guide


New Method Description
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsys Provides read access to the
DimensionConstraint_Create properties of the Datum
pfcCoordSysFeat.DatumCsysDimensionConstrain Coordinate System feature.
t.GetDimRef
pfcCoordSysFeat.DatumCsysDimensionConstrain
t.GetDimValue

Technical Changes
pfcCoordSysFeat.DatumCsysDimensionConstrain

Summary of
t.GetDimConstraintType
pfcCoordSysFeat.CoordSysFeat.GetOrientation
Constraints
pfcCoordSysFeat.pfcCoordSysFeat.DatumCsys
OrientMoveConstraint_Create
pfcCoordSysFeat.DatumCsysOrientMove
Constraint.GetOrientMoveConstraintType
pfcCoordSysFeat.DatumCsysOrientMove
Constraint.GetOrientMoveValue
pfcCoordSysFeat.CoordSysFeat.GetIsNormalTo
Screen
pfcCoordSysFeat.CoordSysFeat.GetOffsetType
pfcCoordSysFeat.CoordSysFeat.GetOnSurface
Type
pfcCoordSysFeat.CoordSysFeat.GetOrientBy
Method

Export to PDF

New Method Description


pfcExport.pfcExport.PDFExportInstructions_ Creates a new instructions
Create object for export to PDF
format (using
pfcModel.Model.Export).
pfcExport.PDFExportInstructions.SetFilePath Accesses the instructions for
pfcExport.PDFExportInstructions.SetOptions export to PDF.
pfcExport.pfcExport.PDFOption_Create Accesses the options required
pfcExport.PDFOption.SetOptionType for export to PDF.
pfcExport.PDFOption.SetOptionValue

Summary of Technical Changes A-7


Family Tables

New Method Description


pfcFamily.FamilyMember.GetImmediateGeneric Returns the model descriptor
Info of the immediate generic
model.
pfcFamily.FamilyMember.GetTopGenericInfo Returns the model descriptor
of the top generic model.
pfcFamily.FamilyMember.GetCellIsDefault Determines if the item in the
specified cell has the default
value. The default value is the
value of the specified item in
the generic model.

Printing Files

New Method Description


Printing Instructions
pfcExport.pfcExport.PrinterInstructions_Create Creates the
pfcExport.PrinterInstru
ctions object.
pfcExport.PrinterInstructions.SetPrinterOption Accesses and modifies the
pfcExport.PrinterInstructions.SetPlacement plotting instructions.
Option
pfcExport.PrinterInstructions.SetModelOption
pfcExport.PrinterInstructions.SetWindowId
Printer Options
pfcExport.pfcExport.PrintPrinterOption_Create Creates the
pfcExport.PrintPrinterO
ption object.
pfcSession.BaseSession.GetPrintPrinterOptions Returns the
pfcExport.PrintPrinterO
ption object containing the
printer options.

A-8 J-Link User’s Guide


New Method Description
pfcExport.PrintPrinterOption.SetDeleteAfter Accesses and modifies the
pfcExport.PrintPrinterOption.SetFileName options for a specified printer.
pfcExport.PrintPrinterOption.SetPaperSize
pfcExport.Export.PrintSize_Create
pfcExport.PrintSize.SetHeight

Technical Changes
pfcExport.PrintSize.SetWidth
pfcExport.PrintSize.SetPaperSize

Summary of
pfcExport.PrintPrinterOption.SetPenTable
pfcExport.PrintPrinterOption.SetPrintCommand
pfcExport.PrintPrinterOption.SetPrinterType
pfcExport.PrintPrinterOption.SetQuantity
pfcExport.PrintPrinterOption.SetRollMedia
pfcExport.PrintPrinterOption.SetRotatePlot
pfcExport.PrintPrinterOption.SetSaveMethod
pfcExport.PrintPrinterOption.SetSaveToFile
pfcExport.PrintPrinterOption.SetSendToPrinter
pfcExport.PrintPrinterOption.SetSlew
pfcExport.PrintPrinterOption.SetSwHandshake
pfcExport.PrintPrinterOption.SetUseTtf
Placement Options
pfcExport.pfcExport.PrintPlacementOption_ Creates the
Create pfcExport.PrintPlacemen
tOption object.
pfcSession.BaseSession.GetPrintPlacement Returns the
Options pfcExport.PrintPlacemen
tOption object containing the
placement options.
pfcExport.PrintPlacementOption.SetBottomOffset Accesses and modifies the
pfcExport.PrintPlacementOption.SetClipPlot placement options.
pfcExport.PrintPlacementOption.SetKeep
Panzoom
pfcExport.PrintPlacementOption.SetLabelHeight
pfcExport.PrintPlacementOption.SetPlaceLabel
pfcExport.PrintPlacementOption.SetScale
pfcExport.PrintPlacementOption.SetShiftAllCorn
er
pfcExport.PrintPlacementOption.SetSideOffset
pfcExport.PrintPlacementOption.SetX1Clip
Position

Summary of Technical Changes A-9


New Method Description
pfcExport.PrintPlacementOption.SetX2Clip Accesses and modifies the
Position placement options.
pfcExport.PrintPlacementOption.SetY1Clip
Position
pfcExport.PrintPlacementOption.SetY2Clip
Position
Model Options
pfcExport.pfcExport.PrintMdlOption_Create Creates the
pfcExport.PrintMdlOptio
n object.
pfcSession.BaseSession.GetPrintMdlOptions Returns the
pfcExport.PrintMdlOptio
n object containing the model
options for printing purpose.
pfcExport.PrintMdlOption.SetDrawFormat Accesses and modifies the
pfcExport.PrintMdlOption.SetFirstPage model options.
pfcExport.PrintMdlOption.SetLastPage
pfcExport.PrintMdlOption.SetLayerName
pfcExport.PrintMdlOption.SetLayerOnly
pfcExport.PrintMdlOption.SetMdl
pfcExport.PrintMdlOption.SetQuality
pfcExport.PrintMdlOption.SetSegmented
pfcExport.PrintMdlOption.SetSheets
pfcExport.PrintMdlOption.SetUseDrawingSize
pfcExport.PrintMdlOption.SetUseSolidScale
Plotter Configuration File (PCF) Option
pfcExport.pfcExport.PrinterPCFOptions_Create Creates the
pfcExport.PrinterPCFOpt
ions object.
pfcSession.BaseSession.GetPrintPCFOptions Returns the
pfcExport.PrinterPCFOpt
ions object containing the
printing options for a Plotter
Configuration File (PCF).
pfcExport.PrinterPCFOptions.SetPrinterOption Accesses and modifies the
pfcExport.PrinterPCFOptions.SetPlacement printing options for a Plotter
Option Configuration File (PCF).
pfcExport.PrinterPCFOptions.SetModelOption

A - 10 J-Link User’s Guide


User Interface

New Method Description


File > Open
pfcSession.BaseSession.UIRegisterFileOpen Adds a new file type in the

Technical Changes
pfcUI.pfcUI.FileOpenRegisterOptions_Create Open dialog box.

Summary of
pfcUI.FileOpenRegisterOptions.SetFile
Description
pfcUI.FileOpenRegisterOptions.SetFileType
pfcUI.FileOpenRegisterListener.FileOpenAccess
pfcUI.FileOpenRegisterListener.OnFileOpen
Register
File > Save
pfcSession.BaseSession.UIRegisterFileSave Adds a new file type in the
pfcUI.pfcUI.FileSaveRegisterOptions_Create Save a Copy dialog box.
pfcUI.FileSaveRegisterOptions.SetFile
Description
pfcUI.FileSaveRegisterOptions.SetFileType
pfcUI.FileSaveRegisterListener.FileSaveAccess
pfcUI.FileSaveRegisterListener.OnFileSave
Register
Navigation Area
pfcSession.Session.NavigatorPaneBrowserAdd Adds custom panes containing
pfcSession.Session.NavigatorPaneBrowserIconSet custom Web pages to the
pfcSession.Session.NavigatorPaneBrowserURL Navigation area.
Set

Utility

New Method Description


Pro/TOOLKIT DLL
pfcSession.BaseSession.LoadProToolkitLegacyDll Registers and starts a legacy
Pro/TOOLKIT DLL that is not
Unicode-compliant and built
in the pre-Wildfire 4.0
environment.

Summary of Technical Changes A - 11


Pro/ENGINEER Window

New Method Description


Window ID
pfcWindow.Window.GetId Retrieves the ID of the
Pro/ENGINEER window.

Superseded Methods
The following table lists the superseded methods in this release.

New Method Description


pfcModel.pfcModel.PlotInstructions_Create pfcExport.pfcExport.PrinterIns
pfcModel.PlotInstructions.SetPlotterName tructions_Create
pfcModel.PlotInstructions.SetOutputQuality pfcExport.PrinterInstructions.
pfcModel.PlotInstructions.SetUserScale SetPrinterOption
pfcModel.PlotInstructions.SetPenSlew pfcExport.PrinterInstructions.
SetPlacementOption
pfcModel.PlotInstructions.SetPenVelocityX
pfcExport.PrinterInstructions.
pfcModel.PlotInstructions.SetPenVelocityY
SetModelOption
pfcModel.PlotInstructions.SetSegmentedOutput
pfcExport.PrinterInstructions.
pfcModel.PlotInstructions.SetLabelPlot SetWindowId
pfcModel.PlotInstructions.SetSeparatePlotFiles
pfcModel.PlotInstructions.SetPaperSize
pfcModel.PlotInstructions.SetPageRangeChoice
pfcModel.PlotInstructions.SetPaperSizeY
pfcModel.PlotInstructions.SetFirstPage
pfcModel.PlotInstructions.SetLastPage

Miscellaneous Technical Changes


The following changes in Pro/ENGINEER Wildfire 5.0 can affect
functional behavior in J-Link. PTC does not anticipate that these
changes cause critical issues with existing J-Link applications.

A - 12 J-Link User’s Guide


3D Import Formats
The class pfcImport.NewModelImportType now contains new
3D import formats. The J-Link method
pfcSession.BaseSession.ImportNewModel supports the
following new import formats:

• IMPORT_NEW_CATIA_PART

Technical Changes
• IMPORT_NEW_UG

Summary of
• IMPORT_NEW_PRODUCTVIEW
• IMPORT_NEW_CATIA_CGR
• IMPORT_NEW_JT
The class pfcModel.IntfType also contains new 3D feature
import formats. The J-Link method
pfcSolid.Solid.CreateImportFeat supports the following new
import formats:

• INTF_ICEM
• INTF_ACIS
• INTF_DXF
• INTF_CDRS
• INTF_STL
• INTF_VRML
• INTF_PARASOLID
• INTF_AI
• INTF_CATIA_PART
• INTF_UG
• INTF_PRODUCTVIEW
• INTF_CATIA_CGR
• INTF_JT

Datum Features Properties


J-Link now provides read access to the properties of Datum
features. The table below lists the Datum features supported and
the new packages in which their properties and the corresponding
read methods have been defined:

Summary of Technical Changes A - 13


Datum Feature J-Link Package
Datum Plane feature com.ptc.pfc.pfcDatumPlaneFeat
Datum Axis feature com.ptc.pfc.pfcDatumAxisFeat
Datum Point feature com.ptc.pfc.pfcDatumPointFeat
Coordinate System com.ptc.pfc.pfcCoordSysFeat
feature

Export Formats
New export formats have been added to the class
pfcModel.ExportType. The following table lists the new export
formats and the new instructions object added for each format:

Export Format Interface


EXPORT_MEDUSA pfcExport.MedusaExportInstruc
tions
EXPORT_CATIA_PART pfcExport.CatiaPart3DExportIn
structions
EXPORT_CATIA_PRO pfcExport.CatiaProduct3DExpor
DUCT tInstructions
EXPORT_CATIA_CGR pfcExport.CatiaCGR3DExportIns
tructions
EXPORT_JT pfcExport.JT3DExportInstructi
ons
EXPORT_PARASOLID pfcExport.ParaSolid3DExportIn
structions
EXPORT_UG pfcExport.UG3DexportInstructi
ons
EXPORT_PDF pfcExport.PDFExportInstructio
ns

Export to PDF and U3D


J-Link now supports the export of Pro/ENGINEER drawings and
solid models to PDF and U3D formats. A drawing can be exported
as a 2D raster image embedded in a PDF file. The 3D models can be
exported in the following ways:

A - 14 J-Link User’s Guide


• As a U3D model embedded in a one-page PDF file
• As 2D raster images representing saved views embedded in
pages of a PDF file
• As a standalone U3D file
A new interface pfcExport.PDFExportInstructions containing
all the instructions for export to PDF has been added. New PDF
option types have also been defined in the class

Technical Changes
pfcExport.PDFOptionType.

Summary of
ProductView Export Formats
The J-Link method pfcModel.Model.Export now supports export
to any one of the ProductView formats listed in the next table.
These formats have been defined in a new class
pfcExport.ProductViewFormat.

ProductView Format Type Constant


PVS PV_FORMAT_PVS
ED PV_FORMAT_ED
EDZ PV_FORMAT_EDZ
PVZ PV_FORMAT_PVZ

The attribute PVExportOptions has been added to the existing


interface pfcExport.ProductViewExportInstructions. The
values taken by this attribute are given by the new interface
pfcExport.ProductViewExportOptions. This interface
contains the attribute PVFormat, which can be set to any one of the
ProductView formats listed above.

Obsolete Data Exchange Formats


The following data exchange formats and the corresponding type
constants are no longer supported:

Summary of Technical Changes A - 15


Data Exchange Format Type Constant
CADAM CADAM_CPTR_FILE
CADAM_DIRECT_FILE
CADAM_FILE
IMPORT_2D_CADAM
PDGS EXPORT_PDGS
CATIA EXPORT_CATIA
INTF_CATIA
IMPORT_NEW_CATIA

A - 16 J-Link User’s Guide


B
Sample Applications

This appendix lists the sample applications provided with J-Link.

Topic Page

Installing J-Link B-2


Sample Applications B-2

B-1
Installing J-Link
J-Link is available on the same CD as Pro/ENGINEER. When
Pro/ENGINEER is installed using PTC.SetUp, one of the optional
components is “API Toolkits”. This includes Pro/TOOLKIT,
Pro/Web.Link, and J-Link.

If you select J-Link, a directory called jlink is created under the


Pro/ENGINEER loadpoint and J-Link is automatically installed in
this directory. This directory contains all the libraries, example
applications, and documentation specific to J-Link.

Sample Applications
The J-Link sample applications are available in the location
jlink/jlink_appls.

InstallTest
Location Main Class
jlink/jlink_appls/install_test StartInstallTest

The application StartInstallTest is used to check the J-Link


synchronous installation. It verifies the following:

• Application start and stop functions.


• Menubar functions.
• Custom UI functions.
• Sequences, arrays, exceptions, and action listener functions.

Testing the J-Link Synchronous Installation


After the system administrator has installed J-Link, compile, link,
and run a simple J-Link application on the machine you intend to
use for development. Test the following items:

• The installation of J-Link is present, complete, and visible from


your machine.
• The version of Pro/ENGINEER you plan to use during
development has the J-Link license option added to it.

B-2 J-Link User’s Guide


To test the synchronous J-Link installation:

1. Set the path and CLASSPATH variables to include the Java


Development Kit as described in Java Options and Debugging.
2. Set the CLASSPATH to include the J-Link synchronous archive
and the current directory.
For example, on UNIX set the CLASSPATH as:

Sample Applications
setenv CLASSPATH ".:<Pro/ENGINEER
loadpoint>/text/java/pfc.jar:$CLASSPATH"
On NT set the CLASSPATH as:
set CLASSPATH=.;<Pro/ENGINEER
loadpoint>\text\java\pfc.jar;%CLASSPATH%
3. Compile the java files in the directory using the command
javac *.java.
Note: The java file AsyncInstallTest.java is not compiled
because it is used in the asynchronous mode only.
Before compiling, rename this file to a non-Java file,
that is, AsyncInstallTest.bak.
4. Create a config.pro file if you are using Java 1.1. Add the
following line to this file:
jlink_java2 off
Note: For more information on the supported JDK versions
for synchronous J-Link refer to
http://www.ptc.com/partners/hardware/curren
t/jlink.htm.
5. Run Pro/ENGINEER.

Sample Applications B-3


The Pro/ENGINEER FILE menu has a new button, added by
the J-Link application, called “J-Link Install Test”. When you
choose this button, the J-Link application displays a custom
dialog indicating whether the installation test has succeeded:

Note: On Windows the results dialog may appear behind the


Pro/ENGINEER window. Use Atl-Tab to switch to the
Java dialog.

InstallTest
Location Main Class
jlink/jlink_appls/install_test AsyncInstallTest

The application AsyncInstallTest is used to check the J-Link


asynchronous installation. It verifies the following:

• Asynchronous J-Link setup


• Pro/ENGINEER start and stop methods
• Menubar functions
• Custom UI functions
• Sequences, arrays, exceptions, and action listener functions

Testing the J-Link Asynchronous Installation


To test the asynchronous J-Link application:

1. Set the path and CLASSPATH variables to include the Java


Development Kit as described in Java Options and Debugging.
2. Set the CLASSPATH to include the J-Link asynchronous
archive and the current directory.
For example, on UNIX set the CLASSPATH as:
setenv CLASSPATH ".:<Pro/E
loadpoint>/text/java/pfcasync.jar:$CLASSPATH"

B-4 J-Link User’s Guide


On NT set the CLASSPATH as:
set CLASSPATH=.;<Pro/E
loadpoint>\text\java\pfcasync.jar;%CLASSPATH%
3. Set the library path to include the asynchronous library and
make sure that PRO_COMM_MSG_EXE is set.
For example, on UNIX set the library path as:

Sample Applications
setenv LD_LIBRARY_PATH "<Pro/E
loadpoint>/sun4_solaris/lib:$LD_LIBRARY_PATH"
setenv PRO_COMM_MSG_EXE "<Pro/E
loadpoint>/sun4_solaris/obj/pro_comm_msg"
On NT set the library path as:
set path=<Pro/E loadpoint>\i486_nt\lib;%PATH%
set PRO_COMM_MSG_EXE=<Pro/E
loadpoint>\i486_nt\obj\pro_comm_msg.exe
4. Compile the java files in the directory using the command
javac *.java.
Note:
• The java file "StartInstallTest.java" does not get compiled
as it is used in the synchronous mode only. Before compiling,
rename this file to a non java file, that is,
StartInstallTest.bak.
• Remove any .class files compiled previously using
synchronous J-Link.
• Rename or remove the registry file (protk.dat or prodev.dat)
from the location from where you are running the Jlink
asynchronous test.
5. Run the application java [asynchronous flags]
AsyncInstallTest <command to run Pro/ENGINEER>.
Note: For more information on the supported JDK versions
for asynchronous J-Link and the value of the
asynchronous flags refer to
http://www.ptc.com/partners/hardware/current/jlink.ht
m

Sample Applications B-5


jlinkexamples
Location Main Class
jlink/jlink_appls/jlink pfcExamplesMenu.java,
examples however note that not all
examples may be tied to this
class.

The application jlinkexamples is a collection of the J-Link User’s


Guide example source files . It covers most of the areas of J-Link.

jlinkasyncexamples
Location Main Class
jlink/jlink_appls/jlink Many independent examples
asyncexamples

The application jlinkasyncexamples is a collection of the


asynchronous J-Link User's Guide example source files.

Parameter Editor
Location Main Class
jlink/jlink_appls/jlink com.ptc.jlinkdemo.parame
_param ditor.ParamEditor

The parameter editor example demonstrates a synchronous J-Link


user interface that governs parameters and parameter values in the
model. Setup and run the J-Link Parameter Editor example using
the following:

1. Set the path and CLASSPATH variables to include the Java


Development Kit as described in (link) as described in Java
Options and Debugging.
2. Set the CLASSPATH to include the jlink_param directory and
the J-Link synchronous Jar file (pfc.jar). Refer to the section
Testing the J-Link Synchronous Installation for more
information on setting the CLASSPATH.
3. Compile the code as follows:

B-6 J-Link User’s Guide


– On UNIX, enter following to compile the code:
javac source/*/*.java -d.
After the first compilation some packages that depend on
other packages may give errors. However, the parent
packages will be compiled correctly. Continue compiling by
reentering the command line string
javac source/*/*.java -d .

Sample Applications
– On Windows, execute the batch file compile.bat.
4. Start Pro/ENGINEER from a directory containing the protk.dat
file. Create or retrieve any model that contains parameters.
5. Select J-Link Parameter Editor from the Applications Menu.
The system will display a graphical interface that contains a
list of parameters for the selected model as shown in the
following figure.

The parameter editor also supports the following customized types


of parameters:

• Using the editor to create parameters with descriptive names


(user interface names) of up to 80 character. The value of the
assigned user interface name will be displayed as the
parameter name in the J-Link user interface.
• Creating parameters that obey specific rules:
– Enumerated lists
– Specified ranges
– Specified ranges, with values limited to a certain
increments (for example, any multiple of 5 between 0 and
100).

Sample Applications B-7


When you open the J-Link user interface, the parameter value is
governed by the rules assigned to it. If the parameter value is
changed to fall outside the permitted values it will be highlighted in
red.

Round Checker Utility


Location Main Class
jlink/jlink_appls/jlink_ com.ptc.jlinkdemo.round.
elev RoundChecker

The round checker example demonstrates a synchronous J-Link


utility that monitors the values assigned to round dimensions. If
the value of any modified or newly created round is reduced below a
programmed limit, a J-Link user interface will appear with
information about the violation.

Use the following steps to setup and run the example:

1. Set the path and CLASSPATH variables to include the Java


Development Kit as described in (link).
2. Set the CLASSPATH to include the jlink_elev directory and the
J-Link synchronous Jar file (pfc.jar).
3. Compile the code as follows:
– On UNIX, enter following line to compile the code:
javac source/*/*.java -d .
After the first compilation some packages that depend on
other packages may give errors. However, the parent
packages will be compiled correctly. Continue compiling by
reentering the command line string
javac source/*/*.java -d .
– On Windows, execute the batch file compile.bat.
4. Load any Pro/ENGINEER model with rounds. Modify the round
to less than 0.5. A J-Link dialog that identifies the problem will
be displayed. The same dialog will appear if a new round that
does not adhere to the specified dimensions is created.

B-8 J-Link User’s Guide


Save Check Utility
Location Main Class
jlink/jlink_appls/j com.ptc.jlinkdemo.savecheck.
link_elev SaveChecker

Sample Applications
The save check example demonstrates a synchronous J-Link utility
that presents a user interface that identifies if any problems exist
in the model you are about to save. If any problems exist in the
assigned parameter values or if a material has not been assigned to
a part, the user interface will appear with information about the
problems.

The instructions to setup and run the save check example are
similar to the instructions for the round checker utility. To access
the interface, choose Tools, Perform Release Checks.

Sample Applications B-9


C
Java Options and Debugging

This appendix describes how to control the procedure used by


Pro/ENGINEER to invoke synchronous J-Link applications to
enable you to use a non-default JVM or to debug your applications.

Topic Page

Supported Java Virtual Machine Versions C-2


Overriding the Java command used by Synchronous J-Link C-3
Debugging a Synchronous Mode Application C-3
CLASSPATH Variables C-3

C-1
Supported Java Virtual Machine Versions
The machine information for the JVM versions supported by J-Link
is available at

http://www.ptc.com/partners/hardware/current/jlink.htm

The Pro/ENGINEER installation includes a default JVM shipped


as a part of its CD image. For synchronous J-Link applications,
Pro/ENGINEER uses the Pro/ENGINEER-supplied JVM by
default.

Pro/ENGINEER includes the ability to override the default JVM


command used to invoke J-Link applications. This allows you to:

• Use a non-standard JVM in your deployment, if that JVM has a


feature or a fix that is necessary for your application to work
correctly.
• Apply command line flags to the Java invocation, thus allowing
it to be used for debugging or other customized purposes.

Overriding the Java command used by


Synchronous J-Link
The JVM that is used can be overridden using one of the following
mechanisms:

• The configuration option jlink_java_command, if set to the


path to the java executable, will determine the JVM be used to
start synchronous J-Link applications.
• The environment variable PRO_JAVA_COMMAND serves the same
purpose as the configuration option. The environment variable
takes precedence over the configuration option.
Note: The appropriate flags for synchronous J-Link as well as
the flags for the user-supplied JRE must be used. The
synchronous J-Link flags are listed on the J-Link
platform page. It is recommended that you update the
version of the JVM on your machine to the minimum
supported version for the platform.

C-2 J-Link User’s Guide


Debugging a Synchronous Mode Application
As Pro/ENGINEER has control over the start and stop of Java
processes used by J-Link, you must use special controls to be able to
debug an application. The most typical deployment should do the
following:

1. Use the appropriate javac compiler flags to build the

Java Options and


application debuggable.

Debugging
2. Use the technique described in the section Overriding the Java
command used by Synchronous J-Link to set the Java command
to the appropriate debug command line, for example,
[JDK_HOME]/bin/java.exe -Xdebug
3. Start Pro/ENGINEER and let it invoke the Java application.
4. Attach your Java debugger to the process that was started by
Pro/ENGINEER.
If you need to debug within the application start method, you can
make the first invocation within that method a UI popup dialog box
(javax.swing.JOptionPane) which will allow time to attach the
debugger to the process.

CLASSPATH Variables
Synchronous Mode
If you are using the default JVM and are running J-Link
applications on your machine, you need to add only your application
classes to the classpath. The mechanisms to accomplish this are:

• Setting the environment variable CLASSPATH.


• Using the java_app_classpath field in the registry file. This
field has a character limit of 2047 wide characters (wchar_t).
• Loading a user-specified Jar file through the user interface
(only available for a model program).
Pro/ENGINEER will automatically add the J-Link archive
pfc.jar to the CLASSPATH.

To compile J-Link applications the environment variable


CLASSPATH must include the path to the locations of classes and
archives that you intend to use. Also, you must add J-Link archive
pfc.jar to the CLASSPATH. This archive is located at <ProE
Loadpoint>/text/java/pfc.jar.

Java Options and Debugging C-3


JAVA Options for Asynchronous Mode
Asynchronous mode applications are started by an external Java
process. Thus Pro/ENGINEER does not have any control over them,
and you may use any JVM and command line to invoke them.

Note: Regardless of how the Java process is invoked, it must


use the Java command line flags specified for
asynchronous mode under
http://www.ptc.com/partners/hardware/current/jlink.htm
For both running and compiling, the environment variable
CLASSPATH must point to the locations of the application classes
and archives.

The CLASSPATH should also include the path to the J-Link


asynchronous mode archive file pfcasync.jar. This archive is located
at <ProE Loadpoint>/text/java/pfcasync.jar.

C-4 J-Link User’s Guide


D
Digital Rights Management

This appendix describes the implications of DRM on J-Link


applications.

Topic Page

Introduction D-2
Implications of DRM on J-Link D-2
Additional DRM Implications D-6

D-1
Introduction
Digital Rights Management (DRM) helps to control access to your
intellectual property. Intellectual property could be sensitive design
and engineering information that you have stored within
Pro/ENGINEER parts, assemblies, or drawings. You can control
access by applying policies to these Pro/ENGINEER objects. Such
objects remain protected by the policies even after they are
distributed or downloaded. Pro/ENGINEER objects for which you
have applied policies are called DRM-protected objects. For more
information on the use of DRM in Pro/ENGINEER Wildfire 4.0,
refer to the DRM online help.

The following sections describe how J-Link applications deal with


DRM-protected objects.

Implications of DRM on J-Link


Any J-Link application accessing DRM-protected objects can run
only in interactive Pro/ENGINEER sessions having COPY
permissions. As J-Link applications can extract content from
models into an unprotected format, J-Link applications will not run
in a Pro/ENGINEER session lacking COPY permission.

If the user tries to open a model lacking the COPY permission into a
session with a J-Link application running, Pro/ENGINEER
prompts the user to spawn a new session. Also, new J-Link
applications will not be permitted to start when the
Pro/ENGINEER session lacks COPY permission.

If a J-Link application tries to open a model lacking COPY


permission from an interactive Pro/ENGINEER session, the
application throws the pfcExceptions.XToolkitNoPermission
exception.

When a J-Link application tries to open a protected model from a


non-interactive or batch mode application, the session cannot
prompt for DRM authentication, instead the application throws the
pfcExceptions.XToolkitAuthenticationFailure exception.

Exception Types
Some J-Link methodsrequire specific permissions in order to
operate on a DRM-protected object. If these methodscannot proceed
due to DRM restrictions, the following exceptions are thrown:

D-2 J-Link User’s Guide


• pfcExceptions.XToolkitNoPermission—Thrown if the
method cannot proceed due to lack of needed permissions.
• pfcExceptions.XToolkitAuthenticationFailure—Thrown if
the object cannot be opened because the policy server could not
be contacted or if the user was unable to interactively login to
the server.
• pfcExceptions.XToolkitUserAbort—Thrown if the object
cannot be operated upon because the user cancelled the action

Digital Rights
Management
at some point.
The following table lists the methods along with the permission
required and implications of operating on DRM-protected objects.

Methods Permission Implications


Required
pfcSession.BaseSession.RetrieveAss OPEN • If file has OPEN and
emSimpRep COPY permissions, model
pfcSession.BaseSession.CreateDraw opens after
ingFromTemplate authentication.
pfcSession.BaseSession.RetrieveGra • Throws the
phicsSimpRep pfcExceptions.XToolkit
pfcSession.BaseSession.RetrieveGeo NoPermission exception
mSimpRep otherwise.
pfcSession.BaseSession.RetrieveMo
del
pfcSession.BaseSession.RetrieveMo
delWithOpts
pfcSession.BaseSession.RetrievePar
tSimpRep
pfcSession.BaseSession.RetrieveSy
mbolicSimpRep
pfcModel.Model.Rename OPEN • File is saved with the
current policy to disk if it
has COPY permission.

Digital Rights Management D-3


Methods Permission Implications
Required
pfcModel.Model.Backup SAVE • File is saved with the
pfcModel.Model.Copy current policy to disk if it
has SAVE and COPY
permissions.
• Throws the
pfcExceptions.XToolkit
NoPermission exception
if model has COPY
permission, but lacks
SAVE permission.
pfcModel.Model.Save SAVE • File is saved with the
current policy to disk if it
has SAVE and COPY
permissions.
• Throws the
pfcExceptions.XToolkit
NoPermission exception
if model has COPY
permission, but lacks
SAVE permission.
• Throws the
pfcExceptions.XToolkit
NoPermission exception
if the assembly file has
models with COPY
permission, but lacking
SAVE permission.
pfcModel.Model.Export for PRINT • Drawing file is printed if it
PlotInstructions has PRINT permission.
pfcModel.Model.Export for • Throws the
ProductViewExportInstructions pfcExceptions.XToolkit
(only if the input model is a NoPermission exception
drawing) if drawing file lacks
pfcSession.BaseSession.ExportCurr PRINT permission.
entRasterImage

D-4 J-Link User’s Guide


Copy Permission to Interactively Open Models
When the user tries to open protected content lacking COPY
permission through the Pro/ENGINEER user interface with a
J-Link application running in the same session:

1. Pro/ENGINEER checks for the authentication credentials


through the user interface, if they are not already established.
2. If the user has permission to open the file, Pro/ENGINEER

Digital Rights
Management
checks if the permission level includes COPY. If the level
includes COPY, Pro/ENGINEER opens the file.
3. If COPY permission is not included, the following message is
displayed:

4. If the user clicks Cancel, the file is not opened in the current
Pro/ENGINEER session and no new session is spawned.
5. If the user clicks OK, an additional session of Pro/ENGINEER
is spawned which does not permit any J-Link application.
J-Link applications set to automatically start by
Pro/ENGINEER will not be started. Asynchronous applications
will be unable to connect to this session.
6. The new session of Pro/ENGINEER is automatically
authenticated with the same session credentials as were used
in the previous session.
7. The model that Pro/ENGINEER was trying to load in the
previous session is loaded in this session.
8. Other models already open in the previous session will not be
loaded in the new session.
9. Session settings from the previous session will not be carried
into the new session.

Digital Rights Management D-5


10. The new session will be granted the licenses currently used by
the previous session. This means that the next time the user
tries to do something in the previous session, Pro/ENGINEER
must obtain a new license from the license server. If the license
is not available, the action will be blocked with an appropriate
message.

Additional DRM Implications


• The method pfcModel.Model.CheckIsSaveAllowed returns
false if prevented from save by DRM restrictions.
• The method pfcSession.BaseSession.CopyFileToWS is
designed to fail and throw the
pfcExceptions.XToolkitNoPermission exception if passed a
DRM-protected Pro/ENGINEER model file.
• The method pfcSession.BaseSession.ImportToCurrentWS
reports a conflict in its output text file and does not copy a
DRM-protected Pro/ENGINEER model file to the Workspace.
• While erasing an active Pro/ENGINEER model with DRM
restrictions, the methods pfcModel.Model.Erase and
pfcModel.Model.EraseWithDependencies do not clear the
data in the memory until the control returns to Pro/ENGINEER
from the Pro/TOOLKIT application. Thus, the Pro/ENGINEER
session permissions may also not be cleared immediately after
these methods return.

D-6 J-Link User’s Guide


E
Geometry Traversal

This appendix illustrates the relationships between faces, contours,


and edges. Examples E-1 through E-5 show some sample parts and
list the information about their surfaces, faces, contours, and edges.

Topic Page

Example 1 E-2
Example 2 E-2
Example 3 E-3
Example 4 E-4
Example 5 E-5

E-1
Example 1

E1 E5
E6
E4 Face B
C2
C1
Face A E2

E3 E7

This part has 6 faces.

• Face A has 1 contour and 4 edges.


• Edge E2 is the intersection of faces A and B.
• Edge E2 is a component of contours C1 and C2.

Example 2

E1

E5
Face A
E4
. . E2

E6

E3

Face A has 2 contours and 6 edges.

E-2 J-Link User’s Guide


Example 3

Face B
Face C

Geometry Traversal
Protrusion feature

Face A

This part was extruded from a rectangular cross section. The


feature on the top was added later as an extruded protrusion in the
shape of a semicircle.

• Face A has 1 contour and 6 edges.


• Face B has 2 contours and 8 edges.
• Face C has 1 contour and 4 edges.

Geometry Traversal E-3


Example 4

Face C

Face B

Face D

Face A
Base part
No features added

This part was extruded from a cross section identical to Face A. In


the Sketcher, the top boundary was sketched with two lines and an
arc. The sketch was then extruded to form the base part, as shown.

• Face A has 1 contour and 6 edges.


• Face B has 1 contour and 4 edges.
• Face C has 1 contour and 4 edges.
• Face D has 1 contour and 4 edges.

E-4 J-Link User’s Guide


Example 5

Face B

. .

Geometry Traversal
Face A

This part was extruded from a rectangular cross section. The slot
and hole features were added later.

• Face A has 1 contour and 8 edges.


• Face B has 3 contours and 10 edges.

Geometry Traversal E-5


F
Geometry Representations

This appendix describes the geometry representations of the data


used by J-Link.

Topic Page

Surface Parameterization F-2


Edge and Curve Parameterization F - 13

F-1
Surface Parameterization
A surface in Pro/ENGINEER contains data that describes the
boundary of the surface, and a pointer to the primitive surface on
which it lies. The primitive surface is a three-dimensional
geometric surface parameterized by two variables (u and v). The
surface boundary consists of closed loops (contours) of edges. Each
edge is attached to two surfaces, and each edge contains the u and v
values of the portion of the boundary that it forms for both surfaces.
Surface boundaries are traversed clockwise around the outside of a
surface, so an edge has a direction in each surface with respect to
the direction of traversal.

This section describes the surface parameterization. The surfaces


are listed in order of complexity. For ease of use, the alphabetical
listing of the data structures is as follows:

• Cone
• Coons Patch
• Cylinder
• Cylindrical Spline Surface
• Fillet Surface
• General Surface of Revolution
• NURBS Surface
• Plane
• Ruled Surface
• Spline Surface
• Tabulated Cylinder
• Torus

F-2 J-Link User’s Guide


Plane

Representations
Geometry
The plane entity consists of two perpendicular unit vectors (e1 and
e2), the normal to the plane (e3), and the origin of the plane.

Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the plane

Parameterization:
(x, y, z) = u * e1 + v * e2 + origin

Cylinder

The generating curve of a cylinder is a line, parallel to the axis, at a


distance R from the axis. The radial distance of a point is constant,
and the height of the point is v.

Geometry Representations F-3


Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the cylinder
radius Radius of the cylinder

Parameterization:
(x, y, z) = radius * [cos(u) * e1 + sin(u) * e2] +
v * e3 + origin

Engineering Notes:

For the cylinder, cone, torus, and general surface of revolution, a


local coordinate system is used that consists of three orthogonal
unit vectors (e1, e2, and e3) and an origin. The curve lies in the
plane of e1 and e3, and is rotated in the direction from e1 to e2. The
u surface parameter determines the angle of rotation, and the v
parameter determines the position of the point on the generating
curve.

Cone

The generating curve of a cone is a line at an angle alpha to the axis


of revolution that intersects the axis at the origin. The v parameter
is the height of the point along the axis, and the radial distance of
the point is v * tan(alpha).

Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the cone
alpha Angle between the axis of the cone
and the generating line

F-4 J-Link User’s Guide


Parameterization:
(x, y, z) = v * tan(alpha) * [cos(u) * e1 +
sin(u) * e2] + v * e3 + origin

Torus

Representations
Geometry
The generating curve of a torus is an arc of radius R2 with its
center at a distance R1 from the origin. The starting point of the
generating arc is located at a distance R1 + R2 from the origin, in
the direction of the first vector of the local coordinate system. The
radial distance of a point on the torus is R1 + R2 * cos(v), and the
height of the point along the axis of revolution is R2 * sin(v).

Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the torus
radius1 Distance from the center of the
generating arc to the axis of
revolution
radius2 Radius of the generating arc

Parameterization:
(x, y, z) = (R1 + R2 * cos(v)) * [cos(u) * e1 +
sin(u) * e2] + R2 * sin(v) * e3 +
origin

Geometry Representations F-5


General Surface of Revolution

A general surface of revolution is created by rotating a curve entity,


usually a spline, around an axis. The curve is evaluated at the
normalized parameter v, and the resulting point is rotated around
the axis through an angle u. The surface of revolution data
structure consists of a local coordinate system and a curve
structure.

Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the surface of revolution
curve Generating curve

Parameterization:
curve(v) = (c1, c2, c3) is a point on the curve.

(x, y, z) = [c1 * cos(u) - c2 * sin(u)] * e1 +


[c1 * sin(u) + c2 * cos(u)] * e2 +
c3 * e3 + origin

Ruled Surface

F-6 J-Link User’s Guide


A ruled surface is the surface generated by interpolating linearly
between corresponding points of two curve entities. The u
coordinate is the normalized parameter at which both curves are
evaluated, and the v coordinate is the linear parameter between the
two points. The curves are not defined in the local coordinate
system of the part, so the resulting point must be transformed by
the local coordinate system of the surface.

Data Format:

Representations
e1[3] Unit vector, in the u direction

Geometry
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the ruled surface
curve_1 First generating curve
curve_2 Second generating curve

Parameterization:
(x', y', z') is the point in local coordinates.
(x', y', z') = (1 - v) * C1(u) + v * C2(u)
(x, y, z) = x' * e1 + y' * e2 + z' * e3 + origin

Tabulated Cylinder

A tabulated cylinder is calculated by projecting a curve linearly


through space. The curve is evaluated at the u parameter, and the z
coordinate is offset by the v parameter. The resulting point is
expressed in local coordinates and must be transformed by the local
coordinate system to be expressed in part coordinates.

Data Format:
e1[3] Unit vector, in the u direction
e2[3] Unit vector, in the v direction
e3[3] Normal to the plane
origin[3] Origin of the tabulated cylinder
curve Generating curve

Geometry Representations F-7


Parameterization:
(x', y', z') is the point in local coordinates.
(x', y', z') = C(u) + (0, 0, v)
(x, y, z) = x' * e1 + y' * e2 + z' * e3 + origin

Coons Patch

A Coons patch is used to blend surfaces together. For example, you


would use a Coons patch at a corner where three fillets (each of a
different radius) meet.

Data Format:
le_curve u = 0 boundary
ri_curve u = 1 boundary
dn_curve v = 0 boundary
up_curve v = 1 boundary
point_matrix[2][2] Corner points
uvder_matrix[2][2] Corner mixed derivatives

Fillet Surface

F-8 J-Link User’s Guide


A fillet surface is found where a round or a fillet is placed on a
curved edge, or on an edge with non-constant arc radii. On a
straight edge, a cylinder would be used to represent the fillet.

Data Format:
pnt_spline P(v) spline running along the u = 0 boundary
ctr_spline C(v) spline along the centers of the
fillet arcs
tan_spline T(v) spline of unit tangents to the

Representations
axis of the fillet arcs

Geometry
Parameterization:
R(v) = P(v) - C(v)
(x,y,z) = C(v) + R(v) * cos(u) + T(v) X R(v) *
sin(u)

Spline Surface

The parametric spline surface is a nonuniform bicubic spline


surface that passes through a grid with tangent vectors given at
each point. The grid is curvilinear in uv space. Use this for bicubic
blending between corner points.

Data Format:
u_par_arr[] Point parameters, in the u
direction, of size Nu
v_par_arr[] Point parameters, in the v
direction, of size Nv
point_arr[][3] Array of interpolant points, of
size Nu x Nv
u_tan_arr[][3] Array of u tangent vectors
at interpolant points, of size
Nu x Nv

Geometry Representations F-9


v_tan_arr[][3] Array of v tangent vectors at
interpolant points, of size
Nu x Nv
uvder_arr[][3] Array of mixed derivatives at
interpolant points, of size
Nu x Nv

Engineering Notes:

• Allows for a unique 3x3 polynomial around every patch.


• There is second order continuity across patch boundaries.
• The point and tangent vectors represent the ordering of an
array of [i][j], where u varies with i, and v varies with j. In
walking through the point_arr[][3], you will find that the
innermost variable representing v(j) varies first.

NURBS Surface
The NURBS surface is defined by basis functions (in u and v),
expandable arrays of knots, weights, and control points.

Data Format:
deg[2] Degree of the basis
functions (in u and v)
u_par_arr[] Array of knots on the
parameter line u
v_par_arr[] Array of knots on the
parameter line v

F - 10 J-Link User’s Guide


wghts[] Array of weights for
rational NURBS, otherwise
NULL
c_point_arr[][3] Array of control points

Definition:

N1 N2

Representations
∑ ∑ Ci, j × Bi, k ( u ) × Bj, l ( v )

Geometry
R ( u, v ) = -----------------------------------------------------------------------------
i = 0j = 0
N1 N2

∑ ∑ wi, j × Bi, k ( u ) × Bj, l ( v )


i = 0j = 0

k = degree in u
l = degree in v
N1 = (number of knots in u) - (degree in u) - 2
N2 = (number of knots in v) - (degree in v) - 2
Bi,k = basis function in u
Bj, l = basis function in v
wij = weights
Ci, j = control points (x,y,z) * wi,j

Engineering Notes:

The weights and c_points_arr arrays represent matrices of size


wghts[N1+1] [N2+1] and c_points_arr [N1+1] [N2+1]. Elements of
the matrices are packed into arrays in row-major order.

Cylindrical Spline Surface


The cylindrical spline surface is a nonuniform bicubic spline surface
that passes through a grid with tangent vectors given at each point.
The grid is curvilinear in modeling space.

Geometry Representations F - 11
Data Format:
e1[3] x' vector of the local coordinate
system
e2[3] y' vector of the local coordinate
system
e3[3] z' vector of the local coordinate
system, which corresponds to the
axis of revolution of the surface
origin[3] Origin of the local coordinate
system
splsrf Spline surface data structure

The spline surface data structure contains the following fields:


u_par_arr[] Point parameters, in the
u direction, of size Nu
v_par_arr[] Point parameters, in the
v direction, of size Nv
point_arr[][3] Array of points, in
cylindrical coordinates,
of size Nu x Nv. The array
components are as follows:
point_arr[i][0] - Radius
point_arr[i][1] - Theta
point_arr[i][2] - Z
u_tan_arr[][3] Array of u tangent vectors.
in cylindrical coordinates,
of size Nu x Nv
v_tan_arr[][3] Array of v tangent vectors,
in cylindrical coordinates,
of size Nu x Nv
uvder_arr[][3] Array of mixed derivatives,
in cylindrical coordinates,
of size Nu x Nv

F - 12 J-Link User’s Guide


Engineering Notes:

If the surface is represented in cylindrical coordinates (r, theta, z),


the local coordinate system values (x', y', z') are interpreted as
follows:
x' = r cos (theta)
y' = r sin (theta)
z' = z

Representations
A cylindrical spline surface can be obtained, for example, by

Geometry
creating a smooth rotational blend (shown in the figure on the
previous page).

In some cases, you can replace a cylindrical spline surface with a


surface such as a plane, cylinder, or cone. For example, in the
figure, the cylindrical spline surface S1 was replaced with a cone
(r1 = r2, r3 = r4, and r1 ≠ r3).

If a replacement cannot be done (such as for the surface S0 in the


figure (ra ≠ rb or rc ≠ rd)), leave it as a cylindrical spline surface
representation.

Edge and Curve Parameterization


This parameterization represents edges (line, arc, and spline) as
well as the curves (line, arc, spline, and NURBS) within the
surfaces.

This section describes edges and curves, arranged in order of


complexity. For ease of use, the alphabetical listing is as follows:

• Arc
• Line
• NURBS
• Spline

Line
Data Format:
end1[3] Starting point of the line
end2[3] Ending point of the line

Parameterization:
(x, y, z) = (1 - t) * end1 + t * end2

Geometry Representations F - 13
Arc
The arc entity is defined by a plane in which the arc lies. The arc is
centered at the origin, and is parameterized by the angle of rotation
from the first plane unit vector in the direction of the second plane
vector. The start and end angle parameters of the arc and the
radius are also given. The direction of the arc is counterclockwise if
the start angle is less than the end angle, otherwise it is clockwise.

Data Format:
vector1[3] First vector that defines the
plane of the arc
vector2[3] Second vector that defines the
plane of the arc
origin[3] Origin that defines the plane
of the arc
start_angle Angular parameter of the starting
point
end_angle Angular parameter of the ending
point
radius Radius of the arc.

Parameterization:
t' (the unnormalized parameter) is
(1 - t) * start_angle + t * end_angle
(x, y, z) = radius * [cos(t') * vector1 +
sin(t') * vector2] + origin

Spline
The spline curve entity is a nonuniform cubic spline, defined by a
series of three-dimensional points, tangent vectors at each point,
and an array of unnormalized spline parameters at each point.

Data Format:
par_arr[] Array of spline parameters
(t) at each point.
pnt_arr[][3] Array of spline interpolant points
tan_arr[][3] Array of tangent vectors at
each point

Parameterization:

x, y, and z are a series of unique cubic functions, one per segment,


fully determined by the starting and ending points, and tangents of
each segment.

F - 14 J-Link User’s Guide


Let p_max be the parameter of the last spline point. Then, t', the
unnormalized parameter, is t * p_max.

Locate the ith spline segment such that:


par_arr[i] < t' < par_arr[i+1]
(If t < 0 or t > +1, use the first or last segment.)
t0 = (t' - par_arr[i]) / (par_arr[i+1] - par_arr[i])
t1 = (par_arr[i+1] - t') / (par_arr[i+1] - par_arr[i])

Representations
Geometry
NURBS
The NURBS (nonuniform rational B-spline) curve is defined by
expandable arrays of knots, weights, and control points.

Data Format:
degree Degree of the basis function
params[] Array of knots
weights[] Array of weights for rational
NURBS, otherwise NULL.
c_pnts[][3] Array of control points

Definition:

∑ C i × B i, k ( t )
R ( t ) = --------------------------------------
i=0 -
N

∑ wi × Bi, k ( t )
i=0

Geometry Representations F - 15
k = degree of basis function

N = (number of knots) - (degree) - 2

wi = weights

Ci = control points (x, y, z) * wi

Bi,k = basis functions

By this equation, the number of control points equals N+1.

References:

Faux, I.D., M.J. Pratt. Computational Geometry for Design and


Manufacture. Ellis Harwood Publishers, 1983.

Mortenson, M.E. Geometric Modeling. John Wiley & Sons, 1985.

F - 16 J-Link User’s Guide


G
J-Link Classes

This appendix lists and briefly describes the classes that make up
the J-Link interface.

Topic Page

List of J-Link Classes G-2

G-1
List of J-Link Classes
The following table briefly describes the classes in the J-Link
interface.

Class Package Returned by

ActionListener pfcBase Base class; not returned.


This class defines an action listener.
ActionListeners pfcBase ActionListeners.create()
This data type is used to specify a list of action listeners.
ActionSource pfcBase Base class; not returned.
This class specifies an action source.
ActionSources pfcBase ActionSources.create()
This type describes an array of action sources.
AnalysisFeat pfcAnalysisFeat Downcast of pfcFeature.Feature.
This feature type specifies an analysis feature.
Arc pfcGeometry Downcast of pfcGeometry.Curve.
This class defines an arc.
AreaNibbleFeat pfcAreaNibbleFeat Downcast of pfcFeature.Feature.
This feature type specifies a nibble area. This feature type is used in sheetmetal applications.
Arrow pfcGeometry Downcast of pfcGeometry.Curve.
This class defines an arrow.
Assembly pfcAssembly Session.CreateAssembly(), Compo-
nentPath.GetRoot()
This class describes an assembly.
AssemblyCutCopyFeat pfcAssemblyCutCopyFeat Downcast of pfcFeature.Feature.
This feature type specifies a cut and copied feature, which is used in the Pro/ASSEMBLY module.
AssemblyCutFeat pfcAssemblyCutFeat Downcast of pfcFeature.Feature.
This feature type specifies a cutout feature, which is used in the Pro/ASSEMBLY module.
AttachFeat pfcAttachFeat Downcast of pfcFeature.Feature.
This feature type specifies an attached feature.
AttachVolumeFeat pfcAttachVolumeFeat Downcast of pfcFeature.Feature.
This feature type specifies an attached volume.
AuxiliaryFeat pfcAuxiliaryFeat Downcast of pfcFeature.Feature.
This feature type specifies an auxiliary feature.

G-2 J-Link User’s Guide


Class Package Returned by

Axis pfcGeometry Downcast of pfcModelItem.Mod-


elItem.
This class defines an axis.
BaseDimension pfcDimension Base class; not returned.
This class defines the base dimension.
BaseParameter pfcModelItem Base class; not returned.

J-Link Classes
Describes the base parameter.
BeamSectionFeat pfcBeamSectionFeat Downcast of pfcFeature.Feature.
This feature type specifies a beam section.
BendBackFeat pfcBendBackFeat Downcast of pfcFeature.Feature.
This feature type specifies a bend back feature, which is used in the Pro/NC-SHEETMETAL module.
BendFeat pfcBendFeat Downcast of pfcFeature.Feature.
This feature type specifies a bend feature.
BldOperationFeat pfcBldOperationFeat Downcast of pfcFeature.Feature.
This feature type specifies a build operation.
BOMExportInstructions pfcModel pfc-
Model.BOMExportInstructions_Create
()
Used to export a BOM for an assembly.
BSpline pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a B-spline curve.
BSplinePoint pfcGeometry BSplinePoints.get()
This class defines a B-spline point.
BSplinePoints pfcGeometry BSplinePoints.create(), BSpline.Get-
Points()
This data type is used to specify an array of B-spline points.
BulkObjectFeat pfcBulkObjectFeat Downcast of pfcFeature.Feature.
This feature type specifies a bulk object.
CableCosmeticFeat pfcCableCosmeticFeat Downcast of pfcFeature.Feature.
This feature type specifies a cosmetic feature used with the Pro/CABLING module.
CableFeat pfcCableFeat Downcast of pfcFeature.Feature.
This feature type specifies a cabling feature.
CableLocationFeat pfcCableLocationFeat Downcast of pfcFeature.Feature.
This feature type specifies a cable location.

J-Link Classes G-3


Class Package Returned by

CableParamsFileInstructions pfcModel pfc-


Model.CableParamsFileInstructions_C
reate()
Used to export cable parameters from an assembly.
CableSegmentFeat pfcCableSegmentFeat Downcast of pfcFeature.Feature.
This feature type specifies a cable segment.
CATIAExportInstructions pfcModel pfc-
Model.CATIAExportInstructions_Crea
te()
Used to export a part or assembly in CATIA format (as precise geometry)
CATIAFacetsExportInstructions pfcModel pfc-
Model.CATIAFacetsExportInstruction
s_Create()
Used to export a part or assembly in CATIA format (as a faceted model).
CavDeviationFeat pfcCavDeviationFeat Downcast of pfcFeature.Feature.
This feature type specifies a deviation feature, which is used in the Pro/VERIFY module.
CavFitFeat pfcCavFitFeat Downcast of pfcFeature.Feature.
This feature type specifies a fit feature, which is used in the Pro/VERIFY module.
CavScanSetFeat pfcCavScanSetFeat Downcast of pfcFeature.Feature.
This feature type specifies a scanset feature, which is used in the Pro/VERIFY module.
CGMExportType pfcModel CGMExportType.FromInt() or by
using one of the static instances (e.g.,
EXPORT_CGM_CLEAR_TEXT)
Indicates whether a CGM export file should be ASCII (clear text) or binary (mil spec)
CGMFILEExportInstructions pfcModel pfc-
Model.CGMFILEExportInstructions_
Create()
Used to export a drawing in CGM format.
CGMScaleType pfcModel CGMScaleType.FromInt() or by using
any of the static instances (e.g.,
EXPORT_CGM_ABSTRACT)
Indicates whether a CGM export file should include abstract or metric units
ChamferFeat pfcChamferFeat Downcast of pfcFeature.Feature.
This feature type specifies a chamfer.
ChannelFeat pfcChannelFeat Downcast of pfcFeature.Feature.
This feature type specifies a channel.
Child pfcObject Parent.GetChild(),

G-4 J-Link User’s Guide


Class Package Returned by

Describes a child feature.


Circle pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a circle.
CMMConstrFeat pfcCMMConstrFeat Downcast of pfcFeature.Feature.
This feature type specifies a construction feature used in the Pro/CMM module.

J-Link Classes
CMMMeasureStepFeat pfcCMMMeasureStepFeat Downcast of pfcFeature.Feature.
This feature type specifies a measured step feature, which is used in the Pro/CMM module.
CMMVerifyFeat pfcCMMVerifyFeat Downcast of pfcFeature.Feature.
This feature type specifies a verify feature, which is used in the Pro/CMM module.
ColorRGB pfcBase pfcBase.ColorRGB_Create(), Ses-
sion.GetRGBFromStdColor()
Specifies the red, green, and blue (RGB) values of a color.
CompModelReplace pfcComponentFeat ComponentFeat.CreateReplaceOp()
Used to replace one model in a component with another.
ComponentFeat pfcComponentFeat Downcast of pfcFeature.Feature.
Specifies a component feature.
ComponentPath pfcAssembly Selection.GetPath()
This class describes a component path.
ComponentType pfcComponentFeat ComponentType.FromInt() or by using
any of the static instances (e.g.,
COMP_WORKPIECE)
This enumerated type lists the possible component types.
CompositeCurve pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a composite curve.
Cone pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a cone.
ConnectorParamExportInstruc- pfcModel pfc-
tions Model.ConnectorParamExportInstructi
ons_Create()
Used to write the parameters of a connector to a file.
ContMapFeat pfcContMapFeat Downcast of pfcFeature.Feature.
This feature type specifies a contour map, which is used in the Pro/DIEFACE module.
Contour pfcGeometry Contours.get(), Contour.FindContain-
ingContour()
This class describes a contour.

J-Link Classes G-5


Class Package Returned by

Contours pfcGeometry Contours.create(), Surface.ListCon-


tours()
This data type is used to describe an array of contours.
ContourTraversal pfcGeometry ContourTraversal.FromInt() or by
using any of the static instances (e.g.,
CONTOUR_TRAV_INTERNAL)
This enumerated type lists the possible values for traversing the contour.
CoordAxis pfcBase CoordAxis.FromInt() or by using any
of the static instances (e.g.,
COORD_AXIS_X)
This enumerated type specifies the axes of a coordinate system.
CoordSysExportInstructions pfcModel Base class; not returned.
Base class of classes that export files with information that describes faceted, solid models
CoordSysFeat pfcCoordSysFeat Downcast of pfcFeature.Feature.
Describes a coordinate system feature, including constraint and translation information.
CoordSystem pfcGeometry Downcast of pfcModelItem.Mod-
elItem.
This class describes a coordinate system.
CoreFeat pfcCoreFeat Downcast of pfcFeature.Feature.
This feature type specifies a core feature, which is used in the Pro/COMPOSITE module.
CornerChamferFeat pfcCornerChamferFeat Downcast of pfcFeature.Feature.
This feature type specifies a corner chamfer.
CosmeticFeat pfcCosmeticFeat Downcast of pfcFeature.Feature.
This feature type specifies a cosmetic feature.
CrossSectionFeat pfcCrossSectionFeat Downcast of pfcFeature.Feature.
This feature type specifies a cross section.
CurvatureData pfcGeometry Surface.EvalPrincipalCurv()
This class specifies the curvature data.
Curve pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a curve.
CurveFeat pfcCurveFeat Downcast of pfcFeature.Feature.
Specifies a curve feature.
Curves pfcGeometry Curves.create(), Composite-
Curve.ListElements()
This data type is used to specify an array of curves.

G-6 J-Link User’s Guide


Class Package Returned by

CurveStartPoint pfcCurveFeat CurveStartPoint.FromInt() or by using


any of the static instances (e.g.,
CURVE_START)
This enumerated type lists the possible starting points of the datum curve offset.
CurveXYZData pfcGeometry GeomCurve.Eval3DData(), Geom-
Curve.EvalFromLength()

J-Link Classes
Stores the results of an edge evaluation.
CustomizeFeat pfcCustomizeFeat Downcast of pfcFeature.Feature.
This feature type specifies a customized feature.
CutFeat pfcCutFeat Downcast of pfcFeature.Feature.
This feature type specifies a cut feature.
CutMotionFeat pfcCutMotionFeat Downcast of pfcFeature.Feature.
This feature type specifies a cut motion feature, which is used in the Pro/NC module.
Cylinder pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a cylinder.
DatumAxisFeat pfcDatumAxisFeat Downcast of pfcFeature.Feature.
This feature type specifies a datum axis feature.
DatumPlaneFeat pfcDatumPlaneFeat Downcast of pfcFeature.Feature.
This feature type specifies a datum plane.
DatumPointFeat pfcDatumPointFeat Downcast of pfcFeature.Feature.
This feature type specifies a datum point.
DatumQuiltFeat pfcDatumQuiltFeat Downcast of pfcFeature.Feature.
This feature type specifies a datum quilt.
DatumSurfaceFeat pfcDatumSurfaceFeat Downcast of pfcFeature.Feature.
This feature type specifies a datum surface.
DeclareFeat pfcDeclareFeat Downcast of pfcFeature.Feature.
This feature type specifies a declared feature.
DeformAreaFeat pfcDeformAreaFeat Downcast of pfcFeature.Feature.
This feature type specifies a deformed area.
DeleteOperation pfcFeature Feature.CreateDeleteOp()
This class defines a delete operation.
Dependencies pfcModel Dependencies.create(), Model.ListDe-
pendencies()
This data type is used to specify the first-level dependencies for an object.
Dependency pfcModel Dependencies.get()

J-Link Classes G-7


Class Package Returned by

Describes the first-level dependency for an object.


Dimension pfcDimension Downcast of pfcModelItem.Mod-
elItem.
This class describes a dimension.
DimensionType pfcDimension DimensionType.FromInt() or by using
any of the static instances (e.g.,
DIM_LINEAR)
This enumerated type lists the possible dimension types.
DimTolerance pfcDimension Dimension.GetTolerance().
This class defines the dimension tolerance.
DimTolLimits pfcDimension DimTolLimits.Create()
This class displays the limits for the dimension tolerance.
DimTolPlusMinus pfcDimension DimTolPlusMinus.Create
This class displays the dimension tolerance in the form +/-x, where x is the plus tolerance. The value of the
minus tolerance is unused.
DimTolSymmetric pfcDimension DimTolSymmetric.Create()
This class displays the dimension tolerance in symmetrical form.
DisplayStatus pfcLayer DisplayStatus.FromInt() or by using
any of the static instances (e.g.,
LAYER_NORMAL).
This enumerated type lists the possible values for the display status of a layer.
Dome2Feat pfcDome2Feat Downcast of pfcFeature.Feature.
This feature type specifies a section dome.
DomeFeat pfcDomeFeat Downcast of pfcFeature.Feature.
This feature type specifies a radius dome.
DraftFeat pfcDraftFeat Downcast of pfcFeature.Feature.
This feature type specifies a draft.
DraftLineFeat pfcDraftLineFeat Downcast of pfcFeature.Feature.
This feature type specifies a line draft, which is used with the Pro/LEGACY module.
Drawing pfcDrawing Session.CreateDrawing
This class describes a drawing.
DrillFeat pfcDrillFeat Downcast of pfcFeature.Feature.
This feature type specifies a drill, which is used with the Pro/NC module.
DrillGroupFeat pfcDrillGroupFeat Downcast of pfcFeature.Feature.
This feature type specifies a drill group, which is used in the Pro/NC module.

G-8 J-Link User’s Guide


Class Package Returned by

DrvToolCurveFeat pfcDrvToolCurveFeat Downcast of pfcFeature.Feature.


This feature type specifies a driven-tool curve, which is used in the Pro/NC module.
DrvToolEdgeFeat pfcDrvToolEdgeFeat Downcast of pfcFeature.Feature.
This feature type specifies a driven-tool edge, which is used in the Pro/NC module.
DrvToolProfileFeat pfcDrvToolProfileFeat Downcast of pfcFeature.Feature.

J-Link Classes
This feature type specifies a driven-tool profile.
DrvToolSketchFeat pfcDrvToolSketchFeat Downcast of pfcFeature.Feature.
This feature type specifies a driven-tool sketch.
DrvToolSurfFeat pfcDrvToolSurfFeat Downcast of pfcFeature.Feature.
This feature type specifies a driven-tool surface.
DrvToolTwoCntrFeat pfcDrvToolTwoCntrFeat Downcast of pfcFeature.Feature.
This feature type specifies a tool with two centers.
DWGSetupExportInstructions pfcModel pfc-
Model.DWGSetupExportInstructions_
Create()
Used to export a drawing setup file.
DXFExportInstructions pfcModel pfc-
Model.DXFExportInstructions_Create(
)
Used to export a drawing in DXF format.
EarFeat pfcEarFeat Downcast of pfcFeature.Feature.
This feature type specifies an ear feature.
Edge pfcGeometry Edges.get(), Edge.GetEdge1(),
Edge.GetEdge2()
Describes the edge, including the next and previous edge, and the two surfaces.
EdgeBendFeat pfcEdgeBendFeat Downcast of pfcFeature.Feature.
This feature type specifies an edge bend.
EdgeEvalData pfcGeometry Edge.EvalUV()
This class provides edge evaluation data.
Edges pfcGeometry Edges.create(), Contour.ListEle-
ments(),
This data type is used to specify an array of edges.
Ellipse pfcGeometry Downcast of pfcGeometry.Curve.
This class defines an ellipse.
EtchFeat pfcEtchFeat Downcast of pfcFeature.Feature.

J-Link Classes G-9


Class Package Returned by

This feature type specifies an etched feature.


ExplodeLineFeat pfcExplodeLineFeat Downcast of pfcFeature.Feature.
This feature type specifies an explode line.
ExportInstructions pfcModel Base class; not returned.
Base class to all the export-instructions classes.
ExportType pfcModel ExportType.FromInt() or by using any
of the static instances (e.g.,
EXPORT_IGES_SECTION)
Enumeration of the available export options.
ExpRatioFeat pfcExpRatioFeat Downcast of pfcFeature.Feature.
This feature type specifies an exponential-ratio feature.
ExtendFeat pfcExtendFeat Downcast of pfcFeature.Feature.
This feature type specifies an extend feature.
ExtractFeat pfcExtractFeat Downcast of pfcFeature.Feature.
This feature type specifies an extraction.
FamColComp pfcFamily FamilyMember.CreateComponentCol-
umn()
This class describes a component column in a family table.
FamColCompModel pfcFamily FamilyMember.CreateCompModel-
Column()
This class describes a component model column in a family table.
FamColDimension pfcFamily FamilyMember.CreateDimensionCol-
umn()
This class specifies a dimension column in a family table.
FamColExternalRef pfcFamily Not returned.
This class describes an external reference column in a family table.
FamColFeature pfcFamily FamilyMember.CreateFeatureCol-
umn()
This class specifies a family column feature.
FamColGroup pfcFamily FamilyMember.CreateGroupColumn()
This class describes a group column in a family table.
FamColGTol pfcFamily Not returned.
This class describes a geometric tolerance (gtol) column in a family table.
FamColMergePart pfcFamily FamilyMember.CreateMergePartCol-
umn()
This class describes a merged part column in a family table.

G - 10 J-Link User’s Guide


Class Package Returned by

FamColModelItem pfcFamily Base class; not returned.


This class specifies a column in the family table.
FamColParam pfcFamily FamilyMember.CreateParamColumn()
This class specifies a parameter column in a family table.
FamColSystemParam pfcFamily Not returned.

J-Link Classes
This class describes a system parameter column in a family table.
FamColUDF pfcFamily Not returned.
This class describes a UDF column in a family table.
FamilyMember pfcFamily FamilyMember.GetParent()
This class describes a member in a family table.
FamilyTableColumn pfcFamily FamilyMember.AddColumn(), Fami-
lyTableColumns.get(),
This class specifies a column in a family table.
FamilyTableColumns pfcFamily FamilyTableColumns.create(), Family-
Member.ListColumns()
This data type is used to specify a list of columns in a family table.
FamilyTableRow pfcFamily FamilyMember.AddRow(), Family-
Member.GetRow(), FamilyTable-
Rows.get()
This class specifies a row in a family table.
FamilyTableRows pfcFamily FamilyTableRows.create(), Family-
Member.ListRows()
This data type is used to specify a list of rows in a family table.
FamIParNote pfcFamily Not returned.
This class specifies an integer parameter note.
FeatIdExportInstructions pfcModel Base class; not returned.
Base class of instructions classes that export data for a single feature.
FeatInfoExportInstructions pfcModel pfc-
Model.FeatInfoExportInstructions_Cre
ate()
Used to export information about one feature in a part or assembly.
Feature pfcFeature Solid.GetFeatureByName(),Feature-
Operation.GetOpFeature(). Also, by
downcasting pfcModelItem.Mod-
elItem.
This class defines the feature information.
FeatureActionListener_u pfcFeature Base class; not returned.

J-Link Classes G - 11
Class Package Returned by

Abstract base class that all user-defined FeatureActionListener classes must extend.
FeatureActionListener pfcFeature Base class; not returned.
Interface that must be implemented by user-defined classes that respond to Feature events.
FeatureGroup pfcFeature Feature.GetGroup()
This class describes a feature group.
FeatureOperation pfcFeature FeatureOperations.get()
This class defines a feature operation.
FeatureOperations pfcFeature FeatureOperations.create()
This class specifies a list of feature operations.
FeaturePattern pfcFeature Feature.GetPattern(), Feature-
Group.GetPattern()
This class specifies a feature pattern.
FeaturePlacement pfcFeature Feature.GetPlacement()
Specifies the placement of a feature.
Features pfcFeature Features.create(), Feature.ListChil-
dren(), Feature.ListParents(), Feature-
Pattern.ListMembers()
This data type specifies an array of features.
FeatureStatus pfcFeature FeatureStatus.FromInt() or by using
any of the static instances (e.g.,
FEAT_ACTIVE)
This enumerated type specifies the feature status.
FeatureType pfcFeature FeatureType.FromInt() or by using any
of the static instances (e.g.,
FEATTYPE_PROTRUSION)
This enumerated type lists the possible feature types.
FIATExportInstructions pfcModel pfc-
Model.FIATExportInstructions_Create
()
Used to export a part or assembly in FIAT format.
FirstFeat pfcFirstFeat Downcast of pfcFeature.Feature.
This feature type specifies the first feature in a model.
FixtureSetupFeat pfcFixtureSetupFeat Downcast of pfcFeature.Feature.
This feature type specifies a fixture setup.
FlangeFeat pfcFlangeFeat Downcast of pfcFeature.Feature.
This feature type specifies a flange.

G - 12 J-Link User’s Guide


Class Package Returned by

FlatPatFeat pfcFlatPatFeat Downcast of pfcFeature.Feature.


This feature type specifies a flat pattern.
FlatRibbonSegmentFeat pfcFlatRibbonSegmentFeat Downcast of pfcFeature.Feature.
This feature type is for flat ribbon segments.
FlattenFeat pfcFlattenFeat Downcast of pfcFeature.Feature.

J-Link Classes
This feature type specifies a flattened-harness feature.
FormFeat pfcFormFeat Downcast of pfcFeature.Feature.
This feature type specifies a form feature.
FreeFormFeat pfcFreeFormFeat Downcast of pfcFeature.Feature.
This feature type specifies a free-form feature.
FreeNotePlacement pfcNote pfcNote.FreeNotePlacement_Create()
Specifies the location of the attachment point “free” -- at a parametric point with respect to the model out-
line. For example, (0.5, 0.5, 0.5) would be the center, whereas (0.0, 0.0, 1.1) would be just outside one of
the corners.
GeomCopyFeat pfcGeomCopyFeat Downcast of pfcFeature.Feature.
This feature type specifies a geometric copy feature.
GeomCurve pfcGeometry RevolvedSurface.GetProfile(), Ruled-
Surface.GetProfile1(), RuledSur-
face.GetProfile2(),TabulatedCylinder.
GetProfile()
This class provides information for a geometry curve.
GeomExportFlags pfcModel pfcModel.GeomExportFlags_Create()
Stores extend-surface and Bezier options for use when exporting geometric information from a model.
GeomExportInstructions pfcModel Base class; not returned.
Base class to classes used to export precise geometric information from a model.
GraphFeat pfcGraphFeat Downcast of pfcFeature.Feature.
This feature type specifies a graph.
GrooveFeat pfcGrooveFeat Downcast of pfcFeature.Feature.
This feature type specifies a groove.
HoleFeat pfcHoleFeat Downcast of pfcFeature.Feature.
This feature type specifies a hole feature.
IGES3DExportInstructions pfcModel pfc-
Model.IGES3DExportInstructions_Cre
ate()
Used to export a part or assembly in IGES format.

J-Link Classes G - 13
Class Package Returned by

IGESFileExportInstructions pfcModel pfc-


Model.IGESFileExportInstructions_Cr
eate()
Used to export a drawing in IGES format
ImportFeat pfcImportFeat Downcast of pfcFeature.Feature.
This feature type specifies an import feature.
IntegerOId pfcObject Base class; not returned.
This class specifies an integer identifier. For internal use only.
InternalUDFFeat pfcInternalUDFFeat Downcast of pfcFeature.Feature.
This feature type is for internal use only.
IntersectFeat pfcIntersectFeat Downcast of pfcFeature.Feature.
This feature type specifies an intersection.
InventorExportInstructions pfcModel pfc-
Model.InventorExportInstructions_Cre
ate()
Used to export a part or assembly in Inventor format.
IPMQuiltFeat pfcIPMQuiltFeat Downcast of pfcFeature.Feature.
Specifies an IPM Quilt feature.
ISegmentFeat pfcISegmentFeat Downcast of pfcFeature.Feature.
This feature type specifies an ideal segment.
Layer pfcLayer Model.CreateLayer(). Also, by down-
casting pfcModelItem.ModelItem.
This class describes a layer.
Line pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a line.
LineStockFeat pfcLineStockFeat Downcast of pfcFeature.Feature.
This feature type specifies a line stock, which is used in the Pro/PIPING module.
LipFeat pfcLipFeat Downcast of pfcFeature.Feature.
This feature type specifies a lip feature.
LocPushFeat pfcLocPushFeat Downcast of pfcFeature.Feature.
This feature type specifies a local push feature.
ManualMillFeat pfcManualMillFeat Downcast of pfcFeature.Feature.
This feature type specifies a manual-mill feature.
Material pfcPart Materials.get(), Part.GetCurrentMate-
rial(), Part.CreateMaterial(),
Part.RetrieveMaterial()

G - 14 J-Link User’s Guide


Class Package Returned by

This class provides information about a material.


MaterialExportInstructions pfcModel pfc-
Model.MaterialExportInstructions_Cre
ate()
Used to export a material from a part.
MaterialOId pfcPart

J-Link Classes
This class specifies the identifier of a Material. For internal use only.
MaterialRemovalFeat pfcMaterialRemovalFeat Downcast of pfcFeature.Feature.
This feature type specifies a material removal feature.
Materials pfcPart Materials.create(), PartListMaterials()
This data type is used to specify a list of materials.
Matrix3D pfcBase Matrix3D.create(), Transform3D.Get-
Matrix()
This data type is used to describe a three-dimensional matrix.
MeasureFeat pfcMeasureFeat Downcast of pfcFeature.Feature.
This feature type specifies a measure feature.
MergeFeat pfcMergeFeat Downcast of pfcFeature.Feature.
This feature type specifies a merge feature.
MFG pfcMFG Session.CreateMFG(). Also, by down-
casting pfcModel.Model.
This class describes a manufacturing object.
MFGCLExportInstructions pfcModel Base class; not returned.
Base class to classes that export cutter-location files.
MFGFeatCLExportInstructions pfcModel pfc-
Model.MFGFeatCLExportInstructions
_Create()
Used to export a cutter location (CL) file for one NC sequence in a manufacturing assembly.
MFGGatherFeat pfcMFGGatherFeat Downcast of pfcFeature.Feature.
This feature type specifies a gather feature.
MFGMergeFeat pfcMFGMergeFeat Downcast of pfcFeature.Feature.
This feature type specifies a manufacturing merge feature.
MFGOperCLExportInstructions pfcModel pfc-
Model.MFGOperCLExportInstructions
_Create()
Used to export a cutter location (CL) file for all the NC sequences in an operation.
MFGRefineFeat pfcMFGRefineFeat Downcast of pfcFeature.Feature.

J-Link Classes G - 15
Class Package Returned by

This feature type specifies a manufacturing refine feature.


MFGTrimFeat pfcMFGTrimFeat Downcast of pfcFeature.Feature.
This feature type specifies a manufacturing trim feature.
MFGUseVolumeFeat pfcMFGUseVolumeFeat Downcast of pfcFeature.Feature.
This feature type specifies a manufacturing use volumes feature.
MillFeat pfcMillFeat Downcast of pfcFeature.Feature.
This feature type specifies a milling feature.
Model pfcModel Selection.GetSelModel(), Win-
dow.GetModel(), CompModelRe-
place.GetNewModel(),CableParamsFil
eInstructions.GetMdl()
This class specifies the information about a model.
ModelDescriptor pfcModel pfcModelDescrip-
tor.ModelDescriptor_Create(),
Model.GetDescr()
This class describes the descriptor for a model.
ModelDescriptors pfcModel ModelDescriptors.create(), Model.List-
DeclaredModels()
This data type is used to specify an array of model descriptors.
ModelInfoExportInstructions pfcModel pfc-
Model.ModelInfoExportInstructions_C
reate()
Used to export information about a model, including units information, features, and children.
ModelItem pfcModelItem ModelItemOwner.GetItemById(),
ModelItemOwner.GetItemByName(),
Selection.GetSelItem(), FamColMod-
elItem.GetRefItem()
This class defines a model item.
ModelItemOId pfcModelItem pfcModel.ModelItemOId_Create()
This class specifies the owner of a model item. For internal use only.
ModelItemOwner pfcModelItem Base class; not returned.
This class specifies the owner of a model item.
ModelItems pfcModelItem ModelItems.create(), Feature.ListSub-
Items(), ModelItemOwner.ListItems(),
Layer.ListItems()
Specifies a list of model items.

G - 16 J-Link User’s Guide


Class Package Returned by

ModelItemType pfcModelItem ModelItemType.FromInt() or by using


any of the static instances (e.g.,
ITEM_SURFACE)
This enumerated type lists the different kinds of model item.
ModelItemTypes pfcModelItem ModelItemTypes.create(), Solid.Exclu-
deTypes()

J-Link Classes
Specifies a list of model item types.
ModelOId pfcModel pfcModelOId.ModelOId_Create(),
Model.GetOId()
This class describes a model owner. For internal use only.
Models pfcModel Models.create(), Session.ListModels()
This data type is used to specify a list of models.
ModelType pfcModel ModelType.FromInt() or by using any
of the static instances (e.g.,
MDL_ASSEMBLY)
This enumerated type lists the supported model types.
MoldFeat pfcMoldFeat Downcast of pfcFeature.Feature.
This feature type specifies a mold feature.
NamedModelItem pfcModelItem Base class; not returned.
This class specifies the name of a model item.
NeckFeat pfcNeckFeat Downcast of pfcFeature.Feature.
This feature type specifies a neck feature.
Note pfcNote pfcSolid.CreateNote()
Specifies the information for a note.
NoteLeader pfcNote pfcNote.NoteLeader_Create()
Specifies the note leader information.
NoteLeaders pfcNote NoteLeaders.create(), Parametric-
NotePlacement.GetLeaders()
Specifies an array of note leaders.
NoteLeaderType pfcNote NoteLeaderType.FromInt() or by using
any of the static instances (e.g.,
NOTE_LEADER_NONE)
This enumerated type lists the possible kids of note leader.
NotePlacement pfcNote Note.GetPlacement()
Specifies the placement of the note.
Object pfcObject Base class; not returned.

J-Link Classes G - 17
Class Package Returned by

Base classes to classes that represent Pro/ENGINEER objects.


OffsetCurveDirection pfcCurveFeat OffsetCurveDirection.FromInt() or by
using any of the static instances (e.g.,
OFFSET_SIDE_ONE)
This enumerated type specifies the direction of an offset.
OffsetFeat pfcOffsetFeat Downcast of pfcFeature.Feature.
This feature type specifies an offset feature.
OId pfcObject Child.GetOId()
This class defines the owner identifier object. For internal use only.
OperationComponentFeat pfcOperationComponent- Downcast of pfcFeature.Feature.
Feat
This feature type specifies an operation component feature.
OperationFeat pfcOperationFeat Downcast of pfcFeature.Feature.
This feature type specifies an operation feature.
OptegraVisExportInstructions pfcModel pfc-
Model.OptegraVisExportInstructions_
Create()
Used to export a part or assembly in Optegra Vis format.
Outline2D pfcBase Outline2D.create(), Contour.EvalOut-
line()
This data type is used to specify a two-dimensional outline.
Outline3D pfcBase Outline3D.create(), Solid.GetGeo-
mOutline(), Solid.EvalOutline()
This data type is used to specify a three-dimensional outline.
Parameter pfcModelItem ParameterOwner.CreateParam(),
ParameterOwner.GetParam(), Parame-
terOwner.SelectParam(), FamCol-
Param.GetRefParam(),
Parameters.get(), pfcModelItem.Cre-
ate*ParamValue()
This class defines a parameter object.
ParameterOwner pfcModelItem Base class; not returned.
This class defines a parameter owner object.
Parameters pfcModelItem Parameters.create()
Specifies a list of parameters.
ParametricNotePlacement pfcNote pfc-
Note.ParametricNotePlacement_Create
()

G - 18 J-Link User’s Guide


Class Package Returned by

Defines the parametric placement of a note.


ParamOId pfcModelItem pfcModel.ParamOId_Create(), Param-
eterOwner.ListParams()
This class specifies the owner of a parameter. For internal use only.
ParamType pfcSession ParamType.FromInt() or by using any
of the static instances (e.g.,

J-Link Classes
DIMTOL_PARAM)
Enumeration of parameters types that is used to specify which parameters to display.
ParamValue pfcModelItem BaseParameter.GetValue(), Family-
Member.GetCell(), ParamValues.get(),
This class describes the value of the parameter.
ParamValues pfcModelItem ParamValues.create()
This data type is used to specify an array of parameters.
ParamValueType pfcModelItem ParamValueType.FromInt() or by using
any of the static instances (e.g.,
PARAM_STRING)
This enumerated type lists the possible kinds of parameter value.
Parent pfcObject Child.GetDBParent()
This class specifies a parent object.
Part pfcPart Session.CreatePart()
This class defines the material data for a part.
PatchFeat pfcPatchFeat Downcast of pfcFeature.Feature.
This feature type specifies a patch.
PipeBranchFeat pfcPipeBranchFeat Downcast of pfcFeature.Feature.
This feature type specifies a pipe branch.
PipeExtendFeat pfcPipeExtendFeat Downcast of pfcFeature.Feature.
This feature type specifies a pipe extension.
PipeFeat pfcPipeFeat Downcast of pfcFeature.Feature.
This feature type specifies a pipe feature.
PipeFollowFeat pfcPipeFollowFeat Downcast of pfcFeature.Feature.
This feature type specifies a follow feature, which is used in pipe routing.
PipeJoinFeat pfcPipeJoinFeat Downcast of pfcFeature.Feature.
This feature type specifies a pipe join feature.
PipeJointFeat pfcPipeJointFeat Downcast of pfcFeature.Feature.
This feature type specifies a pipe joint.

J-Link Classes G - 19
Class Package Returned by

PipeLineFeat pfcPipeLineFeat Downcast of pfcFeature.Feature.


This feature type specifies a pipeline feature.
PipePointToPointFeat pfcPipePointToPointFeat Downcast of pfcFeature.Feature.
This feature type specifies a point-to-point pipe feature.
PipeSetStartFeat pfcPipeSetStartFeat Downcast of pfcFeature.Feature.
This feature type specifies a start feature, which is used in the Pro/PIPING module.
PipeTrimFeat pfcPipeTrimFeat Downcast of pfcFeature.Feature.
This feature type specifies a trim feature, which is used in the Pro/PIPING module.
Placement pfcBase Placement.FromInt() or by using any
of the static instances (e.g.,
PLACE_INSIDE)
This enumerated type lists the possible placement types for points on contours.
Plane pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a plane.
PlotInstructions pfcModel pfcModel.PlotInstructions_Create()
Used with Model.Export() to plot a part, drawing, or assembly.
PlotPageRange pfcModel PlotPageRange.FromInt() or by using
any of the static instances (e.g.,
PLOT_RANGE_CURRENT)
This enumerated type specifies which pages to plot.
PlotPaperSize pfcModel PlotPaperSize.FromInt() or by using
any of the static instances (e.g.,
BSIZEPLOT)
This enumerated type specifies the size of the paper used for the plot.
PlyFeat pfcPlyFeat Downcast of pfcFeature.Feature.
This feature type specifies a ply feature.
Point pfcGeometry Downcast of pfcModelItem.Mod-
elItem.
This class defines a point.
Point2D pfcBase Point2D.create(), Outline2D.get()
This data type is used to specify a two-dimensional point.
Point3D pfcBase Point3D.create(), Outline3D.get(), and
additional methods that return multiple
points
This data type is used to specify a three-dimensional point.
Point3Ds pfcBase Point3Ds.create(), Polygon.GetVerti-
ces()

G - 20 J-Link User’s Guide


Class Package Returned by

Defines a list of three-dimensional points.


Polygon pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a polygon.
PositionFoldFeat pfcPositionFoldFeat Downcast of pfcFeature.Feature.
This feature type specifies a position fold feature.

J-Link Classes
ProcessStepFeat pfcProcessStepFeat Downcast of pfcFeature.Feature.
This feature type specifies a process step feature, which is used in the Pro/PROCESS for ASSEMBLIES
module.
ProgramExportInstructions pfcModel pfc-
Model.ProgramExportInstructions_Cre
ate()
Used to export a program file for a part or assembly, which can be edited to change the model.
ProtrusionFeat pfcProtrusionFeat Downcast of pfcFeature.Feature.
This feature type specifies a protrusion.
Quilt pfcGeometry Surface.GetOwnerQuilt(). Also, by
downcasting pfcModelItem.Mod-
elItem.
This class defines a quilt.
RefDimension pfcDimension Downcast of pfcModelItem.Mod-
elItem.
This class describes a reference dimension.
RegenInstructions pfcSolid pfcSolid.RegenInstructions_Create()
This class describes the regeneration instructions of a feature.
RelationExportInstructions pfcModel pfc-
Model.RelationExportInstructions_Cre
ate ()
Used to export a list of the relations and parameters in a part or assembly.
RemoveSurfacesFeat pfcRemoveSurfacesFeat Downcast of pfcFeature.Feature.
This feature type specifies a removed-surface feature.
RenderExportInstructions pfcModel pfc-
Model.RenderExportInstructions_Crea
te()
Used to export a part or assembly in RENDER format.
ReorderAfterOperation pfcFeature Feature.CreateReorderAfterOp()
This class defines how to reorder the features in the regeneration order list.
ReorderBeforeOperation pfcFeature Feature.CreateReorderBeforeOp()
This class determines how to move the features backward in the regeneration order list.

J-Link Classes G - 21
Class Package Returned by

ReplaceSurfaceFeat pfcReplaceSurfaceFeat Downcast of pfcFeature.Feature.


This feature type specifies a replaced surface feature.
ResumeOperation pfcFeature Feature.CreateResumeOp()
Specifies a resume operation for a feature.
RetrieveModelOptions pfcSession pfcSes-
sion.RetrieveModelOptions_Create()
This class determines what information about the simplified representations in a model to retrieve.
RevolvedSurface pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a revolved surface.
RibbonCableFeat pfcRibbonCableFeat Downcast of pfcFeature.Feature.
This feature type specifies a ribbon cable.
RibbonExtendFeat pfcRibbonExtendFeat Downcast of pfcFeature.Feature.
This feature type specifies a ribbon extension.
RibbonPathFeat pfcRibbonPathFeat Downcast of pfcFeature.Feature.
This feature type specifies a ribbon path feature.
RibbonSolidFeat pfcRibbonSolidFeat Downcast of pfcFeature.Feature.
This feature type specifies a solid ribbon.
RibFeat pfcRibFeat Downcast of pfcFeature.Feature.
This feature type specifies a rib feature.
RipFeat pfcRipFeat Downcast of pfcFeature.Feature.
This feature type specifies a rip feature, which is used in the Pro/NC-SHEETMETAL module.
RoundFeat pfcRoundFeat Downcast of pfcFeature.Feature.
This feature type specifies a round feature.
RuledSurface pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a ruled surface.
SawFeat pfcSawFeat Downcast of pfcFeature.Feature.
This feature type specifies a saw feature.
Selection pfcSelect Selections.get(), NoteLeader.GetSel()
This class contains the selection information.
SelectionOptions pfcSelect pfcSelect.SelectionOptions_Create()
This class describes the selection options.
Selections pfcSelect Selections.create(), Session.Select()
This data type is used to specify an array of selections.
Session pfcSession pfcGloba.GetProESession()

G - 22 J-Link User’s Guide


Class Package Returned by

This class defines the information about a session object.


SessionActionListener_u pfcSession Base class; not returned.
Abstract base class that all user-defined SessionActionListener classes must extend.
SessionActionListener pfcSession Base class; not returned.
Interface to be implemented by user-defined classes that respond to session events.

J-Link Classes
SETExportInstructions pfcModel pfc-
Model.SETExportInstructions_Create(
)
This class defines a ruled surface.
SETFeat pfcSETFeat Downcast of pfcFeature.Feature.
This feature type specifies a SET file.
ShaftFeat pfcShaftFeat Downcast of pfcFeature.Feature.
This feature type specifies a shaft.
SheetmetalClampFeat pfcSheetmetalClampFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal clamp.
SheetmetalConversionFeat pfcSheetmetalConversion- Downcast of pfcFeature.Feature.
Feat
This feature type specifies a conversion feature, which is used in the Pro/NC-SHEETMETAL module.
SheetmetalCutFeat pfcSheetmetalCutFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal cut feature.
SheetmetalOptimizeFeat pfcSheetmetalOpti- Downcast of pfcFeature.Feature.
mizeFeat
This feature type specifies an optimize feature, used in the Pro/NC-SHEETMETAL module.
SheetmetalPopulateFeat pfcSheetmetalPopulateFeat Downcast of pfcFeature.Feature.
This feature type specifies a populate feature, which is used in the Pro/NC-SHEETMETAL module.
SheetmetalPunchPointFeat pfcSheetmetalPunchPoint- Downcast of pfcFeature.Feature.
Feat
This feature type specifies a punch point, which is used in the Pro/NC-SHEETMETAL module.
SheetmetalShearFeat pfcSheetmetalShearFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal shear feature.
SheetmetalZoneFeat pfcSheetmetalZoneFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal zone.
ShellFeat pfcShellFeat Downcast of pfcFeature.Feature.
This feature type specifies a shell.
ShrinkageFeat pfcShrinkageFeat Downcast of pfcFeature.Feature.

J-Link Classes G - 23
Class Package Returned by

This feature type specifies a shrinkage feature, which is used in the Pro/MOLD and Pro/CAST modules.
ShrinkDimFeat pfcShrinkDimFeat Downcast of pfcFeature.Feature.
This feature type specifies a shrink dimension feature, which is used in the Pro/MOLD and Pro/CAST
modules.
SilhouetteTrimFeat pfcSilhouetteTrimFeat Downcast of pfcFeature.Feature.
This feature type specifies a silhouette trim feature.
STLASCIIExportInstructions pfcModel pfc-
Model.SLAASCIIExportInstructions_
Create()
Used to export a part or assembly to an ASCII STL file.
STLBinaryExportInstructions pfcModel pfc-
Model.SLABinaryExportInstructions_
Create()
Used to export a part or assembly in a binary STL file.
SlotFeat pfcSlotFeat Downcast of pfcFeature.Feature.
This feature type specifies a slot.
SMMFGApproachFeat pfcSMMFGApproachFeat Downcast of pfcFeature.Feature.
This feature type specifies an approach feature, which is used in sheetmetal manufacturing.
SMMFGCosmeticFeat pfcSMMFGCosmeticFeat Downcast of pfcFeature.Feature.
This feature type specifies a cosmetic feature used in sheetmetal manufacturing.
SMMFGCutFeat pfcSMMFGCutFeat Downcast of pfcFeature.Feature.
This feature type specifies a cut feature for sheetmetal manufacturing.
SMMFGFormFeat pfcSMMFGFormFeat Downcast of pfcFeature.Feature.
This feature type specifies a form feature used in sheetmetal manufacturing.
SMMFGMaterialRemoveFeat pfcSMMFGMaterialRe- Downcast of pfcFeature.Feature.
moveFeat
This feature type specifies a material removal feature, which is used in sheetmetal manufacturing.
SMMFGOffsetFeat pfcSMMFGOffsetFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal offset feature.
SMMFGPunchFeat pfcSMMFGPunchFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal punch feature.
SMMFGShapeFeat pfcSMMFGShapeFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal shape feature.
SMMFGSlotFeat pfcSMMFGSlotFeat Downcast of pfcFeature.Feature.
This feature type specifies a sheetmetal slot.

G - 24 J-Link User’s Guide


Class Package Returned by

Solid pfcSolid ComponentPath.GetLeaf()


This class defines a solid.
SolidActionListener _u pfcSolid Base class; not returned.
Abstract base class that all user-defined SolidActionListener classes must extend.
SolidActionListener pfcSolid Base class; not returned.

J-Link Classes
Interface to be implemented by user-defined classes that respond to solid events.
SolidifyFeat pfcSolidifyFeat Downcast of pfcFeature.Feature.
This feature type specifies a solidify feature, which is used in the Pro/COMPOSITE module.
SolidPipeFeat pfcSolidPipeFeat Downcast of pfcFeature.Feature.
This feature type specifies a solid pipe feature.
SpinalBendFeat pfcSpinalBendFeat Downcast of pfcFeature.Feature.
This feature type specifies a spinal bend.
Spline pfcGeometry Downcast of pfcGeometry.Curve.
This class defines a spline.
SplinePoint pfcGeometry SplinePoints.get()
This class defines a spline point.
SplinePoints pfcGeometry SplinePoints.create(), Spline.Get-
Points()
This data type is used to specify an array of spline points.
SplitFeat pfcSplitFeat Downcast of pfcFeature.Feature.
This feature type specifies a split feature.
SplitSurfaceFeat pfcSplitSurfaceFeat Downcast of pfcFeature.Feature.
This feature type specifies a split-surface feature.
SpoolFeat pfcSpoolFeat Downcast of pfcFeature.Feature.
This feature type specifies a spool.
SpringBackFeat pfcSpringBackFeat Downcast of pfcFeature.Feature.
This feature type specifies a spring-back feature.
StdColor pfcBase Session.SetTextColor(), GetRGB-
FromStdColor(), StdColor.FromInt(),
or by using any of the static instances
(e.g., COLOR_SHEETMETAL)
This enumerated type lists the supported color types.
StdLineStyle pfcBase Session.SetLineStyle(), StdLine-
Style.FromInt(), or by using any of the
static instances (e.g., LINE_SOLID)

J-Link Classes G - 25
Class Package Returned by

This enumerated type lists the possible line styles.


STEPExportInstructions pfcModel pfc-
Model.STEPExportInstructions_Create
()
Used to export a part or assembly in STEP format.
StringOId pfcObject Base class; not returned.
This class specifies a string identifier. For internal use only.
SubHarnessFeat pfcSubHarnessFeat Downcast of pfcFeature.Feature.
This feature type specifies a subharness.
SuppressOperation pfcFeature Feature.CreateSuppressOp()
This class defines a suppress operation.
Surface pfcGeometry Surfaces.get(), Edge.GetSurface1(),
GetSurface2(). Also, by downcasting
pfcModelItem.ModelItem.
This class defines a surface.
SurfaceModelFeat pfcSurfaceModelFeat Downcast of pfcFeature.Feature.
This feature type specifies a surface model.
Surfaces pfcGeometry Surfaces.create(), Quilt.ListElements(),
Surface.ListSameSurfaces().
This data type is used to describe an array of surfaces.
SurfXYZData pfcGeometry Surface.Eval3DData()
Stores the results of a surface evaluation.
TabulatedCylinder pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a tabulated cylinder.
Text pfcGeometry Downcast of pfcGeometry.Curve.
This class defines the text information.
TextStyle pfcBase pfcBase.TextStyle_Create(), Text.Get-
Style(). Note.GetStyle(),
This class specifies the text attributes.
ThickenFeat pfcThickenFeat Downcast of pfcFeature.Feature.
This feature type specifies a thicken feature, which is used in the Pro/NC-SHEETMETAL module.
ThreadFeat pfcThreadFeat Downcast of pfcFeature.Feature.
This feature type specifies a thread.
Torus pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a torus.

G - 26 J-Link User’s Guide


Class Package Returned by

TorusFeat pfcTorusFeat Downcast of pfcFeature.Feature.


This feature type is used for a torus.
Transform3D pfcBase pfcBase.Transform3D_Create(), Com-
ponentPath.GetTransform(), Coord-
System.GetCoordSys(),
TransformedSurface.GetCoordSys()
View.GetTransform(), Win-

J-Link Classes
dow.GetTransform()
This class provides information about the transformation.
TransformedSurface pfcGeometry Downcast of pfcGeometry.Surface.
This class defines a transformed surface.
TurnFeat pfcTurnFeat Downcast of pfcFeature.Feature.
This feature type specifies a turn feature, which is used in the manufacturing module.
TwistFeat pfcTwistFeat Downcast of pfcFeature.Feature.
This feature type specifies a twist feature.
UDFClampFeat pfcUDFClampFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF clamp.
UDFFeat pfcUDFFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF feature.
UDFNotchFeat pfcUDFNotchFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF notch feature.
UDFPunchFeat pfcUDFPunchFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF punch feature.
UDFRmdtFeat pfcUDFRmdtFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF for rapid mold design.
UDFThreadFeat pfcUDFThreadFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF thread feature.
UDFWorkRegionFeat pfcUDFWorkRegionFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF work region feature.
UDFZoneFeat pfcUDFZoneFeat Downcast of pfcFeature.Feature.
This feature type specifies a UDF zone feature.
UICommand pfcCommand Session.UICreateCommand()
An action-listener object for menu commands.
UICommandActionListener_u pfcCommand Base class; not returned.
Abstract base class that all user-defined UICommandActionListener classes must extend.

J-Link Classes G - 27
Class Package Returned by

UICommandActionListener pfcCommand Base class; not returned.


Interface to be implemented by user-defined classes that respond to UI command events.
UnbendFeat pfcUnbendFeat Downcast of pfcFeature.Feature.
This feature type specifies an unbend feature, which is used in the Pro/NC-SHEETMETAL module.
UserFeat pfcUserFeat Downcast of pfcFeature.Feature.
This feature type specifies a user feature.
UVParams pfcBase UVParams.create(), EdgeEval-
Data.GetPoint*(), Selection.Get-
Params(), SurfXYZData.GetParams()
This data type is used to specify UV parameters.
UVVector pfcBase UVVector.create(), EdgeEvalData.Get-
Derivative*()
This data type is used to specify a UV-vector.
VDAExportInstructions pfcModel pfc-
Model.CATIAExportInstructions_Crea
te().VDAExportInstructions_Create()
Used to export a part or assembly in VDA format.
VDAFeat pfcVDAFeat Downcast of pfcFeature.Feature.
This feature type specifies a VDA file.
Vector2D pfcBase Vector2D.create()
This data type is used to specify a two-dimensional vector.
Vector3D pfcBase Vector3D.create(), Vectors3D.get(),
and additional methods that return
information about geometric curves.
This data type is used to specify a three-dimensional vector.
Vector3Ds pfcBase Vector3Ds.create()
This data type is used to specify a list of three-dimensional vectors.
View pfcView ViewOwner.Get-
View(),ViewOwner.Save-
View(),ViewOwner.RetrieveView(),
Views.get()
This class specifies information about a view.
ViewOId pfcView pfcView.ViewOId_Create()
This class specifies the owner of a view. For internal use only.
ViewOwner pfcView Base class; not returned.
This class describes the owner of the view.

G - 28 J-Link User’s Guide


Class Package Returned by

Views pfcView Views.create(), ViewOwner.List-


Views()
This data type is used to specify an array of views.
VolSplitFeat pfcVolSplitFeat Downcast of pfcFeature.Feature.
This feature type specifies a split-volume feature.
WallFeat pfcWallFeat Downcast of pfcFeature.Feature.

J-Link Classes
This feature type specifies a wall, which is used in the Pro/NC-SHEETMETAL module.
WaterLineFeat pfcWaterLineFeat Downcast of pfcFeature.Feature.
This feature type specifies a waterline feature.
WeldEdgePrepFeat pfcWeldEdgePrepFeat Downcast of pfcFeature.Feature.
This feature type specifies a preparation edge, which is used in the Pro/WELDING module.
WeldFilletFeat pfcWeldFilletFeat Downcast of pfcFeature.Feature.
This feature type specifies a welding fillet.
WeldGrooveFeat pfcWeldGrooveFeat Downcast of pfcFeature.Feature.
This feature type specifies a weld groove.
WeldingRodFeat pfcWeldingRodFeat Downcast of pfcFeature.Feature.
This feature type specifies a welding rod.
WeldPlugSlotFeat pfcWeldPlugSlotFeat Downcast of pfcFeature.Feature.
This feature type specifies a plug-slot feature, which is used in the Pro/WELDING module.
WeldSpotFeat pfcWeldSpotFeat Downcast of pfcFeature.Feature.
This feature type specifies a welding spot.
Window pfcWindow Session.GetCurrentWindow(), Ses-
sion.CreateModelWindow(), Ses-
sion.OpenFile(),
Session.GetWindow(), Windows.get()
This class describes the attributes of a window.
WindowOId pfcWindow pfcWindow.WindowOId_Create()
This class specifies a window identifier. For internal use only.
Windows pfcWindow Session.ListWindows(), Windows.cre-
ate()
This data type is used to specify an array of windows.
WorkcellFeat pfcWorkcellFeat Downcast of pfcFeature.Feature.
This feature type specifies a workcell.
XBadArgument pfcExceptions Created, thrown in J-Link code.
This exception is thrown when you specify an invalid argument.

J-Link Classes G - 29
Class Package Returned by

XBadGetParamValue pfcExceptions Created, thrown in J-Link code.


This exception is thrown when you specify an invalid parameter type.
XBadOutlineExcludeType pfcExceptions Created, thrown in J-Link code.
This exception is thrown when you specify an invalid outline exclusion type.
XInAMethod pfcExceptions Base class of most J-Link exceptions.
This exception is thrown when you specify an invalid method name.
XInvalidEnumValue pfcExceptions Created, thrown in J-Link code.
This exception is thrown when you specified an invalid enumerated value.
XPFC pfcExceptions Base class of most J-Link exceptions.
This exception is thrown when a general usage error occurs.
XSequenceTooLong pfcExceptions Created, thrown in J-Link code.
This exception is thrown when the sequence length exceeds the maximum allowable size.
XStringTooLong pfcExceptions Created, thrown in J-Link code.
This exception is thrown when the specified string exceeds the maximum allowable length.
XToolkitError pfcExceptions Created, thrown in J-Link code.
This exception is thrown when there is a toolkit error.
XUnimplemented pfcExceptions Created, thrown in J-Link code.
This exception is thrown when there is a call to a function that is unimplemented.
XUnknownModelExtension pfcExceptions Created, thrown in J-Link code.
This exception is thrown when you specify an invalid model extension.
ZoneFeat pfcZoneFeature Downcast of pfcFeature.Feature
This feature type specifies a zone feature.

G - 30 J-Link User’s Guide


Index

A requirements 5-3
navigating the tree 5-9
abstract keyword 2-6 Netscape Navigator
Accuracy Java2 plugin not recommended 5-6
getting and setting 11-2 requirements 5-3
ActionListener searching for a string 5-13
creating 21-2 supported web browsers 5-3
definition 2-6 Swing
description of the class 3-10 class path-NT 5-4
events 21-2
class path-UNIX 5-4
feature-level 21-10
session-level 21-4 download JFC archive 5-3
solid-level 21-8 Java Foundation Class 5-3
types 21-2 topic/object selection frame 5-6
UI command 21-5 tree updating
ActionSource interface 21-3 defined 5-6
definition 3-11 Java2 plugin requirements 5-6
Activate Applications
window 12-4 creating 3-14
Adapters 2-6 hierarchy 3-14
Add registering 1-4
items to a layer 13-4 running 1-5
Allocate setting up 1-2
simplified representations 23-4 standalone 1-2
allow_stop field 1-3 Arcs
APIWizard description 16-4
browsing representation F-14
objects 5-9 Area
user’s guide 5-11 surface 16-11
defined 5-2 Arguments, optional 4-2
display frame 5-7 Arrays 3-7
find (search mechanism) 5-13 sample class 3-8
interface defined 5-6 Arrows 16-5
Internet Explorer Assemblies
Java2 plug in 5-3 coordinate systems 12-8
Java2 plugin 5-6 creating 11-2
hierarchy 19-3

Index - i
structure of 19-2 Contours, locating in a model 16-7
Axes 16-12 Coons patches
evaluating 16-12 geometry representation F-8
Coordinate systems 12-6, 16-12
B assemblies 12-8
datum 12-8
Bounding box 11-5 drawing 12-7
Browsing Drawing View 12-7
objects with APIWizard 5-9 evaluating 16-12
Pro/TOOLKIT user’s guide with APIWizard screen 12-7
5-11 section 12-8
B-splines solid 12-6
description 16-4 window 12-7
Button Coordinate transformations 12-6
placing 8-14 Copy
Buttons models 9-9
creating 8-2 Create
Bytecodes 2-4 action listeners 21-2
applications 3-14
C assembly 11-2
catch block buttons 8-2
using multiple 3-22 family table columns 20-5
catch keyword 2-7 family table instance 20-3
Cells layer 13-4
accessing 20-4 local group 14-7
Child.GetDBParent description material 11-15
method 10-21 menus 8-2
Children 14-2 parameters 17-4
cipjava 3-14 part 11-2
Circles 16-5 simplified representations 23-4
Classes UDFs 14-9
list of G-2 window 12-2
types 3-2 Create Interactively Defined UDFs 14-11
Clear Creating UDFs 14-10
window 12-3 Curves 16-3
Close data structures F-13
window 12-4 determining the type 16-4
Collect principal 16-11
garbage 2-4 t parameter 16-3
Colors 6-7 types 16-4
Commands reserved 16-5
designating 8-12 Cylinders 16-9
Comments 2-7 geometry representation F-3
Composite curves spline surfaces F-11
description 16-4 tabulated 16-9
Cones geometry representation F-7
class representation 16-9
geometry representation F-4 D
Configuration file
Data types 2-6
PROTKDAT option 1-4
enums 3-9
toolkit_registry_file option 1-4
delay_start field 1-3
Configuration options 6-5
Delete
Constants 2-4
feature pattern 14-6
Contours
models 9-9
evaluating 16-7
row from a family table 20-3
traversing 16-2

Index - ii J-Link User’s Guide


simplified representations 23-4 Evaluation
Dependencies axes 16-12
creating 1-7 contour 16-7
Depth coordinate system 16-12
selection 7-4 edge 16-5
Descriptors point 16-12
model 9-3 surface 16-10
Designating Event handling
command 8-13 try blocks 2-7
commands 8-12 try-catch-finally blocks 3-15
icon 8-12 Examples
Designating commands 8-12 creating drawing views 10-17
Detail.DetailEntityInstructions interface listing views 10-22
description 10-51 normalizing a coordinate transformation matrix
Detail.DetailEntityItem interface 12-11
description 10-51 of ActionListeners 3-12
Diameter of arrays 3-8
surface 16-11 of dictionaries 3-10
Dictionaries 3-9 of sequences 3-7
Dimension2D.Dimension2D interface of utilities 3-13
description 10-26 retrieving a model 9-5
Dimensions 17-13 setting angular tolerances 17-15
information 17-13 using drawing sheets 10-12
tolerances 17-14 visiting the items in a simplified representation
Display 23-5
model in window 12-2 Exceptions
models 9-9 ActionListener 3-11
selection 7-5 array 3-8
Display status enumerated type 3-10
of layers 13-4 handling in code 3-15
Documentation Pro/ENGINEER-related object 3-4 to 3-5
see APIWizard 5-2 sequence 3-7
Drawing utility 3-13
models Export
code example 10-17 files 22-2
sheets
example 10-12 F
transformations 12-11
Faces
views
traversing 16-2
code example 10-17
Family tables 20-2
cells 20-4
E columns
Edges 16-3 accessing 20-3
determining the type 16-4 instances
evaluating 16-5 accessing 20-2
t parameter 16-3 symbols 20-3
traversing 16-2 Features
types 16-4 accessing 14-2
reserved 16-5 creating 14-4
Ellipses 16-5 failed 14-2
end field 1-4 groups 14-2, 14-7
Enumerated types 3-9 identifiers 14-2
sample class 3-10 information 14-3
Erase operations 14-4
models 9-9 parents 14-2

Index - iii
patterns 14-6 Inheritance
read-only 14-3 of ActionListeners 3-11
resuming 14-4 of arrays 3-8
suppressing 14-4 of enumerated types 3-10
user-defined 14-9 of Pro/ENGINEER-related objects 3-3, 3-5
Fields of sequences 3-6
of ActionListeners 3-11 of utilities 3-13
of arrays 3-8 overview 2-3
of enumerated types 3-9 Initialize
of Pro/ENGINEER-related objects 3-4 ActionListeners 3-11
of sequences 3-6 arrays 3-8
of utilities 3-13 dictionaries 3-9
Files Pro/ENGINEER-related objects 3-2, 3-4
exporting 22-2 sequences 3-6
JAR 1-7 utilities 3-12
message 6-8 Install
contents 6-8 See J-Link Installing B-2
naming restrictions 6-8 Installation
plotting 22-32 See J-Link Installing B-2
Fillet surfaces instanceof operator 2-5
geometry representation F-8 Interactive selection 7-2
final keyword 2-5 Interactively Defined UDFs
finally keyword 2-7 create 14-11
Find Internet Explorer
APIWizard search mechanism 5-13 Java2 plug in 5-3
FocusListener 2-7 requirements 5-3
Frames ItemListener 2-7
display frame in APIWizard 5-7
topic/object selection 5-6 J
G JAR files 1-7
Java
Garbage collection 2-4 bytecodes 2-4
General surface of revolution F-6 comments 2-7
Generic model data types 2-6
getting 20-3 enumerated types 3-9
Geometry equivalents to constants 2-4
solid edge 16-6 event handling 2-6
terms 16-2 implementation 2-3
traversal 16-2 inheritance 2-3
Groups 14-6, 14-9 jar command 1-7
javadoc 2-8
H JDBC 2-2
JDK
Hierarchy functionality 2-2
application 3-14 JVM 2-4
Highlight keywords 2-4
selections 7-5 overview 2-3
platform independence 2-4
I polymorphism 2-3
Implementation Java Virtual Machine 2-4
and inheritance 2-3 java.applet API 2-2
Import java.awt API 2-2
packages 3-14 java.io API 2-2
Information java.lang API 2-2
Drawing 10-6 java_app_class field 1-3

Index - iv J-Link User’s Guide


java_app_classpath field 1-3 of windows 12-2
java_app_start field 1-3 Local groups
java_app_stop field 1-3 creating 14-7
Java2 plugin Locks 20-3
not recommended for APIWizard with Netscape
Navigator 5-6 M
recommended for APIWizard use with Internet
Explorer 5-6 Machines
required for APIwizard with Internet Explorer setting up 1-2
5-3 Macros 6-6
javadoc tool 2-8 Mass properties 11-12
J-Link Materials 11-15
installing Matrix
test of B-2 code example 12-11
JLinkApplication.IsActive method Matrix3D object 12-12
description 25-8 Menus
jxthrowable exception creating 8-2
description 3-15 Message files 6-8
contents 6-8
K restrictions 6-8
Message window
Keywords reading from 6-10
abstract 2-6 writing to 6-10
catch 2-7 Methods
final 2-5 of ActionListeners 3-11
finally 2-7 of arrays 3-8
instanceof 2-5 of dictionaries 3-9
using 16-4 of Pro/ENGINEER-related objects 3-3, 3-5
native 2-6 of sequences 3-6
new 2-5 of utilities 3-13
package 2-5 overloading and overriding 2-4
private 2-5 starting and stopping 1-7
protected 2-5 Model programs 1-5
public 2-5 definition 1-5
static 2-5 running 1-6
throw 2-7 ModelItems
try 2-7 evaluating 16-12
getting 13-2
L information 13-3
types 13-2
Layers 13-4 Models
operations 13-4 descriptors 9-3
Lines Drawing
description 16-4 Obtaining 10-6
representation F-13 exporting 22-2
styles 6-7 getting 9-2
Lists operations 9-9
of children 14-2 retrieving 9-4
of current windows 12-2 code example 9-5
of layer items 13-4 Modify
of materials 11-15 simplified representations 23-8
of ModelItems 13-2
of parents 14-2 N
of pattern members 14-2, 14-7
of rows in a family table 20-3 name field 1-3
of subitems 13-2 native keyword 2-6
of views 12-5 Netscape Navigator

Index - v
requirements 5-3 pfcArgument.ArgValue.Getdiscr method
Swing required 5-3 description 25-3
new keyword 2-5 pfcAssembly.Assembly.AssembleByCopy method
Normalize description 19-10
matrix 12-11 pfcAssembly.Assembly.AssembleComponent
Notification of events 2-6 method
NURBS description 19-9
representation F-15 pfcAssembly.Assembly.AssembleSkeleton method
surface F-10 description 19-21
pfcAssembly.Assembly.AssembleSkeletonByCopy
O method
description 19-21
Objects pfcAssembly.Assembly.CreateComponentPath
browsing with APIWizard 5-9 method
Open description 19-8
file 9-4 pfcAssembly.Assembly.DeleteSkeleton method
Operations description 19-21
Drawing 10-7 pfcAssembly.Assembly.GetActiveExplodedState
feature 14-4 method
layer 13-4 description 19-20
model 9-9 pfcAssembly.Assembly.GetDefaultExplodedState
solid 11-3, 22-41 method
view 12-5 description 19-21
window 12-3, 22-43 pfcAssembly.Assembly.GetIsExploded method
Optional arguments 4-2 description 19-20
Outlines pfcAssembly.Assembly.GetSkeleton method
contour 16-7 description 19-21
Overload pfcAssembly.Assembly.UnExplod method
methods 2-4 description 19-20
Override pfcAssembly.ComponentFeat.GetIsVisible method
methods 2-4 description 19-9
pfcAssembly.ComponentPath.GetComponentIds
P method
package keyword 2-5 description 19-9
Packages pfcAssembly.ComponentPath.GetLeaf method
importing 3-14 description 11-2, 19-9
Parameters 17-4 pfcAssembly.ComponentPath.GetRoot method
information 17-7 description 11-2, 19-8
ParamValue objects 17-2 pfcAssembly.ComponentPath.GetTransform method
Parents 14-2 description 19-9
Parts 11-15 pfcAssembly.ComponentPath.SetComponentIds
creating 11-2 method
Pattern leaders 14-2, 14-7 description 19-9
Patterns 14-6 pfcAssembly.ComponentPath.SetRoot method
pfcArgument.Argument.GetLabel method description 19-8
description 25-3 pfcAssembly.ComponentPath.SetTransform method
pfcArgument.Argument.GetValue method description 19-9
description 25-3 pfcAssembly.ExplodedState.Activate method
pfcArgument.Argument.SetLabel method description 19-21
description 25-3 pfcAsyncConnection.AsyncActionListener.OnTermi
pfcArgument.Argument.SetValue method nate method
description 25-3 description 24-10
pfcArgument.Argument_Create method pfcAsyncConnection.AsyncConnection.Disconnect
description 25-3 method
pfcArgument.Arguments.create method description 24-7
description 25-3 pfcAsyncConnection.AsyncConnection.End method

Index - vi J-Link User’s Guide


description 24-5 description 12-8, 12-10
pfcAsyncConnection.AsyncConnection.EventProces pfcBase.Transform3D.SetMatrix method
s method description 12-8
description 24-10 pfcBase.Transform3D.SetOrigin method
pfcAsyncConnection.AsyncConnection.GetConnecti description 12-8
onId method pfcBase.Transform3D.TransformPoint method
description 24-8 description 12-8
pfcAsyncConnection.AsyncConnection.GetSession pfcBase.Transform3D.TransformVector method
method description 12-8
description 24-9 pfcComponentFeat.ComponentFeat.ComponentFeat.
pfcAsyncConnection.AsyncConnection.InterruptEve ConstraintAttributes_Create method
ntProcessing method description 19-11
description 24-10 pfcComponentFeat.ComponentFeat.ComponentFeat.
pfcAsyncConnection.AsyncConnection.WaitForEve MoveThroughUI method
nts method description 19-14
description 24-10 pfcComponentFeat.ComponentFeat.ComponentFeat.
pfcAsyncConnection.ConnectionId.GetExternalRep RedefineThroughUI method
method description 19-14
description 24-8 pfcComponentFeat.ComponentFeat.ComponentFeat.
pfcAsyncConnection.pfcAsyncConnection.AsyncCo SetConstraints method
nnection _GetActiveConnection method description 19-10
description 24-7 pfcComponentFeat.ComponentFeat.CreateReplaceO
pfcAsyncConnection.pfcAsyncConnection.AsyncCo p method
nnection_Connect method description 19-6
description 24-7 pfcComponentFeat.ComponentFeat.GetCompType
pfcAsyncConnection.pfcAsyncConnection.AsyncCo method
nnection_ConnectById method description 19-4
description 24-8 pfcComponentFeat.ComponentFeat.GetConstraints
pfcAsyncConnection.pfcAsyncConnection.AsyncCo method
nnection_ConnectWS method description 19-10
description 24-7 pfcComponentFeat.ComponentFeat.GetIsBulkitem
pfcAsyncConnection.pfcAsyncConnection.AsyncCo method
nnection_Start method description 19-4
description 24-5 pfcComponentFeat.ComponentFeat.GetIsFrozen
pfcAsyncConnection.pfcAsyncConnection.Connecti method
onId_Create method description 19-5
description 24-8 pfcComponentFeat.ComponentFeat.GetIsPackaged
pfcAsyncConnectionAsyncConnection.IsRunning method
method description 19-5
description 24-9 pfcComponentFeat.ComponentFeat.GetIsPlaced
pfcBase.ActionSource.AddActionListener method method
description 21-3 description 19-5
pfcBase.ActionSource.RemoveActionListener pfcComponentFeat.ComponentFeat.GetIsSubstitute
method method
description 21-3 description 19-4
pfcBase.Transform3D.GetMatrix method pfcComponentFeat.ComponentFeat.GetIsUnderconst
description 12-8 rained method
pfcBase.Transform3D.GetOrigin method description 19-5
description 12-8 pfcComponentFeat.ComponentFeat.GetIsVisible
pfcBase.Transform3D.GetXAxis method method
description 12-8 description 19-6
pfcBase.Transform3D.GetYAxis method pfcComponentFeat.ComponentFeat.GetModelDescr
description 12-8 method
pfcBase.Transform3D.GetZAxis method description 19-5
description 12-8 pfcComponentFeat.ComponentFeat.GetPosition
pfcBase.Transform3D.Invert method method

Index - vii
description 19-6 pfcDetail.DetailGroupInstructions interface
pfcComponentFeat.ComponentFeat.Regenerate description 10-63
method pfcDetail.DetailGroupInstructions.Create method
description 19-8 description 10-63
pfcComponentFeat.ComponentFeat.SetCompType pfcDetail.DetailGroupInstructions.GetElements
method method
description 19-4 description 10-64
pfcDetail.Attachment.GetType method pfcDetail.DetailGroupInstructions.GetIsDisplayed
description 10-87 method
pfcDetail.Detail.DetailNoteItem interface description 10-64
description 10-56 pfcDetail.DetailGroupInstructions.GetName method
pfcDetail.Detail.DetailSymbolInstInstructions description 10-64
interface pfcDetail.DetailGroupInstructions.SetElements
description 10-74 method
pfcDetail.DetailEntityInstructions.Create method description 10-64
description 10-51 pfcDetail.DetailGroupInstructions.SetIsDisplayed
pfcDetail.DetailEntityInstructions.GetColor method method
description 10-52 description 10-64
pfcDetail.DetailEntityInstructions.GetFontName pfcDetail.DetailGroupInstructions.SetName method
method description 10-64
description 10-52 pfcDetail.DetailGroupInstructions_Create method
pfcDetail.DetailEntityInstructions.GetGeometry description 10-50
method pfcDetail.DetailGroupItem.Draw method
description 10-52 description 10-64
pfcDetail.DetailEntityInstructions.GetIsConstruction pfcDetail.DetailGroupItem.Erase method
method description 10-64
description 10-52 pfcDetail.DetailGroupItem.GetInstructions method
pfcDetail.DetailEntityInstructions.GetView method description 10-64
description 10-53 pfcDetail.DetailGroupItem.Modify method
pfcDetail.DetailEntityInstructions.GetWidth method description 10-64
description 10-53 pfcDetail.DetailItemOwner.CreateDetailItem method
pfcDetail.DetailEntityInstructions.SetColor method description 10-50
description 10-52 pfcDetail.DetailItemOwner.ListDetailItems method
pfcDetail.DetailEntityInstructions.SetFontName description 10-50
method pfcDetail.DetailItemOwner.RetrieveSymbolDefinitio
description 10-52 n method
pfcDetail.DetailEntityInstructions.SetGeometry description 10-69
method pfcDetail.DetailNoteInstructions interface
description 10-52 description 10-56
pfcDetail.DetailEntityInstructions.SetIsConstruction pfcDetail.DetailNoteInstructions.Create method
method description 10-57
description 10-52 pfcDetail.DetailNoteInstructions.GetColor method
pfcDetail.DetailEntityInstructions.SetView method description 10-58
description 10-53 pfcDetail.DetailNoteInstructions.GetHorizontal
pfcDetail.DetailEntityInstructions.SetWidth method method
description 10-53 description 10-58
pfcDetail.DetailEntityItem.Draw method pfcDetail.DetailNoteInstructions.GetIsDisplayed
description 10-55 method
pfcDetail.DetailEntityItem.Erase method description 10-58
description 10-55 pfcDetail.DetailNoteInstructions.GetIsMirrored
pfcDetail.DetailEntityItem.GetInstructions method method
description 10-55 description 10-58
pfcDetail.DetailEntityItem.GetSymbolDef method pfcDetail.DetailNoteInstructions.GetIsReadOnly
description 10-55 method
pfcDetail.DetailEntityItem.Modify method description 10-58
description 10-55 pfcDetail.DetailNoteInstructions.GetLeader method

Index - viii J-Link User’s Guide


description 10-58 description 10-56
pfcDetail.DetailNoteInstructions.GetTextAngle pfcDetail.DetailOLEObject.GetPath method
method description 10-56
description 10-58 pfcDetail.DetailOLEObject.GetSheet method
pfcDetail.DetailNoteInstructions.GetTextLines description 10-56
method pfcDetail.DetailSymbolDefInstructions interface
description 10-57 description 10-66
pfcDetail.DetailNoteInstructions.GetVertical method pfcDetail.DetailSymbolDefInstructions.Create
description 10-58 method
pfcDetail.DetailNoteInstructions.SetColor method description 10-67
description 10-58 pfcDetail.DetailSymbolDefInstructions.GetAttachme
pfcDetail.DetailNoteInstructions.SetHorizontal nts method
method description 10-68
description 10-58 pfcDetail.DetailSymbolDefInstructions.GetFullPath
pfcDetail.DetailNoteInstructions.SetIsDisplayed method
method description 10-68
description 10-58 pfcDetail.DetailSymbolDefInstructions.GetHasElbo
pfcDetail.DetailNoteInstructions.SetIsMirrored w method
method description 10-67
description 10-58 pfcDetail.DetailSymbolDefInstructions.GetIsTextAn
pfcDetail.DetailNoteInstructions.SetIsReadOnly gleFixed method
method description 10-68
description 10-58 pfcDetail.DetailSymbolDefInstructions.GetReferenc
pfcDetail.DetailNoteInstructions.SetLeader method e method
description 10-58 description 10-68
pfcDetail.DetailNoteInstructions.SetTextAngle pfcDetail.DetailSymbolDefInstructions.GetSymbolH
method eight method
description 10-58 description 10-67
pfcDetail.DetailNoteInstructions.SetTextLines pfcDetail.DetailSymbolDefInstructions.SetAttachme
method nts method
description 10-57 description 10-68
pfcDetail.DetailNoteInstructions.SetVertical method pfcDetail.DetailSymbolDefInstructions.SetFullPath
description 10-58 method
pfcDetail.DetailNoteItem.Draw method description 10-68
description 10-62 pfcDetail.DetailSymbolDefInstructions.SetHasElbo
pfcDetail.DetailNoteItem.Erase method w method
description 10-63 description 10-68
pfcDetail.DetailNoteItem.GetInstructions method pfcDetail.DetailSymbolDefInstructions.SetIsTextAn
description 10-61 gleFixed method
pfcDetail.DetailNoteItem.GetLineEnvelope method description 10-68
description 10-62 pfcDetail.DetailSymbolDefInstructions.SetReference
pfcDetail.DetailNoteItem.GetModelReference method
method description 10-68
description 10-62 pfcDetail.DetailSymbolDefInstructions.SetSymbolH
pfcDetail.DetailNoteItem.GetSymbolDef method eight method
description 10-62 description 10-67
pfcDetail.DetailNoteItem.Modify method pfcDetail.DetailSymbolDefItem.CreateDetailItem
description 10-63 method
pfcDetail.DetailNoteItem.Remove method description 10-69
description 10-63 pfcDetail.DetailSymbolDefItem.GetInstructions
pfcDetail.DetailNoteItem.Show method method
description 10-62 description 10-69
pfcDetail.DetailOLEObject.GetApplicationType pfcDetail.DetailSymbolDefItem.ListDetailItems
method method
description 10-56 description 10-69
pfcDetail.DetailOLEObject.GetOutline method pfcDetail.DetailSymbolDefItem.Modify method

Index - ix
description 10-69 description 10-78
pfcDetail.DetailSymbolInstInstructions.Create pfcDetail.DetailSymbolInstItem.Erase method
method description 10-78
description 10-75 pfcDetail.DetailSymbolInstItem.GetInstructions
pfcDetail.DetailSymbolInstInstructions.GetAngle method
method description 10-78
description 10-76 pfcDetail.DetailSymbolInstItem.Modify method
pfcDetail.DetailSymbolInstInstructions.GetAttachOn description 10-79
DefType method pfcDetail.DetailSymbolInstItem.Remove method
description 10-76 description 10-78
pfcDetail.DetailSymbolInstInstructions.GetColor pfcDetail.DetailSymbolInstItem.Show method
method description 10-78
description 10-75 pfcDetail.FreeAttachment.GetAttachmentPoint
pfcDetail.DetailSymbolInstInstructions.GetCurrentT method
ransform method description 10-88
description 10-77 pfcDetail.FreeAttachment.GetView method
pfcDetail.DetailSymbolInstInstructions.GetDefAttac description 10-88
hment method pfcDetail.FreeAttachment.SetAttachmentPoint
description 10-76 method
pfcDetail.DetailSymbolInstInstructions.GetInstAttac description 10-88
hment method pfcDetail.FreeAttachment.SetView method
description 10-76 description 10-88
pfcDetail.DetailSymbolInstInstructions.GetIsDisplay pfcDetail.OffsetAttachment.GetAttachedGeometry
ed method method
description 10-75 description 10-89
pfcDetail.DetailSymbolInstInstructions.GetSymbolD pfcDetail.OffsetAttachment.GetAttachmentPoint
ef method method
description 10-75 description 10-89
pfcDetail.DetailSymbolInstInstructions.GetTextValu pfcDetail.OffsetAttachment.SetAttachedGeometry
es method method
description 10-77 description 10-89
pfcDetail.DetailSymbolInstInstructions.SetAngle pfcDetail.OffsetAttachment.SetAttachmentPoint
method method
description 10-77 description 10-90
pfcDetail.DetailSymbolInstInstructions.SetAttachOn pfcDetail.ParametricAttachment.GetAttachedGeome
DefType method try method
description 10-76 description 10-89
pfcDetail.DetailSymbolInstInstructions.SetColor pfcDetail.ParametricAttachment.SetAttachedGeomet
method ry method
description 10-75 description 10-89
pfcDetail.DetailSymbolInstInstructions.SetDefAttac pfcDetail.UnsupportedAttachment.GetAttachmentPo
hment method int method
description 10-76 description 10-90
pfcDetail.DetailSymbolInstInstructions.SetInstAttac pfcDetail.UnsupportedAttachment.SetAttachmentPoi
hment method nt method
description 10-76 description 10-90
pfcDetail.DetailSymbolInstInstructions.SetIsDisplay pfcDimension.BaseDimension.GetDimType method
ed method description 17-14
description 10-75 pfcDimension.BaseDimension.GetSymbol method
pfcDetail.DetailSymbolInstInstructions.SetSymbolD description 17-14
ef method pfcDimension.BaseDimension.GetTexts method
description 10-75 description 17-14
pfcDetail.DetailSymbolInstInstructions.SetTextValue pfcDimension.BaseDimension.SetTexts method
s method description 17-14
description 10-77 pfcDimension.Dimension.GetTolerance method
pfcDetail.DetailSymbolInstItem.Draw method description 17-14

Index - x J-Link User’s Guide


pfcDimension.Dimension.SetTolerance method e method
description 17-14 description 10-28
pfcDimension2D.AngleDimensionSense_Create pfcDimension2D.TangentIndexDimensionSense_Cre
method ate method
description 10-29 description 10-29
pfcDimension2D.Dimension2D.ConvertToBaseline pfcExceptions.XCancelProEAction.Throw method
method description 22-30
description 10-32 pfcExceptions.XToolkitCheckoutConflict.GetConfli
pfcDimension2D.Dimension2D.ConvertToLinear ctDescription method
method description 28-25
description 10-32 pfcExceptions.XToolkitDrawingCreateErrors
pfcDimension2D.Dimension2D.ConvertToOrdinate description 10-3
method pfcExceptions.XToolkitDrawingCreateErrors.GetErr
description 10-32 ors method
pfcDimension2D.Dimension2D.GetAttachmentPoint description 10-4
s method pfcExport.ACIS3DExportInstructions_Create
description 10-31 method
pfcDimension2D.Dimension2D.GetBaselineDimensi description 22-16
on method pfcExport.CADDSExportInstructions_Create
description 10-31 method
pfcDimension2D.Dimension2D.GetDimensionSense description 22-16
s method pfcExport.CATIA3DExportInstructions_Create
description 10-31 method
pfcDimension2D.Dimension2D.GetIsAssociative description 22-16
method pfcExport.CATIAModel3DExportInstructions_Creat
description 10-30 e method
pfcDimension2D.Dimension2D.GetIsReference description 22-16
method pfcExport.CATIASession3DExportInstructions_Crea
description 10-31 te method
pfcDimension2D.Dimension2D.GetLocation method description 22-16
description 10-31 pfcExport.Export3DInstructions interface
pfcDimension2D.Dimension2D.GetOrientationHint description 22-14
method pfcExport.GeometryFlags_Create method
description 10-31 description 22-15
pfcDimension2D.Dimension2D.GetView method pfcExport.IGES3DNEWExportInstructions_Create
description 10-31 method
pfcDimension2D.Dimension2D.SetLocation method description 22-16
description 10-32 pfcExport.InclusionFlags_Create method
pfcDimension2D.Dimension2D.SwitchView method description 22-15
description 10-33 pfcExport.LayerExportOptions_Create method
pfcDimension2D.DrawingDimCreateInstructions_Cr description 22-16
eate method pfcExport.PDGS3DExportInstructions_Create
description 10-27 method
pfcDimension2D.EmptyDimensionSense_Create description 22-16
method pfcExport.SET3DExportInstructions_Create method
description 10-28 description 22-16
pfcDimension2D.LinAOCTangentDimensionSense_ pfcExport.STEP2DExportInstructions_Create
Create method method
description 10-29 description 22-16
pfcDimension2D.Model2D.SetViewDisplaying pfcExport.STEP3DExportInstructions_Create
method method
description 10-33 description 22-16
pfcDimension2D.PointDimensionSense_Create pfcExport.VDA3DExportInstructions_Create
method method
description 10-28 description 22-16
pfcDimension2D.SplinePointDimensionSense_Creat pfcFamily 20-4

Index - xi
pfcFamily.FamColModelItem.GetRefItem method 14-4
description 13-3 pfcFeature.Feature.CreateResumeOp method 14-4
pfcFamily.FamColParam.GetRefParam method 17-4 pfcFeature.Feature.CreateSuppressOp method 14-4
pfcFamily.FamilyMember.AddRow method pfcFeature.Feature.GetFeatSubType method
description 20-5 description 14-3
pfcFamily.FamilyMember.CreateColumn method pfcFeature.Feature.GetFeatType method
description 20-6 description 14-3
pfcFamily.FamilyMember.CreateCompModelColum pfcFeature.Feature.GetFeatTypeName method
n method description 14-3
description 20-5 pfcFeature.Feature.GetGroup method
pfcFamily.FamilyMember.CreateComponentColumn description 14-7
method pfcFeature.Feature.GetIsVisible method
description 20-5 description 14-3
pfcFamily.FamilyMember.CreateDimensionColumn pfcFeature.Feature.GetNumber method
method description 14-3
description 20-5 pfcFeature.Feature.GetPattern method
pfcFamily.FamilyMember.CreateGroupColumn description 14-7
method pfcFeature.Feature.GetStatus method
description 20-5 description 14-3
pfcFamily.FamilyMember.CreateMergePartColumn pfcFeature.Feature.ListParents method
method description 14-2
description 20-5 pfcFeature.Feature.ListSubItems method
pfcFamily.FamilyMember.CreateParamColumn description 13-3
method pfcFeature.FeatureActionListener.OnAfterCopy
description 20-5 method
pfcFamily.FamilyMember.GetCell method description 21-11
description 20-4 pfcFeature.FeatureActionListener.OnAfterRegen
pfcFamily.FamilyMember.GetCellIsDefault method method 21-10
description 20-4 description 21-10
pfcFamily.FamilyMember.GetColumn method pfcFeature.FeatureActionListener.OnAfterSuppress
description 20-3 method
pfcFamily.FamilyMember.ListColumns method description 21-10
description 20-3 pfcFeature.FeatureActionListener.OnBeforeDelete
pfcFamily.FamilyMember.ListRows method method 21-10
description 20-3 description 21-10
pfcFamily.FamilyMember.RemoveColumn method pfcFeature.FeatureActionListener.OnBeforeParamet
description 20-3 erDelete method
pfcFamily.FamilyMember.RemoveRow method description 21-11
description 20-3 pfcFeature.FeatureActionListener.OnBeforeRedefine
pfcFamily.FamilyMember.SetCell method method 21-10
description 20-4 description 21-11
pfcFamily.FamilyTableColumn.GetType method pfcFeature.FeatureActionListener.OnBeforeRegen
description 20-4 method 21-10
pfcFamily.FamilyTableRow.CreateInstance method description 21-10
description 9-2 pfcFeature.FeatureActionListener.OnBeforeSuppress
pfcFamily.FamTabColumn.GetSymbol method method 21-10
description 20-3 description 21-10
pfcFamily.FamTableRow.GetInstanceName method pfcFeature.FeatureActionListener.OnRegenFailure
description 20-3 method 21-10
pfcFamily.FamTableRow.SetIsLocked method description 21-10
description 20-3 pfcFeature.FeatureGroup.GetPattern method
pfcFeature.DeleteOperation.SetClip option 14-4 description 14-7
pfcFeature.Feature.CreateDeleteOp method 14-4 pfcFeature.FeatureGroup.GetUDFName method
pfcFeature.Feature.CreateReorderAfterOp method description 14-9
14-4 pfcFeature.FeatureGroup.ListUDFDimensions
pfcFeature.Feature.CreateReorderBeforeOp method method

Index - xii J-Link User’s Guide


description 14-9, 14-14 pfcGeometry.Surface.EvalMinimum method
pfcFeature.FeatureOperations.create method 14-4 description 16-11
pfcFeature.FeaturePattern.Delete method pfcGeometry.Surface.EvalParameters method
description 14-7 description 16-11
pfcFeature.FeaturePattern.ListMembers method pfcGeometry.Surface.EvalPrincipalCurv method
description 14-2, 14-7 description 16-11
pfcFeature.ResumeOperation.SetWithParents option pfcGeometry.Surface.GetOwnerQuilt method
14-4 description 16-10
pfcFeature.SuppressOperation.SetClip option 14-4 pfcGeometry.Surface.ListContours method
pfcGeometry.Axis.GetSurf method description 16-7
description 16-12 using 16-3
pfcGeometry.Contour.EvalArea method pfcGeometry.Surface.ListSameSurfaces method
description 16-7 description 16-11
pfcGeometry.Contour.EvalOutline method pfcGeometry.Surface.VerifyUV method
description 16-7 description 16-11
pfcGeometry.Contour.FindContainingContour pfcGlobal.pfcGlobal.GetProEArguments method
method description 6-2
description 16-7 pfcGlobal.pfcGlobal.GetProEBuildCode method
pfcGeometry.Contour.ListElements method description 6-3
using 16-3 pfcGlobal.pfcGlobal.GetProESession method
pfcGeometry.CoordSystem.GetCoordSys method description 6-2
description 12-11 pfcGlobal.pfcGlobal.GetProEVersion method
pfcGeometry.CoordSystem.GetTransform method description 6-3
description 16-12 pfcImport.ImportedLayer.GetCurveCount method
pfcGeometry.Edge.EvalUV method description 22-31
description 16-6 pfcImport.ImportedLayer.GetName method
pfcGeometry.Edge.GetDirection method description 22-31
description 16-6 pfcImport.ImportedLayer.GetTrimmedSurfaceCount
pfcGeometry.Edge.GetEdge1 method method
description 16-6 description 22-31
pfcGeometry.Edge.GetEdge2 method pfcImport.ImportedLayer.SetAction method
description 16-6 description 22-31
pfcGeometry.Edge.GetSurface1 method pfcImport.ImportedLayer.SetNewName method
description 16-6 description 22-31
pfcGeometry.Edge.GetSurface2 method pfcJLink.JLinkApplication.ExecuteTask method
description 16-6 description 25-8
pfcGeometry.GeomCurve.EvalFromLength method pfcJLink.JLinkApplication.Stop method
description 16-5 description 25-8
pfcGeometry.GeomCurve.EvalLength method pfcJLinkTaskListener.OnExecute method
description 16-5 description 25-6
pfcGeometry.GeomCurve.EvalLengthBetween pfcLayer.Layer.AddItem method
method description 13-4
description 16-5 pfcLayer.Layer.Delete method
pfcGeometry.GeomCurve.EvalParameter method description 13-4
description 16-5 pfcLayer.Layer.GetStatus method
pfcGeometry.Point.GetPoint method description 13-4
description 16-12 pfcLayer.Layer.ListItems method
pfcGeometry.Surface.Eval3DData method description 13-4
description 16-11 pfcLayer.Layer.RemoveItem method
pfcGeometry.Surface.EvalArea method description 13-4
description 16-11 pfcLayer.Layer.SetStatus method
pfcGeometry.Surface.EvalClosestointOnSurface description 13-4
method pfcLayer.Layers
description 16-11 display status 13-4
pfcGeometry.Surface.EvalMaximum method pfcLayerImportFilter.OnLayerImport method
description 16-11 description 22-30

Index - xiii
pfcMFG.MFG.GetSolid method description 9-6, 9-8
description 11-2 pfcModel.Model.GetVersionStamp method
pfcModel.Import2DInstructions interface description 9-6, 9-8
description 22-28 pfcModel.Model.Import method
pfcModel.Model.Backup method description 22-26
description 9-9 pfcModel.Model.ListDeclaredModels method
pfcModel.Model.CheckIsModifiable method description 9-6, 9-8
description 9-8 pfcModel.Model.ListDependencies method
pfcModel.Model.CheckIsSaveAllowed method description 9-6, 9-8
description 9-9 pfcModel.Model.Rename method
pfcModel.Model.Copy method description 9-9 to 9-10
description 9-9 pfcModel.Model.Save method
pfcModel.Model.CopyAndRetrieve method description 9-9 to 9-10, 28-12
description 9-9 pfcModel.Model.SaveAs method
pfcModel.Model.CreateLayer method description 9-9
description 13-4 pfcModel.Model.SetCommonName method
pfcModel.Model.Delete method description 9-10
description 9-9 to 9-10 pfcModel.ModelDescriptor.GetFullName method
pfcModel.Model.Display method description 9-3
description 9-9 to 9-10, 12-2 pfcModel.ModelDescriptor.SetDevice method
pfcModel.Model.Erase method description 9-3
description 9-9 to 9-10 pfcModel.ModelDescriptor.SetFileVersion method
pfcModel.Model.EraseWithDependencies method description 9-3
description 9-10 pfcModel.ModelDescriptor.SetGenericName method
pfcModel.Model.Export method description 9-3
description 22-2, 22-17 pfcModel.ModelDescriptor.SetHost method
pfcModel.Model.GetBranch method description 9-3
description 9-6, 9-8 pfcModel.ModelDescriptor.SetInstanceName
pfcModel.Model.GetCommonName method method
description 9-6 description 9-3
pfcModel.Model.GetDescr method pfcModel.ModelDescriptor.SetModelType method
description 9-6 to 9-7 description 9-3
pfcModel.Model.GetFileName method pfcModel.ModelDescriptor.SetPath method
description 9-6 description 9-3
pfcModel.Model.GetFullName method pfcModel.ModelDescriptor_Create method
description 9-3, 9-7 description 9-3
pfcModel.Model.GetGenericName method used in a code example 9-5
description 9-7 pfcModel.Models
pfcModel.Model.GetInstanceName method information 9-6
description 9-7 pfcModel.PlotInstructions_Create method 22-32
pfcModel.Model.GetIsCommonNameModifiable pfcModel2D.Model2D.AddModel method
method description 10-7
description 9-6 pfcModel2D.Model2D.AddSimplifiedRep method
pfcModel.Model.GetIsModified method description 10-8
description 9-6, 9-8 pfcModel2D.Model2D.Create View method
pfcModel.Model.GetOrigin method description 10-8
description 9-7 pfcModel2D.Model2D.CreateDrawingDimension
pfcModel.Model.GetRelationId method method
description 9-7 description 10-8
pfcModel.Model.GetReleaseLevel method pfcModel2D.Model2D.CreateView method
description 9-6, 9-8 description 10-15
pfcModel.Model.GetRevision method pfcModel2D.Model2D.DeleteModel method
description 9-6, 9-8 description 10-7
pfcModel.Model.GetType method pfcModel2D.Model2D.DeleteSimplifiedRep method
description 9-7 description 10-8
pfcModel.Model.GetVersion method pfcModel2D.Model2D.GetTextHeight method

Index - xiv J-Link User’s Guide


description 10-7 pfcModelCheck.ModelCheckInstructions.SetConfig
pfcModel2D.Model2D.GetViewByName method Dir method
description 10-20 description 9-11
pfcModel2D.Model2D.GetViewDisplaying method pfcModelCheck.ModelCheckInstructions.SetMode
description 10-20 method
pfcModel2D.Model2D.List2DViews 10-52 description 9-11
pfcModel2D.Model2D.List2DViews method pfcModelCheck.ModelCheckInstructions.SetOutput
description 10-20 Dir method
pfcModel2D.Model2D.ListModels method description 9-11
description 10-6 pfcModelCheck.ModelCheckInstructions.SetShowIn
pfcModel2D.Model2D.ListSimplifiedReps method Browser method
description 10-7 description 9-11
pfcModel2D.Model2D.Regenerate method pfcModelCheck.ModelCheckResults.GetNumberOf
description 10-8 Errors method
pfcModel2D.Model2D.ReplaceModel method description 9-12
description 10-7 pfcModelCheck.ModelCheckResults.GetNumberOf
pfcModel2D.Model2D.SetCurrentSolid method Warning method
description 10-7 description 9-12
pfcModel2D.Model2D.SetTextHeight method pfcModelCheck.ModelCheckResults.GetWasModelS
description 10-8 aved method
pfcModel2D.Model2DCreateDrawingDimension description 9-12
method pfcModelCheck.pfcModelCheck.CustomCheckInstr
description 10-28 uctions_Create method
pfcModelCheck.CustomCheckInstructions.SetAction description 9-14
ButtonLabel method pfcModelCheck.pfcModelCheck.CustomCheckResul
description 9-14 ts_Create method
pfcModelCheck.CustomCheckInstructions.SetCheck description 9-16
Label method pfcModelCheck.pfcModelCheck.ModelCheckInstruc
description 9-14 tions_Create method
pfcModelCheck.CustomCheckInstructions.SetCheck description 9-11
Name method pfcModelItem.BaseDimension.GetDimValue method
description 9-14 description 17-14
pfcModelCheck.CustomCheckInstructions.SetListen pfcModelItem.BaseDimension.SetDimValue method
er method description 17-14
description 9-14 pfcModelItem.BaseParameter.GetIsDesignated
pfcModelCheck.CustomCheckInstructions.SetUpdat method
eButtonLabel method description 17-8
description 9-14 pfcModelItem.BaseParameter.GetIsModified method
pfcModelCheck.CustomCheckResults.SetResultsCo description 17-8
unt method pfcModelItem.BaseParameter.GetIsRelationDriven
description 9-16 method
pfcModelCheck.CustomCheckResults.SetResultsTab description 17-14
le method pfcModelItem.BaseParameter.GetValue method
description 9-16 description 17-7
pfcModelCheck.CustomCheckResults.SetResultsUrl pfcModelItem.BaseParameter.ResetFromBackup
method method
description 9-16 description 17-8
pfcModelCheck.ModelCheckCustomCheckListener. pfcModelItem.BaseParameter.SetIsDesignated
OnCustomCheck method method
description 9-16 description 17-8
pfcModelCheck.ModelCheckCustomCheckListener. pfcModelItem.BaseParameter.SetValue method
OnCustomCheckAction method description 17-7
description 9-16 pfcModelItem.CreateBoolParamValue method
pfcModelCheck.ModelCheckCustomCheckListener. description 17-2
OnCustomCheckUpdate method pfcModelItem.CreateDoubleParamValue method
description 9-16 description 17-2

Index - xv
pfcModelItem.CreateIntParamValue method pfcNote.Note.Delete function
description 17-2 description 11-14
pfcModelItem.CreateStringParamValue method pfcNote.Note.Display method
description 17-2 description 11-14
pfcModelItem.ModelItem.GetId method pfcNote.Note.GetLines method
description 13-3 description 11-14
pfcModelItem.ModelItem.GetName method pfcNote.Note.GetOwner method
description 13-3 description 11-14
pfcModelItem.ModelItem.GetType method pfcNote.Note.GetURL method
description 13-3 description 11-14
pfcModelItem.ModelItem.SetName method pfcNote.Note.SetURL method
description 13-3 description 11-14
pfcModelItem.ModelItemOwner.GetItemById pfcPart.Material.Delete method
method description 11-16
description 10-26, 10-50, 13-3 pfcPart.Material.GetBendTable method
pfcModelItem.ModelItemOwner.GetItemByName description 11-21
method pfcPart.Material.GetCondition method
description 13-3 description 11-21
pfcModelItem.ModelItemOwner.ListItems method pfcPart.Material.GetCrossHatchFile method
13-2 description 11-21
description 10-26, 10-49, 13-3, 16-3 pfcPart.Material.GetFailureCriterion method
using 16-3 description 11-20
pfcModelItem.NamedModelItem.GetName method pfcPart.Material.GetFatigueMaterialFinish function
description 17-8 description 11-20
pfcModelItem.ParameterOwner.CreateParam method pfcPart.Material.GetFatigueMaterialType method
description 17-4 description 11-20
pfcModelItem.ParameterOwner.GetParam method pfcPart.Material.GetFatigueType method
description 17-4 description 11-20
pfcModelItem.ParameterOwner.GetRefParam pfcPart.Material.GetHardness method
method 17-4 description 11-21
pfcModelItem.ParameterOwner.ListParams method pfcPart.Material.GetHardnessType method
description 17-4 description 11-21
pfcModelItem.ParameterOwner.SelectParam method pfcPart.Material.GetMaterialModel method
description 17-4 description 11-21
pfcModelItem.ParamValue.GetBoolValue method pfcPart.Material.GetModelDefByTests method
17-3 description 11-21
pfcModelItem.ParamValue.Getdiscr method pfcPart.Material.GetPermittedFatigueMaterialTypes
description 17-3 method
pfcModelItem.ParamValue.GetDoubleValue method description 11-20
17-3 pfcPart.Material.GetPermittedFatigueTypes method
pfcModelItem.ParamValue.GetIntValue method description 11-20
17-3 pfcPart.Material.GetPropertyValue method
pfcModelItem.ParamValue.GetStringValue method decription 11-19
17-3 pfcPart.Material.GetStructuralMaterialType method
pfcModelItem.ParamValue.SetBoolValue method description 11-17
17-3 pfcPart.Material.GetSubType method
pfcModelItem.ParamValue.SetDoubleValue method description 11-18
17-3 pfcPart.Material.GetThermalMaterialType method
pfcModelItem.ParamValue.SetIntValue method 17-3 description 11-17
pfcModelItem.ParamValue.SetStringValue method pfcPart.Material.RemoveProperty method
17-3 description 11-20
pfcModelItem.ParamValues.create method pfcPart.Material.Save method
description 20-5 description 11-16
pfcModelItem.pfcModelItem.CreateStringParamVal pfcPart.Material.SetBendTable method
ue method description 11-21
description 20-5 pfcPart.Material.SetCondition method

Index - xvi J-Link User’s Guide


description 11-21 getting a ModelItem 13-2
pfcPart.Material.SetCrossHatchFile method pfcSelect.Selection.GetSelModel method 7-4
description 11-21 pfcSelect.Selection.GetSelTableCell method
pfcPart.Material.SetFailureCriterion method description 7-4, 10-38
description 11-20 pfcSelect.Selection.GetSelTableSegment method
pfcPart.Material.SetFatigueMaterialFinish method description 7-4, 10-38, 10-47
description 11-20 pfcSelect.Selection.GetSelView2D method
pfcPart.Material.SetFatigueMaterialType method description 7-4, 10-20
description 11-20 pfcSelect.Selection.GetTParam method
pfcPart.Material.SetFatigueType method description 7-4
description 11-20 pfcSelect.Selection.Highlight method 7-5
pfcPart.Material.SetHardness method description 7-5
description 11-21 pfcSelect.Selection.SetParams method
pfcPart.Material.SetHardnessType method Description 7-7
description 11-21 pfcSelect.Selection.SetPath method
pfcPart.Material.SetModelDefByTests method description 7-7
description 11-21 pfcSelect.Selection.SetPoint method
pfcPart.Material.SetPropertyUnits method description 7-7
description 11-20 pfcSelect.Selection.SetSelItem method
pfcPart.Material.SetPropertyValue method description 7-7
description 11-20 pfcSelect.Selection.SetSelTableCell method
pfcPart.Material.SetStructuralMaterialType method description 7-7
description 11-17 pfcSelect.Selection.SetSelView2D method
pfcPart.Material.SetSubType method description 7-7
description 11-18 pfcSelect.Selection.SetTParam method
pfcPart.Material.SetThermalMaterialType method description 7-7
description 11-18 pfcSelect.Selection.UnHighlight method
pfcPart.Part.CreateMaterial method 11-15 description 7-5
pfcPart.Part.CreateMaterials method pfcSelect.Selection.Unhighlight method 7-5
description 11-16 pfcSelect.SelectionBuffer.AddSelection method
pfcPart.Part.GetCurrentMaterial method 11-15 description 7-9
description 11-16 pfcSelect.SelectionBuffer.Clear method
pfcPart.Part.ListMaterials method 11-15 description 7-9
description 11-16 pfcSelect.SelectionBuffer.GetContents method
pfcPart.Part.RetrieveMaterial method 11-15 description 7-8
description 11-17 pfcSelect.SelectionBuffer.RemoveSelection method
pfcPart.Part.SetCurrentMaterial method 11-15 description 7-9
description 11-16 pfcSelect.SelectionOptions argument
pfcProToolkit.Dll.ExecuteFunction method table of strings 7-2
description 25-5 pfcSelect.SelectionOptions.SetMaxNumSels method
pfcProToolkit.Dll.GetId() method 7-2
description 25-5 description 7-3
pfcProToolkit.Dll.IsActive method pfcSelect.SelectionOptions.SetOptionKeywords
description 25-5 method 7-2
pfcProToolkit.Dll.Unload method description 7-2
description 25-6 pfcSelect.SelectionOptions_Create method 7-2
pfcSelect.Selection.Display method description 7-2
description 7-5 used in a code example 7-6
pfcSelect.Selection.GetDepth method 7-4 pfcServer.CheckinOptions.SetBaselineLocation
description 7-4 method
pfcSelect.Selection.GetParams method 7-4 description 28-13
pfcSelect.Selection.GetPath method 7-4 pfcServer.CheckinOptions.SetBaselineName method
pfcSelect.Selection.GetPoint method 7-4 description 28-13
description 7-4 pfcServer.CheckinOptions.SetBaselineNumber
pfcSelect.Selection.GetSelItem method 7-4 method
description 10-26, 10-38, 13-3 description 28-13

Index - xvii
pfcServer.CheckinOptions.SetKeepCheckedout description 28-13
method pfcServer.Server.UploadObjectsWithOptions method
description 28-14 description 28-13
pfcServer.CheckoutOptions.SetDependency method pfcServer.Server.UploadOptions_Create method
description 28-16 description 28-13
pfcServer.CheckoutOptions.SetDownload method pfcServer.ServerLocation.CollectWorkspaces
description 28-16 function
pfcServer.CheckoutOptions.SetIncludeInstances description 28-4
method pfcServer.ServerLocation.DeleteWorkspace method
description 28-16 description 28-8
pfcServer.CheckoutOptions.SetReadonly method pfcServer.ServerLocation.GetClass method
description 28-16 description 28-4
pfcServer.CheckoutOptions.SetSelectedIncludes pfcServer.ServerLocation.GetLocation method
method description 28-4
description 28-16 pfcServer.ServerLocation.GetVersion method
pfcServer.CheckoutOptions.SetVersion method description 28-4
description 28-16 pfcServer.ServerLocation.ListContexts method
pfcServer.pfcServer.CheckinOptions_Create method description 28-4
description 28-14 pfcServer.UploadBaseOptions.SetAutoresolveOption
pfcServer.pfcServer.CheckoutOptions_Create method
method description 28-13
create 28-16 pfcServer.UploadBaseOptions.SetDefaultFolder
pfcServer.pfcServer.WorkspaceDefinition_Create method
method description 28-13
description 28-7 pfcServer.UploadBaseOptions.SetNonDefaultFolder
pfcServer.Server.Activate method Assignments method
description 28-5 description 28-13
pfcServer.Server.CheckinObjects method pfcServer.WorkspaceDefinition.GetWorkspaceName
description 28-14 method
pfcServer.Server.CheckoutMultipleObjects method description 28-7
description 28-16 pfcServer.WorkspaceDefinition.SetWorkspaceName
pfcServer.Server.CheckoutObjects method method
description 28-16 description 28-7
pfcServer.Server.CreateWorkspace method pfcSession.BaseSession.AuthenticateBrowser
description 28-7 to 28-8 method
pfcServer.Server.GetActiveWorkspace method description 28-3, 28-5
description 28-8 pfcSession.BaseSession.ChangeDirectory method
pfcServer.Server.GetAlias method description 6-5
description 28-5 pfcSession.BaseSession.CopyFileFromWS method
pfcServer.Server.GetAliasedUrl method description 28-21
description 28-37 pfcSession.BaseSession.CopyFileToWS method
pfcServer.Server.GetContext method description 28-21
description 28-5 pfcSession.BaseSession.CreateAssembly method
pfcServer.Server.GetIsActive method description 11-2
description 28-5 pfcSession.BaseSession.CreateDrawingFromTempla
pfcServer.Server.IsObjectCheckedOut method te method
description 28-22 description 10-2
pfcServer.Server.RemoveObjects method pfcSession.BaseSession.CreateModelWindow
description 28-24 method
pfcServer.Server.SetActiveWorkspace method description 12-2
description 28-8 pfcSession.BaseSession.CreatePart method
pfcServer.Server.UndoCheckout method description 11-2
description 28-18 pfcSession.BaseSession.ExecuteModelCheck
pfcServer.Server.Unregister method method
description 28-5 description 9-11
pfcServer.Server.UploadObjects method pfcSession.BaseSession.ExportfromCurrentWS

Index - xviii J-Link User’s Guide


method description 12-2
description 28-19 pfcSession.BaseSession.LoadConfigFile method
pfcSession.BaseSession.GetActiveServer method description 6-6
description 28-6 pfcSession.BaseSession.LoadProToolkitDll method
pfcSession.BaseSession.GetAliasFromAliasedUrl description 25-4 to 25-6
method pfcSession.BaseSession.OpenFile method
description 28-38 description 9-4, 28-15
pfcSession.BaseSession.GetByRelationId method used with windows 12-2
description 9-2 pfcSession.BaseSession.RegisterCustomModelChec
pfcSession.BaseSession.GetConfigOpt method 6-5 k method
pfcSession.BaseSession.GetConfigOptionValues description 9-13
method pfcSession.BaseSession.RegisterServer method
description 6-6 description 28-5
pfcSession.BaseSession.GetCurrentDirectory pfcSession.BaseSession.RegisterTask method
method description 25-6
description 6-5 pfcSession.BaseSession.RetrieveAssemSimpRep
pfcSession.BaseSession.GetCurrentModel method method
description 9-2 description 23-3
pfcSession.BaseSession.GetImportSourceType pfcSession.BaseSession.RetrieveGeomSimpRep
method method
description 22-29 description 23-4
pfcSession.BaseSession.GetModel method pfcSession.BaseSession.RetrieveGraphicsSimpRep
description 9-2, 10-6 method
pfcSession.BaseSession.GetModelFromDescr description 23-4
method pfcSession.BaseSession.RetrieveModel method
description 10-6 description 9-4, 28-15
pfcSession.BaseSession.GetModelWindow function pfcSession.BaseSession.RetrieveModelWithOpts
description 12-2 method
pfcSession.BaseSession.GetProToolkitDll method description 28-15
description 25-5 pfcSession.BaseSession.RetriveModel method
pfcSession.BaseSession.GetRGBFromStdColor description 10-6
method pfcSession.BaseSession.RunMacro method 6-6
description 6-7 description 6-6
pfcSession.BaseSession.GetSelModel method pfcSession.BaseSession.Select method
description 9-2 description 7-2, 10-38
pfcSession.BaseSession.GetStdColorFromRGB pfcSession.BaseSession.SetConfigOpt method 6-5
method pfcSession.BaseSession.SetConfigOption method
description 6-7 description 6-6
pfcSession.BaseSession.GetWindow method pfcSession.BaseSession.SetLineStyle method
description 12-2 description 6-7
pfcSession.BaseSession.Import2DModel method pfcSession.BaseSession.SetStdColorFromRGB
description 22-28 method
pfcSession.BaseSession.ImportfromCurrentWS description 6-7
method pfcSession.BaseSession.SetTextColor method
description 28-19 description 6-7
pfcSession.BaseSession.IsConfigurationSupported pfcSession.BaseSession.SetWSExportOptions
method method
description 22-17 description 28-20
pfcSession.BaseSession.IsGeometryRepSupported pfcSession.BaseSession.StartJLinkApplication
method method
description 22-17 description 25-7
pfcSession.BaseSession.ListModels method pfcSession.BaseSession.UnregisterTask method
description 9-2, 10-6 description 25-7
pfcSession.BaseSession.ListServers method pfcSession.BaseSessionGetServerByAlias method
description 28-6 description 28-6
pfcSession.BaseSession.ListWindows method pfcSession.BaseSessionGetServerByUrl method

Index - xix
description 28-6 pfcSession.WSImportExportMessage.GetFileName
pfcSession.pfcSession.WSExportOptions_Create method
method description 28-19
description 28-20 pfcSession.WSImportExportMessage.GetMessageTy
pfcSession.Session.GetCurrentSelectionBuffer pe method
method description 28-19
description 7-8 pfcSession.WSImportExportMessage.GetResolution
pfcSession.Session.NavigatorPaneBrowserAdd method
method description 28-19
description 6-18 pfcSession.WSImportExportMessage.GetSucceeded
pfcSession.Session.NavigatorPaneBrowserIconSet method
method description 28-19
description 6-18 pfcSheet.SheetOwner.AddSheet method
pfcSession.Session.NavigatorPaneBrowserURLSet description 10-11
method pfcSheet.SheetOwner.DeleteSheet method
description 6-19 description 10-11
pfcSession.Session.UIAddButton method pfcSheet.SheetOwner.GetCurrentSheetNumber
description 8-2 to 8-3 method
pfcSession.Session.UIAddMenu method description 10-11
description 8-2 to 8-3 pfcSheet.SheetOwner.GetNumberOfSheets method
pfcSession.Session.UIAddSubMenu method description 10-11
description 8-2 pfcSheet.SheetOwner.GetSheetBackgroundView
pfcSession.Session.UIClearMessage method 6-10 10-52
pfcSession.Session.UICreateCommand method pfcSheet.SheetOwner.GetSheetBackgroundView
description 8-2 to 8-3, 21-5 method
pfcSession.Session.UICreateMaxPriorityCommand description 10-11, 10-21
method pfcSheet.SheetOwner.GetSheetData method
description 8-3 description 10-10
pfcSession.Session.UIDisplayFeatureParams method pfcSheet.SheetOwner.GetSheetFormat method
description 6-13 description 10-11
pfcSession.Session.UIDisplayMessage method pfcSheet.SheetOwner.GetSheetScale method
description 6-10 description 10-11
pfcSession.Session.UIReadIntMessage method pfcSheet.SheetOwner.GetSheetTransform method
description 6-13 description 10-10
pfcSession.Session.UIReadRealMessage method pfcSheet.SheetOwner.RegenerateSheet method
description 6-13 description 10-12
pfcSession.Session.UIReadStringMessage method pfcSheet.SheetOwner.ReorderSheet method
description 6-13 description 10-11
pfcSession.Session.UISelectDirectory method pfcSheet.SheetOwner.SetCurrentSheetNumber
description 6-16 method
pfcSession.Session.UIShowMessageDialog method description 10-12
description 6-9 pfcSheet.SheetOwner.SetSheetFormat method
pfcSession.SessionActionListener.OnAfterDirectory description 10-12
Change method pfcSheet.SheetOwner.SetSheetScale method
description 21-4 description 10-12
pfcSession.SessionActionListener.OnAfterModelDis pfcShrinkwrap.ShrinkwrapFacetedFormatInstruction
play method 21-5 s. GetShrinkwrapFacetedFormat method
pfcSession.SessionActionListener.OnAfterWindowC description 22-22
hange method pfcShrinkwrap.ShrinkwrapFacetedFormatInstruction
description 21-4 s.GetFramesFile method
pfcSession.WSExportOptions.SetIncludeSecondary description 22-22
Content method pfcShrinkwrap.ShrinkwrapFacetedFormatInstruction
description 28-20 s.SetFramesFile method
pfcSession.WSImportExportMessage.GetDescriptio description 22-22
n method pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.G
description 28-19 etLightweight method

Index - xx J-Link User’s Guide


description 22-23 SetIgnoreskeleton method
pfcShrinkwrap.ShrinkwrapFacetedPartInstructions.S description 22-20
etLightweight method pfcShrinkwrap.ShrinkwrapModelExportInstructions.
description 22-23 SetIgnoreSmallSurfaces method
pfcShrinkwrap.ShrinkwrapFacetedPartInstructions_ description 22-21
Create method pfcShrinkwrap.ShrinkwrapModelExportInstructions.
description 22-23 SetQuality method
pfcShrinkwrap.ShrinkwrapMergedSolidInstructions. description 22-20
GetAdditionalComponents method pfcShrinkwrap.ShrinkwrapModelExportInstructions.
description 22-24 SetSmallSurfPercentage method
pfcShrinkwrap.ShrinkwrapMergedSolidInstructions. description 22-21
SetAdditionalComponents method pfcShrinkwrap.ShrinkwrapSTLInstructions.GetOutp
description 22-24 utFile method
pfcShrinkwrap.ShrinkwrapMergedSolidInstructions_ description 22-24
Create method pfcShrinkwrap.ShrinkwrapSTLInstructions.SetOutp
description 22-24 utFile method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-24
GetAssignMassProperties method pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions
description 22-20 .GetAdditionalSurfaces method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-21
GetAutoHoleFilling method pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions
description 22-20 .GetOutputModel method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-22
GetDatumReferences method pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions
description 22-21 .SetAdditionalSurfaces method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. descriptions 22-21
GetIgnoreQuilts method pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions
description 22-20 .SetOutputModel method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-22
GetIgnoreskeleton method pfcShrinkwrap.ShrinkwrapSurfaceSubsetInstructions
description 22-20 _Create method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-21
GetIgnoreSmallSurfaces method pfcShrinkwrap.ShrinkwrapVRMLInstructions.GetO
description 22-21 utputFile method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-23
GetQuality method pfcShrinkwrap.ShrinkwrapVRMLInstructions.SetOu
description 22-20 tputFile method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-23
GetShrinkwrapMethod method pfcShrinkwrap.ShrinkwrapVRMLInstructions_Creat
description 22-19 e method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 22-24
GetSmallSurfPercentage method pfcSimpRep.CreateNewSimpRepInstructions.GetDe
description 22-21 faultAction method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 23-5
SetAssignMassProperties method pfcSimpRep.CreateNewSimpRepInstructions.GetIsT
description 22-20 emporary method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 23-5
SetAutoHoleFilling method pfcSimpRep.CreateNewSimpRepInstructions.GetIte
description 22-20 ms method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 23-5
SetDatumReferences method pfcSimpRep.CreateNewSimpRepInstructions.GetNe
description 22-21 wSimpName method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 23-5
SetIgnoreQuilts method pfcSimpRep.CreateNewSimpRepInstructions_Create
description 22-20 method
pfcShrinkwrap.ShrinkwrapModelExportInstructions. description 23-4

Index - xxi
pfcSimpRep.RetrieveExistingSimpRepInstructions_ pfcSolid.Solid.GetRelativeAccuracy method 11-2
Create method pfcSolid.Solid.GetUnit method
description 23-3 description 11-7
pfcSimpRep.SimpRep.GetInstructions method pfcSolid.Solid.ListCrossSections method
description 23-5 Description 11-15
pfcSoild.Solid.ExecuteFeatureOps method pfcSolid.Solid.ListFailedFeatures method
description 14-4 description 14-2
pfcSolid.RegenInstructions.SetAllowFixUI method pfcSolid.Solid.ListFeaturesByType method
description 11-4 description 14-2
pfcSolid.RegenInstructions.SetForceRegen method pfcSolid.Solid.ListUnits method
description 11-4 description 11-7
pfcSolid.RegenInstructions.SetFromFeat method pfcSolid.Solid.ListUnitSystems method
description 11-4 description 11-10
pfcSolid.RegenInstructions.SetRefreshModelTree pfcSolid.Solid.Regenerate method
method description 11-3
description 11-4 pfcSolid.Solid.SetAbsoluteAccuracy method 11-2
pfcSolid.RegenInstructions.SetResumeExcludedCo pfcSolid.Solid.SetPrincipalUnits method
mponents method description 11-11
description 11-4 pfcSolid.Solid.SetRelativeAccuracy method 11-2
pfcSolid.RegenInstructions.SetUpdateAssemblyOnly pfcSolid.SolidActionListener.OnAfterFeatureCreate
method method
description 11-4 description 21-9
pfcSolid.RegenInstructions.SetUpdateInstances pfcSolid.SolidActionListener.OnAfterFeatureDelete
method method
description 11-5 description 21-9
pfcSolid.RegenInstructions_Create method pfcSolid.SolidActionListener.OnAfterRegenerate
11-3, 22-41 method
pfcSolid.Solid.CreateCustomUnit method description 21-8
description 11-9 pfcSolid.SolidActionListener.OnAfterUnitConvert
pfcSolid.Solid.CreateImportFeat method method
description 22-41 description 21-9
pfcSolid.Solid.CreateSimpRep method pfcSolid.SolidActionListener.OnBeforeFeatureCreat
description 23-4 e method
pfcSolid.Solid.CreateUDFGroup method description 21-9
description 14-9, 14-15 pfcSolid.SolidActionListener.OnBeforeRegenerate
pfcSolid.Solid.CreateUnitSystem method method
description 11-11 description 21-8
pfcSolid.Solid.DeleteSimpRep method pfcSolid.SolidActionListener.OnBeforeUnitConvert
description 23-4 method
pfcSolid.Solid.ExportShrinkwrap method description 21-9
description 22-18 pfcTable.Table.CheckIfIsFromFormat method
pfcSolid.Solid.GetAbsoluteAccuracy method 11-2 description 10-40
pfcSolid.Solid.GetCrossSection method pfcTable.Table.DeleteColumn method
description 11-15 description 10-42
pfcSolid.Solid.GetFeatureById method pfcTable.Table.DeleteRow method
description 14-2 description 10-42
pfcSolid.Solid.GetGeomOutline method pfcTable.Table.DeleteTable method
description 11-5 description 10-42
pfcSolid.Solid.GetHasRetrievalErrors method pfcTable.Table.Display method
description 9-4 description 10-41
pfcSolid.Solid.GetIsSkeleton method pfcTable.Table.Erase method
description 19-21 description 10-41
pfcSolid.Solid.GetMassProperty method pfcTable.Table.GetCellComponentModel method
description 11-12 description 10-48
pfcSolid.Solid.GetPrincipalUnits method pfcTable.Table.GetCellNote method
description 11-10 description 10-41

Index - xxii J-Link User’s Guide


pfcTable.Table.GetCellReferenceModel method eName method
description 10-48 description 14-16
pfcTable.Table.GetCellTopModel method pfcUDFCreate.UDFCustomCreateInstructions.GetD
description 10-48 ependencyType method
pfcTable.Table.GetColumnCount method description 14-12
description 10-40 pfcUDFCreate.UDFCustomCreateInstructions.GetDi
pfcTable.Table.GetColumnSize method mDisplayType method
description 10-40 description 14-13
pfcTable.Table.GetInfo method pfcUDFCreate.UDFCustomCreateInstructions.GetIn
description 10-47 stanceName method
pfcTable.Table.GetRowCount method description 14-12
description 10-40 pfcUDFCreate.UDFCustomCreateInstructions.GetSc
pfcTable.Table.GetRowSize method ale method
description 10-40 description 14-12
pfcTable.Table.GetSegmentCount method pfcUDFCreate.UDFCustomCreateInstructions.GetSc
description 10-47 aleType method
pfcTable.Table.GetSegmentSheet method description 14-12
description 10-47 pfcUDFCreate.UDFCustomCreateInstructions.SetDe
pfcTable.Table.GetText method pendencyType method
description 10-41 description 14-12
pfcTable.Table.InsertColumn method pfcUDFCreate.UDFCustomCreateInstructions.SetDi
description 10-42 mDisplayType method
pfcTable.Table.InsertRow method description 14-13
description 10-41 pfcUDFCreate.UDFCustomCreateInstructions.SetIns
pfcTable.Table.IsCommentCell method tanceName method
description 10-48 description 14-12
pfcTable.Table.MergeRegion method pfcUDFCreate.UDFCustomCreateInstructions.SetInt
description 10-42 ersections method
pfcTable.Table.MoveSegment method description 14-16
description 10-47 pfcUDFCreate.UDFCustomCreateInstructions.SetQu
pfcTable.Table.RotateClockwise method adrant method
description 10-41 description 14-17
pfcTable.Table.SetText method pfcUDFCreate.UDFCustomCreateInstructions.SetRe
description 10-42 ference method
pfcTable.Table.SubdivideRegion method description 14-16
description 10-42 pfcUDFCreate.UDFCustomCreateInstructions.SetSc
pfcTable.Table.UpdateTables method aleType method
description 10-48 description 14-12
pfcTable.TableCell_Create method pfcUDFCreate.UDFCustomCreateInstructions.SetVa
description 10-38 riantValues method
pfcTable.TableCreateInstructions_Create method description 14-13
description 10-39 pfcUDFCreate.UDFCustomCreateInstructions_Creat
pfcTable.TableOwner.CreateTable method e method
description 10-39 description 14-11
pfcTable.TableOwner.GetTable method pfcUDFCreate.UDFOrientations.create method
description 10-40 description 14-17
pfcTable.TableOwner.ListTable method pfcUDFCreate.UDFOrientations.insert method
description 10-40 description 14-17
pfcTable.TableOwner.RetrieveTable method pfcUDFCreate.UDFReference.SetIsExternal method
description 10-40 description 14-15
pfcTable.TableRetrieveInstructions_Create method pfcUDFCreate.UDFReference_Create method
description 10-39 description 14-15
pfcUDFCreate.pfcUDFCreate.UDFAssemblyInterse pfcUDFCreate.UDFVariantDimension_Create
ction_Create method method
description 14-16 description 14-13
pfcUDFCreate.UDFAssemblyIntersection.SetInstanc pfcUDFCreate.UDFVariantPatternParam_Create

Index - xxiii
method pfcUnits.UnitConversionFactor.GetOffset method
description 14-13 description 11-8
pfcUDFCreate.UDFVariantValues.create method pfcUnits.UnitConversionFactor.GetScale method
description 14-13 description 11-8
pfcUDFCreate.UDFVariantValues.insert method pfcUnits.UnitConversionOptions.SetDimensionOpti
description 14-13 on method
pfcUDFGroup.UDFDimension.GetUDFDimensionN description 11-12
ame method pfcUnits.UnitConversionOptions.SetIgnoreParamUn
description 14-9, 14-14 its method
pfcUDFGroup.UDFPromptCreateInstructions_Creat description 11-12
e method pfcUnits.UnitSystem.Delete method
description 14-11 description 11-11
pfcUI.FileOpenOptions.SetFilterString method pfcUnits.UnitSystem.GetIsStandard method
description 6-15 description 11-10
pfcUI.FileOpenOptions.SetPreselectedItem method pfcUnits.UnitSystem.GetName method
description 6-15 description 11-10
pfcUI.FileUIOptions.SetDefaultPath method pfcUnits.UnitSystem.GetType method
description 6-15 description 11-10
pfcUI.FileUIOptions.SetDialogLabel method pfcUnits.UnitSystem.GetUnit method
description 6-15 description 11-10
pfcUI.MessageDialogOptions.SetButtons methods pfcView.View.GetName method
description 6-9 description 12-5
pfcUI.MessageDialogOptions.SetDefaultButton pfcView.View.GetTransform method
method description 12-10
description 6-9 pfcView.View.Reset method
pfcUI.MessageDialogOptions.SetDialogLabel description 12-5
method pfcView.View.Rotate method
description 6-9 description 12-10
pfcUI.MessageDialogOptions.SetMessageDialogTyp pfcView.View.SetTransform method
e method description 12-10
description 6-10 pfcView.View2D.GetDisplay method
pfcUI.pfcUI.MessageDialogOptions_Create() description 10-22
method pfcView.View2D.GetIsBackground method
description 6-9 description 10-21
pfcUnits.pfcUnits.UnitConversionFactor_Create pfcView.View2D.GetIsScaleUserdefined method
method description 10-21
description 11-9 pfcView.View2D.GetLayerDisplayStatus method
pfcUnits.pfcUnits.UnitConversionOptions_Create description 10-22
method pfcView.View2D.GetModel method
description 11-11 description 10-21
pfcUnits.Unit.Delete method pfcView.View2D.GetName method
description 11-9 description 10-22
pfcUnits.Unit.GetConversionFactor method pfcView.View2D.GetOutline method
description 11-8 description 10-21
pfcUnits.Unit.GetExpression method pfcView.View2D.GetScale method
description 11-7 description 10-21
pfcUnits.Unit.GetIsStandard method pfcView.View2D.GetSheetNumber method
description 11-8 description 10-21
pfcUnits.Unit.GetName method pfcView.View2D.GetTransform method
description 11-7 description 10-22
pfcUnits.Unit.GetReferenceUnit method pfcView.ViewOwner.GetView method
description 11-8 description 12-5
pfcUnits.Unit.GetType method pfcView.ViewOwner.ListViews method
description 11-7 description 12-5
pfcUnits.Unit.Modify method pfcView.ViewOwner.RetrieveView method
description 11-9 description 12-5

Index - xxiv J-Link User’s Guide


pfcView.ViewOwner.SaveView method pfcWPP.ServerLockStat.GetObjectName method
description 12-5 description 28-23
pfcView2D.View2D.Delete method pfcWPP.ServerLockStat.GetStatus method
description 10-25 description 28-23
pfcView2D.View2D.Regenerate method pfcWPP.ServerLockStat.GetStatusMessage method
description 10-25 description 28-24
pfcView2D.View2D.SetDisplay method pfcWPP.ServerSynchronizeConflict.GetDescription
description 10-26 method
pfcView2D.View2D.SetDisplayStatus method description 28-12
description 10-26 pfcWPP.WPPServer.GetServerObjectLockStatus
pfcView2D.View2D.SetScale method method
description 10-25 description 28-23
pfcView2D.View2D.Translate method pfcWPP.WPPServer.GetServerObjectsLockStatus
description 10-25 method
pfcWindow.Window.Activate method description 28-23
description 12-4 pfcWPP.WPPServer.GetServerSynchronizationState
pfcWindow.Window.Clear method method
description 12-3 description 28-12
pfcWindow.Window.Close method pfcWPP.WPPServer.GetServerTargetfolder method
description 12-4 description 28-6
pfcWindow.Window.ExportRasterImage method pfcWPP.WPPServer.LockServerObjects method
description 22-43 description 28-23
pfcWindow.Window.GetBrowserSize method pfcWPP.WPPServer.SetWsimpexFolderoption
description 12-4 method
pfcWindow.Window.GetHeight method 12-3 description 28-19
pfcWindow.Window.GetId method pfcWPP.WPPServer.SynchronizeServer method
description 12-4 description 28-12
pfcWindow.Window.GetModel method pfcWPP.WPPServer.UnlockServerObjects method
description 9-4 description 28-24
pfcWindow.Window.GetScreenTransform method pfcXSection.XSection.Delete method
description 12-11 description 11-15
pfcWindow.Window.GetURL method pfcXSection.XSection.Display method
description 12-4 description 11-15
pfcWindow.Window.GetWidth method 12-3 pfcXSection.Xsection.GetName method
pfcWindow.Window.GetXPos method 12-3 description 11-15
pfcWindow.Window.GetYPos method pfcXSection.XSection.GetXSecType method
description 12-3 description 11-15
pfcWindow.Window.Refresh method pfcXSection.XSection.Regenerate method
description 12-3 description 11-15
pfcWindow.Window.Repaint method pfcXSection.XSection.SetName method
description 12-3 description 11-15
pfcWindow.Window.SetBrowserSize method Placing
description 12-4 toolbar 8-14
pfcWindow.Window.SetScreenTransform method toolbar button 8-14
description 12-11 Placing toolbar button 8-14
pfcWindow.Window.SetURL method Planes 16-9
description 12-4 geometry representation F-3
pfcWPP.pfcWPP.ServerSynchronizeConflict_Create Plot 22-32
method Pointers 2-4
description 28-12 Points 16-12
pfcWPP.ServerLockConflict.GetConflictMessage evaluating 16-12
method PointToAngleDimensionSense_Create method
description 28-23 description 10-30
pfcWPP.ServerLockConflict.GetObjectName Polygons 16-5
method Polymorphism 2-3
description 28-23 Popup Menu

Index - xxv
Adding to the Graphics Window 8-15 Ruled surfaces 16-9
Using Trail files to determine names 8-16 geometry representation F-6
Popup Menus 8-15 Run
Accessing 8-16 applications 1-5
Popup menus model program 1-6
Adding 8-17
Preprocessors 2-4 S
Principal curve 16-11
private keyword 2-5 Save
Pro/ENGINEER models 9-9
accessing 6-7 view 12-5
Pro/J.Link Screen coordinate system 12-7
class types 3-2 Search
menu option 1-6 APIWizard search mechanism 5-13
programs 1-2 using the APIWizard 5-13
ProBrowserAuthenticate() function Selection 7-2
description 28-3 accessing data 7-4
ProServerConflictsDescriptionGet() function controlling display 7-5
description 28-25 Sequences 3-6
protected keyword 2-5 sample class 3-7
protk.dat file 1-2 Session objects
public keyword 2-5 getting 6-2
Session.Select method
R used in a code example 7-6
Set up
Refresh applications 1-2
window 12-3, 22-43 machine 1-2
Regenerate model programs 1-5
events 21-5 Sheets
solids 11-3, 22-41 Drawing 10-10
Register Simplified representations
applications 1-4 adding items 23-8
Registry file 1-2 creating 23-4
Remove deleting 23-4
items from a layer 13-4 items 23-8
Rename extracting information from 23-5
models 9-9 modifying 23-8
Repaint retrieving
events 21-5 geometry 23-4
window 12-3, 22-43 graphics 23-4
Reset utilities 23-9
view 12-5 Solids
Restrictions accuracy 11-2
on text message files 6-8 coordinate system 12-6
on threads 4-2 geometry traversal 13-2
Retrieve getting a solid object 11-2
geometry of a simplified representation 23-4 information 11-2
graphics of a simplified representation 23-4 mass properties 11-12
material 11-15 operations 11-3, 22-41
model Splines
code example 9-5 cylindrical spline surface F-11
simplified representations 23-3 description 16-4
view 12-5 representation F-14
Revolved surfaces 16-9 surface F-9
Rotate Standalone applications 1-2
view 12-6 Start method 1-7

Index - xxvi J-Link User’s Guide


startup field 1-3 Transformations 12-6, 12-8
static keyword 2-5 solid to coordinate system datum coordinates
Status 12-11
feature 14-3 solid to screen coordinates 12-10
layer 13-4 in a drawing 12-11
Stop method 1-7 Traversal
Strings 2-6 of a solid block 16-3
Surfaces 16-8 of geometry 16-2
cylindrical spline F-11 try keyword 2-7
data structures F-2 try-catch-finally block
evaluating 16-10 description 3-22
area 16-11
evaluating parameters 16-11 U
fillet
geometry representation F-8 UDFs 14-9
general surface of revolution F-6 creating 14-9
NURBS User’s Guide
geometry representation F-10 browsing with APIWizard 5-11
documentation
revolved 16-9
online 5-2
ruled 16-9, F-6
spline F-9 Utilities 3-12
traversing 16-2 sample class 3-13
types 16-9 simplified representations 23-9
UV parameterization 16-8
Swing
V
class path Values
NT 5-4 ParamValue 17-3
UNIX 5-4 View2D.View2D interface
download Java foundation class archive 5-3 description 10-15
in APIWizard 5-3 Views
required for APIWizard with Netscape 5-3 Drawing 10-15
required Java Foundation Class for APIWizard getting a view object 12-5
5-3 list of 12-5
listing
T example 10-22
operations 12-5
t parameter
retrieving 12-5
description 16-3
saving 12-5
Table.Table interface
Visibility 14-3
description 10-37
Visit
Tabulated cylinders 16-9
simplified representations 23-5
geometry representation F-7
Text 16-5 W
message files 6-8
text_dir field 1-4 Window coordinate system 12-7
Threads Windows 12-2
restrictions 4-2 activating 12-4
throw keyword 2-7 clearing 12-3
Tolerance 17-14 closing 12-4
Tolerances creating 12-2
setting operations 12-3, 22-43
example 17-15 repainting 12-3
Toolbar Write
placing 8-14 to the message window 6-10
Torii 16-9
Torus F-5

Index - xxvii

You might also like