Calling Parasolid From .NET Code   

<<< Using Reports Chapters Introduction To Basic Concepts In Parasolid >>>

Contents

[back to top]


12.1 Introduction

This chapter describes the Microsoft .NET binding DLL for Parasolid, which enables Parasolid functions to be called from .NET code and allows Parasolid-based applications to be written in the C# programming language. The following sections assume that you have a working knowledge of C# and some basic familiarity with .NET programming. Use of the .NET binding with Visual Basic is not supported.

An example application written in C# is supplied as part of the Parasolid Jumpstart Kit. For more information, see Section 8.3.2, “The C# Example Application for Windows”.

For more information about using Parasolid with C# see “Calling Parasolid from
C#: Implementation Advice” in the C# Example Application for Windows User Guide, supplied as part of the Parasolid Jumpstart Kit.

[back to top]


12.2 Basic concepts

The .NET binding makes the Parasolid functionality available to .NET programs. It does this by calling Parasolid functions compiled from C source code: there is no version of Parasolid written in a .NET language. C# has facilities for calling C functions ( Platform Invoke, also known as P/Invoke) and for passing data with such calls.

The .NET binding is supplied as a single DLL named pskernel_net.dll that provides C# versions of Parasolid types, values and functions. This enables Parasolid to be called from C# or other .NET languages with compatible data-types. To call a Parasolid function, data must be stored in C# variable types that correspond to the (Parasolid) C types used in that function. The C# version of the function can then be called, which subsequently converts the data to the required C types and calls the corresponding Parasolid (C) function via P/Invoke.

 

Figure 12-1 Calling Parasolid functions from C#

 

Note: The Parasolid PK interface is fully supported. The KI functions are not supported, although some KI token types and values are provided since they are required for PK-based programming.

12.2.1 Requirements and limitations

As the .NET binding is generated automatically from the Parasolid C headers, the entire interface is unsafe, requiring the use of pointers; therefore it can only be called from unsafe code blocks in C#. This minimises the performance overheads of calling Parasolid (C) functions from C#. Mixing calls to Parasolid made via the .NET binding with ones made directly from “native” code (a language that can be compiled to binary code and be called from, and also call, C) is not supported. We anticipate that users of the .NET binding will create an object-oriented layer on top of the binding, of a design suitable for their application.

 

Warning: Memory provided to Parasolid by a C# frustrum must be locked, and never moved by the garbage collector; failure to adhere to this will cause Parasolid to crash. The C# example application demonstrates how to lock memory allocated by the frustrum.

12.2.2 Performance

Calling Parasolid (C) code from .NET code involves a performance overhead for the P/Invoke system that manages the transition. This is fairly small in most cases, usually less than 5% (and often as low as 1%), but can become appreciable for applications that make large numbers of simple attribute enquiries and changes as separate calls to Parasolid. Using the attribute callback functions (e.g., PK_ATTDEF_register_cb ) can reduce this overhead considerably.

12.2.3 Error handling

The .NET binding does not use C# exceptions apart from certain rare occasions when dealing with .NET string types (see Section C.6.6, “Functions with string arguments”): instead, it returns Parasolid error codes. C# exceptions may be thrown from frustrum and callback functions, through Parasolid, to be caught by your application.

12.2.4 Code access security

The default .NET Code Access Security settings will allow you to run .NET code that calls C code, provided that the whole program resides on the local machine. If any of it is loaded from a network machine, you must modify the Code Access Security settings, as described in the MSDN documentation library.

12.2.5 Frustrum and callbacks

The .NET binding does not provide a frustrum or callback functions for use with Parasolid; you must supply these (just as you would when using Parasolid through the C interface). They may be written in native code (e.g., C or C++) or in C#. They may be registered through the C# interface as delegates, in a similar way to their usage in a native code Parasolid application. An example of a C# frustrum is provided with the C# example application.

If you register thread-specific memory allocation and freeing functions with PK_THREAD_register_memory_cbs, you must ensure that all of them are both thread-safe and capable of freeing memory allocated by a different thread’s allocator. This is because the .NET garbage collector often calls an object’s destructor from a different thread to the one that constructed the object.

[back to top]


12.3 Parasolid types and names in C#

The Parasolid .NET binding is written in C# and uses C# names; these consist of two to four parts, separated by periods (“.”). These periods generally correspond to the underscores (“_”) used in the corresponding name in the Parasolid C interface; however, they have more significance, as they are also scoping operators used to select members of a C# namespace , class , struct or enum as explained below.

This section describes in general how Parasolid names in C# relate to those in C. There are some additional rules to be applied in certain circumstances, which are covered in Section 12.4, “Exceptions to naming conventions in C#”.

 

Note: Microsoft Visual Studio offers automatic name completion when typing; this can be very useful when using the .NET binding.

12.3.1 Basic types

All basic C types used in the Parasolid interface have corresponding C# types, as shown below:

 

C type

C# type

char

byte

unsigned char

byte

short

short

unsigned short

ushort

int (except for KI token values)

int

unsigned int

uint

double

double

size_t

uint on 32-bit platforms, ulong on 64-bit platforms

Note that an exception is made for int when appearing in the KI header files (as the type for KI token values), in which case the following conversion is done:

 

C type

C# type

int (when used for KI token values)

PK.UNCLASSED.ki_ifails_t

12.3.2 Namespaces

The PK and PK_DEBUG prefixes in the C interface become C# namespaces. There are several levels of namespace to allow for the possibility of other styles of interface. There are also some standard aliases for the C# namespaces, to make your source code more readable.

 

C prefix

C# namespace

C# alias

PK

PLMComponents.Parasolid.PK_.Unsafe

PK

PK_DEBUG

PLMComponents.Parasolid.PK_DEBUG_.Unsafe

PKD

The “PK_“ field in the C# namespace for the PK prefix has the underscore “_” appended to prevent the C# compiler from becoming confused by two related concepts called “PK“. The aliases can be created in your C# code with the following statements:

using PK = PLMComponents.Parasolid.PK_.Unsafe;

using PKD = PLMComponents.Parasolid.PK_DEBUG_.Unsafe;

If you wish, you may use different aliases to those given here.

12.3.3 Classes

Where it exists, the upper-case word following the PK or PK_DEBUG prefix denotes the Parasolid class of a function, type or value in the C interface: examples include “BODY”, “CLASS“, “ENTITY“, “ERROR“ and “SESSION“. These classes provide a grouping mechanism for names used in programming, and reflect the logical hierarchy of entities within Parasolid; for more information concerning Parasolid classes, see Chapter 2, “Parasolid Concepts”, of the Functional Description. Note that, since Parasolid is written in C, Parasolid classes do not correspond exactly to either C++ classes or C# classes in the .NET binding.

The Parasolid class name in C, if present, becomes a C# class of the same name.

12.3.4 Primitives

Parasolid primitive types (types of Parasolid entities and other items that give rise to classes) in C become C# structs of the same name; these structs are not members of a class.

 

Primitive type in C

C# struct

<Prefix>_<primitive>

<Namespace alias>.<primitive>

PK_EDGE_t

PK.EDGE_t

Each primitive type has an associated null constant in the C# interface, written as “@null”; for example, PK.EDGE_t.@null, where the “@” has been inserted to avoid using a reserved word. (This is explained in Section 12.4, “Exceptions to naming conventions in C#”.)

12.3.5 Structures

Parasolid structures in C comprise standard forms (whose names end with _sf_t or _sf_2_t ), options structures ( _o_t ), return structures ( _r_t ) and other non-specific structures whose names end in _t . These map to structs in C#; some are members of a class, some are not.

 

Structure (with class) in C

C# struct

<Prefix>_<class>_<structure>

<Namespace alias>.<class>.<structure>

PK_BCURVE_array_t

PK.BCURVE.array_t

 

Structure (without class) in C

C# struct

<Prefix>_<structure>

<Namespace alias>.<structure>

PK_range_1_r_t

PK.range_1_r_t

12.3.6 Parasolid token types

Parasolid token types in C become enum types in C#; these may or may not belong to a class.

 

Token Type (with class) in C

C# enum type

<Prefix>_<class>_<token type>

<Namespace alias>.<class>.<token type>

PK_FACE_coi_t

PK.FACE.coi_t

 

Token Type (without class) in C

C# enum type

<Prefix>_<token type>

<Namespace alias>.<token type>

PK_bound_t

PK.bound_t

For those KI token types that are necessary, the corresponding C# enum belongs to the “UNCLASSED” class in the PK namespace. This also applies to token types relating to the frustrum.

 

KI/frustrum token type in C

C# enum type

<KI/frustrum token type>

PK.UNCLASSED .<KI/frustrum token type>

ki_chcken_options_t

PK.UNCLASSED.ki_chcken_options_t

fg_ifails_codes_t

PK.UNCLASSED.fg_ifails_codes_t

12.3.7 Values of Parasolid token types

Values of Parasolid token types in C become members of the corresponding enum types in C#. For the majority of token values, the Parasolid name in C starts with the token-type name without the trailing “_t”; this is included in the C# name.

 

Value in C

C# enum member

<Token-type name without “_t”>_<value>

<Token-type name>.<value>

PK_FACE_coi_no_bound_1_c

PK.FACE.coi_t.no_bound_1_c

PK_bound_distance_c

PK.bound_t.distance_c

 

Note: There are some token values where the Parasolid name in C does not include the corresponding token-type name (up to the “_t”). In these cases, the C# name must always include the corresponding enum type. For example, the value PK_knot_bezier_ends_c belongs to the type PK_knot_type_t; in C#, the enum member is PK.knot_type_t.bezier_ends_c. Details of all such exceptional names of token values are given in Section 12.4.3, “Special cases for names of token values”.

For values corresponding to those KI and frustrum token types that are available, the C# names are formed as follows:

 

KI/frustrum value in C

C# enum member

<KI/frustrum value>

PK.UNCLASSED .<KI/frustrum token type>.<KI/frustrum value>

CHOP00

PK.UNCLASSED.ki_chcken_options_t.CHOP00

KI_wrong_version

PK.UNCLASSED.ki_ifails_t.KI_wrong_version

FGEVSQ

PK.UNCLASSED.fg_ifails_codes_t.FGEVSQ

FR_already_exists

PK.UNCLASSED.frustrum_ifails_t.FR_already_exists

12.3.8 Logicals

The logical type in the C interface of Parasolid is PK_LOGICAL_t; this becomes a struct named PK.LOGICAL_t in C#. The associated values PK_LOGICAL_true and PK_LOGICAL_false become struct members PK.LOGICAL_t.@true and PK.LOGICAL_t.@false, where the “@” has been inserted to avoid using a reserved word. (This is explained in Section 12.4, “Exceptions to naming conventions in C#”.)

12.3.9 Functions

Parasolid C functions all belong to a Parasolid class except for some of the functions used to free memory allocated by Parasolid (whose names end with _r_f ). If a function is not a member of a Parasolid class in C, it becomes a member of the “UNCLASSED” class in C#.

 

Function (with class) in C

C# function

<Prefix>_<class>_<function>

<Namespace alias>.<class>.<function>

PK_BB_create

PK.BB.create

 

Function (without class) in C

C# function

<Prefix>_<function>

<Namespace alias>.UNCLASSED. <function>

PK_boolean_r_f

PK.UNCLASSED.boolean_r_f

12.3.10 Function pointers

Parasolid function-pointer types in C become delegates in C#. The majority (but not all) of these belong to a class.

 

Function pointer (with class) in C

C# delegate

<Prefix>_<class>_<function_pointer>

<Namespace alias>.<class>.<function_pointer>

PK_DEBUG_SESSION_exit_cb_t

PKD.SESSION.exit_cb_t

 

Function pointer (without class) in C

C# delegate

<Prefix>_<function_pointer>

<Namespace alias>.<function_pointer>

PK_detail_hole_cb_f_t

PK.detail_hole_cb_f_t

 

Warning: For those function pointers that are “registered“ with Parasolid, and may be used at any subsequent time, the C# implementation necessarily produces a small memory leak each time one is registered. See Section C.6.4, “Persistent callbacks” for details.

Each delegate has an associated null constant in the C# interface, formed by adding “_null” to the end of the name; for example, PKD.SESSION.exit_cb_t_null. It also has an associated ignore constant, formed by adding “_ignore” to the end of the name; for example, PK.FSTART.f_t_ignore. This refers to a function within the binding.

 

Note: These null and ignore constants must belong to a class; hence for those function pointers that are not members of a class, the corresponding null constants will become members of the “UNCLASSED” class; for example, PK.UNCLASSED.detail_hole_cb_t_null.

[back to top]


12.4 Exceptions to naming conventions in C#

The general rules governing Parasolid names in the C# interface are given in Section 12.3, “Parasolid types and names in C#”. There are some identifiers that do not follow these rules exactly, however; this section identifies these special cases.

12.4.1 Identifiers that begin with a digit

Since names of identifiers cannot start with a number in C#, the leading digit is replaced by a word of the same meaning. For example:

 

C name

C# name

PK_3_face_blend_t

PK.three_face_blend_t

PK_ATTDEF_class_01_c

PK.ATTDEF.class_t.zero1_c

Note that the “1” in “PK.ATTDEF.class_t.zero1_c” remains a digit; it is only the leading digit in any such name that must be changed.

12.4.2 Identifiers that are reserved words in C#

A leading “@“ is added to the reserved word. For example:

 

C name

C# name

PK_APPITEM_is

PK.APPITEM.@is

PK_LOGICAL_false

PK.LOGICAL_t.@false

The following reserved words (in C#) are used in the C interface in this way: char , class , double , false , int , null , string , true , is and goto .

12.4.3 Special cases for names of token values

As mentioned in Section 12.3.7, “Values of Parasolid token types”, there are some token values where the Parasolid name in C does not include the corresponding token-type name (up to the “_t”). In these cases, the C# name must always include the corresponding enum type. The most common cases of these are listed below:

 

C name

C# name

PK_ERROR _<identifier>

PK.ERROR.code_t .<identifier>

PK_ERROR_bad_fin

PK.ERROR.code_t.bad_fin

 

C name

C# name

PK _<identifier>

PK.check_state_t .<identifier>

PK_EDGE_state_bad_order_c

PK.check_state_t.EDGE_state_bad_order_c

 

C name

C# name

PK_SESSION_ <identifier>

PK.SESSION.software_option_t .<identifier>

PK_SESSION_pre_v151_switch_1_c

PK.SESSION.software_option_t.pre_v151_switch_1_c

In addition, the following table lists the remaining special cases:

 

C name

C# name

PK_ATTDEF_callback_normal_c

PK.ATTDEF.callback_type_t.normal_c

PK_ATTDEF_callback_read_only_c

PK.ATTDEF.callback_type_t.read_only_c

PK_ATTDEF_copy_callback_f_t

PK.ATTDEF.copy_callback_f_t_ignore

PK_ATTDEF_delete_callback_f_t

PK.ATTDEF.delete_callback_f_t_ignore

PK_ATTDEF_merge_callback_f_t

PK.ATTDEF.merge_callback_f_t_ignore

PK_ATTDEF_name_cb_f_t

PK.ATTDEF.name_cb_f_t_ignore

PK_ATTDEF_name_cb_t

PK.ATTDEF.name_cb_t_ignore

PK_ATTDEF_receive_callback_f_t

PK.ATTDEF.receive_callback_f_t_ignore

PK_ATTDEF_split_callback_f_t

PK.ATTDEF.split_callback_f_t_ignore

PK_ATTDEF_transmit_callback_f_t

PK.ATTDEF.transmit_callback_f_t_ignore

PK_ATTRIB_cb_f_t

PK.ATTRIB.cb_f_t_ignore

PK_ATTRIB_cb_t

PK.ATTRIB.cb_t_ignore

PK_ATTRIB_filter_f_t

PK.ATTRIB.filter_f_t_ignore

PK_ATTRIB_reset_cb_f_t

PK.ATTRIB.reset_cb_f_t_ignore

PK_BCURVE_extend_failure_c

PK.BCURVE.extend_status_t.failure_c

PK_BCURVE_extend_ok_c

PK.BCURVE.extend_status_t.ok_c

PK_BCURVE_extend_partial_c

PK.BCURVE.extend_status_t.partial_c

PK_BCURVE_extend_unextended_c

PK.BCURVE.extend_status_t.unextended_c

PK_BCURVE_fit_err_closest_c

PK.BCURVE.fit_err_method_t.closest_c

PK_BCURVE_fit_err_none_c

PK.BCURVE.fit_err_method_t.none_c

PK_BCURVE_fit_err_parm_c

PK.BCURVE.fit_err_method_t.parm_c

PK_BCURVE_fit_eval_chain_c

PK.BCURVE.fit_eval_type_t.chain_c

PK_BCURVE_fit_eval_f_t

PK.BCURVE.fit_eval_f_t_ignore

PK_BCURVE_fit_eval_user_c

PK.BCURVE.fit_eval_type_t.user_c

PK_BODY_blend_propagate_f_t

PK.BODY.blend_propagate_f_t_ignore

PK_BODY_knit_completed_c

PK.BODY.knit_status_t.completed_c

PK_BODY_knit_not_completed_c

PK.BODY.knit_status_t.not_completed_c

PK_BODY_loft_bad_clamp_c

PK.BODY.loft_fault_t.bad_clamp_c

PK_BODY_loft_bad_end_conds_c

PK.BODY.loft_fault_t.bad_end_conds_c

PK_BODY_loft_bad_guide_match_c

PK.BODY.loft_fault_t.bad_guide_match_c

PK_BODY_loft_bad_guide_wire_c

PK.BODY.loft_fault_t.bad_guide_wire_c

PK_BODY_loft_bad_match_c

PK.BODY.loft_fault_t.bad_match_c

PK_BODY_loft_bad_profile_c

PK.BODY.loft_fault_t.bad_profile_c

PK_BODY_loft_bad_profile_type_c

PK.BODY.loft_fault_t.bad_profile_type_c

PK_BODY_loft_bad_simplify_c

PK.BODY.loft_fault_t.bad_simplify_c

PK_BODY_loft_check_failure_c

PK.BODY.loft_fault_t.check_failure_c

PK_BODY_loft_clamp_face_c

PK.BODY.loft_clamp_type_t.face_c

PK_BODY_loft_clamp_no_c

PK.BODY.loft_clamp_type_t.no_c

PK_BODY_loft_clamp_planar_c

PK.BODY.loft_clamp_type_t.planar_c

PK_BODY_loft_clamp_vec_face_c

PK.BODY.loft_clamp_type_t.vec_face_c

PK_BODY_loft_clamp_vec_planar_c

PK.BODY.loft_clamp_type_t.vec_planar_c

PK_BODY_loft_clamp_vector_c

PK.BODY.loft_clamp_type_t.vector_c

PK_BODY_loft_clamped_c

PK.BODY.loft_curvature_t.clamped_c

PK_BODY_loft_failure_c

PK.BODY.loft_fault_t.failure_c

PK_BODY_loft_geom_degen_c

PK.BODY.loft_fault_t.geom_degen_c

PK_BODY_loft_geom_self_int_c

PK.BODY.loft_fault_t.geom_self_int_c

PK_BODY_loft_natural_c

PK.BODY.loft_curvature_t.natural_c

PK_BODY_loft_ok_c

PK.BODY.loft_fault_t.ok_c

PK_BODY_loft_small_profile_c

PK.BODY.loft_fault_t.small_profile_c

PK_BODY_loft_surf_failure_c

PK.BODY.loft_fault_t.surf_failure_c

PK_BODY_loft_topol_self_int_c

PK.BODY.loft_fault_t.topol_self_int_c

PK_BODY_loft_unconstrained_c

PK.BODY.loft_curvature_t.unconstrained_c

PK_BODY_pick_axial_c

PK.BODY.pick_method_t.axial_c

PK_BODY_pick_axial_location_c

PK.BODY.pick_method_t.axial_location_c

PK_BODY_pick_radial_c

PK.BODY.pick_method_t.radial_c

PK_BODY_pick_ratio_c

PK.BODY.pick_method_t.ratio_c

PK_BODY_sewing_any_c

PK.BODY.sewing_type_t.any_c

PK_BODY_sewing_general_c

PK.BODY.sewing_type_t.general_c

PK_BODY_sewing_non_manifold_c

PK.BODY.sewing_problem_t.non_manifold_c

PK_BODY_sewing_non_oriented_c

PK.BODY.sewing_problem_t.non_oriented_c

PK_BODY_sewing_overlapping_c

PK.BODY.sewing_problem_t.overlapping_c

PK_BODY_sewing_remove_cert_c

PK.BODY.sewing_removal_t.remove_cert_c

PK_BODY_sewing_remove_none_c

PK.BODY.sewing_removal_t.remove_none_c

PK_BODY_sewing_remove_poss_c

PK.BODY.sewing_removal_t.remove_poss_c

PK_BODY_sewing_sheet_c

PK.BODY.sewing_type_t.sheet_c

PK_BODY_sewing_solid_c

PK.BODY.sewing_type_t.solid_c

PK_BODY_sewing_unspecified_c

PK.BODY.sewing_problem_t.unspecified_c

PK_BODY_sweep_align_arclength_c

PK.BODY.sweep_alignment_t.arclength_c

PK_BODY_sweep_align_normal_c

PK.BODY.sweep_alignment_t.normal_c

PK_BODY_sweep_align_parallel_c

PK.BODY.sweep_alignment_t.parallel_c

PK_BODY_sweep_align_parm_c

PK.BODY.sweep_alignment_t.parm_c

PK_BODY_sweep_bad_guide_c

PK.BODY.sweep_fault_t.bad_guide_c

PK_BODY_sweep_bad_guide_clamp_c

PK.BODY.sweep_fault_t.bad_guide_clamp_c

PK_BODY_sweep_bad_lock_dir_c

PK.BODY.sweep_fault_t.bad_lock_dir_c

PK_BODY_sweep_bad_lock_face_c

PK.BODY.sweep_fault_t.bad_lock_face_c

PK_BODY_sweep_bad_match_c

PK.BODY.sweep_fault_t.bad_match_c

PK_BODY_sweep_bad_path_c

PK.BODY.sweep_fault_t.bad_path_c

PK_BODY_sweep_bad_profile_c

PK.BODY.sweep_fault_t.bad_profile_c

PK_BODY_sweep_bad_trim_point_c

PK.BODY.sweep_fault_t.bad_trim_point_c

PK_BODY_sweep_bad_vertex_c

PK.BODY.sweep_fault_t.bad_vertex_c

PK_BODY_sweep_check_failure_c

PK.BODY.sweep_fault_t.check_failure_c

PK_BODY_sweep_curve_failure_c

PK.BODY.sweep_fault_t.curve_failure_c

PK_BODY_sweep_failure_c

PK.BODY.sweep_fault_t.failure_c

PK_BODY_sweep_geom_degen_c

PK.BODY.sweep_fault_t.geom_degen_c

PK_BODY_sweep_geom_self_int_c

PK.BODY.sweep_fault_t.geom_self_int_c

PK_BODY_sweep_law_curve_c

PK.BODY.sweep_law_type_t.curve_c

PK_BODY_sweep_law_curve_inv_c

PK.BODY.sweep_law_type_t.curve_inv_c

PK_BODY_sweep_law_discrete_c

PK.BODY.sweep_law_type_t.discrete_c

PK_BODY_sweep_law_none_c

PK.BODY.sweep_law_type_t.none_c

PK_BODY_sweep_non_c2_c

PK.BODY.sweep_fault_t.non_c2_c

PK_BODY_sweep_non_g1_failure_c

PK.BODY.sweep_fault_t.non_g1_failure_c

PK_BODY_sweep_ok_c

PK.BODY.sweep_fault_t.ok_c

PK_BODY_sweep_repaired_c

PK.BODY.sweep_fault_t.repaired_c

PK_BODY_sweep_scale_both_c

PK.BODY.sweep_scale_type_t.both_c

PK_BODY_sweep_scale_posn_c

PK.BODY.sweep_scale_type_t.posn_c

PK_BODY_sweep_scale_size_c

PK.BODY.sweep_scale_type_t.size_c

PK_BODY_sweep_small_profile_c

PK.BODY.sweep_fault_t.small_profile_c

PK_BODY_sweep_surf_failure_c

PK.BODY.sweep_fault_t.surf_failure_c

PK_BODY_sweep_topol_self_int_c

PK.BODY.sweep_fault_t.topol_self_int_c

PK_BODY_sweep_torsion_failure_c

PK.BODY.sweep_fault_t.torsion_failure_c

PK_CURVE_general_curve_c

PK.CURVE.general_type_t.curve_c

PK_CURVE_general_eval_f_t

PK.CURVE.general_eval_f_t_ignore

PK_CURVE_general_user_c

PK.CURVE.general_type_t.user_c

PK_DEBUG_SESSION_create_cb_t

PKD.SESSION.create_cb_t_ignore

PK_DEBUG_SESSION_destroy_cb_t

PKD.SESSION.destroy_cb_t_ignore

PK_DEBUG_SESSION_entry_cb_t

PKD.SESSION.entry_cb_t_ignore

PK_DEBUG_SESSION_exit_cb_t

PKD.SESSION.exit_cb_t_ignore

PK_DEBUG_roll_back_c

PKD.roll_direction_t.back_c

PK_DEBUG_roll_back_main_c

PKD.roll_direction_t.back_main_c

PK_DEBUG_roll_both_c

PKD.roll_direction_t.both_c

PK_DEBUG_roll_fwd_c

PKD.roll_direction_t.fwd_c

PK_DEBUG_roll_no_c

PKD.roll_direction_t.no_c

PK_DEBUG_try_error_handler_f_t

PKD.UNCLASSED.try_error_handler_f_t_ignore

PK_DELTA_close_f_t

PK.DELTA.close_f_t_ignore

PK_DELTA_delete_f_t

PK.DELTA.delete_f_t_ignore

PK_DELTA_open_for_read_f_t

PK.DELTA.open_for_read_f_t_ignore

PK_DELTA_open_for_write_f_t

PK.DELTA.open_for_write_f_t_ignore

PK_DELTA_read_f_t

PK.DELTA.read_f_t_ignore

PK.DELTA.write_f_t

PK.DELTA.write_f_t_ignore

PK_EDGE_optimise_failure_c

PK.EDGE.optimise_result_t.failure_c

PK_EDGE_optimise_success_c

PK.EDGE.optimise_result_t.success_c

PK_EDGE_type_closed_c

PK.EDGE.vertex_type_t.closed_c

PK_EDGE_type_general_c

PK.EDGE.fins_type_t.general_c

PK_EDGE_type_laminar_c

PK.EDGE.fins_type_t.laminar_c

PK_EDGE_type_normal_c

PK.EDGE.fins_type_t.normal_c

PK_EDGE_type_open_c

PK.EDGE.vertex_type_t.open_c

PK_EDGE_type_ring_c

PK.EDGE.vertex_type_t.ring_c

PK_EDGE_type_wireframe_c

PK.EDGE.fins_type_t.wireframe_c

PK_ERROR_fatal

PK.ERROR.severity_t.fatal

PK_ERROR_mild

PK.ERROR.severity_t.mild

PK_ERROR_none

PK.ERROR.severity_t.none

PK_ERROR_serious

PK.ERROR.severity_t.serious

PK_FACE_change_bend_c

PK.FACE.change_bend_type_t.c

PK_FACE_change_bend_side_c

PK.FACE.change_bend_type_t.side_c

PK_FABORT_f_t

PK.FABORT.f_t_ignore

PK_FACE_change_deform_eval_f_t

PK.FACE.change_deform_eval_f_t_ignore

PK_FACE_grow_cb_f_t

PK.FACE.grow_cb_f_t_ignore

PK_FACE_trim_cb_f_t

PK.FACE.trim_cb_f_t_ignore

PK_FFCLOS_f_t

PK.FFCLOS.f_t_ignore

PK_FFOPRB_f_t

PK.FFOPRB.f_t_ignore

PK_FFOPRD_f_t

PK.FFOPRD.f_t_ignore

PK_FFOPWR_f_t

PK.FFOPWR.f_t_ignore

PK_FFREAD_f_t

PK.FFREAD.f_t_ignore

PK_FFSEEK_f_t

PK.FFSEEK.f_t_ignore

PK_FFSKXT_f_t

PK.FFSKXT.f_t_ignore

PK_FFTELL_f_t

PK.FFTELL.f_t_ignore

PK_FFWRIT_f_t

PK.FFWRIT.f_t_ignore

PK_FGCRCU_f_t

PK.FGCRCU.f_t_ignore

PK_FGCRSU_f_t

PK.FGCRSU.f_t_ignore

PK_FGEVCU_f_t

PK.FGEVCU.f_t_ignore

PK_FGEVSU_f_t

PK.FGEVSU.f_t_ignore

PK_FGPRCU_f_t

PK.FGPRCU.f_t_ignore

PK_FGPRSU_f_t

PK.FGPRSU.f_t_ignore

PK_FMALLO_f_t

PK.FMALLO.f_t_ignore

PK_FMFREE_f_t

PK.FMFREE.f_t_ignore

PK_FSTART_f_t

PK.FSTART.f_t_ignore

PK_FSTOP_f_t

PK.FSTOP.f_t_ignore

PK_GOCLPX_f_t

PK.GOCLPX.f_t_ignore

PK_GOCLSG_f_t

PK.GOCLSG.f_t_ignore

PK_GOOPPX_f_t

PK.GOOPPX.f_t_ignore

PK_GOOPSG_f_t

PK.GOOPSG.f_t_ignore

PK_GOPIXL_f_t

PK.GOPIXL.f_t_ignore

PK_GOSGMT_f_t

PK.GOSGMT.f_t_ignore

PK_LATTICE_graph_cb_f_t

PK.LATTICE.graph_cb_f_t_ignore

PK_LATTICE_graph_f

PK.LATTICE.graph_f_ignore

PK_LBALL_cb_f_t

PK.LBALL.cb_f_t_ignore

PK_LROD_cb_f_t

PK.LROD.cb_f_t_ignore

PK_MARK_check_f_t

PK.MARK.check_f_t_ignore

PK_MARK_close_f_t

PK.MARK.close_f_t_ignore

PK_MARK_delete_f_t

PK.MARK.delete_f_t_ignore

PK_MARK_open_f_t

PK.MARK.open_f_t_ignore

PK_MARK_read_f_t

PK.MARK.read_f_t_ignore

PK_MARK_write_f_t

PK.MARK.write_f_t_ignore

PK_MEMORY_alloc_f_t

PK.MEMORY.alloc_f_t_ignore

PK_MEMORY_free_f_t

PK.MEMORY.free_f_t_ignore

PK_MESH_facet_cb_f_t

PK.MESH.facet_cb_f_t_ignore

PK_MESH_facet_f

PK.MESH.facet_f_ignore

PK_MFACET_cb_f_t

PK.MFACET.cb_f_t_ignore

PK_MTOPOL_map_cb_f_t

PK.MTOPOL.map_cb_f_t_ignore

PK_MTOPOL_select_cb_f_t

PK.MTOPOL.select_cb_f_t_ignore

PK_MVERTEX_cb_f_t

PK.MVERTEX.cb_f_t_ignore

PK_PMARK_goto_attrib_cb_f_t

PK.PMARK.goto_attrib_cb_f_t_ignore

PK_PMARK_goto_attrib_cb_t

PK.PMARK.goto_attrib_cb_t_ignore

PK_PMARK_new_at_current_mark_c

PK.PMARK.new_at_mark_t.at_current_mark_c

PK_PMARK_new_with_partition_c

PK.PMARK.new_at_mark_t.with_partition_c

PK_SESSION_applio_open_rd_2_t

PK.SESSION.applio_open_rd_2_t_ignore

PK_SESSION_applio_open_rd_t

PK.SESSION.applio_open_rd_t_ignore

PK_SESSION_applio_open_uc_rd_2_t

PK.SESSION.applio_open_uc_rd_2_t_ignore

PK_SESSION_applio_open_uc_rd_t

PK.SESSION.applio_open_uc_rd_t_ignore

PK_SESSION_applio_open_uc_wr_2_t

PK.SESSION.applio_open_uc_wr_2_t_ignore

PK_SESSION_applio_open_uc_wr_t

PK.SESSION.applio_open_uc_wr_t_ignore

PK_SESSION_applio_open_wr_2_t

PK.SESSION.applio_open_wr_2_t_ignore

PK_SESSION_applio_open_wr_t

PK.SESSION.applio_open_wr_t_ignore

PK_SESSION_applio_rd_bytes_t

PK.SESSION.applio_rd_bytes_t_ignore

PK_SESSION_applio_rd_chars_t

PK.SESSION.applio_rd_chars_t_ignore

PK_SESSION_applio_rd_doubles_t

PK.SESSION.applio_rd_doubles_t_ignore

PK_SESSION_applio_rd_ints_t

PK.SESSION.applio_rd_ints_t_ignore

PK_SESSION_applio_rd_shorts_t

PK.SESSION.applio_rd_shorts_t_ignore

PK_SESSION_applio_wr_bytes_t

PK.SESSION.applio_wr_bytes_t_ignore

PK_SESSION_applio_wr_chars_t

PK.SESSION.applio_wr_chars_t_ignore

PK_SESSION_applio_wr_doubles_t

PK.SESSION.applio_wr_doubles_t_ignore

PK_SESSION_applio_wr_ints_t

PK.SESSION.applio_wr_ints_t_ignore

PK_SESSION_applio_wr_shorts_t

PK.SESSION.applio_wr_shorts_t_ignore

PK_SESSION_indexio_ffclos_t

PK.SESSION.indexio_ffclos_t_ignore

PK_SESSION_indexio_ffoprd_t

PK.SESSION.indexio_ffoprd_t_ignore

PK_SESSION_indexio_ffopwr_t

PK.SESSION.indexio_ffopwr_t_ignore

PK_SESSION_indexio_ffread_t

PK.SESSION.indexio_ffread_t_ignore

PK_SESSION_indexio_ffseek_t

PK.SESSION.indexio_ffseek_t_ignore

PK_SESSION_indexio_ffwrit_t

PK.SESSION.indexio_ffwrit_t_ignore

PK_SESSION_indexio_ucoprd_t

PK.SESSION.indexio_ucoprd_t_ignore

PK_SESSION_indexio_ucopwr_t

PK.SESSION.indexio_ucopwr_t_ignore

PK_SESSION_polling_cb_t

PK.SESSION.polling_cb_t_ignore

PK_SESSION_watch_create_cb_t

PK.SESSION.watch_create_cb_t_ignore

PK_SESSION_watch_destroy_cb_t

PK.SESSION.watch_destroy_cb_t_ignore

PK_SURF_extend_failure_c

PK.SURF.extend_status_t.failure_c

PK_SURF_extend_invalid_c

PK.SURF.extend_status_t.invalid_c

PK_SURF_extend_ok_c

PK.SURF.extend_status_t.ok_c

PK_SURF_extend_partial_c

PK.SURF.extend_status_t.partial_c

PK_SURF_extend_unextended_c

PK.SURF.extend_status_t.unextended_c

PK_SURF_general_eval_f_t

PK.SURF.general_eval_f_t_ignore

PK_SURF_general_surf_c

PK.SURF.general_type_t.surf_c

PK_SURF_general_user_c

PK.SURF.general_type_t.user_c

PK_THREAD_chain_concurrent_c

PK.THREAD.chain_type_t.concurrent_c

PK_THREAD_chain_exclusive_c

PK.THREAD.chain_type_t.exclusive_c

PK_THREAD_chain_none_c

PK.THREAD.chain_type_t.none_c

PK_TOPOL_clash_a_in_b

PK.TOPOL.clash_type_t.a_in_b

PK_TOPOL_clash_abut_b_in_a

PK.TOPOL.clash_type_t.abut_b_in_a

PK_TOPOL_clash_abut_b_out_a

PK.TOPOL.clash_type_t.abut_b_out_a

PK_TOPOL_clash_abut_no_class

PK.TOPOL.clash_type_t.abut_no_class

PK_TOPOL_clash_b_in_a

PK.TOPOL.clash_type_t.b_in_a

PK_TOPOL_clash_exists

PK.TOPOL.clash_type_t.exists

PK_TOPOL_clash_interfere

PK.TOPOL.clash_type_t.interfere

PK_TOPOL_clash_none

PK.TOPOL.clash_type_t.none

PK_TOPOL_facet_tables_cb_f_t

PK.TOPOL.facet_tables_cb_f_t_ignore

PK_UCOPRD_f_t

PK.UCOPRD.f_t_ignore

PK_UCOPWR_f_t

PK.UCOPWR.f_t_ignore

PK_VERTEX_optimise_failure_c

PK.VERTEX.optimise_result_t.failure_c

PK_VERTEX_optimise_success_c

PK.VERTEX.optimise_result_t.success_c

PK_abort_frustrum_error_c

PK.abort_reason_t.frustrum_error_c

PK_abort_runtime_error_c

PK.abort_reason_t.runtime_error_c

PK_abort_user_interrupt_c

PK.abort_reason_t.user_interrupt_c

PK_blend_setback_collar_all_c

PK.blend_setback_shape_t.collar_all_c

PK_blend_setback_collar_none_c

PK.blend_setback_shape_t.collar_none_c

PK_blend_xs_disc_c

PK.blend_xs_plane_t.disc_c

PK_blend_xs_isoparameter_c

PK.blend_xs_plane_t.isoparameter_c

PK_blend_xs_rolling_ball_c

PK.blend_xs_plane_t.rolling_ball_c

PK_boolean_exclude

PK.boolean_region_t.exclude

PK_boolean_exclude_c

PK.boolean_region_t.exclude_c

PK_boolean_include

PK.boolean_region_t.include

PK_boolean_include_c

PK.boolean_region_t.include_c

PK_boolean_intersect

PK.boolean_function_t.intersect

PK_boolean_intersect_c

PK.boolean_function_t.intersect_c

PK_boolean_mixed_selection_c

PK.boolean_region_t.mixed_selection_c

PK_boolean_off_c

PK.boolean_region_t.off_c

PK_boolean_subtract

PK.boolean_function_t.subtract

PK_boolean_subtract_c

PK.boolean_function_t.subtract_c

PK_boolean_unite

PK.boolean_function_t.unite

PK_boolean_unite_c

PK.boolean_function_t.unite_c

PK_detail_hole_cb_f_t

PK.UNCLASSED.detail_hole_cb_f_t_ignore

PK_detail_hole_cb_t

PK.UNCLASSED.detail_hole_cb_t_ignore

PK_facet_vx_data_end_spike_c

PK.facet_vx_data_type_t.end_spike_c

PK_facet_vx_data_fin_c

PK.facet_vx_data_type_t.fin_c

PK_facet_vx_data_mixed_c

PK.facet_vx_data_type_t.mixed_c

PK_facet_vx_data_ordinary_c

PK.facet_vx_data_type_t.ordinary_c

PK_facet_vx_data_spike_c

PK.facet_vx_data_type_t.spike_c

PK_facet_vx_data_start_spike_c

PK.facet_vx_data_type_t.start_spike_c

PK_fill_hole_bad_edge_c

PK.fill_hole_fault_t.bad_edge_c

PK_fill_hole_bdry_general_c

PK.fill_hole_fault_t.bdry_general_c

PK_fill_hole_cant_match_body_c

PK.fill_hole_fault_t.cant_match_body_c

PK_fill_hole_cant_match_edge_c

PK.fill_hole_fault_t.cant_match_edge_c

PK_fill_hole_create_patch_c

PK.fill_hole_method_t.create_patch_c

PK_fill_hole_didnt_converge_c

PK.fill_hole_fault_t.didnt_converge_c

PK_fill_hole_duplicate_c

PK.fill_hole_fault_t.duplicate_c

PK_fill_hole_extend_adjacent_c

PK.fill_hole_method_t.extend_adjacent_c

PK_fill_hole_face_c

PK.fill_hole_fault_t.face_c

PK_fill_hole_face_face_c

PK.fill_hole_fault_t.face_face_c

PK_fill_hole_gap_c

PK.fill_hole_fault_t.gap_c

PK_fill_hole_no_edge_on_target_c

PK.fill_hole_fault_t.no_edge_on_target_c

PK_fill_hole_non_smooth_c

PK.fill_hole_preference_t.non_smooth_c

PK_fill_hole_not_smooth_c

PK.fill_hole_fault_t.not_smooth_c

PK_fill_hole_ok_c

PK.fill_hole_fault_t.ok_c

PK_fill_hole_plane_only_c

PK.fill_hole_preference_t.plane_only_c

PK_fill_hole_prefer_plane_c

PK.fill_hole_preference_t.prefer_plane_c

PK_fill_hole_smooth_c

PK.fill_hole_preference_t.smooth_c

PK_fill_hole_supp_not_smooth_c

PK.fill_hole_fault_t.supp_not_smooth_c

PK_fill_hole_too_complex_c

PK.fill_hole_fault_t.too_complex_c

PK_fill_hole_too_many_loops_c

PK.fill_hole_fault_t.too_many_loops_c

PK_fill_hole_too_small_c

PK.fill_hole_fault_t.too_small_c

PK_fill_hole_trim_to_hole_c

PK.fill_hole_method_t.trim_to_hole_c

PK_fill_hole_trim_to_sheet_c

PK.fill_hole_method_t.trim_to_sheet_c

PK_fill_hole_unknown_c

PK.fill_hole_fault_t.unknown_c

PK_fill_hole_vertex_c

PK.fill_hole_fault_t.vertex_c

PK_knot_bezier_ends_c

PK.knot_type_t.bezier_ends_c

PK_knot_non_uniform_c

PK.knot_type_t.non_uniform_c

PK_knot_piecewise_bezier_c

PK.knot_type_t.piecewise_bezier_c

PK_knot_quasi_uniform_c

PK.knot_type_t.quasi_uniform_c

PK_knot_smooth_seam_c

PK.knot_type_t.smooth_seam_c

PK_knot_uniform_c

PK.knot_type_t.uniform_c

PK_knot_unset_c

PK.knot_type_t.unset_c

PK_neutral_extend_failure_c

PK.neutral_error_t.extend_failure_c

PK_neutral_fill_hole_failure_c

PK.neutral_error_t.fill_hole_failure_c

PK_neutral_illegal_input_c

PK.neutral_error_t.illegal_input_c

PK_neutral_imprint_failure_c

PK.neutral_error_t.imprint_failure_c

PK_neutral_numerical_failure_c

PK.neutral_error_t.numerical_failure_c

PK_neutral_success_c

PK.neutral_error_t.success_c

PK_neutral_unknown_config_c

PK.neutral_error_t.unknown_config_c

PK_range_guess_no_c

PK.range_guess_type_t.no_c

PK_range_guess_param_c

PK.range_guess_type_t.param_c

PK_range_guess_vector_c

PK.range_guess_type_t.vector_c

PK_set_precision_c2_c

PK.set_precision_method_t.c2_c

PK_set_precision_default_c

PK.set_precision_method_t.default_c

PK_step_normal_c

PK.step_surf_t.normal_c

PK_step_tapered_c

PK.step_surf_t.tapered_c

PK_sweep_clamp_const_profile_c

PK.sweep_clamp_type_t.const_profile_c

PK_sweep_clamp_face_c

PK.sweep_clamp_type_t.face_c

PK_sweep_clamp_none_c

PK.sweep_clamp_type_t.none_c

PK_sweep_guide_chord_c

PK.sweep_guide_method_t.chord_c

PK_sweep_guide_clamp_dirn_c

PK.sweep_guide_clamp_type_t.dirn_c

PK_sweep_guide_clamp_fixed_c

PK.sweep_guide_clamp_type_t.fixed_c

PK_sweep_guide_clamp_none_c

PK.sweep_guide_clamp_type_t.none_c

PK_sweep_guide_curve_c

PK.sweep_guide_method_t.curve_c

PK_sweep_guide_lateral_c

PK.sweep_guide_scale_t.lateral_c

PK_sweep_guide_point_c

PK.sweep_guide_method_t.point_c

PK_sweep_guide_project_c

PK.sweep_guide_method_t.project_c

PK_sweep_guide_uniform_c

PK.sweep_guide_scale_t.uniform_c

PK_sweep_tool_bad_lock_dir_c

PK.sweep_tool_fault_t.bad_lock_dir_c

PK_sweep_tool_bad_path_c

PK.sweep_tool_fault_t.bad_path_c

PK_sweep_tool_bad_tool_c

PK.sweep_tool_fault_t.bad_tool_c

PK_sweep_tool_cant_mitre_c

PK.sweep_tool_fault_t.cant_mitre_c

PK_sweep_tool_check_failure_c

PK.sweep_tool_fault_t.check_failure_c

PK_sweep_tool_geom_degen_c

PK.sweep_tool_fault_t.geom_degen_c

PK_sweep_tool_geom_self_int_c

PK.sweep_tool_fault_t.geom_self_int_c

PK_sweep_tool_missed_target_c

PK.sweep_tool_fault_t.missed_target_c

PK_sweep_tool_path_bad_geom_c

PK.sweep_tool_fault_t.path_bad_geom_c

PK_sweep_tool_path_bad_site_c

PK.sweep_tool_fault_t.path_bad_site_c

PK_sweep_tool_path_disjoint_c

PK.sweep_tool_fault_t.path_disjoint_c

PK_sweep_tool_path_no_lock_c

PK.sweep_tool_fault_t.path_no_lock_c

PK_sweep_tool_path_no_vx_c

PK.sweep_tool_fault_t.path_no_vx_c

PK_sweep_tool_path_not_g1_c

PK.sweep_tool_fault_t.path_not_g1_c

PK_sweep_tool_path_tight_c

PK.sweep_tool_fault_t.path_tight_c

PK_sweep_tool_small_tool_c

PK.sweep_tool_fault_t.small_tool_c

PK_sweep_tool_surf_failure_c

PK.sweep_tool_fault_t.surf_failure_c

PK_sweep_tool_topol_change_c

PK.sweep_tool_fault_t.topol_change_c

PK_sweep_tool_topol_self_int_c

PK.sweep_tool_fault_t.topol_self_int_c

PK_taper_concave_mix_c

PK.taper_concave_type_t.mix_c

PK_taper_concave_none_c

PK.taper_concave_type_t.none_c

PK_taper_concave_plane_c

PK.taper_concave_type_t.plane_c

PK_taper_concave_radius_c

PK.taper_concave_type_t.radius_c

PK_taper_corner_extend_c

PK.taper_corner_type_t.extend_c

PK_taper_corner_plane_c

PK.taper_corner_type_t.plane_c

PK_taper_miter_at_open_c

PK.taper_miter_type_t.at_open_c

PK_taper_miter_on_ref_c

PK.taper_miter_type_t.on_ref_c

PK_taper_miter_to_face_c

PK.taper_miter_type_t.to_face_c

PK_taper_preserve_smooth_c

PK.taper_step_face_t.preserve_smooth_c

PK_taper_step_face_no_c

PK.taper_step_face_t.step_face_no_c

PK_taper_step_face_yes_c

PK.taper_step_face_t.step_face_yes_c

 

[back to top]

<<< Using Reports Chapters Introduction To Basic Concepts In Parasolid >>>