⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creating_a_specific_attribute_class.htm

📁 acis说明文档
💻 HTM
📖 第 1 页 / 共 3 页
字号:
</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> &lt;stdio.<span class="me1">h</span>&gt;<span class="kw2">#include</span> &lt;memory.<span class="me1">h</span>&gt;<span class="kw2">#include</span> <span class="st0">&quot;acis.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;datamsc.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;color_attrib.hxx&quot;</span>&nbsp;<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>&nbsp;<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">&#40;</span><span class="br0">&#41;</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">&#40;</span><span class="br0">&#41;</span>    ATTRIB_ABC<span class="kw2">#define</span> <span class="kw7">PARENT_LIB</span>  NONE&nbsp;<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">&quot;color&quot;</span>&nbsp;<span class="co1">// Implement the standard attribute functions.</span><span class="kw7">ATTRIB_DEF</span><span class="br0">&#40;</span> <span class="st0">&quot;color_attribute&quot;</span> <span class="br0">&#41;</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">&#91;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span>     <span class="st0">&quot;black&quot;</span>,     <span class="st0">&quot;red&quot;</span>,     <span class="st0">&quot;green&quot;</span>,     <span class="st0">&quot;blue&quot;</span>,     <span class="st0">&quot;cyan&quot;</span>,     <span class="st0">&quot;yellow&quot;</span>,     <span class="st0">&quot;magenta&quot;</span>,     <span class="st0">&quot;white&quot;</span> <span class="br0">&#125;</span>;&nbsp;debug_string<span class="br0">&#40;</span> <span class="st0">&quot;color&quot;</span>, col_name<span class="br0">&#91;</span>color_data<span class="br0">&#93;</span>, fp <span class="br0">&#41;</span>;&nbsp;<span class="kw7">SAVE_DEF</span>     write_int<span class="br0">&#40;</span> color_data <span class="br0">&#41;</span>; <span class="co1">// Save specific data</span><span class="kw7">RESTORE_DEF</span>     set_color<span class="br0">&#40;</span> read_int<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;&nbsp;<span class="kw7">COPY_DEF</span>     set_color<span class="br0">&#40;</span> from-&gt;<span class="me3">color</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;&nbsp;<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>&nbsp;<span class="co1">// make a color attribute</span><span class="kw7">ATTRIB_COL</span>::<span class="kw7">ATTRIB_COL</span> <span class="br0">&#40;</span> <span class="kw7">ENTITY</span> *owner,                         <span class="kw4">int</span> col <span class="br0">&#41;</span>&nbsp;: ATTRIB_ABC<span class="br0">&#40;</span> owner <span class="br0">&#41;</span>&nbsp;<span class="br0">&#123;</span>    <span class="co1">// Initialize members.</span>    color_data = col;<span class="br0">&#125;</span>&nbsp;<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">&#40;</span> SplitCopy <span class="br0">&#41;</span>;&nbsp;<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">&#40;</span> CopyCopy <span class="br0">&#41;</span>;<span class="br0">&#125;</span>&nbsp;<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">&#40;</span> <span class="kw4">int</span> new_col <span class="br0">&#41;</span><span class="br0">&#123;</span>    backup<span class="br0">&#40;</span><span class="br0">&#41;</span>;    color_data = new_col;<span class="br0">&#125;</span>&nbsp;<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">&#40;</span> <span class="kw7">ENTITY</span> *other_ent,                          <span class="kw5">logical</span> delete_owner <span class="br0">&#41;</span><span class="br0">&#123;</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">&#40;</span> delete_owner <span class="br0">&#41;</span>    <span class="br0">&#123;</span>        <span class="kw7">ATTRIB</span> *other_att = find_attrib<span class="br0">&#40;</span> other_ent, ATTRIB_ABC_TYPE, ATTRIB_COL_TYPE <span class="br0">&#41;</span>;        <span class="kw1">if</span> <span class="br0">&#40;</span> other_att == <span class="kw2">NULL</span> <span class="br0">&#41;</span>        <span class="br0">&#123;</span>            <span class="co1">// No color on other entity, so transfer ourselves</span>            move<span class="br0">&#40;</span> other_ent <span class="br0">&#41;</span>;        <span class="br0">&#125;</span>    <span class="br0">&#125;</span><span class="br0">&#125;</span>&nbsp;<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">&#40;</span> <span class="kw7">ENTITY</span> *other_ent,                            <span class="kw5">logical</span> replace_owner <span class="br0">&#41;</span><span class="br0">&#123;</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">&#40;</span> replace_owner <span class="br0">&#41;</span>    <span class="br0">&#123;</span>        <span class="kw7">ATTRIB</span> *other_att = find_attrib<span class="br0">&#40;</span> other_ent, ATTRIB_ABC_TYPE, ATTRIB_COL_TYPE <span class="br0">&#41;</span>;        <span class="kw1">if</span> <span class="br0">&#40;</span> other_att == <span class="kw2">NULL</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>   <span class="co1">// No color on other entity, so transfer ourselves             </span>            move<span class="br0">&#40;</span>other_ent<span class="br0">&#41;</span>;                 <span class="br0">&#125;</span>         <span class="br0">&#125;</span> <span class="br0">&#125;</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> &lt;stdio.<span class="me1">h</span>&gt;<span class="kw2">#include</span> &lt;stdlib.<span class="me1">h</span>&gt;<span class="kw2">#include</span> <span class="st0">&quot;acis.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;logical.h&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;api.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;kernapi.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;lists.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;body.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;position.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;cstrapi.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;debug.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;col_attr.hxx&quot;</span><span class="kw2">#include</span> <span class="st0">&quot;fileinfo.hxx&quot;</span>&nbsp;<span class="kw4">void</span> check_outcome <span class="br0">&#40;</span><span class="kw5">outcome</span> result, <span class="kw4">char</span> *string<span class="br0">&#41;</span>;<span class="kw5">logical</span> initialize_acis_components<span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="kw5">logical</span> terminate_acis_components<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;<span class="kw4">void</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</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">&#40;</span> <span class="nu0">0</span> <span class="br0">&#41;</span>;    check_outcome<span class="br0">&#40;</span>result, <span class="st0">&quot;Error starting modeler&quot;</span><span class="br0">&#41;</span>;&nbsp;    <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">&#40;</span><span class="br0">&#41;</span>;&nbsp;    <span class="co1">// Create positions for geometry elements</span>    <span class="kw5">SPAposition</span> pts<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;    pts<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="kw5">SPAposition</span><span class="br0">&#40;</span> <span class="nu0">10</span>, <span class="nu0">10</span>, <span class="nu0">10</span><span class="br0">&#41;</span>;    pts<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> = <span class="kw5">SPAposition</span><span class="br0">&#40;</span> <span class="nu0">15</span>, <span class="nu0">20</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;&nbsp;    <span class="kw7">BODY</span>* my_block;&nbsp;    <span class="co1">// Create a solid block.</span>    result = api_solid_block<span class="br0">&#40;</span> pts<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, pts<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, my_block<span class="br0">&#41;</span>;    check_outcome<span class="br0">&#40;</span>result, <span class="st0">&quot;Error solid block&quot;</span><span class="br0">&#41;</span>;&nbsp;&nbsp;    <span class="co1">// Apply a color attribute of type 1, &quot;red&quot; to the block.</span>    ACIS <span class="kw3">NEW</span> <span class="kw7">ATTRIB_COL</span> <span class="br0">&#40;</span>my_block, <span class="nu0">1</span><span class="br0">&#41;</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">&#40;</span><span class="st0">&quot;ExampleC.dbg&quot;</span>, <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span>;    debug_entity<span class="br0">&#40;</span>my_block, fp<span class="br0">&#41;</span>;    <span class="kw3">fclose</span><span class="br0">&#40;</span>fp<span class="br0">&#41;</span>;&nbsp;    <span class="co1">// Write out the &quot;SAT&quot; data file</span>   <span class="co1">// Setting the units and product_id</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -