Development of a Modular APIfor the CAD-System Catia V5
TOMAS FORS
Master’s Degree ProjectStockholm, Sweden 2004
TRITA-NA-E04088
Numerisk analys och datalogi Department of Numerical AnalysisKTH and Computer Science100 44 Stockholm Royal Institute of Technology
SE-100 44 Stockholm, Sweden
TOMAS FORS
TRITA-NA-E04088
Master’s Thesis in Computer Science (20 credits)at the School of Computer Science and Engineering,
Royal Institute of Technology year 2004Supervisor at Nada was Inge Frick
Examiner was Stefan Arnborg
Development of a Modular APIfor the CAD-System Catia V5
��������������� ���������������������������
Abstract
����������������������� ��������� ����� �������������� ��� ������������������ �������������������� !"����� ������ �����������# $���������������������%����������� ������������� !�� ����������������� ����"�
�������������������� �������������������� �������� �������������������&���������������������������� ������� �"�
'����������������� �� ����������� ���������������� ���������������� ��������������� ���������� �������� �"�
���� ������ ����������������������������� ������� ���� ����#��������� ��������(�������������� ��#������� #�������)���������� �������������� ������ ������������ ������"�* #����������� ������������������������������������ ������� ����(������������������� ���������������������������� ����� ��#���������#����"���� ������������ ����� ����������� ������� ������������#���������� ������������� ���� ��#������������"�
Utveckling av ett modulärt gränssnitt för CAD-systemet Catia V5
Sammanfattning
�����+��������������������$������������� ���������,���������-������������������ !"�. �������$ �������,�����������������%������ ����������������������� !��-�������������$������� ���� �$���������"�
/��� �����$����������� ���,����������$���������-�0�� ������$���$���-���,��������� ���������$ ��������� �����"�
���������������$���� �� �����$�����$�� �������� ���,���������$���������-�0�� ������$���� ��� ���$����$�������-�0����1���$�"�
2�������������� ���,���������,����������� ���������,��������,��������-0����"�������������� ��� ���$�������������������+������������������(�1������ ���-�����,������������-0�������$�� ������"��,� ��,�����,$���1������,�����������-������$�����������(��������������,�-������������$���������� ���,����������$��������,�����$���������� �"��,�-��-����� �����������$����������,����������$�����������������$���������� ���������������� �$������ ��������������%"�
��������������� ���������������������������
!�"����������
�
# ���� ����� $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#
% ������� $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%
& '�����������$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$& 3"4 � �� �������� � ��"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""3
3"4"4 � �� ��������5���"""""""""""""""""""""""""""""""""""""""""""""""""""""6 3"4"7 � �� ��������.�� � �� """""""""""""""""""""""""""""""""""""""""""""6
3"7 '������������""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""! 3"3 ������ ! """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""8 3"6 '�������������� !"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""8 3"! � �� ������������� ����������""""""""""""""""""""""""""""""""""""""""""9
3"!"4 :�0���� �� """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""; 3"!"7 ������������� """"""""""""""""""""""""""""""""""""""""""""""""""""""""< 3"!"3 � ������ �������� � """"""""""""""""""""""""""""""""""""""""""""""4= 3"!"6 ����(����������� ��������""""""""""""""""""""""""""""""""""""44 3"!"! � �������� """"""""""""""""""""""""""""""""""""""""""""""""""""""""""47 3"!"8 >���������� """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""47 3"!"9 ��� ������ ��"""""""""""""""""""""""""""""""""""""""""""""""""""""47 3"!"; /������������������� � """""""""""""""""""""""""""""""""""""""""""""""43
( �"������ ���������$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#(
� ���������������"��� �����$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#) !"4 � �� ��� �����������$�"""""""""""""""""""""""""""""""""""""""""""""""""48 !"7 ��������� ���������� �0���""""""""""""""""""""""""""""""""""""""""""""""""""""49
!"7"4 ?������""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""4; !"7"7 ��������� """""""""""""""""""""""""""""""""""""""""""""""""""""""""4; !"7"3 ?�������������#��� ��������� � """"""""""""""""""""""""4; !"7"6 '����+���� �""""""""""""""""""""""""""""""""""""""""""""""""""""""4<
!"3 ����������������������"""""""""""""""""""""""""""""""""""""""""""""""""""4<
) !�����$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%# 8"4 �������������(��� ���������� ������������� """"""""""""""""""""""""""""""77 8"7 ����������������������������������""""""""""""""""""""""""""""""""""""73
* +������ ����������� $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%� 9"4 2 ��������� ��""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""7!
'�"���������$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%*
����� �,� $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%- �"4 2�������""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""7;
����� �,'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%. >"4 %� ���������� ������������""""""""""""""""""""""""""""""""""""""""""""""""""""7< >"7 ����������������""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""37 >"3 @ ������������ �� """""""""""""""""""""""""""""""""""""""""""""""""""""""""67
��
��������������� ���������������������������
1
1 Introduction
��������� � ���������������������������� �� ������ ��� ����������������$� #�� #�������#� ��� ���������(��������� ��� ������������������������������� �������������� �������������"�
��������������#����� ���� ������� ���� ������������� ������������� ���"������������������������ �������������������� ������������������� ������ �� #��������"������������������ ����� ���������������� ������ ��)�#������ ���� �����������#���� ��������� ������"������ ��� ������������������� ���������������������"�'����� ��������������������������������������� ���������������������������#��"�
��������� ��������� ���$����� ������� ��������� �# $�#�������������� �����(��������������� ������(�������� ��� #������ �����������"������#���������������������� ����� �������+�������������(�� ����������� ��������������&��(�#�����#���������������������������������� ���"�
������������� ���� ������������������������������� ������������� ������������� ����� ��������������&���������������������������������������� ������� ���$������&������"�
:��� �������#���� �� �������������������� ��������������� ����������� � ��"������������������� ��������������������������� �������������������������������� ���������������"��
������������������� �����A��.A��B��� ���������������(�.�����������������B�������(������ ������ ����������������������� ��#�� ������������� ���������������������"�
������������������� ���������������������� �� ����� 0���# $���� ������������#�������� ��������������������� !(������������������2���C�����2�(�������������� ���������������� �����������"�
��������� !��������������������� ������� ����������������������#������������������������������������������ �� �������������$� #�� #����"�
��������� ����� ����������� ���������������� !�� �� �� #������ �� ������ �� #����������� ��(������������ ��� �������� ���������"�' ��������� �����������2���C���� �����������(����� �� ������������� ����������������"�
��������������� ���������������������������
2
2 Purpose
������ �� �������������#���� ��������������������(�#��������� �����#����������������������������������� ��������#��"���������� ����������������� �������� ��������������������������"�
>������������ ���������� �#������������ ������������ !����#������ ���#����� �������������� ���� �� ��� �����������$��������������������������������������#� �������� !"�
������������������������� �� ��� �������� �� �0����� �����������������������������$� #�� #������"���� ����#������������� ������������ ���������� ��+���������� �0���� ��� �����(���� ��� ������ ����������#���� �������������������������� ������"�
����������(�������������� ������������ ������ ��� ���� ����������������������������� ����� ���� ��������� #����������� ���#����������������# $"��
��������������� ���������������������������
3
3 Basic Concepts
�������������������� �������� !����#�������������������� ����# ��� ��� ��� ������������������������������������������ ���������� �������������������"���� �������������� �� ��������������� ������"�
3.1 Component technology
� �� ������������ ��� ���� ��� ��#����������#���������� �+����������(���� �������������������������"��������� ��������� � ����(������� �����������#������DD# ������ � ����&���� �����)������ ���E7==3F"�2������������� ������ #��������� �������������� ��������$����� ��� �� �������� � ������������� ������������ ��� �� ���������������������������"��
������(� ����� �(����� �������� ��#����������������������� ��+�������� �� ����(���������������� ���������������� �����&������"����� ������ ���� �������� � ��������� �� ��������������������� �������������������#��������� �� �������# $���� �#��������� �� �������� ������ ���������"�
� �� ������� ������������� �������� ������(�#������ ������������������� �� ����+� �������� ����� ���� ����� ������������"�������� ��� �� ������ ����������������� �+����(������������ �� ����������������������������"����� �� ������� ������� ������� ����#��� ���������� �$� #������������ ������������� ��������(���������� ���������������� ������� �� �������������#����� �� �������������������� ����������"�� �� ������� ����������� ��������#���� ���� �� �������� ������ ���#���������� ��"�
���� ������ ����������� ����������������� �������������� �� ����������������������� ���������"�. ���� �������������������� ��� ������������������� �+������ �������������������������#����� ����������������$������������������ ��G����������G��� �����:�0���.��������% ����:.%�"�:������������� ���������(�#�������� ������ ���� ������(�������� ������� ������ �� ����������# $������������� ���������������� �"���������� ���������������������� ��������� ��� ������������ ���� ���� ���������������� �������������� �������������������� ��������� ���� ������������"������ ������������������������������ ��������#����� ������������� ����� ���� ��������������� �"��������������������� ���������������������� ����������� ���������#�������������� ������������������� �� ������ �� ����"������������� ���#�������� ������ �� ����� �������# ����������������� ������� �������������������� ��"��������������# ����&��������������� ��������� �� ���������������#������������������ �������"�
�������� ���� ��$���� �����# $����� ����������� ��� �� ����"�2 �� #����������� ������ ���#����� �� �������� ���������� #�������� ��������������"�
��������������� ���������������������������
4
��� �� ����� ����������� ������������ ���������������� ���������� ���������$���������������������� �(��""���#��� �� ����� ���#��� �� �����������# $�E>�����������"�7===F"�
3.1.1 Components in Java
:��+����� ��� �� �������� � ���������������������������# $����������� �B������5����>����� ��2���.�� ������"������ ������� ���������������������������� ������������������������ �������������� ��������"�
���� �� ����(��""��������(����#���������� ��������������� ���������������5����� ���������������"���������������������� ��� ������������ ���:2����������(�������������������� ��5���(������������� ������������������ ��� �$������� ���� � ��� ���������������"�
������������� ��������� ����������������������������"����� ������� �������� ������������(��������� ����������������������#������������������������� ������ �� ����(������������ �����H��+� ������"�* #������ ����������������������#���������������� ������������� ������� � ��������# $"�������������� ����������������� ������"����������������������� ��� �� ����� �������������������������� ��#������������������� ������������� ���������� �����:2����������"�2������������ ������������� ���� �������$�I�� ��� ������� ��������������#� ���� ����������+�������#���EB������5����>����7"4����������F"�
3.1.2 Components by Microsoft
���� ���#�������� �� ���������������������:.�����������.�� � ����.2�:.�"�.2�:.����� ��������������� ������������������� �"�2����.�� � ����:.�2��������� ��E4<<!F"�
���������� ������������������� �����������������������.�� � ��"�������� ����������� ��� �� ������������$�� +�������������"�
2������ ����.2�:.���������������#���������� ���� �+� �� �0�������������������#������$����� ������� ������������� �� ����� �������� ��������"�2������� ������������������������������ ��� ������ ���� ������� ���������������"�������� ��������������������� �(������������������� ����� ���� ����������� �#�� ������# $"�
����� ������������� ��#� �#������ ������� �� ��������� $����������������&���������#���� ����&�������������� ����� ���"�������������#����� �������� �� ����������������(�#�����#���������������� ��������������������$�������� ����+����������������������� �����������"����������������������� �� ���(������ ������ �� ���(������������� ����� ���"����� ����#����������������������� ����� ����� ����#������� +�������� ������������� ��������� ��#������������������ �0��"�� ��������������� ��������� ������ ������� ��� �����������/���"����� ���� �� ���������������� �0������� #����$� #��� ��������������� ��������� �����������$����� ���������:.����# $"����/������&������������������������������ ������ ���������������� ����������������/������ ���������#��������������"�
��������������� ���������������������������
5
���.2�:.����# $���� ���$����� ���� ����������������"���������������� ������ ���#���������� ����.2�:.������ ��� ����� ���� �"�
���.2�:.�# $�� ��������������#�������$������ ������� �� ��#������������������������� �# $�� ���(������������������� ������ ��� ��#�������������� �# $�#�������� ������������������������� ��� ��:.����� � ��"�
B������.2�:.�������������������� ���������.2�J��� #����� ���������# $��������(����+�������������� ���� ���� ��.2�:.���� ��� ������������������������������ ������?��+���� ��"�
3.2 Features and CAD
. ������������������� ��� �������� ����� ������������������� ��� ���������������"�
������ ����� �������������# $��#����� �������������������������� �$�(����������� ���� �� �������������� ����"������ ���������������� ��������> ���� ��� ��� �� ��������������"�����������������������#�������������� ����������������������� ��� ��������� ����������"�
���������� ������ ��������������������������������������� ��� ������ �������(��������� ���������������������� ������� ��������"���������+��������������#�������(������������ �������$������������������������"���������������������� ������������������ �������#���� ��������������#������������������ �������������� ��������������"�
* #���������� ������������������ ��� ������������� �(�������������������� ��������������� �� ���������#���������� �������������������� ������� ����� ����H����������"�������� ������� �������������� ������� ����� ���������������������(�� ������������������������� � ������"�E> ��� ������"�7==4F�
������������������� �������������������������������� ����������� �# $� ��������#��������� ������� ��������������#����������� �������� ����������������� ����������"������ ��������������������� ��(������������ �������� � �(�������������������� ����������������� ���������� �������� �0��"������������������������������� �������������� ������������� ����+����������"�������+������ �������� ���"����������# ������+� ��������������� ��������������������"�� ���������� ����� ����������# ��������� ��������� �#������������� ����� (����#����� �����������#��������� �"�
�. ����������������������������������� ��������������� ���������������� �� �������"�������������� ���������� ������ ��������"�:����� ��������� �� ����������� ������������� ���������# ������$��������� ��������������������"�
����������#���� ����$�������� �������� �� ������������ ����������� ���� ������ #�������(�$� #�������������������"��������$������ ������� �$���������� ��������������� �����#�������� ������������
��������������� ���������������������������
6
���#��������$�������� ������� ����������� ������������� ������������������������"�
�������� �����������������������������������������#����������# $"�������� ������������������ ������������������������������� ���� �������� ������"�������������������#����������(���������� �������� ��������������������������������� ���������"��
��������� ������������������������������ ���������������������� ���������������$������� !(�� AB@%�@BB/�������� ���"�
3.3 Catia V5
������ !����������������3�����������������������������2���C��"����� ������� ������� ����������� ��� �� ����(������������� �# $� ���������������������� ������ ����� ��������"�
. �����+����� ����������������(�����������(������������(���������������������������� ����� �����#"�B������0 ���������� ��������H�� #��� ������� ����#������������������+���� �"������������#������� ����#��� #�#�������������� ���������� ��������������� ����#����� �������$�� ���� �# $������������#�������������������"����� ���������� �������# $����������� �� +�(��""�� ���������� ������ �����������������������#������� �$��� ������������� ���� ���� ���"��������� ��#�������� ��� ����������#������������� ������������������������ ��� ������������������"��
��� �0��������# $�� �(������������ �����������(������������������������ ������#������������� ���� �������� �����#�������� ��"�@#�������������������������������������������������������������������#������������ ��������� ��������"�
��� �0����������������������� ������������ ����������������#� ������������������������������ ���"�
������ !����� ��������������#���������������������"�
3.4 Features in Catia V5
���������������� !��������������� �0��������������������������������� �"���������������������������������(�#���������$�������������������KK������"��������������������������������$������������������ ����������� ��������"�
J������$��������������������� ��0�������� �0���������� ����������� �������������������������"�� �������������+���������������������������� � ���"������� � ���������������������������� ������#������������������� ������������ ������������"��������������������������������������������#����� ��������������� �������������������+� ��������������������������������"���������������������������� ��������(�#��������������������� �(������������������������������������� �������������������������� ��������������������"�
��������������� ���������������������������
7
��������������������������� ��� ������������� �����������(�������+�������������������������� ������������"����������������������������� ����������"�������������������������������� ���������"�
��������������������������� !����������#����#�����������#���������������������� �� �� �� ���������������������"�������������� ���� ���������#��������������� ��� �$���������������������� ����"�
������������ �� ������������ �����������#�������� �������������������������������������� �� ������ ����������� �������������� ������������� �� �������� �����#������������ !"�>���#���� ����������� !����������� �(���������������(�������������� ������������"������������������������������������������� ��������� �� ��#���������������������������� !����� ��� �� �������������� ���������������� ����"�
.����������������������� !�������� ���# ������ �����������������"�:������������� �������� ���������������������������������������� �0��"�������������+����� �������� �����������"������������� ������������������#��������������������� ���� �� �����+�����������"���������� ������������ ����������������"����+���������������(�#��������������������������� ����������������������������������"���������� !����������������������� �����������"������������������� ������� �� ������� �����������������"��
��������� ���������������� ���������������� ��������������������� ����#��������������������������$������ ������� ����������"�2�������������$���� �� ���������������������������������������� ���������� ��"������������������������������������������� �������������������"�' �+��������������� ����������������������������������������� ��������������������������������"�
��������� �� ������� ������#������(���������������(�#�������� #��� ���(��������������� ���������� ������"�� ������������������������������ ������� ��� ���������������������������"������������������������#���������������#��������� ���������� ������ ���������#����������"�����������0������$������������������I���������������� ��������������������������������� �������"�
��� ��� ���� �������������������������� �� ������� ��� �������������� � �������������� ��"���������� !������������������������"������������������� ����������� ��(���������� � ��������������������� #�������"���������+������ ��+������������ ������������������������� ������� ������ �����2:��������"�
���#������ �������� !�������� �����������LAA###"�����"� �"�
3.5 Component application architecture
' ����� ��������������������#� �������"����� ������� ������� ��� �����(�#������������������� �����������������"������ ����������������#���� ��#������������� ���� �.2�J��� #�� �� �?��+"������������������� ������� �# $� �� ������� ������� ��������� ��� ������������� ��"�
��������������� ���������������������������
8
������� ������� ����������������� � ���(������2����� � ������>����(� �� �����KK"����������������� � ������� ������ #��������KK����������������� ������������������ 0�������#����� ���������������"�
3.5.1 Object model
����������������� !������� �0���� ��������������+���� �� ��.2�:.I����������������� ����?��+���� �����#��"������ ���� ��2�� ���������� ��������� �� ��&��������� ��� ������ ��������������KKL�
• B���������� ����������� ���"�������KK����������������������������������� ��������(�������������������(���� ������� ��������������"�
• /���������+��������������KK�������� ��� ������� �������������������������(�#�����# ������$��������������� ������#��������� ������� !"�
• 2��� ��� � �0������������ ������ �����"���� ������ ��2���������������������� ����� ���� ���������������� ��� ������ ������� ������������������������ ������ �����"�
• '�+����+���� �� �� �0���"�����KK������� ��� �+���� �0������������������(������ ������������� ��� ������� ���������������������������������������������� �+����������� �����������������"�
���� ���� ���� �������2�� ������ ��������������� !�:�0���. ����:.�"�
����������������:.����CATBaseUnknown(�#������������� ��IUnknown�)�������������� ��.2�:."������������� ������������������������������ �� ��������������(�������������� ������������������������� $����"�
' ������������� ��� �������� �� ���������� �0���+� ������ ���������"����� �� ������� ������������� ���������������� �������������� ��������������������$�� +"�
�����������������������2������������������������� ��� �����������"�������� ����� ����� ����#���� ��������������� ������������� ��� ������� ���������������#����������������"������� ���$������ ������� ��2�� ����������������� ���#��� �������� ��������� �"����� �������������������������������������� ���� ����������� ����#�����#������ �������� !�#��� ��������"�
�������������������������KK������(��""�� ��������� ������������������ ��"����������������� ������� �������������� ����������B� �0������������������� +����#����������������������������� �"������B� �0�������������������������������������������� �������� ������� ���������������������"������B�������������� ������� �����������"�
' ������ �� ������� �����#�� #��������������� ��������$������� ��(�����������������������������������������������������"�:����� ������������������������� ��� ��������� ��������������������� �� �������������"�/�� ���� ���������������������������������������������������������������� ���� �� ����� ������������������������� ����+�������� �� ���"�
��������������� ���������������������������
9
������������� �������� ���� �� �������� �����+���� ��(������������� �������������A ������ ��� ����+������������"����+���� ������ �����������������������������(�#���������������� ��� ���������� ����+�������� ��� ���"������������������������������������ ���(�#������ �������������� ���������������� �0����������������������������� (�� ������������������+���� ��(����#��������� ���� �� ��#������������ ����������� ��� �������������� �"��
�������� ����$���������� !�������������#������������ �������#������������������������������"���������� !������������������������� �0�������� ��������������"������������������������������������������������������������ ������������� ���"��������$������ ������� ������� !�� ����$����������������������������� �����������������$������������ ���"����#��������������������������������������������� ������ ������������� ���"��
���:.���� ����� ��������� �� ���#��������� ��+������� ��(�� � �������������������� �0��� �������������"������� �(������������������� �0���� ���� ���� ��(������������������� ������������������� ����� ������� ��������#���#���������� �"��
3.5.2 Internal structure
������ !�������������� ������ ����. ��� �#�� �� �����������"�
���� ���������� ���� ���+������������������#�� ������������������������ ����"�
������� #��������� �� ����������� �������� ������������ � � �������� ���(�#������������������� �������� ����� �� �0����������� ����"����� �������� ��������������������� ���������������������� ����� ��"����������������� ������ �������� ������������#������������������������� ����(������������������������� ������"��������������� �� ������ � � ������� ���(�#�����# $��#����� � � ������� ���������������������������� ������ �������"�
:����� ����������������������� ���(�#��������������� ����������#��������������� ������������ ��� ��������������������� ��������"�
� ����� ���������������������# $������� � ������������� ��"����+��������������������������� � ���������������������������� ��������#�����"����� � ������������������������������������������������ ������"������� ��������������� �� �������������������������#�����������������������������"�
������������ �������� ����������������� ����������������������������"�������������� ������������������� ����������������������������� ����(�������&����������������� !"����������������+���(�#����������&���������������������������������� ��� �������������������� ����"�������&�������������������������������������������������� ���������������� ���&���������������$� ������������������������� ������������ ����������"��������$������ ������� �� �������������������������������������#�������� ������������� �� ���������� ������� ������������� �� ��������"����������������������������������������������#����������������� #������������������ ��������� ��� ���� �"�
��������������� ���������������������������
10
J��������������������������������� ���������#��������������� ��� ����������#� ��������"�
���������������������� �������������� !(�#�������������������������������������������������������������� ������"����������������� ���� �������������������(�� ����� ����������� ���� ��������������������������� ��� ��������������� ���� ����"���������� �������������������CATIBuild�������"������������ ������������������� ��Build()(�#�������������� ����������������� !"���
:��� �� ������������� ���������������������� ���(�#������ ����� �0��������������$�����(� ��(���"��������������� ����� ��������������������(�#������� �0���������������� �������� ��������#���������� ����� ������������"��
�����#�� ������� ����#��� #�#���������� �� ��������������� ����#����������������� ���� �� ���� ������"���������� !������������ �?��+����#������J��� #�(��������� ������������ �������������� ��#������� ����#�����������������#"�
���� �� ������������ !������������� �������#����������� ��#�������(��""����� �� ������������������������� ���"���������� ������ �������������������� ����������� ������#�������� ��� �������������� �������#���� �0������������������� ������"������������� �� �0���� ������������� ���� ������� �"�������� �����(����� ����������(�� ������ �� #����� "����������� ������������������������ ����������� ������������ ���� ��� ���$������������ ����������� �������������� ���������"�
���� �� ��������� ��� ������� ��������������������(�#������������������������������������ ���(�� ����� ������"�
3.5.3 Document organisation
������������ ����������� �����"����������������� ������������������� ��� ���������� ������� ����"����������� ����������������� ����������� �������#������������� ����������� �������������� �"���������� 0������# $��������� ����� �������������� ������ �������������� !(���� � ������ ��� �������#��������������"�
��������������� ���������������������������
11
3.5.3.1 The part document
������� ������������������� ��� ������L�
• ���� ������ �����(�#������ ������������������#��������������������������� ����"�
• ������������� ��� �����"����� ���������������������������������$������������������������������ ���� � �0����������� �����"������� ������� �����# ������ �������(��������������������� ������������"����������������������������(��""��������������(��������� ����������������������������������"����� ������������������������������ ���� � � �����������"�
• ���� �������� �����"������� �������� � � ����������� ������ ��������������������$����������"�
• ����� ��� ������� ������������ �� ������������� ��"������� ������� ��������� ����������� ���������������� �� ������(��������������"�������� ����������������� �������������������������� �"�
��������� �� ������� ������#������������� �������� �� ������������ ��������������"�
3.5.3.2 The product document
��� ������ �������������� ���������� �0������������������������������������"����� ���������������� �� ������ �������������������������$�������������� ����"���������� ��+����� �� ���������������� ���� ���� ����"��������������� ����(���$�����(�� ������� ��&�������#������������ �������������� ������������ �������������� �� ������������"��������������������� ������� �� ������������ ����"�������������� �� ����� ����� �������������������"���������#��������������� ���������� ��������� #��� ������(�#������������������� ������ �����"�
���� ������������������� ������ ��������� �������#������� ������ ������� ��������� �� ����� ������������ ��� ���������"����� �� ����� ������� ���������������� ������(�������(����������������� �����"���� ��� ������������������������� ������������� �������� �� ��������"�
�������� ��#���������� ��#������ �� ���������������� ����������������������������������#����� ������� ���������� �����#� ��������"�
3.5.4 Types, names and coding rules
���������������� �� ������(�� ����������������������������������� �0�����������$�������� ������� �0������������ ����� ���������#"���������#�����������������������������������#��"�
2���������������������(�#������������������������������� ������������� �����������"���������������������������������+�����������CATDocument"������������������#����������+�� �� #�����������������������CATIContainer"�
��������������� ���������������������������
12
����������� ���� �� #������� ����� ������ ��������(�#������� �������� �������������� #�����+�� ��� �������������"�
�2����� ��������� ����������(��������(�����������������(�� ����������������������������� ��������������������� ��+���� ��"�
3.5.5 Code structure
�������������������;9����# $����� �������� !/<(�#���������� �� ����� �� �������������� ���������������� !� �� �������������������� �"�B��������# $�� ������� ������� ���������(�������(��� ���������� ��(������� ���������� �"�
� ����� ��� �������������# $�������������� �� ��� ��� �����#������ ������ ����"����������������������������������� ������������ ��#������������������&���"��������� ���������������������� ��L�� ����������� �������� �� ������# $��)���������������(�� ��� ��������������� ��������������# $�)�������������������� ����������� ���������������������� ����)�� �����������"�
������������������ ���� ��� �������������� ��� ���������#����������� ������ ������������#����# $�"�
��������� ������ �$������������#���������������������� ������������� ���� ����������+�������� ������������������� ���������������� ������������ ���� ��� ����$���"��
3.5.6 Build issues
��� ��� �������������������������� ���� �������� ������#�������# $��� ������� �� ��� ����$�#���"��������# $���� ������������������������������������� �����# $����"�' ������ �������+��������������������� �"��#�������� ������� ����������� ����(�� ��#��������� ��������������"�
3.5.7 Development tools
' ����.�� � ���J��� #�H���� ������2�� ������ ������ ������ �� ���������������� �������� ��������B�� �������KK�8"="� �������KK���������������� ��.�� � �������B������ ������2���� �� 2�"�������� �������� ���������� ������ ������B�� ���������������������������(����#�������������# $������� ����"��������� �����������$��������������� ������������ ������B"��
�������������# $��#���������������#�&��$�"�������+����L�#�������������#���������� 2������������+���� ������� 0������� �� 2������� ���"������������������� 2������(��������������� �� �� 2���������2� �������� ������������������ ��� 0�������� �����#�� $���B�������� ���������#�������� �� ������� 0���� �������#������������ ��� 0����������������������� 2������� ������� 0������"��������� ��������� �������������������� $������������� ������� ��#���)�������������������������� �� ����� ����� ������ ����"�J��(�� ��������#������������ 0�������� �� 2��������(���������� �������� �������"�
��������������� ���������������������������
13
��%?�������������� �� ����"��/�������������������������� !������� �������� ��� ����(�#���������������������� ��� ������� ����������������#��������������� �.2�J��� #���
3.5.8 Running an application
������� �����# ��������� ������#������ ������������� ��"���������������� ��#������� ���������� $��� ������ ���������"����������������� ����������#��� ���������� ���������� !����������"������� ������ ��� ����������������� �������� �0������$������ ����������������(�#����������������������� ������������� �"���������� ��������� �����#������ �#�������� �"�
��� ���#���� ����� ��������� ��#������������ !������(����������������� �"����#���� ������������������������������������� ��� ��� ������� !�� ������(�#��������������� ������� ������������������ ��������������#��� #���������"������������� ������� ���������� ���������� ���������"�
��������������� ���������������������������
14
4 About API-development
������������������������������������������������ ����(������������ �����������������+��������������� �������� ����"��������� ��� ��#������������� ����� �������������#����#�������� ����������� �����������"�
� �#������ ���������� ���������������� ��������� �������������� ��� ���������������(����#��������� ���������������� ������������� ����� �#������������#����� ������������ ���"��������������������������� �������$� #�#���� ���� ������������� ���������������������������� ����������� ���#�����#����������� ����"�' �������������� ����������� �������������������������#���$� #�"�� ������������� �� ���������$����������������"�#�������� ��+������ ������������ ���� ���������� ���������� �+����"�:�� ���������������������������������(�#�������� ���� �����#��� #������� �� ������������������������ ��������"������� #����������������#���������%?������(�#��������� ������������ ���������������������������������������������� ���������� ��� �"�' �%?������������������������������������������������������ �� ������ �� ������ ���������������� �����������#��������������� �"�
������������������������������������� ���������������������� ���� ����������������� ��#�������� ���� ���� �����������������������"������&����� ��$� #���� ������������������������ �������� ����� ��������� ������������������� �(����#���������������� �������������������������� ����������������� ����� ���������������������� ���������������������� ����#����������� ���� ������:.����� � ����������� ������ ���� ������"�
��������� ������������������ ���������������������� ���������� �"�������� ��������������������������� ��������������� �� ��������� ������������ �������������"�������������������� �� ��+��������������������� ������� �������������#�� ������ ���� �"����� ������ ��� ����#����������������� ��� ����� �#���� �#�������������#���������� �������������������(������� ������������� ����������� ���+�������"�
>�����������0��� ����������������&������������������ ��� ��+��������� ���# $�� ��������� �"���� ���� �������������� �������G���E4<<;F�����.�����E4<<<F(�#���������#������� ����� �� ������� !�)�� AB@%�@BB/"�
2 ������������ ������ �����������#��� �����(����������� ���������������$���������������������� ������# $������ ��� ����������������� AB@%�@BB/����#���������������L��
• ���� ������� �� AB@%�@BB/(�#���������������������� ������������������ ������� !(������������� ��������"������������������� ���������������#���������� ���������������� ���� ��������������"�
• B���� ����� ������������� ��� ������ �������� �� ���������&���$���� #����� �����0 ����$"������������������������������������� ��������� �������������� ��������&���$���� #����� ���+���"�>������������������ ���������# $����� ����������� ��� ��������� ��� ������"�����
��������������� ���������������������������
15
������ ����#�������# ��������(�#�������� ���������� ������������ ��������#����������������� ���"�
• �������������� �# $� ��� ��� � �����#������������� ������������)�� ������������������� �� �#���������������� ������#� ����������� �����0����� ��� �����"�
����������������������� ����# $����� ����������� ������������#������������(� �#���������� ����������� �� �#����������"���� � ������ ��������������� �#����+�������"����������� $����� ����� ����������� ���������� ������#������������ #�� ���$��������������� ����������� ��"���������� ����������� ���� ���#�������������������� ���� �������� ���"�������������# $��� ������� ������� ��� ���� ��#������������� ����� ��(���� ��#�����������������������$�������������# $�������������� ������ ������� ���� ����$�������� �������"������������������� ��������#����$���� ����������� ���#������#���������#����$���� ��� ����������������������� ����� ��"�?�� �����������#���� ��� ������� �����������������#������� ���������� ��+�� ������������"�
��������������� ���������������������������
16
5 Analysis of the problem domain
��������������������������������������������������������� ������ ��������������������� ��"��
5.1 Common programming tasks
���� ��������� ���#�������������� ��� ����� ���������������� �� �������������+� ������������������� ����� �� #���������L������#�������� ���������������(���������� �� ������������������������(�+������QueryInterface������ ������ �� ����� �������������"��
:������������������� ������������ �� ��� ���"����+����������� ���������(�����#��������� ����� ��"�J����� ��� ������� ����� �� ��� ��"�2 ���������+�����������������#������� ���� �����������������"������� ����� ����� ��� ������#�������# $����� ��������� ������ ���� ���"�
� ���������� ���� �� ����� �# $�#���(�� ������ �� �� #�������������������� ��� �����"�M ����� �������� ������������ �������� ����� ��� ������+�������������(�� �� ������� ��������� ���� ����������������������� �� ����"�
��������������������� �������������������� ����������������������������� ������������� ���������������� �"�����"��
����������+��������� #�� ������������ ��������� �����(�#�������� ��� #�������� ��� ����������� �������#�������� ������#��"��� ���������� �� ������������ ������Release()� ������������� ������ ����� �� �����"���������� ��� ���������������������� �� ��������CATISpecObject_var��� #"�������������������_var��������� ������ ������������(�������� ����� ���������������������������� ��� �����"�������������� ��������� ���������������� �� �0��"� CATDocument* theDoc = 0; CATDocumentServices::OpenDocument(filename, theDoc); CATInit *pDocAsInit = 0; theDoc->QueryInterface(IID_CATInit, (void**)&pDocAsInit); CATIPrtContainer *pSpecContainer = (CATIPrtContainer*) pDocAsInit->GetRootContainer("CATIPrtContainer"); pDocAsInit->Release(); CATISpecObject_var ospPart = pSpecContainer->GetPart(); pSpecContainer->Release(); Use ospPart.
������������������$�������������� ������� ������������������������������������������� �� ������� �(� ���������������#������������� �� ����$� #����#����� ������� ����# $���"������������������ ���������� ����$�������� ��������������"�
��������������� ���������������������������
17
������������� ����������������� �� ���������������# ���� ��������� �������������������� �������������������� ������#��"�
�����#���$���� ��� ��������� ��+��������#���������������������������� ������� ����������� �������������������������� ���������� ����"�
��� �����������# �������������� �� ������� ������#� ����� �0��������� ���������� ����� ����"�' ������������� ����� �����# ����������� ������� �� �0���#������������������� �(�������� ����������������������� ������ �������� �����#� ������ �� ���"�
������� ������� ������������� �0��������������� ��������� �������������������"�������������������� ������� �������������#���������� #����� ��(��������� ����"��������������������� ������������(������#��������������������� ������"�
�:.�# ���� ����������� �������� ��� ���� ����������������"������������������� ��� ���������������������� �#��� ��$� #����#���� �0��������� �������������������� ������������� ���"�������� ������������������������ ����� ������������������������ ����� �������� �0��"���� �� ������������������� ���������� ���I��������� ������������� ���������������������������������:.�� �� ����"��������(�#�������������#�� ����� ����������������� ������������� �����������#���� ����� ��#�������� �������������� ����������������� ������ ������ ������"�
������������������ �������(�������������� ������������ ����� ���������(������� �������������������������� ������� �������� ����� ���������� �"�
:��#���� ������������ ��������������������� �#������� �������������������������� ������ �������������������������� ��� ��������������� �����#��������������������� �������������� �"�
��� ������� �� �������# ��������������� �0�������������� ������������ �������������#����������� ���������� ����������$����� �������� �0��������"�
5.2 Application specific objects
���� ������ ��� ������������� �0����� ������������� ������������� ���� ��������������� ������������ ��� �+������������������������ ������� ��������������$� #�� #"�
��������� ����� �$������������������������������������ ��������������������� ���� �"�
� �+������������� ��������� !������������������� ����� ��#����������������� ����������(�����#��������������������#���$�"�
�����������#����� $�������� ���������� ���� �+���� ������#�������"����+���� ������� � ����� ������������������������������� ����� ����������������� ���������� ����� ���(��# ��������#����� �+�������� ���#������������������"�
��������������� ���������������������������
18
������� ������� ������#�����������������#���L�
• �������������� ��+������������"�
• >�������� ��� �����+��������2�����"�
• >������ �� �����#���������������� ��������"�
• >������ �� ���������+���� ����������� ������������ �����+������������������������������������ ��"�
5.2.1 User feature
����������+������������������������#��������"��������� ����������������������������������#������� ����������������������������"�
�����������������������������������#����� �0������� ������������� ������ �������������#�����������#����(�������(������������� ����������������"����������������� ������������������������� ��"�
�������� �������������� ����������� !�������������� �"�
5.2.2 Derived feature
J�������������#���������������� ��� �����2������� ��������������������������� ������ ����������������������� ������ ���"�� ��������������������� ��� �����#��������������� ��������� ���������� ������������������������������� !"�
����������� �������������� �� ����������CATINavigateObject�������(�#������� ������������������������������ ��� �������� ��� ���$��������������� ��������������������� ���"�:��#���������������������������������� �������� ��� ��"����������� ����������������������� ���#���������H��������������� ������� ��������� ���������� ������������� ����"�
��������������� ����������#������������������������������������ ������� ��������������������������� ��CATIVisu� ���������"��
��� ��� ���$���������������������������� ��� ������������������CATIEdit�������"�
���CATIBuild�������������������� ��� ���$�������������������# $(� ��#�����������#����� ����� ������������������� ���"�
� ���������(�� ��(�������������� ���� ���CATICSOFilter������ ��������������������������� ��� �"�
J�������������������� � ������������� ������#����������������#���� ���������� ������������� ��� ���������������� ��� #������������������"������������#����������������������� ����������������������������������������������� ������������"��
5.2.3 User defined feature without derivation
���������������(�#�������������#��� ��������� ����������� ��������� ��������"����� ��� ��������� ������������������������������� ����
��������������� ���������������������������
19
������������������������������������ �����"�������� #��� ������� �� �������������� �������������������������������"�
2�������� ����������� ���������������������� ��� ��������������������������� ��"��
�������������� ������ �������� �� ������������������� �"�
������������������������������� �������$���� ���������� �������������"����������������������������� �(� ���������������� ��� ������ ����������(���������#����� ������$����� ���� �������������������� !"�
5.2.4 Feature extension
�������+���� ������������� ������������������� ��� ����+�����������"����+���� ������������ ����������� ���"��
���+���� ����������� �������������������������������� ���������������"�>�������������������+���� �������������������������� �������������������������+���� �� ���� ����+��������������+����������#������� ��������������������� �� ����������� �����+���� ���������+���� �������� �"�������� ������� ������� ���� �����+����������� �����������������������������������+���� �"�
@������� ����������������� ������������ ��������#������������(������������ ��� ������� �����������+���� ����������������������"�
������ !�#������� ��������+���� ����������������� ������ ����������"�
5.3 Applicative feature strategy
J����� ��������������� ���������� ����������� ������ ���������������� �� �������#������(��""�#����$���� ��$� #��������#��������� ��������"�����#�������� ����������� ���� ������� ����� ����� �(�� �������#����� ������� ��� ������� ����"������� ���� �������������������������������� ����������� ��������������������� �$���������������������� ���������� ���� ��������� ��������������#����+����������"�
2 ���������� ������ ������������������������ ���������� ����������������������� ������������� ������������ ���� �� ������ �����(� �� ������(���������������������������#������ �������������������������� ���� �"�
�������������� ������������������ ���� �������� ���������������&����������"�:�������������������������������#����� ���������� ����������������$����(���������"��������� ���� ��� ����������� �� ������ ����������I��������������������� ��������� �������������������������������������� �������������� ������ �����"�
:��������������������������������� ������)�� ���� ������������������������������)�� ����������� �� �������������#������� ������������"�
�������(���������������� ������� ������� ������������������������������������� !(�������� ����� ������ �������� �� ��������� ���
��������������� ���������������������������
20
������������ ������������"���� �������� ���������� ���������� ��������� ������� �����?��'���� ������� ��� ���2�'�����
�� ������ ������ ������ ������������������������� �������������������������������������� �������������������������� ����������"��������$������#$#���� ������������ ������"�
������������� ��� ��� ������� ������������������������������N� ��������O��������������� ���������+���� ��"�
������� ����������������������I�� ��������������������� ���������������� ���� �������������������� �"�@��������������� ��������������� ��������������������� �������(����N� ��������O������������������������������ �� �����������������������������������+���� ���������������������������"�
��������������������������� �������������������$����� ���� ����������������� ����#������������+���� ������ �"�
�����������������������������(�� �������������������������������������� �������� ������������������������������������� ������� ������ ����������������#���������������������������������(������������������ #������� �"�
��������������# ������� ���� ������� ������������������ ���������� �������������� ��������������������# �����������������+��������# ������� �� ������������������� ���2�#� �� ������� ������������������� ����������������������� ����������� �$�������������� ��� ���� ������������� ������"�
� ��������������������������#���� �������������������������� ������������N� ��������O������"�
��������������� ���������������������������
21
6 The API
��� ��� �#����������� ������������������� ����������� �"�
J����������� ��������������#����� ������������ ��#����������P����#���� ����$�# $����#������#���� �����������#��� ���������������� ��� �����$������� �� ��������� ��� $�� ���������������� ���� ����������� ��"����#���� ������� ������������������ ���� ������������� ����� �������������#���������)��������� �����"�J����#������������������#������ ������� �������������#����� ��� ��+�����"�>��������� ��� ��� ��������������������"�������$������������������� ����������+��������������� ����������������� ���� �"�:�� ��� ����� ������������������ �����������"������� �������������������� �����2������������������ ��� ������#������#�� �����#��� ������� ���"�:��#������#����������� ���������� ���������������+��������(��""������������� "������#������� #�#���� �# $����������������#���� ��� ������� ������ ������������ ��#�������������������� �� �#����������"�
������������ ���� ����"������ ����������� �+����#���������� ����������"������������ ���� ������� �����������������#�������(������� ��#���# �������������� ���$���������"������ ������������������������� ����������������� �������������������� ����#��"�� ����#�����&�����������������#�������������# $���� ������ ��������������"���������� ������� ���������������������������������������(��������$�������� ������� ���������� ����� ���� �����������������# $��������� ������� �������������������� �����������"��������� ����#����� �����������������#���� ���� ������������������������#������������"�� ���$��������������� ������������������� ������ ���� ���������� ������������ ��������(�#������ ���������$����� ������� ����� ���"�
��������#���������� �� ��� ������"������ �������������������������� ������������ ������� ����������������� ��� ������� 0���#��� ���� ����"�>�����������������������������(�� ���������� �� �������������������� ��������� � ����������������������� ��� #�� �������� ������"��������� ��� #���������������������� �������� ��������� ��������"����������������������+������� ���(�#�������������������������#���� ����������"�.�������������������� P�:����� ���������������������������������2�G���������������� ������������� ����� ������������������� 0�����$������� �#���� ���������P�
�������� ��#�������� �������� �������� ��2�G(����������#���� ���������������#�������� �������������#���� ������"�* #�����#�� ������������"����� ����#��� ��������2�G�� ����������� ������������ ���������������������������� ��#����� ������� ������� ��������������������������������������������������������� ����&����������������� ������ ��������$�std::����������������������������$����� ��� ������������#������ ������� �������� ��� ����$�� ���"�������� ��������2����� ��������� ������������ ������������ ��� �����������������������#��"�
��������������� ���������������������������
22
@+�����#���� ����������������������������������� �������#��� ���������������������������(��""���� ������������������#����"�"����������� ���� �� ������� �����+����� � �"�@ �����������)�� �� ����� ���������������������������������� ��������&����� �� �����"����2�G������� ������#������������������"���� ����� ����� ������������ ��� ������� 0������������ �)������������#�������������$�������# �������������� ���������� ��"�
6.1 Initial design, global functions and classes
J�������������������������������������� ��� ���#���������� ��������������#���� ��"������&���� ������������������# $����#��"���������������$�����Q��� ��� �� �����(����������� ��� ������������������������������+���� ����������� ������������ ����������� �"��������������������� ����������� �������� ������� �0�����������$����� ������� �#��������������������� ���#��� ����������������������� �����"���������������������� ��# ����� ��������������� ������ �����"���� ����������� �������������� �0����� �������� �� ��� ����(��� #���������������� ������� ��������������������������� �������������������������� ������"���� �� ���������#��������� �#�������������������� ������ �"�� �������������#���� ��������������������� ������ �������� ��������� ���� ���������������#���������������� ��������#������#�����������# $� �������������"����#������� ���� ������� �� ������ ��� ������������������������������������� ��� ������ ��������������������������� �������#������"���
���������������� �� ���������#���������� !�#�������� �������������� ���������� ���������� ������� �0���"������������#����� ��������� ����������� �+� ����������� ����������� !�������� � ������������� ��"�>���������������� ���� �0������# �������������� #���� �� ������������� ����� ������������� ���������"����� �0�����������#������ ������� ����� �������� �0��"�.� ����������� ������� ���������������������� ������ ������������ �� ����������������"�
������ ������� ���� ���������� ���#��#������ ����� ��� ������������ �� ����(� ��������� ��������� ������ �� ���(��������� ������"���������� ���# $�������#��� �������������������HRESULT�������������������� ������� ���������(�#��������������������������� �������� ������������������������������������ �������� �������� ���"�������������������� �� ��� ������ ����&�����������(� �#������ ������������ �������� ����"���������������������������� ���������$���� ���� ������������ ������ ����(��""������������� ��� ������������������������ �AddRef()�����Release()"�
���������# $�#��������� �� ������� �(����������>�����"������������# $��# �� �����#������(� ��� �� ����������������������� ��(���������>��(����� ��� �� ���� ��� �������������� ������(���������>�����"�
�������������������>���������� ����������# $���������������������������� ����� ������������� �������>������� �����������������������������$�������������"��������� ������ ���������������� ��� ���������������������+����������"�
��������������� ���������������������������
23
������� ����������>������#���+�����#����DCBapUdf(����������������� ����������������� ��#�����������������������������#����������������� ����������� ������������������"������������������������������������������������� ������������������������������"���� ��� ����������������(���������������#������� �����������������"��������������������������� �� ������������������ ������������������� ��"����#����� ����������������������� �� ���� ��������� ������������(��""�����(������� ��������"�������������� ��� ��# $�� ��������(����������� ��� ������� � �� ��� ������������"���� ������ ��� ���������#�������"�
6.2 Applicative feature handling in the API
���������� �������������������������������� �� ������������������(���� ���� ������������������������� ����#���������"�
�������� �������� ���#���� L�
• ��������� ����
• �������������
• � �� ������ ���������������� ����������������� ������� �� ����������������������"�
• �����������������������������������������
:��������� �������������(� ��������� �����#���������������� ������������������� ��������� ��������������������������������#�#����"�
���������� ���������(�DCBapApplicativeUdfSU(����� ��������������������������������������� ������������� �����#��������������� ����������"����&������������������A ��A����������� ������ ��"������� �� ��������������� �������� ������������������ ������#���������(�������������� ����������������� ��������������� ��"���������� �������������#��� ��������������������� ������������� ����������"��
���������� ������������� �����������������$����� ����������������� ����� ������ I�������������� �������� ������# ����������������������� �����"�������� ������� �������������������������������� ��������� �0�����������������#���������������� ������� ���"��������� ������� �������+��������#������ ���������"����������������� ���� ������#��������������������� �����+������� ���� �������"�
���������� ��� ������������������������������DCBapApplicativeUdf�#�������"����������� ���� �����������������������������$���������������#����������� ��� �������� ����������� ���������"�
��� ��� ������������������������ ���������������DCBapApplicativeUdf� �0��(�#�����#����������DCBapUdfAttribute�)����������������������������� ���������"�' ��������DCBapUdfAttribute’s����������� ������������"�
��������������� ���������������������������
24
���������������������������#������� ����>������������ �������� ����#��������� �������# $�� �����������"�
��������������� ���������������������������
25
7 Result and conclusions
��������������������������� ����������������(���������� � ������� ������������# $������� ����������� �����"�
� ����������������>������� ������ ������������ ��������� ���"����� �������� ��>�������� ������� ����������"�
����������������������� �������� !������������������������� ��DCBapResult"��������������� #���� �+���������������#������� ���� ������������������ ����� ����������������� ��"���� ����������������������������������� ��#������������� ���+� ���� �#����� ���"�
������� ������� ���������������������������"�� ������������� ������������ ����������������������� ������� ����������������"������������������� #��� ��� �������������������"�������� ������������ ����#����(� ���������������������(��������������������"���������� ���������������� �������������������������(�������� ������������� ���������� ���������������� �������� ��������� ������ ����������������� ����� ���"�������� ����� ������������������������������������ ���� ����"�:�������#�������������#���(�� ��� #�#�������� �����(���� ����# �������������� �#����� ���"�
�������� �������������������� ��������#��������������������������������������"������ ���������������������������"����� ������������ ����������������������� ������� ��������������������� �������� ����"���������� ���������������������������������������������������������� ����������������"�
7.1 Some suggestions
2 ��������� ��� ���� ������� �����������"����#� ���������� ����������������������� ��#���������� �"���������������������� !���������#���� ������������ ��������� ������ ������� ��������� ��� ���������� �"�������#�������������� �������������� ����� �����(�� ������ ����������� ���������"������+���� �������������� �� "�
����������+������# ��������������������������� ���������������#���������� �������� ��# $����������� �� +�"�� ������������%?��#���������������������� �������"�
��� �� ������# $�# ������� ��������#���������������������������� �����#����� ������# ��������������� ����������"�������� �� ������������ �� ���#�������#������� ����#���# $������������� ������"�2 �� ������#����������� ����� ���������������������������#������� ����������������� �������� ����������������������� �� ��������������������������������������������������� ������ #(����������������� ��+����� ����������������� �� ��������"��
���# ������� ������������� �+�����#����������� ��� ����������������������� ������������������� !������� ���������������������������� ��"��������������������# ����������� �� ����� ����������������������������
��������������� ���������������������������
26
CATINavigate��������� ���$�������������������� ����#������������������� ���"��������������������� �� ��CATIEdit�������� ���� ������� �� �������J�D������ �������KK�������������� #��� ��������������$"������� ���������#����������������������������(����������������������� ������� �# ������� ������ ��������"�
:����������(���$���� ���� ����������������������������� ���� �������������� ������� ��� ������ ����������"�������������#��������� ������� ������������������� ��������������������������� �����������������(�������������������#���� ����������������� �� ���������������� ������#��"���� ��� ������������� ������������������������ ���������������� ��� �������������#����������"����������� ��������������������������������������� ����#������������� �������������������� ��������%?������ ��������������#���������������������������"�
��������������� ���������������������������
27
Bibliography
>�������'"�����"�7==="��� �������������� ������������������������������������� ������� !�"������������E ����F"���������L�<http://www.sei.cmu.edu/publications/documents/00.reports/00tr008.html> (2004-04-11)
> ��� ��J'�����"�7==4"�B����������� ��������������� ������"���L�����R(�G��J(�����M��5����"�(�#�������� ���$%&'�������"(()!���*��������������� �����������������������$�����%��� �������������'�������������� �����������������������J ��������������� � ��� �(�>�0���(����8�4!"�
B������5����>����7"4�)�'���������E ����F"���������L�<http://java.sun.com/products/ejb/docs.html> (2004-04-11)
G���4<<;"�������� �� ���������� ����#�� �������������� ���+������$%�������#��&�,'�,��-"�2������������ 0��(�%����.��� �?������,����������4<<;"�
.�����4<<<"�.��/����/���������� �� �������#��&�,'�,��-�������� 0��� ��+���������1 ���2�"�2������������ 0��(�%����.��� �?������,����������4<<<�
.�� � ����:.�2��������� ��4<<!�E ����F"���������L�<http://www.microsoft.com/com/resources/comdocs.asp> (2004-04-11)
��� ���/"�7==3������������������3�� �����������E ����F"���������L�<http://www.martinfowler.com/ieeeSoftware/componentChaos.pdf> (2004-04-11)
��������������� ���������������������������
28
Appendix A
A.1 Syllabus
�/��$�������������"��������� �����"�
������������� ��� ����������"������ ��� ���� �������� ������������������� �"�
����� �� ������������� ����������"����� �� �������# $�������������� !"�
����� ���������������"�������#����������� ����� ����������"�
��0�� �����������������"���������������������� �� ���������#����������� ����� ����������"�
��1�� ����������������������"�'��� ����� ���� ��#����������� ����� ����������"�
�21�� �� ���� �0���� ��"���� ��#���������������� ������ ����� ��� �� ����"�
������������������$�������"�:�0���� ��#��������������$��� �������������� ����������(���� �� ���� �����������$����#�������$����������� ��������"��
�3����������2���C��"����� ��������� ����������"�
/���%�����������������"������������� ������� ������������� �"�
��0������������ �������� ����"�2 ��#��� �����������������#� ������ �������� �� �������"�@ ���������� ���������(�� �������(����������������� ��� �� ���� ����� ���������� �����"�
��4��������������� ���������"������������ ������������ �"����������:.%"�
�32�������� ���� �������� ��� ���������D��� �"���� �������� ������������������ ������������D��� ��� ��������������@2����������"�
13�.�� � ��"����� �����"�
13�21�� �� ���� �0���� ������������.�� � ��"�
21�:�0���� ���"���� �0���� �������������"�
21/�:�0������������� ��"���� ��� ���� �������� ��# $���� �� ����������������������G������ ��"�
23�:������������"�
+���/� ��� ��������"�������������������� #�� ������� ������������������ ������������ �����������������"�
3!4�2�������������������"���������#� �������� �����������������������KK��������"�� �������� ��������� ����� ���������"�
�3� ����������� "������B�� ��.�� � ��(�� ��������� �������KK"�
��������������� ���������������������������
29
Appendix B
�����������+�� �������������������� �� ������������ ���������������������$����������"��
B.1 Global functions in the API
��������� ���������� ���������HRESULT"���������������#�������������������� �� �"��������������� ������#���������$��#���� �� �������� ��FAILED(HRESULT)� �SUCCEEDED(HRESULT)"�������������������.�� � �����������"�
����������������������� � ������������ ������������������������ ��������"�� ������������ ������������������ ��������������������������+��#��������(�������������������� ����������������+��#������� �� � �����"�
DCBapAccessCatalog HRESULT DCBapAccessCatalog(CATUnicodeString* iCatalogName,
CATUnicodeString* iClientID, CATIContainer* iContainer, CATICatalog** oCatalog)
�������������� ���� ��������������������"�
���������5iCatalogName
����� ���������� ���� ������"�:��������������#����+���� ���� ����������"��������� ����� ������� ��������WorkSpace\intel_a\resources\graphic
iClientID ������������ ������� ��������� ��"�
iContainer � ���������#�����������������#�����������������"�
oCatalog ��� ��������� ��"�
+�����52S:T����� � ��#��� ����"�
DCBapCreateCatalog HRESULT DCBapCreateCatalog(CATUnicodeString* iStorageName, CATUnicodeString* iClientID, CATICatalog** oCatalog) ��������#������ �"�
���������5iStorageName
������� ���������� ��"�'��������������������#��� ���+���� ���� ����������"�
iClientID
��������������� ���������������������������
30
������������� ���� �����#������������ ��"�oCatalog
������������� ��"�
+�����52S:T����� � ��#��� ����"�
DCBapOpenCatalog HRESULT DCBapOpenCatalog(CATUnicodeString* iCatalogName, CATUnicodeString* iClientID, CATICatalog** oCatalog)
:����������� ��"�
���������5iCatalogName
������� ���������� ��(� �����������#����+���� �"��������� ����� ������� ��������WorkSpace\intel_a\resources\graphic\�
iClientID
�������� �������� �����������$oCatalog
��� ��������� ��"�
+�����52S:T����� � ��#��� ����"��
DCBapGetPart HRESULT DCBapGetPArt(CATDocument* iDoc, CATISpecObject_var& oPart) /������������� ��������� �����"�
���������5iDoc
�������� �����"�oPart
������"�
+�����5
2S:T����� � ��#��� ����"�
DCBapGetRootContainer HRESULT DCBapGetRootContainer(CATDocument* iDoc, CATIContainer** oRoot) /�������� ��� ������ ����� �����"�
���������5iDoc
���� �����"�oRoot
��������������� ���������������������������
31
��� ��� �����"�
+�����5
2S:T����� � ��#��� ����"�
DCBapGetRootProduct HRESULT DCBapGetRootProduct(CATDocument* iDoc, CATIProduct** oProduct) ������ �� ������������� ������ ������� ��� ������ ����$� #��� ������ �����"�
���������5iDoc
��� ����� �������� ������ �����"��oProdOnRoot
��� ��� ����"��
+�����5
2S:T����� � ��#���� ����"��
DCBapGetUdfList HRESULT DCBapGetUdfList(CATDocument* iDoc, CATLISTV(CATBaseUnknown_var)* oList, char* iInterfaceFilter = “CATIUdfFeatureInstance”) /������������ ������������������������������ �����"�
���������5iDoc
���� ������� �����"�oList
��������� ������#�������L�"�iInterfaceFilter
����������� ������ �(���������������?��'����������"�
+�����52S:T����� � ��#��� ����"�
DCBapGetUdfListFromPart HRESULT DCBapGetUdfListFromPart(CATDocument* iDoc, CATLISTV(CATBaseUnknown_var)oList, char* iInterfaceFilter = “CATIUdfFeatureInstance”) /������������ ���������������������������������� �����"�
���������5iDoc
���� ������� �����"�oList
��������� ������#�������L�"�iInterfaceFilter
��������������� ���������������������������
32
����������� ������ �(���������������?��'����������"�
+�����5
2S:T����� � ��#��� ����"�
B.2 Classes in the API
DCBapApplicativeContainer
Class to represent a DC-specific applicative container. It is also intended to automate retrieval and creation of the applicative container in the document as well as providing a simple access point to the DC-specific applicative udf:s.
�����������
public DCBapApplicativeContainer(CATDocument* iDoc) ���� ������ �#����������������� �0���#������������������������������ ������������� �����"�
���� ������������������������ ������+������������ ���������#������� ������#����������"������� ����������������������� �����"�
��������5iDoc
���� ������� ������� ������������������ ������ (������������ ������� ������+������������ �����(����� ������� ��������#���������������� ��������"�
���� ��
public CATIContainer* GetContainer() /�������������������� �����"�
+�����5
��������������� ������ �@?GG� �� "�
public DCBapApplicativeUdf* addApplicativeUdf(CATIUnicodeString* udfType, CATIUnicodeString* givenName, CATIUnicodeString* catalogName, CATIUnicodeString* clientId) ����������������������������� ���������������������� ���� ���������������� �����"�
���������5udfType
���� ������� ����"�givenName
�������������������������#����������"�catalogName
������� ���������� ���� ����������������"���������� ���� ����� ������ ���������� ������#����+���� �"��������� ����� ������� ��������WorkSpace\intel_a\resources\graphic"�
clientId
��������������� ���������������������������
33
��������������� ������#������������ �"�
+�����5
����������������������� �@?GG� �� "�
public vector<DCBapApplicativeUdf*> getApplicativeUdfs(const char* id) /����������������������L��� ����� �0��"�
��������5id
��������� ������#���������������������L�"�
+�����5
����� �#����������L�"�
DCBapApplicativeUdf
������� ���������������������������������"�
������������
@ ������������� ����� �������� ���������� ������ ������(����������������� ����������>������������� ������#�������������� �#������������������������������ ���"����������'������������� �����>��?�$� #�U��?���V�@?GG��
�������� ������ "��
��������iUdf
���#�� ����� �������������"�
public DCBapApplicativeUdf(DCBapApplicativeUdf& iRhs) � ���� ������ "�
��������iRhs
�����>������������?���� �� ��"�
������������������
���������>������������?��W��������V���>������������?��W��/����
��������iRhs
�����>������������?���� �������"�
+�����
�������������>������������?��"�
���� �
public void setGeoFather(CATBaseUnknown* iGeo) 2������� ������� �0���� �#��������������������������� ���"�
��������������� ���������������������������
34
��������iGeo
���� �����������"�
+������ ���
public int getNrAttributes() %����������� ������������� ������� ������������������"�
+����������������� ����
public DCBapUdfAttribute* getAttribute(int iIndex) /���������������� �������������������"�
��������iIndex
������+� ������������"�
+�����
����������"�
public ostream& print(ostream& iOs) ��������� �0���� �������"��������� ������� ��� �XX� ����W(���>������������?��W�"�
��������iOs
��������� �#���� "�
+�������������#������ "�
DCBapResult
>���������� ��������� ���������� ������"����� ������� ����������������� ���� ���������������������"�
�����������
public DCBapResult() �������� ������ "�
���� �
Public virtual void initResult(CATBaseUnknown* iData) = 0 �������������� �0��"�
��������iData
���� ������� �������������� �0���#���"�
public virtual ostream& print(ostream& iOs) = 0 #������������������ �0���� �������"�
��������������� ���������������������������
35
��������iOs
��������� �#���� "�
+�������������#������ "�
DCBapTopoResult
Class to represent non-editable topological data in a document. Inherits from DCBapResult.
�����������
public DCBapTopoResult() �������� ������ "�
���� �
public void initResult(CATBaseUnknown* iData) �������������� �0��"�
��������iData
���� ������� �������������� �0���#���"�
public ostream& print(ostream& iOs) #������������������ �0���� �������"�
��������iOs
��������� �#���� "�
+�����
��������#������ "�
�
DCBapUdfResult
Class to represent a non-editable user defined feature. Inherits from DCBapResult.
�����������
public DCBapUdfResult() �������� ������ "�
���� �
public void initResult(CATBaseUnknown* iData) �������������� �0��"�
��������iData
���� ������� �������������� �0���#���"�
public ostream& print(ostream& iOs) #������������������ �0���� �������"�
��������������� ���������������������������
36
��������iOs
��������� �#���� "�
+�������������#������ "�
DCBapUdf
������� ���������������������"�
�����������
public DCBapUdf(CATBaseUnknown* iUdf = NULL) �������� ������ "�
��������iUdf
������������"�
������������������
���������>��?��W��������V���>��?��W��/����
��������iRhs
�����>��?���� �������"�
+������������������>��?��"�
���� �
public CATUnicodeString getAlias() %�����������(�������(� ����� �0��"�
+�������������"�
public DCBapUdfAttribute* getAttribute(int iIndex) /����������������� ������� �������"�
��������iIndex
������+� ������������"�
+�����
����������"�
public int getNrAttributes() %��������������� ���"�
+������������� ����������"�
public int getNrOutputs() /�������� ������� ���"�
��������������� ���������������������������
37
+������������� �� ������"�
public DCBapOutput* getOutput(int iIndex) %��������������� ���"�
+�����
�������� �� ������"�
public CATUnicodeString getType() /������������ ��������"�
+����������������������"�
public ostream& print(ostream& iOs) #������������������ �0���� �������"��������� ���������� ��� XX� ����W(���>��?��W�"�
��������iOs
��������� �#���� "�
+�����
��������#������ "�
DCBapUdfAttribute
������� ����������������� �������"�
������������
public DCBapUdfAttribute(CATISpecAttribute* iSA)
��������iSA
�������������������������� �"�
public DCBapUdfAttribute(DCBapUdfAttribute& iAtt) � ���� ������ "�
��������iAtt
������������ �� ��"�
������������������
public DCBapUdfAttribute& operator=(DCBapUdfAttribute& iRhs)
��������iRhs
������������ �������"�
+�����
������������������"�
���� �
public CATUnicodeString& getName()
��������������� ���������������������������
38
/������������ ������������"�
+�����
������� ������������"�
public int getIntegerValue() /������������� �������������#��������� ����������"�
+�����
�������� �)<<� �� "�
public CATUnicodeString getStringValue() /������������� �������������#��������� �����������"�
+�����
������������������� ��������������� �� "�
public void setValue(int iInt) 2����������� �������������#��������� ����������"�
��������iInt
����#�����"�
public void setValue(char* iString) 2����������� �������������#��������� �����������"�
��������iString
����#�����"�
public void setValue(CATISpecObject_var& iSpec) 2����������� �������������#��������� ������������ �����"�
��������iSpec
����#�����"�
public ostream& print(ostream& iOs) J���������������� �������"�?������ ��� XX��"�
��������iOs
��������� �#���� "�
+�����
��������#������ "�
public ostream& printValue(ostream& iOs) J������������ �������������� �������"�
��������������� ���������������������������
39
��������iOs
��������� �#���� "�
+�������������#������ "�
DCBapUdfInput
������� ������������� ������"�
������������
public DCBapUdfInput(CATBaseUnknown* iInput = NULL, CATUnicodeString iRole = “”) �������� ������ "�
���������iInput
��������"�iRole
��� �� ����������"�
public DCBapUdfInput(DCBapInput& iRhs) � ���� ������ "�
��������iRhs
���������� �� ��"�
������������������
public DCBapUdfInput& operator=(DCBapUdfInput& iRhs)
��������iRhs
���������� �������"�
+�����
����������������"�
���� �
public ostream& print(ostream& iOs) J�������������� �������"�
��������iOs
��������� �#���� "�
+�����
��������#������ "�
DCBapUdfOutput
Class to represent the output from a udf.
������������
public DCBapUdfOutput(CATBaseUnknown* iOutput = NULL)
��������������� ���������������������������
40
�������� ������ "�
���������iOutput
��� �����"�iRole
��� �� ����� �����"�
public DCBapUdfOutput(DCBapOutput& iRhs) � ���� ������ "�
��������iRhs
��� ������� �� ��"�
������������������
public DCBapUdfOutput& operator=(DCBapUdfOutput& iRhs)
��������iRhs
��� ������� �������"�
+���������������� �����"�
���� �
public ostream& print(ostream& iOs) J������� ������� �������"�
��������iOs
��������� �#���� "�
+�����
��������#������ "�
DCBapUdfParameter
Class to represent a parameter of an attribute.
������������
public DCBapUdfParameter(CATBaseUnknown* iParam = “NULL”, unsigned int iIndex = 0, CATUnicodeString iRole = “”) �������� ������ "�
���������iParam
�������"�iIndex
���+� ��������������������"�iRole
��� �� ����������"�
public DCBapUdfParameter(DCBapUdfParameter& iRhs) � ���� ������ "�
��������������� ���������������������������
41
��������iRhs
���������� �� ��"�
������������������
public DCBapUdfParameter& operator=(DCBapUdfParameter& iRhs)
��������iRhs
���������� �������"�
+���������������������"�
���� �
public ostream& print(ostream& iOs) J�������������� �������"�
��������iOs
��������� �#���� "�
+�������������#������ "�
DCBapUdfSU
������� ���������������"�*��������������� �������������������� ��� ���������������������� ��"�
������������
public DCBapUdfSU(CATUnicodeString iType = “”) �������� ������ "�
��������iType
������� ������������"�
public DCBapUdfSU(DCBapUdfSU& iRhs) � ���� ������ "�
��������iRhs
������������ �� ��"�
������������������
public DCBapUdfSU& operator=(DCBapUdfSU& iRhs)
��������������� ���������������������������
42
��������iRhs
������������ �������"�
+�����������������������"�
���� �
public void addDoubleAttribute(char* iName) ���������������� ������� ����� �����������"�
��������iName
������� �������������� ����"�
public void addIntegerAttribute(char* iName) ���������������� ������������ �����������"�
��������iName
������� �������������� ����"�
public void addStringAttribute(char* iName)
���������������� ������������� �����������"�
��������iName
������� �������������� ����"�
public HRESULT saveToCatalog(CATUnicodeString* iCatalogName, CATUnicodeString* iClientId, const char* iIFName = “CATISpecObject”) 2���������������� �������� ��"�
���������iCatalogName
������� ���������� ���� ��� ��������������"�.����������������������������������"�
iClientId ��������� ������#������������ �"�
iIFName ����������� �����������������"�
+�����2S:T����� � ��#��� ����"�
B.3 Non-member functions
������������������ �� �������������� �� �� ��� XX�� ����W��:�(�� ����� ��W��/���"���������� �������� �#��������������� ���� ���� ������ �0���� �������"�
Top Related