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

📄 _understanding_and_traversing_acis_topology_(part_iii).htm

📁 acis说明文档
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
				<meta name="keywords" content="Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part III),Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part I),Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part II),Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part IV),Tutorial:ACIS Tutorials (ACIS Tolerances)" />		<link rel="shortcut icon" href="/favicon.ico" />		<link rel="search" type="application/opensearchdescription+xml" href="/r18/opensearch_desc.php" title="DocR18 (English)" />		<link title="Creative Commons" type="application/rdf+xml" href="/r18/index.php?title=Tutorial:ACIS_Tutorial_3:_Understanding_and_traversing_ACIS_topology_%28Part_III%29&amp;action=creativecommons" rel="meta" />		<title>Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part III) - DocR18</title>
		<style type="text/css" media="screen, projection">/*<![CDATA[*/
			@import "/r18/skins/common/shared.css?97";
			@import "/r18/skins/monobook/main.css?97";
		/*]]>*/</style>
		<link rel="stylesheet" type="text/css" media="print" href="/r18/skins/common/commonPrint.css?97" />
		<!--[if lt IE 5.5000]><style type="text/css">@import "/r18/skins/monobook/IE50Fixes.css?97";</style><![endif]-->
		<!--[if IE 5.5000]><style type="text/css">@import "/r18/skins/monobook/IE55Fixes.css?97";</style><![endif]-->
		<!--[if IE 6]><style type="text/css">@import "/r18/skins/monobook/IE60Fixes.css?97";</style><![endif]-->
		<!--[if IE 7]><style type="text/css">@import "/r18/skins/monobook/IE70Fixes.css?97";</style><![endif]-->
		<!--[if lt IE 7]><script type="text/javascript" src="/r18/skins/common/IEFixes.js?97"></script>
		<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
		
		<script type= "text/javascript">/*<![CDATA[*/var skin = "monobook";var stylepath = "/r18/skins";var wgArticlePath = "/r18/index.php/$1";var wgScriptPath = "/r18";var wgScript = "/r18/index.php";var wgServer = "http://doc.spatial.com";var wgCanonicalNamespace = "";var wgCanonicalSpecialPageName = false;var wgNamespaceNumber = 0;var wgPageName = "Tutorial:ACIS_Tutorial_3:_Understanding_and_traversing_ACIS_topology_(Part_III)";var wgTitle = "Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part III)";var wgAction = "view";var wgRestrictionEdit = ["sysop"];var wgRestrictionMove = ["sysop"];var wgArticleId = "411";var wgIsArticle = true;var wgUserName = null;var wgUserGroups = null;var wgUserLanguage = "en";var wgContentLanguage = "en";var wgBreakFrames = false;var wgCurRevisionId = "1160";/*]]>*/</script>                
		<script type="text/javascript" src="/r18/skins/common/wikibits.js?97"><!-- wikibits js --></script>
		<script type="text/javascript" src="/r18/index.php?title=-&amp;action=raw&amp;gen=js&amp;useskin=monobook"><!-- site js --></script>
		<style type="text/css">/*<![CDATA[*/@import "/r18/index.php?title=MediaWiki:Common.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";@import "/r18/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";@import "/r18/index.php?title=-&action=raw&gen=css&maxage=18000";/*]]>*/</style>
		<!-- Head Scripts -->
		<script type="text/javascript" src="/r18/skins/common/ajax.js?97"></script><style type="text/css">/*<![CDATA[*/.source-cpp {line-height: normal;}.source-cpp li {line-height: normal;}/** * GeSHi Dynamically Generated Stylesheet * -------------------------------------- * Dynamically generated stylesheet for cpp * CSS class: source-cpp, CSS id:  * GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter) */.source-cpp .de1, .source-cpp .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}.source-cpp  {}.source-cpp .head {}.source-cpp .foot {}.source-cpp .imp {font-weight: bold; color: red;}.source-cpp .ln-xtra {color: #cc0; background-color: #ffc;}.source-cpp li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}.source-cpp li.li2 {font-weight: bold;}.source-cpp .kw1 {color: #0000ff;}.source-cpp .kw2 {color: #0000ff;}.source-cpp .kw3 {color: #0000dd;}.source-cpp .kw4 {color: #0000ff;}.source-cpp .kw5 {color: #000099;}.source-cpp .kw6 {color: #000099; font-weight:normal}.source-cpp .kw7 {color: #004D99;}.source-cpp .co1 {color: #006600; font-style: italic;}.source-cpp .co2 {color: #006600;}.source-cpp .coMULTI {color: #006600; font-style: italic;}.source-cpp .es0 {color: #666666; font-weight: bold;}.source-cpp .br0 {color: #B300D6;}.source-cpp .st0 {color: #999933;}.source-cpp .nu0 {color: #A30000;}.source-cpp .me1 {color: #993300;}.source-cpp .me2 {color: #993300;}@import "/r18/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";/*]]>*/</style>	</head>
<body  class="mediawiki ns-0 ltr page-Tutorial_ACIS_Tutorial_3_Understanding_and_traversing_ACIS_topology_Part_III">
	<div id="globalWrapper">
		<div id="column-content">
	<div id="content">
		<a name="top" id="top"></a>
				<h1 class="firstHeading">Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part III)</h1>
		<div id="bodyContent">
			<h3 id="siteSub">From DocR18</h3>
			<div id="contentSub"></div>
									<div id="jump-to-nav">Jump to: <a href="#column-one">navigation</a>, <a href="#searchInput">search</a></div>			<!-- start content -->
			<p>This is the third of four parts of Tutorial 3. In Part I, <a href="/r18/index.php/Tutorial:ACIS_Tutorial_3:_Understanding_and_traversing_ACIS_topology_%28Part_I%29" title="Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part I)">Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part I)</a>, we provided an overview of the topological structures of ACIS.  In Part II, <a href="/r18/index.php/Tutorial:ACIS_Tutorial_3:_Understanding_and_traversing_ACIS_topology_%28Part_II%29" title="Tutorial:ACIS Tutorial 3: Understanding and traversing ACIS topology (Part II)">Tutorial 3: Understanding and traversing ACIS topology (Part II)</a>, we provided some additional details about the topology of solids, sheets, and wires.  In Part III we shall describe some common mechanisms to traverse the ACIS topological structure.</p><table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div><ul><li class="toclevel-1"><a href="#Traversing_ACIS_topology"><span class="tocnumber">1</span> <span class="toctext">Traversing ACIS topology</span></a><ul><li class="toclevel-2"><a href="#What_are_the_commonly_used_ENTITY_methods_for_traversing_the_topology.3F"><span class="tocnumber">1.1</span> <span class="toctext">What are the commonly used ENTITY methods for traversing the topology?</span></a></li><li class="toclevel-2"><a href="#Example:_How_would_you_find_the_BODY_containing_a_given_topological_ENTITY.3F"><span class="tocnumber">1.2</span> <span class="toctext">Example: How would you find the BODY containing a given topological ENTITY?</span></a></li><li class="toclevel-2"><a href="#What_are_the_commonly_used_global_functions_for_traversing_the_topology.3F"><span class="tocnumber">1.3</span> <span class="toctext">What are the commonly used global functions for traversing the topology?</span></a></li></ul></li><li class="toclevel-1"><a href="#More_on_ACIS_topology"><span class="tocnumber">2</span> <span class="toctext">More on ACIS topology</span></a><ul><li class="toclevel-2"><a href="#Face_types"><span class="tocnumber">2.1</span> <span class="toctext">Face types</span></a></li><li class="toclevel-2"><a href="#Wire_types"><span class="tocnumber">2.2</span> <span class="toctext">Wire types</span></a></li><li class="toclevel-2"><a href="#Bounding_boxes"><span class="tocnumber">2.3</span> <span class="toctext">Bounding boxes</span></a></li></ul></li></ul></td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script><a name="Traversing_ACIS_topology"></a><h2> <span class="mw-headline"> Traversing ACIS topology </span></h2><p>There are two fundamentally different ways to traverse the topological data structures in ACIS.  One way is to follow the pointers within the various topological classes.  This approach uses the member functions of the various topological classes.  An example of this would be the EDGE::coedge() method which returns a pointer to the first COEDGE on an EDGE.  The other approach is to use global search functions.  These functions traverse the pointers for you and return a list or multiple lists of ENTITIES.  An example, if one passed a pointer to a face to the get_edges(...) function, one would obtain a list of the edges bounding the given face. </p><p>As an example, given an edge on a face how would you find an adjacent edge on the face that shared the start vertex of the edge?  One could find the coedge of the edge that lies in the face, determine if the coedge is reversed or in the same direction as the edge, find the next or previous coedge (depending on if the first edge's coedge was reversed or not), then get the edge from the adjacent coedge.  That might take you bit of effort to implement in software, but it would be very efficient once you coded it.  Alternatively, you could call one function to give you all the edges of the face and another function to give you all the edges of the vertex, and you could compare the edges of the first list with the edges of the second list, and usually there would be only two edges that were contained in both lists: the original edge and the adjacent edge.  However, there may be more than two edges on the face that are bounded by the vertex.  In that case you might have to implement a more complex algorithm to find the adjacent edge you were interested in.  Hopefully you can see there are advantages to both algorithms.  The first algorithm is very efficient a finding one adjacent edge, but would require more effort to find all adjacent edges.  The second algorithm would be much less efficient to find one adjacent edge, but if you were looking for all adjacent edges it might be simpler to understand and easier to debug.</p><a name="What_are_the_commonly_used_ENTITY_methods_for_traversing_the_topology.3F"></a><h3> <span class="mw-headline"> What are the commonly used ENTITY methods for traversing the topology? </span></h3><p>The following table contains the most commonly used topological traversal methods. There are three types of methods: those that traverse upward, those that traverse laterally, and those that traverse downward.  The methods are in the above type order (i.e., first upward traversing methods, then laterally traversing methods, then downward traversing methods.)</p><table class="wikitable"><tr><th> BODY method</th><th> Description</th></tr><tr><td> BODY::owner( )</td><td> returns NULL, because bodies are the top level topological entity.</td></tr><tr><td> BODY::lump( )</td><td> returns a pointer to the first LUMP of this BODY.</td></tr><tr><th> LUMP method</th><th> Description</th></tr><tr><td> LUMP::body( )</td><td> returns a pointer to the owning BODY, if there is one.</td></tr><tr><td> LUMP::owner( )</td><td> returns a pointer to the owning BODY, if there is one.</td></tr><tr><td> LUMP::next( )</td><td> returns a pointer to the next LUMP of the owning BODY, if there is one.</td></tr><tr><td> LUMP::shell( )</td><td> returns a pointer to the first SHELL of this LUMP, if there is one.</td></tr><tr><th> SHELL method</th><th> Description</th></tr><tr><td> SHELL::lump( )</td><td> returns a pointer to the owning LUMP, if there is one.</td></tr><tr><td> SHELL::owner( )</td><td> returns a pointer to the owning LUMP, if there is one.</td></tr><tr><td> SHELL::next( )</td><td> returns a pointer to the next SHELL of the owning LUMP, if there is one.</td></tr><tr><td> SHELL::face( )</td><td> returns a pointer to the first FACE in a complete list of all FACES owned by this shell; i.e., it pretends no subshells exist.</td></tr><tr><td> SHELL::face_list( )</td><td> returns a pointer to the first FACE owned directly by this SHELL; i.e., it takes subshells into account.</td></tr><tr><td> SHELL::subshell( )</td><td> returns a pointer to the first SUBSHELL owned directly by this SHELL, if there is one.</td></tr><tr><td> SHELL::wire( )</td><td> returns a pointer to the first WIRE in a complete list of all WIRES owned by this SHELL; i.e., it pretends no subshells exist.</td></tr><tr><td> SHELL::wire_list( )</td><td> returns a pointer to the first WIRE owned directly by this SHELL; i.e., it takes subshells into account.</td></tr><tr><th> SUBSHELL method</th><th> Description</th></tr><tr><td> SUBSHELL::parent( )</td><td> returns a pointer to the owning SUBSHELL, if there is one.</td></tr><tr><td> SUBSHELL::owner( )</td><td> returns a pointer to the owning SUBSHELL, if there is one.</td></tr><tr><td> SUBSHELL::sibling( )</td><td> returns a pointer to the next SUBSHELL of the owning SHELL or SUBSHELL, if there is one.</td></tr><tr><td> SUBSHELL::child( )</td><td> returns a pointer to the first SUBSHELL owned directly by this SUBSHELL, if there is one.</td></tr><tr><td> SUBSHELL::face_list( )</td><td> returns a pointer to the first FACE owned directly by this SUBSHELL; i.e., it takes subshells into account.</td></tr><tr><td> SUBSHELL::wire_list( )

⌨️ 快捷键说明

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