📄 creating_a_specific_attribute_class.htm
字号:
</li><li> Define the function to set the member data.</li><li> Define the prototypes for the merge_owner and replace_owner methods.</li></ol></li></ol><p>This example shows what a color attribute implementation file (color_attrib.cxx) could look like.</p><p>Example. color_attrib.cxx Color Attribute Implementation File (B)</p><pre class="source-cpp"><span class="kw2">#include</span> <stdio.<span class="me1">h</span>><span class="kw2">#include</span> <memory.<span class="me1">h</span>><span class="kw2">#include</span> <span class="st0">"acis.hxx"</span><span class="kw2">#include</span> <span class="st0">"datamsc.hxx"</span><span class="kw2">#include</span> <span class="st0">"color_attrib.hxx"</span> <span class="co1">// Implementation of color attribute. This is attached to body,</span><span class="co1">// face or edge objects, and is used to demonstrate attribute</span><span class="co1">// migration</span><span class="co1">// Define macros for this attribute and its parent, to simplify</span> <span class="co1">// later stuff and make it suitable for making into macros.</span><span class="kw2">#define</span> <span class="kw3">THIS</span><span class="br0">(</span><span class="br0">)</span> <span class="kw7">ATTRIB_COL</span><span class="kw2">#define</span> <span class="kw7">THIS_LIB</span> NONE<span class="kw2">#define</span> <span class="kw7">PARENT</span><span class="br0">(</span><span class="br0">)</span> ATTRIB_ABC<span class="kw2">#define</span> <span class="kw7">PARENT_LIB</span> NONE <span class="co1">// Identifier used externally to identify a particular entity</span><span class="co1">// type. This is used in the save/restore system for translating</span><span class="co1">// to/from external file format.</span><span class="kw2">#define</span> <span class="kw7">ATTRIB_COL_NAME</span> <span class="st0">"color"</span> <span class="co1">// Implement the standard attribute functions.</span><span class="kw7">ATTRIB_DEF</span><span class="br0">(</span> <span class="st0">"color_attribute"</span> <span class="br0">)</span><span class="co1">// Define color names for printout</span><span class="kw4">static</span> <span class="kw4">char</span> *col_name<span class="br0">[</span><span class="br0">]</span> = <span class="br0">{</span> <span class="st0">"black"</span>, <span class="st0">"red"</span>, <span class="st0">"green"</span>, <span class="st0">"blue"</span>, <span class="st0">"cyan"</span>, <span class="st0">"yellow"</span>, <span class="st0">"magenta"</span>, <span class="st0">"white"</span> <span class="br0">}</span>; debug_string<span class="br0">(</span> <span class="st0">"color"</span>, col_name<span class="br0">[</span>color_data<span class="br0">]</span>, fp <span class="br0">)</span>; <span class="kw7">SAVE_DEF</span> write_int<span class="br0">(</span> color_data <span class="br0">)</span>; <span class="co1">// Save specific data</span><span class="kw7">RESTORE_DEF</span> set_color<span class="br0">(</span> read_int<span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span>; <span class="kw7">COPY_DEF</span> set_color<span class="br0">(</span> from-><span class="me3">color</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span>; <span class="kw7">SCAN_DEF</span><span class="co1">// (no specific pointer data)</span><span class="kw7">FIX_POINTER_DEF</span><span class="co1">// (no specific pointer data)</span><span class="kw7">TERMINATE_DEF</span> <span class="co1">// make a color attribute</span><span class="kw7">ATTRIB_COL</span>::<span class="kw7">ATTRIB_COL</span> <span class="br0">(</span> <span class="kw7">ENTITY</span> *owner, <span class="kw4">int</span> col <span class="br0">)</span> : ATTRIB_ABC<span class="br0">(</span> owner <span class="br0">)</span> <span class="br0">{</span> <span class="co1">// Initialize members.</span> color_data = col;<span class="br0">}</span> <span class="co1">// If my owner is split, create a new instance of myself</span><span class="co1">// on the copy.</span>set_split_owner_action<span class="br0">(</span> SplitCopy <span class="br0">)</span>; <span class="co1">// If my owner is copied, create a new instance of myself</span><span class="co1">// on the copy.</span>set_copy_owner_action<span class="br0">(</span> CopyCopy <span class="br0">)</span>;<span class="br0">}</span> <span class="co1">// Set the member data.</span><span class="kw4">void</span><span class="kw7">ATTRIB_COL</span>::<span class="me2">set_color</span> <span class="br0">(</span> <span class="kw4">int</span> new_col <span class="br0">)</span><span class="br0">{</span> backup<span class="br0">(</span><span class="br0">)</span>; color_data = new_col;<span class="br0">}</span> <span class="co1">// Virtual function called when two entities are to be merged.</span><span class="kw4">void</span><span class="kw7">ATTRIB_COL</span>::<span class="me2">merge_owner</span> <span class="br0">(</span> <span class="kw7">ENTITY</span> *other_ent, <span class="kw5">logical</span> delete_owner <span class="br0">)</span><span class="br0">{</span> <span class="co1">// If the owner of this attribute is going to be deleted, and</span> <span class="co1">// there is no color attached to the other entity, then we</span> <span class="co1">// transfer to that other entity.</span> <span class="kw1">if</span> <span class="br0">(</span> delete_owner <span class="br0">)</span> <span class="br0">{</span> <span class="kw7">ATTRIB</span> *other_att = find_attrib<span class="br0">(</span> other_ent, ATTRIB_ABC_TYPE, ATTRIB_COL_TYPE <span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span> other_att == <span class="kw2">NULL</span> <span class="br0">)</span> <span class="br0">{</span> <span class="co1">// No color on other entity, so transfer ourselves</span> move<span class="br0">(</span> other_ent <span class="br0">)</span>; <span class="br0">}</span> <span class="br0">}</span><span class="br0">}</span> <span class="co1">// Virtual function called during replacement.</span><span class="kw4">void</span><span class="kw7">ATTRIB_COL</span>::<span class="me2">replace_owner</span> <span class="br0">(</span> <span class="kw7">ENTITY</span> *other_ent, <span class="kw5">logical</span> replace_owner <span class="br0">)</span><span class="br0">{</span> <span class="co1">// If the owner of this attribute is going to be replaced</span> <span class="co1">// (and hence, deleted), and there is no color attached</span> <span class="co1">// to the other entity, then we transfer to that other</span> <span class="co1">// entity.</span> <span class="kw1">if</span> <span class="br0">(</span> replace_owner <span class="br0">)</span> <span class="br0">{</span> <span class="kw7">ATTRIB</span> *other_att = find_attrib<span class="br0">(</span> other_ent, ATTRIB_ABC_TYPE, ATTRIB_COL_TYPE <span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span> other_att == <span class="kw2">NULL</span> <span class="br0">)</span> <span class="br0">{</span> <span class="co1">// No color on other entity, so transfer ourselves </span> move<span class="br0">(</span>other_ent<span class="br0">)</span>; <span class="br0">}</span> <span class="br0">}</span> <span class="br0">}</span></pre><p>This example shows an application program that uses the color attribute. The program initializes ACIS, makes a block, and applies a color attribute to the block. The program then writes out a debug file and a SAT file.</p><a name="C.2B.2B_Example_2"></a><h4> <span class="mw-headline"> C++ Example </span></h4><pre class="source-cpp"><span class="kw2">#include</span> <stdio.<span class="me1">h</span>><span class="kw2">#include</span> <stdlib.<span class="me1">h</span>><span class="kw2">#include</span> <span class="st0">"acis.hxx"</span><span class="kw2">#include</span> <span class="st0">"logical.h"</span><span class="kw2">#include</span> <span class="st0">"api.hxx"</span><span class="kw2">#include</span> <span class="st0">"kernapi.hxx"</span><span class="kw2">#include</span> <span class="st0">"lists.hxx"</span><span class="kw2">#include</span> <span class="st0">"body.hxx"</span><span class="kw2">#include</span> <span class="st0">"position.hxx"</span><span class="kw2">#include</span> <span class="st0">"cstrapi.hxx"</span><span class="kw2">#include</span> <span class="st0">"debug.hxx"</span><span class="kw2">#include</span> <span class="st0">"col_attr.hxx"</span><span class="kw2">#include</span> <span class="st0">"fileinfo.hxx"</span> <span class="kw4">void</span> check_outcome <span class="br0">(</span><span class="kw5">outcome</span> result, <span class="kw4">char</span> *string<span class="br0">)</span>;<span class="kw5">logical</span> initialize_acis_components<span class="br0">(</span><span class="br0">)</span>;<span class="kw5">logical</span> terminate_acis_components<span class="br0">(</span><span class="br0">)</span>; <span class="kw4">void</span> main<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span> <span class="co1">// Initialization of the modeler must be done</span> <span class="co1">// before any other calls.</span> <span class="kw5">outcome</span> result = api_start_modeller<span class="br0">(</span> <span class="nu0">0</span> <span class="br0">)</span>; check_outcome<span class="br0">(</span>result, <span class="st0">"Error starting modeler"</span><span class="br0">)</span>; <span class="co1">// Call the main library initialization routine.</span> <span class="co1">// This routine is meant to initialize the various ACIS</span> <span class="co1">// libraries that will be linked in.</span> initialize_acis_components<span class="br0">(</span><span class="br0">)</span>; <span class="co1">// Create positions for geometry elements</span> <span class="kw5">SPAposition</span> pts<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span>; pts<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> = <span class="kw5">SPAposition</span><span class="br0">(</span> <span class="nu0">10</span>, <span class="nu0">10</span>, <span class="nu0">10</span><span class="br0">)</span>; pts<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> = <span class="kw5">SPAposition</span><span class="br0">(</span> <span class="nu0">15</span>, <span class="nu0">20</span>, <span class="nu0">30</span><span class="br0">)</span>; <span class="kw7">BODY</span>* my_block; <span class="co1">// Create a solid block.</span> result = api_solid_block<span class="br0">(</span> pts<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>, pts<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span>, my_block<span class="br0">)</span>; check_outcome<span class="br0">(</span>result, <span class="st0">"Error solid block"</span><span class="br0">)</span>; <span class="co1">// Apply a color attribute of type 1, "red" to the block.</span> ACIS <span class="kw3">NEW</span> <span class="kw7">ATTRIB_COL</span> <span class="br0">(</span>my_block, <span class="nu0">1</span><span class="br0">)</span>; <span class="co1">// Write out the debug data file</span> <span class="kw4">FILE</span>* fp = <span class="kw3">fopen</span><span class="br0">(</span><span class="st0">"ExampleC.dbg"</span>, <span class="st0">"w"</span><span class="br0">)</span>; debug_entity<span class="br0">(</span>my_block, fp<span class="br0">)</span>; <span class="kw3">fclose</span><span class="br0">(</span>fp<span class="br0">)</span>; <span class="co1">// Write out the "SAT" data file</span> <span class="co1">// Setting the units and product_id</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -