Trim surface with automatic volume generation
The method automates volume generation in CAD systems by calculating intersection curves and merging edges to create closed volumes, addressing the complexity and inefficiency of manual surface selection in trim operations.
Patent Information
- Application Number
- JP2025094255
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2024-06-07
- Filing Date
- 2025-06-05
- Publication Date
- 2025-12-23
AI Technical Summary
In CAD systems, identifying and selecting desired surfaces among numerous small, potentially overlapping surface portions during trim operations can be time-consuming and error-prone, especially when multiple surfaces intersect, complicating the creation of closed volumes.
A method for automatically generating volumes in a trim function of a CAD system by calculating intersection curves, splitting faces along those curves, merging manifold edges to create expanded shells, and identifying the minimum volume formed by pruned shells for display.
Automatically generates closed volumes, reducing user interaction time and minimizing errors in selecting and combining surfaces, thus simplifying the trim surface function for complex models.
Smart Images

Figure 2025186196000001_ABST
Abstract
Description
Detailed Description of the Invention
[0001] [Field of the Invention] The present invention relates to computer-aided design (CAD) for product design, and more particularly to geometric modeling. [Background of the invention] Trim surfaces are a common feature in many CAD software systems. The trim surface function in a typical CAD system creates a segmentation of the surface of a displayed modeled object. The surface of a modeled object may have intersecting portions. Once the surface is divided into smaller individual surfaces, the user of the CAD system can decide whether to retain or remove (trim) the smaller surfaces along the intersecting portions. The trim surface function identifies the faces and edges of the modeled object and stores a geometric description of the object and its faces and edges, for example, in a descriptor table in the CAD system's database. A user may use the trim surface function to create one or more closed volumes. However, when a modeled object has many small surfaces (e.g., five or more surfaces) to trim, it can be complicated for the user to identify the desired surface from among all the small surface portions. This is because some of the small surface portions may have overlapping previews in the displayed image of the modeled object. It may take the user multiple attempts or iterations to find all the surfaces, which can be time-consuming and confusing.
[0002] When two or more surfaces of a modeled object intersect, an intersection curve may divide the surfaces into pieces. The Trim Surface function is used to remove unnecessary pieces and retain necessary pieces. The trimmed results may be combined to define one or more volumes. For example, as shown in FIG. 1A, a rectangle is extruded to create an open first shell 110. As shown in FIGS. 1B and 1C, two lines are extruded to create two planar shells, namely, second shell 120 and third shell 130. The second shell 120 and third shell 130 intersect with the first shell 110. The resulting intersection curve divides the shells 110, 120, and 130 into smaller pieces. Here, the first shell 110 is divided into a center shell 210 and end shells 211 and 212. The two planar shells 120, 130 are each cut into two pieces: an inner piece 220 and a peripheral piece 221, and an inner piece 230 and a peripheral piece 231. The trim surface function allows a user to select the central shell 210 and the inner pieces 220, 230, and then retain and combine them into a closed shell 300, as shown in FIG. 1D . After the combining operation, the closed shell 300 becomes a volume block. While this example illustrates a relatively simple operation, when there are many faces to select or remove, a similar manual process can become tedious and error-prone. Therefore, there is a need in the industry to address the above-mentioned problem. [Summary of the Invention] An embodiment of the present invention provides a method for automatically generating volumes in a trim function application of a CAD system. Briefly, the present invention relates to automatically generating volumes during trimming of a modeled object. The method receives geometric data of intersecting faces, calculates intersection curves, splits faces along those curves, and merges manifold edges to create expanded shells. Shells with non-boundary edges are pruned, and the minimum volume formed by the pruned shells is identified and shown on a graphical user display.
[0003] Other systems, methods, and features of the present invention will become apparent to one with skill in the art upon examination of the following figures and detailed description. It is intended that all such additional systems, methods, and features be included within this specification, be within the scope of the present invention, and be protected by the accompanying claims. [Brief explanation of the drawings]
[0004] The accompanying drawings are included to provide a further understanding of the present invention, and are incorporated in and constitute a part of this specification. The components in the drawings are not necessarily to scale, emphasis instead being placed upon clearly illustrating the principles of the present invention. The drawings illustrate embodiments of the present invention and, together with the description, serve to explain the principles of the present invention.
[0005] [Figure 1A] FIG. 1 is a schematic diagram of an exemplary shell made of an extruded rectangle. [Figure 1B] The extruded rectangle of Figure 1A is shown intersected by two planes. [Figure 1C] 1B shows a trim selection of the intersected extruded rectangular surfaces of FIG. [Figure 1D] The resulting volume of the trim selection in Figure 1C is shown. [Figure 2A] FIG. 1D is a schematic diagram showing four faces with laminar edges resulting from the trim of FIG. 1C. [Figure 2B] 2B is a detail of two faces of FIG. 2A. [Figure 2C] 2B is a detail of two other faces of FIG. 2A. [Figure 3A] FIG. 1D is a first detail of the volume 300 of FIG. [Figure 3B] FIG. 1D is a second detail of the volume 300. [Figure 3C] FIG. 1D is a third detail of the volume 300. [Figure 4] 1 is a flowchart of an exemplary shell creation method. [Figure 5]1 is a flowchart of an exemplary shell pruning method. [Figure 6A] 1B is a reproduction of the schematic diagram showing an exemplary shell of extruded rectangles from FIG. 1A. [Figure 6B] This shows the extruded rectangle from Figure 2B with a third plane added. [Figure 6C] FIG. 6B shows a trim selection of the intersected extruded rectangular surfaces. [Figure 6D] The two volumes resulting from the trim selection in Figure 6C are shown. [Figure 7A] FIG. 6D is a schematic diagram showing six faces with laminar edges resulting from the trim of FIG. 6C. [Figure 7B] Detail of three faces of FIG. 6A. [Figure 7C] Detail of the remaining three faces of FIG. 6A. [Figure 8A] Two closed volumes are shown in Figure 6D. [Figure 8B] The first (rear) shell is shown. [Figure 8C] The second (front) shell is shown. [Figure 8D] 8B and 8C. A third shell is shown separating the rear shell of FIG. 8B and the front shell of FIG. 8C. [Figure 9] 10 is a flow chart of an exemplary embodiment of a minimum volume detection sub-module. [Figure 10] 10 is a flow chart of an exemplary embodiment of a candidate shell extension sub-module. [Figure 11] 10 is a flow chart of an exemplary embodiment of a volume setting sub-module. [Figure 12] 1 is a flowchart summarizing a method for trimming surfaces with automatic volume generation. [Figure 13] 1 is a flowchart of an exemplary embodiment of a method of expansion for an initial volume. [Figure 14] 1 is a flowchart of an example embodiment of a method for dilation with bounding volumes. [Figure 15] 1 is a flowchart of an exemplary embodiment of a fast minimum volume search method. [Figure 16A] Coffee cup model shown. [Figure 16B] The model in Figure 16A is shown with one closed shell as the cup base. [Figure 16C] The model in Figure 16A is shown with one inner surface, cutting out the inside of the cup. [Figure 17A] 16B shows the coffee cup model of FIG. 16A after the faces have been split. [Figure 17B] The inner and outer volumes are shown from the divided plane of FIG. 17A. [Figure 17C] 17B shows the model of FIG. 17B with the internal volume removed. [Figure 18A] 1 shows an example of a modeled part with four surfaces. [Figure 18B] 18B shows a surface partition of the part of FIG. 18A. [Figure 18C] Four volumes are shown that were automatically generated from the delimited surfaces in Figure 18B. [Figure 19A] A model of three cylindrical shells intersecting along the x-, y-, and z-axes is shown. [Figure 19B] 19B shows the model of FIG. 19A after the shell has been split. [Figure 19C] Shown are eight volumes generated from three intersecting cylindrical shells. [Figure 20] 1 is a schematic diagram illustrating an example of a system for performing the functions of the present invention. DETAILED DESCRIPTION OF THE INVENTION
[0006] [Detailed explanation] The following definitions are useful in interpreting terms applied to features of the embodiments disclosed herein and are intended solely to define elements within the present disclosure.
[0007] As used in this disclosure, a "descriptor" refers to a data structure that describes characteristics of a local region of geometry within a modeled object in a CAD system. Descriptors may include both text and numeric fields and may further include fields that indicate relationships to other components and / or structural features. The use of the term "descriptor" is common in information retrieval systems. For example, in an image retrieval system, descriptors include visual features of an image, such as shape, color, texture, etc., that help classify the image. In a music retrieval system, descriptors may include characteristics such as rhythm, scale, genre, artist, etc. In a document retrieval system, descriptors may include the number of individual words, author, language, etc.
[0008] As used in this disclosure, a "component list" refers to a list of individual parts of a modeled object in two dimensions (2D) or three dimensions (3D). In a CAD environment, the component list may be visually displayed as a sidebar of a graphical window that displays a 2D or 3D rendering of the modeled object. The component list and the graphical window may interact; for example, selecting a component in the component list may highlight the corresponding component in the graphical window. Similarly, selecting a component in the graphical window (e.g., by clicking the mouse) may highlight the corresponding component in the component list.
[0009] As used in this disclosure, a "face" refers to the surface of a portion of a 2D or 3D modeled object. Domain: A topological domain is a set of interconnected cells of the same dimension. Cell: A continuous constraint on the underlying geometry. · Vertex: A zero-dimensional cell based on a geometric point. Edge: A cell based on a curve (1st dimension) and bounded by points (0th dimension). Face: A cell based on a surface (2 dimensions) and bounded by edges (1 dimension). Volume: A cell based on space (3 dimensions) and bounded by a surface (2 dimensions). A shell is a collection of faces connected by edges that bound a volume or lie in 3D space. A loop is a set of edges connected by vertices that bounds a face. A wire is a set of edges connected by vertices in 3D space.
[0010] As used in this disclosure, a "volume" refers to a three-dimensional space that is completely bounded by one or more faces. For example, a sphere defines a volume bounded by one face, a hemisphere defines a volume bounded by two faces, a cylinder defines a volume bounded by three faces, a pyramid defines a volume bounded by four (triangular) or five faces (four triangles and one rectangle), and a cube defines a volume bounded by six faces.
[0011] As used in this disclosure, with respect to shells that intersect only at boundary edges, "minimum volume" refers to a volume that is composed of some of those shells and cannot be divided by any of the other shells.
[0012] As used in this disclosure, with respect to shells that intersect only at boundary edges, "maximum volume" refers to the volume that contains all of those shells, or the volume where no shells lie outside the volume.
[0013] With respect to groups of shells that intersect only at boundary edges, as used in this disclosure, "bounding volume" refers to the bounding volume used as the boundary that separates a given shell into three groups: interior, boundary, and exterior.
[0014] As used in this disclosure, "edge" refers to the end of a face, for example, a line segment connecting two vertices in a polygon, polyhedron, or higher-dimensional polytope. In a polygon, an edge may be a line segment on the boundary and is often referred to as a side of the polygon. In a polyhedron, or more generally, a polytope, an edge is a line segment where two faces (or edges of a polyhedron) meet. An edge shared by only two faces is a manifold edge. An edge shared by more than two faces is a non-manifold edge. A laminar edge is the boundary edge of a face. If a face has a laminar edge, the face cannot be part of any volume. Edges are laminar if they belong to only one face.
[0015] As used in this disclosure, a "shell" refers to a collection of faces connected by their respective edges, which bound a volume in, for example, 3D space.
[0016] As used in this disclosure, "extrude" means to extend a modeled line or surface to add another dimension. For example, a line (one dimension (1D)) can be extruded to form a rectangle (two dimensions (2D)). A circle (2D) can be extruded to form a cylinder, and a rectangle (2D) can be extruded to form an open shell (three dimensions (3D)).
[0017] Reference will now be made in detail to the embodiments of the present invention, examples of which are illustrated in the accompanying drawings. Wherever possible, the same reference numbers are used in the drawings and the description to refer to the same or like parts.
[0018] Exemplary embodiments of the present invention describe methods for enhancing a trimmed surface application to automatically remove trimmed surfaces and generate closed volumes. For example, when a volume generation option in a trimmed surface application is selected, an automatic volume generation module generates a volume resulting from the trimmed surfaces selected by the user.
[0019] When two or more surfaces intersect, they are split into smaller pieces (faces), for example by applying standard surface splitting algorithms in CAD systems. From a topological point of view, splitting splits a large surface into smaller faces. In this document, an edge is bounded by a vertex and is denoted by E. A face is bounded by an edge and is denoted by F, where EDGES(F) = {E1,E2,…,E k} is the edge set of F. An edge E may be shared by more than one face, i.e., SHARED(E) = {F1, F2, ... F s} or E∈EDGES(F1)∩EDGES(F2)∩…∩EDGES(F s ). Edges are laminar if they belong to only one face, i.e., SHARED(E) = {F} and E∈EDGES(F). In other words, the number of elements in SHARED(E) is 1, i.e., COUNT(SHARED(E)) = 1. A laminar edge is a boundary edge of a face. If a face has multiple laminar edges, the face cannot be part of any volume.
[0020] Continuing with the example shown in FIG. 1B, after the planar shells 120 and 130 intersect with the first shell 110, as shown in FIG. 2A, there are four faces 211, 212, 221, and 231 with laminar edges. The edge shells 211 and 212 shown in FIG. 2B originate from the first shell 110 (FIG. 1A). The perimeter fragments 221 and 231 shown in FIG. 2C are generated from the cutting plane shells 120 and 130 (FIG. 1B). The edge shells 211 and 212 and the perimeter fragments 221 and 231 cannot be part of the volume and can be removed. As shown in FIG. 3A, all boundary edges of the central shell 210 (FIG. 1B) derived from the first shell 110 (FIG. 1A) and the inner fragments 220 and 230 (FIG. 1B) derived from the cutting planes 120 and 130 (FIG. 1C) are adjacent to or shared by two faces and can therefore form a volume 300.
[0021] Faces are connected to form a shell, which is a collection of faces connected by edges that bounds a volume in 3D space. Here, the shell is denoted by S, and the faces are FACES(S)={F1,F2,…,F m}, and their edges are EDGES(S)={E1,E2,…,E n An edge E is a manifold edge if it is shared by only two faces F1 and F2, i.e., SHARED(E) = {F1, F2}, E∈EDGES(F1)∩EDGES(F2). An edge E is a non-manifold edge if it is shared by more than two faces such that COUNT(SHARED(E)) > 2.
[0022] After a standard trim surface division operation, the small faces {F1,F2,…,F p} exists. Shell {S1,S2,…,S p} is ∀S i ∈{S1,S2,…S p},FACES(S i )={F i},EDGES(S i )=EDGES(F i) can be constructed by faces to satisfy . For convenience, the volume generation module of this embodiment treats shells as a single body. A shell can be extended if it has manifold edges shared with other shells. The boundary edges of a shell are denoted by BOUNDARY(S) ⊂ EDGES(S), which is a subset of the shell edges. The manifold boundary edges are a subset of the boundary edges and are denoted by MANIFOLD(S) ⊂ BOUNDARY(S). Initially, shell S contains only one face, FACES(S) = {F}, and the boundary edge of the shell, BOUNDARY(S), consists of all edges of face F, i.e., BOUNDARY(S) = BOUNDARY(F). If two shells S1 and S2 share only manifold edges, i.e., ∀E∈BOUNDARY(S1)∩BOUNDARY(S2), then E is a manifold edge and thus the two shells S1 and S2 can be merged into one shell S3. Shell S3 contains all faces and edges of the two merged shells, i.e., FACES(S3)=FACES(S1)∪FACES(S2), and EDGES(S3)=EDGES(S1)∪EDGES(S2). The new set of boundary edges is all boundary edges not shared with S1 and S2, i.e., BOUNDARY(S3)=(BOUNDARY(S1)∪BOUNDARY(S2))-(BOUNDARY(S1)∩BOUNDARY(S2)) is.
[0023] Similarly, the manifold edge is MANIFOLD(S3)=(MANIFOLD(S1)∪MANIFOLD(S2))-(MANIFOLD(S1)∩MANIFOLD(S2)) is.
[0024] Equation 1 summarizes the result of combining two shells S1 and S2 into a single shell S3.
[0025]
number
[0026] The shell creation module identifies the largest possible shell, ie, a shell whose boundary edges are either laminar or non-manifold, ie, MANIFOLD(S)=Φ.
[0027] Here, the shell creation algorithm expands one shell by merging it with adjacent shells through manifold edges to create a larger shell. This process is repeated until all boundary edges become non-manifold or laminar edges. These steps are repeated for the remaining faces until all faces have been processed.
[0028] 4 is a flowchart 400 of an exemplary method for creating a shell. It should be understood by those skilled in the art that any process description or block in the flowchart represents a module, segment, portion of code, or step that includes one or more instructions for implementing a particular logical function in the process, and that, depending on the functionality involved, alternative embodiments in which functions may be performed in a different order than that shown or discussed, including substantially simultaneously or in reverse order, are within the scope of the present invention.
[0029] As shown in block 410, a set of split faces is received, for example, from a trim surface module. As shown in block 420, all faces {F1, F2, ..., F p}, there are p shells {S1,S2,…,S p} is created. One shell per face, FACES(S i )={F i},EDGES(S i )=EDGES(F i ), i=1,2,...,p. All shells are marked as unprocessed, i.e., VISIT(S i)=false, i=1,2,…,p. To keep track of the result shell, we use the empty set L S =Φ is created.
[0030] If all shells have been processed, as indicated in block 425, the process proceeds to block 460. Otherwise, as indicated in block 430, an unprocessed shell S of the plurality of shells is processed. i is selected as the source shell, marked as processed, and VISITED(S i )=true.
[0031] All manifold boundary edges of the source shell, i.e., MANIFOLD(S i )⊂BOUNDARY(S i ) is found. If no manifold boundary edge exists, i.e., MANIFOLD(S i If L )=Φ, then the source shell is added to the set of result shells, i.e., L S =L S ∪{S i} and the process returns to block 425. If a manifold boundary edge for the source shell exists, then the manifold boundary edge E∈MANIFOLD(S i ) is selected, where the selected boundary edge E is the edge of the source shell S i and other untreated shells j Two shells S are shared by i and S j is one source shell S i =S i ∪S j is integrated into the following:
[0032]
number
[0033] Shells that were (previously) unprocessed are marked as processed and VISITED(Sj )=true. Once all shells have been processed, the resulting shell set L is generated as shown in block 460. S is returned.
[0034] Upon completion of the exemplary method of shell creation of FIG. S does not have a shell with a manifold boundary edge after the shell creation algorithm, i.e., ∀S∈L S , MANIFOLD(S)=Φ. A shell may have laminar edges or non-manifold boundary edges. If a shell has laminar edges, it cannot be closed and can be removed from consideration for volume inspection.
[0035] FIG. 5 is a flowchart 500 of an exemplary embodiment of a shell pruning module. The shell pruning module removes shells that either have no boundary edges or have laminar edges. As shown in block 500, a set of shells is received. Initially, all shells are marked as unprocessed (∀S∈L), as shown in block 510. S , VISITED(S)=false). If there are unprocessed shells (as tested in block 515), an unprocessed shell S∈L is selected from the shell set, as shown in block 520. S is selected and marked as processed, i.e., VISITED(S)=true. If the selected shell has a laminar boundary edge, remove the shell from the set and recalculate L if (∃E∈BOUNDARY(S),COUNT(SHARED(E))=1), as shown in block 540. S =L S -{S}), the process returns to block 515. If there are no unprocessed shells, the updated shell set L is S is returned.
[0036] 6A-6D extend the example of FIGS. 1A-1D by adding a third planar shell 640 to carve the shell 110. While the examples of FIGS. 1A-1D produced one volume, two volumes are now produced. FIG. 6A shows the shell 110 formed from an extruded rectangle. FIG. 6B adds a third vertical planar shell 640 between the first shell 220 and the second shell 230. FIG. 6C illustrates the shells selected during the trim operation. Here, the first shell is carved into four pieces. The second, third, and fourth shells are each divided into two pieces. FIG. 6D shows the two closed shells 601, 602 resulting from the trim.
[0037] As before, shells 211, 212, 221, 231, and 261 with laminar edges (Figures 7A-7C) are removed. There are three shells with non-manifold boundary edges that can be elements of volumes (Figures 8A-8D). Any two of the three shells 220, 230, and 640 can form a closed shell, i.e., a volume. Figure 8A shows two closed volumes, Figure 8B shows the first (posterior) shell, Figure 8C shows the second (anterior) shell, and Figure 8D shows the third shell separating the posterior and anterior shells.
[0038] This is an example of extending multiple volumes from a single shell. Here, the user can select which volumes to keep. Similar to trimmed surfaces, small, non-overlapping volumes separated by shells are kept for the user to select. A shell has two sides (left and right). Each shell can be shared by up to two small, non-overlapping volumes. In some scenarios (not shown), for a single extended shell, there can be multiple volumes on each side of the shell. On each side, only the one with the smallest volume is kept.
[0039] Since non-manifold edges are shared by more than two shells, there are no unique shell extensions along the non-manifold edges. In embodiments, all neighbors of a shell are examined to detect extensions.
[0040] The simplest way to find closed shells is by brute-force, by finding all shells and then all possible combinations of those shells to find the volume. The cost of brute-force is exponential in the number of shells: for n shells, 2 n In the following, we describe a more efficient approach to finding the minimum volume.
[0041] After shell creation (by dilation through manifold edges) and shell pruning are applied, the remaining shells are either volume shells with no boundary edges or volume shells with non-manifold boundary edges, i.e., if ∀S∈LS,BOUNDARY(S)=Φ, or ∀E∈BOUNDARY(S), then COUNT(SHARED(E))>2. These shells are used in the Minimum Volume Detection module.
[0042] If a shell S has no boundary edges, i.e., BOUNDARY(S) = Φ, then it is a volume shell. A volume is denoted by V = VOLUME({S}), and for user selection, the volume set is L V That is, L V =L V ∪{V}. Source shell S∈L SIf L has boundary edges, the minimum volume module performs an expansion. This expansion is similar to the shell creation algorithm, which expands from a single face. Unlike the expansion in shell creation, here there may be multiple volumes expanded from one shell, and one shell may be used to expand other shells. If a shell has already been expanded, the minimum volume module removes it from the set of source shells and creates L. S =L S -{S} to prevent other shell extensions from using it. S If there are no shells left in L, i.e., S If = Φ, then all valid volumes have been found.
[0043] One source shell S∈L S to find the minimum volume from the empty set L to keep track of candidate shells to be used for expansion. C = Φ is created. The source shell S∈L S is the first element of the candidate shell set, and L C = {S}. The set of candidate shells is the boundary edge BOUNDARY(L C ), and non-boundary edges or internal edges INTERNAL(L C ) is considered as one large shell. The expansion is done recursively through the boundary edges, and each shell is expanded into the candidate set L C Add to.
[0044] One exemplary boundary edge E∈BOUNDARY(L C ) is the adjacent shell that shares its boundary edge with the source shell ADJACENT(E)=(SHARED(E)-L C )∩L S These neighboring shells are used only for the next expansion. Each of these neighboring shells is a candidate set L C is considered an independent extension. Because there are multiple adjacent shells that share edge E, there are multiple possible extensions through edge E, but not all of them are valid extensions.
[0045] The boundary edges of adjacent shells are defined as a set of candidate shells L C may exist on the interior edges of a ∈ADJACENT(E),BOUNDARY(Sa)∩INTERNAL(L C ) = Φ. These shells form non-manifold edges at their internal edges to form BOUNDARY(S a )∩INTERNAL(L C ), so it is invalid for expansion. Expansion is only performed for shells that do not intersect internally. That is,
[0046]
number
[0047] L C is the boundary edge E∈BOUNDARY(L C ) via Shell S a If it is extensible by ∈VALIDADJACENT(E), then Equation 4 is the equation for updating the boundary edges of the candidate shell set.
[0048]
number
[0049] Furthermore, Equation 5 is a formula for updating the internal edges of the candidate shell set.
[0050]
number
[0051] The module repeats this process, continuing to expand by adding one shell at a time as long as there are boundary edges left that can be expanded. If there are no boundary edges (BONDARY(L C )=Φ), candidate shell set L Ccan form a volume V.
[0052] If a volume is detected, or if Equation 3 is not satisfied, the L C If S is not expandable, the expansion reverts to the previous expansion state and checks for other adjacent shells via the last boundary edge used, or for other expansions. a ∈L C L C When removed from L C =L C -{S a}, the boundary edges and interior edges are reduced.
[0053]
number
[0054]
number
[0055] Note that the update formula for boundary edges is the same for both expansion and contraction. Expansion from one source shell is recursive and applies to all source shells. Once the expansion of a source shell is complete, the module removes that source shell from the source set and it will not be used by expansions of other shells. That is, L S =L S -{S}.
[0056] When an extended volume V is detected from the source shell S, (V=VOLUME(L C ),SHELLS(V)=L C ), the side of the first source shell S to which this volume belongs is determined. Since a shell has two sides, there is one shell S∈L SMultiple volumes can be extended from a shell. If a shell is part of the volume boundary, the first side ("left side") can be inside the volume and the second side ("right side") can be outside. Here, volumes may be classified as left or right sides with respect to the source shell. If the left side of shell S faces the inside of volume V, then volume V is on the left side of shell S, i.e., LEFT(S) = LEFT(S) ∪ {V}; otherwise, volume V is on the right side of shell S, i.e., RIGHT(S) = RIGHT(S) ∪ {V}. In this application, only the minimum volumes on each side of the shell are presented to the user to select which volumes should be retained, so that the minimum volume on the left is MINLEFT(S) = min{LEFT(S)} and the minimum volume on the right is MINRIGHT(S) = min{RIGHT(S)}.
[0057] The minimum volume is not only the minimum in the source shell S, but also in all shells enclosing the volume V, i.e.,
[0058]
number
[0059] If a shell already has two volumes, it can be removed from the shell set for the next volume search, i.e., L S =L S -{S C} The minimum volume detection module includes a candidate shell expansion submodule and a volume setting submodule. The minimum volume is calculated by dividing all source shells ∀S∈L for expansion. S A candidate shell extension is found by scanning one source shell S∈L. S From L CThe candidate shell extension recursively calls itself for the next extension until all possible extensions for the minimum volume have been processed. Volume V = VOLUME(L C ) is found, the volume setting identifies the sides of the volume relative to the input shell and sets the minimum volume to MINLEFT(S) and MINRIGHT(S).
[0060] 9 is a flowchart 900 of an example embodiment of the minimum volume detection submodule. As shown in block 910, a source shell set L S is received. The resulting empty set of volumes L V = Φ is created and initialized. An empty map SHELLS(V) = Φ of volumes for candidate shells of the volume is created and initialized. An empty map is created and initialized to record the minimum left and right volumes of each shell, and ∀S∈L S ,MINLEFT(S)=Φ,MINRIGHT(S)=Φ.
[0061] In block 915, the source shell set is examined. If the source shell set is not empty (i.e., L≠Φ), the submodule proceeds to block 920 and examines the shell set L S The submodule is a source shell S∈L. S and record all candidate shells for the volume in an empty candidate set L C =Φ. The source shell is inserted into the candidate set (L C ={S}, L C The boundary edges and internal edges of C ) = BOUNDARY(S) and INTERNAL(L C )=INTERNAL(S).
[0062] As shown in block 930, the candidate set L C , boundary edge BOUNDARY(L C) and internal edge INTERNAL(L C ) invokes the "Candidate Shell Expansion" sub-module (Fig. 10) for the source shell S. Here, the sub-process calculates the minimum left and right volumes of the source shell S, i.e., MINLEFT(S) and MINRIGHT(S), and the candidate shell SHELLS(V) = L that encloses the volumes. C The smallest volume is added to the resulting volume set, L V =L V ∪{MINLEFT(S),MINRIGHT(S)}, and the shell S is removed from the source set, L S =L S -{S V}.
[0063] As shown in block 940, for each minimum volume MINLEFT(S) and MINRIGHT(S) extended from a source shell S, the submodule calculates all shells that make up the volume MINLEFT(S) and MINRIGHT(S), i.e., ∀S V ∈SHELLS(MINLEFT(S)) and ∀S V ∈SHELL(MINRIGHT(S)) in order and find shell S V , and volume MINLEFT(S) or MINRIGHT(S) to call up "Volume Settings" (see Figure 11). After "Volume Settings", S V If both have the minimum volume, then S V is the source set L S is removed from L if MINLEFT(SV) ≠ Φ,MINRIGHT ≠ S =L S -{S V}. The process returns to block 915. If there are no source shells left (L S =Φ), and the subprocess is a volume set L V Returns
[0064] 10 is a flowchart 1000 of an example embodiment of the candidate shell extension sub-module. As shown in block 1010, the candidate shell extension sub-module S and the boundary edge BOUNDARY(L C ) and internal edge INTERNAL(L C )≠Φ C and checks for a boundary edge, as shown in block 1015. If there is no boundary edge (BOUNDARY(L C )=Φ), as shown in block 1020, the candidate shell L C is a closed shell and the volume V = VOLUME(L C ),SHELLS(V)=L C The volume setting algorithm is invoked with the volume V and the source shell S, and the sub-module ends, as shown in block 1070. If a boundary edge exists, i.e., BOUNDARY(L C )≠Φ, the submodule selects one boundary edge E∈BOUNDARY(L C ) and find all valid adjacent shells VALIDADJACENT(E) from the current source shell.
[0065] If there are no valid adjacent shells (VALIDADJACENT(E)=Φ) at block 1035, the submodule returns as shown in block 1070. Otherwise, the subprocess returns to S a Select a valid adjacent shell from ∈VALIDADJACENT(E) and add it to the candidate set, L C =L C ∪{S a}. The boundary edges are updated according to Equation 4, and the interior edges are updated according to Equation 5. As shown in block 1050, the candidate shell expansion submodule takes the source shell S, the updated candidate set L, C, and recursively call itself with the updated boundary edges and updated internal edges. As shown in block 1060, the submodule removes the adjacent shell S a from the valid adjacent set, so that VALIDADJACENT(E) = VALIDADJACENT(E) - {S a}, removes the added adjacent shell S a from the candidate set L C , that is, L C = L C - {S a}, updates the boundary edges according to Equation 6, and updates the internal edges according to Equation 7. The process proceeds to block 1035 to process the next adjacent shell.
[0066] FIG. 11 is a flowchart 1100 of an exemplary embodiment of a volume setting submodule. As shown in block 1110, an input volume V and a source shell S are received. As shown in block 1120, the position of the volume with respect to the source shell is determined. If the left side of the shell S is inside the volume, the volume V is on the left side of the shell S, that is, LEFT(S) = LEFT(S) ∪ {V}; otherwise, the volume V is on the right side of S, that is, RIGHT(S) = RIGHT(S) ∪ {V}. As shown in block 1130, the volume value of V, that is, VALUE(V) is calculated and compared with the current minimum volume. The minimum volume of the shell S is updated. As shown in block 1135, if V ∈ LEFT(S) and VALUE(V) < VALUE(MINLEFT(S)), then as shown in block 1140, MINLEFT(S) = V. If V ∈ RIGHT(S) and VALUE(V) < VALUE(MINRIGHT(S)), then MINRIGHT(S) = V. When all shells have associated volumes or when used as a source shell, the submodule returns.
[0067] FIG. 12 is a flowchart 1200 of an embodiment of an exemplary method for automatic volume generation during a trim function operation. As shown in block 1210, multiple faces of a modeled geometric object are received. As shown in block 1220, the multiple faces are split along intersection curves. As shown in block 400 (enlarged in FIG. 4), the faces are combined into shells via manifold edges. As shown in block 500 (enlarged in FIG. 5), shells with laminar boundary edges are removed because they cannot be part of any volume. As shown in block 900 (enlarged in FIG. 9), all resulting volumes are obtained and the minimum volume is found for presentation to the user.
[0068] Each time a shell is added, the expansion may be larger or smaller. The above method iterates through all volumes to identify the smallest volume. Volume creation and calculations take most of the time. The time complexity for volume creation can be exponential with the number of source shells. Below is a second embodiment that uses more geometric information to reduce the number of volume creations / comparisons.
[0069] Candidate shells are the result of the splitting operation, and they connect only at shell boundaries. Shells do not intersect. When a first volume is found by shell expansion, a portion of the shells is used as the boundary of the first found volume, and all remaining shells are either inside the volume or outside the first found volume. The first found volume must contain the smallest volume of the source shell, and the boundary shell of the smallest volume of the source shell must be inside the first found volume. Therefore, there is no need to add shells outside the first found volume. The first found volume can be used as a bounding volume to define the extent of the candidate shell. This approach can significantly reduce the number of shells to search and / or the number of volumes to examine. Note that it is easy to check whether a shell is on a volume because this information is retained when the volume is generated (SHELLS(V)). Other shells are either inside or outside the volume. An alternative embodiment may check whether a shell is inside a volume. One simple and practical method is to check whether any interior point on the shell is inside the volume. For any interior point on the shell to be inside the volume, it means that the entire shell must be inside the volume.
[0070] Source shell S∈L S Given V, the first step is to find the first volume V1 by a modified candidate shell expansion, returning as soon as the first volume is found. One of the two smallest volumes must be inside the first volume V1, which is later used as a bounding volume to find V. b =V1. This modified expansion method is referred to as expansion for the initial volume and may be implemented as a software module. Figure 13 is a flowchart 1300 of an example embodiment of a method for expansion for the initial volume.
[0071] As shown in block 1310, the module S , the current candidate set L C , the boundary edge set BOUNDARY(L C ), and the internal edge set INTERNAL(L C ) and initializes an empty result volume V. As shown in block 1315, the module determines whether a boundary edge exists.
[0072] There is no boundary edge, i.e., BOUNDARY(L C )=Φ, then, as shown in block 1320, the candidate shell L C can form a closed shell, the resulting volume V = VOLUME(L C ),SHELLS(V)=L C and the module returns the resulting volume, as shown in block 1370. Returning to block 1315, if a boundary edge exists (BOUNDARY(L C )≠Φ), as shown in block 1330, the boundary edge E∈BOUNDARY(L C ) is selected and all valid adjacent shells VALIDADJACENT(E) are found. As shown in block 1335, the module determines whether there are any valid adjacent shells.
[0073] If there are no valid adjacent shells and VALIDADJACENT(E)=Φ, the module returns the result volume, as shown in block 1370. Otherwise, the module returns the adjacent shell S, as shown in block 1340. a ∈VALIDADJACENT(E) is selected and added to the candidate set, and L C =L C ∪{S a}, and then the boundary edges are updated by Equation 4 and the interior edges are updated by Equation 5.
[0074] As shown in block 1350, the module takes a source shell S, an updated candidate set L, C, and the updated boundary edges and updated interior edges, and assigns the returned result to the result volume V.
[0075] As shown in block 1360, the adjacent shell S a is removed from the adjacency set, and VALIDADJACENT(E)=VALIDADJACENT(E)-{S a}. The added adjacent shell S a is the candidate set L C removed from, i.e., L C =L C -{S a}, boundary edges are updated according to Equation 6, and interior edges are updated according to Equation 7. As shown in block 1365, the module checks whether volume V is empty. If volume V is not empty, the module returns the result volume, as shown in block 1370. If volume V is empty, control returns to block 1335 to process the next adjacent shell.
[0076] Once the first volume is found, we find the valid neighboring shells inside the bounding volume, i.e., aE∈BOUNDARY(L C )About S a ∈VALIDADJACENT(E)∩INSIDE(V b ), and the valid neighbor shell on the volume, i.e., aE∈BOUNDARY(L C )About S a ∈VALIDADJACENT(E)∩SHELLS(V b ) shell expansion is restarted from the source shell S. Shells inside the bounding volumes are used first. If no volume can be found, shells above the bounding volumes are used. Any shells outside the bounding volumes are not used for volume expansion. If a second volume V2 is found inside the first bounding volume V, bIf the first bounding volume is the same as the first, then the first bounding volume is one of the smallest volumes extended from the source shell S. If a second volume is found inside the first, then the second volume must be a smaller volume and can be used as the new bounding volume. A similar process can be applied to find a third volume, a fourth volume, and so on, until no smaller volumes can be found. All volumes found in this way are on the same side of the source shell S. The final volume is the smallest volume of shell S.
[0077] If there are two minimum volumes extended from a shell S, the shell of the other minimum volume must be outside the initial bounding volume V1. To find a minimum volume on the other side of the source shell, a bounding volume on the other side of the source shell S that is also outside the initial bounding volume V1 is found. Similar to the process of finding the initial minimum volume, the bounding volume V b = the outer shell of V1, i.e., aE∈BOUNDARY(L C )About S a ∈VALIDADJACENT(E)∩OUTSIDE(V b ), or a shell on the bounding volume, aE∈BOUNDARY(L C )About S a ∈VALIDADJACENT(E)∩SHELLS(V b ), the shell expansion is resumed. Outer shells are preferred over shells on bounding volumes. The shell expansion stops as soon as a second volume V2 is encountered. If the second volume V2 is not inside the first bounding volume V, b If the same as the bounding volume V bis the maximum volume, and every shell has exactly one minimum volume. If the second volume is different from the first volume, determine whether the second volume is on the other side of the source shell. If the second volume is on the other side of the shell, the second volume can be used as a bounding volume to search for the second minimum volume. This is the same process as finding the first minimum volume. If the second volume is not on the other side, the second volume is used as a new bounding volume to search for volumes outside the bounding volume, V. b = V2. This is repeated until a volume on the other side of the source shell S is found or no other volumes exist, and the final volume is the largest volume that can be found from the source shell. All shells on the largest volume have a single minimum volume. When these shells are used as source shells, a single minimum volume can be found.
[0078] Based on the above discussion, when a bounding volume exists, the expansion of the shell expansion can take two directions: expansion inside the bounding volume or with a shell on the bounding volume, and expansion outside the bounding volume or with a shell on the bounding volume. These two cases are now combined into one "expansion with bounding volume" process, which is similar to the expansion with respect to the initial volume, but with an additional check of the shell position relative to the bounding volume.
[0079] 14 is a flowchart 1400 of an example embodiment of a method for expanding by bounding volumes. The module S , the current candidate set L C , the boundary edge set BOUNDARY(L C ), the internal edge set INTERNAL(L C ), shell is SHELLS(V b ) the bounding volume V b, and a search direction D. If D is -1, the expansion is performed on the bounding volume V b The inner shell or bounding volume V b If D is 1, the expansion uses only the upper shell. b The outer shell or bounding volume V b Only the upper shell is used. As shown in block 1410, the module initializes an empty result volume V.
[0080] If there is no boundary edge, i.e., BOUNDARY(L C ) = Φ, then the candidate shell L C can form a closed shell. As shown in block 1420, the module calculates the resulting volume V=VOLUME(L C ),SHELLS(V)=L C and the module returns the resulting volume, as shown in block 1470. Returning to block 1415, if a boundary edge exists (BOUNDARY(L C )≠Φ), as shown in block 1430, the boundary edge E∈BOUNDARY(L C ) is selected and all valid adjacent shells VALIDADJACENT(E) are collected. As shown in block 1435, the module determines whether there are any valid adjacent shells bounded by the bounding volume.
[0081] If there is no valid adjacent shell and VALIDADJACENT(E)=Φ, the module returns the result volume, as shown in block 1470. If there is a valid adjacent shell bounded by a bounding volume, the module returns the adjacent shell S a ∈VALIDADJACENT(E) is selected and added to the candidate set, and L C =L C ∪{S a} Then, the boundary edges are updated by Equation 4, and the interior edges are updated by Equation 5. The neighboring shells are selected according to the following rules:
[0082] D is -1 and VALIDADJACENT(E)∩INSIDE(V b )≠Φ, then S a ∈VALIDADJACENT(E)∩INSIDE(V b ) to select; D is -1 and VALIDADJACENT(E)∩INSIDE(V b )=Φ, then S a ∈VALIDADJACENT(E)∩SHELLS(V b ) to select; D is +1 and VALIDADJACENT(E)∩OUTSIDE(V b )≠Φ, then S a ∈VALIDADJACENT(E)∩OUTSIDE(V b ) to select; D is +1 and VALIDADJACENT(E)∩OUTSIDE(V b ), then S a ∈VALIDADJACENT(E)∩SHELLS(V b ).
[0083] As shown in block 1450, the module takes a source shell S, an updated candidate set L, C , and the updated boundary edges and updated interior edges, and assigns the returned result to the result volume V.
[0084] As shown in block 1460, the adjacent shell S a is removed from the adjacency set, and VALIDADJACENT(E)=VALIDADJACENT(E)-{S a}. The added adjacent shell S a is the candidate set L C removed from, i.e., L C =L C -{S a}, and boundary edges are updated according to Equation 6 and interior edges are updated according to Equation 7. As shown in block 1465, the module checks whether volume V is empty. If volume V is not empty, the module returns the result volume, as shown in block 1470. If volume V is empty, control returns to block 1435 to process the next adjacent shell.
[0085] Given a source shell, it is an iterative process to find and use bounding volumes until a minimum volume is reached. The module exploits the geometric relationship between the shell and the bounding volume to gradually narrow the expansion range. In narrowing the expansion range, at least one shell may be eliminated. For a source shell, the minimum volume should be found in linear time. If there are a total of n shells to search, the complexity of the main search algorithm to find all the minimum volumes is O(n 2 )
[0086] 15 is a flowchart 1500 of an exemplary embodiment of a fast minimum volume search method. As shown in block 1510, a source shell set L S is received and checked to be an empty shell set, as shown in block 1515. S If = Φ is an empty set, the method returns the minimum value, as shown in block 1580. Otherwise, as shown in block 1520, the source shell S∈L S If the source shell already has two minimum volumes (block 1525), the source shell is removed, as shown in block 1570, and the method returns to block 1515. If only one minimum volume exists (block 1527), the bounding volume V is selected, as shown in block 1530. b is initialized to have that minimum volume. If there is not one minimum volume (block 1527), then the bounding edge BOUNDARY(L C ) and internal edge INTERNAL(L C ) to the candidate set L C= {S} is initialized, and as shown in block 1550, the source shell S and the candidate set L C , boundary edge BOUNDARY(L C ), and the internal edge INTERNAL(L C ) calls the "Extension for First Volume" module (see Figure 13). The returned result volume is V1. The bounding volume is initialized and V b =V1. Boundary edge BOUNDARY(L C ) and internal edge INTERNAL(L C ) to the candidate set L C ={S} is reinitialized.
[0087] As shown in block 1560, a source shell S and a candidate set L C , boundary edge BOUNDARY(L C ) and internal edge INTERNAL(L C ), the bounding volume V b , and direction D=-1, the bounding volume expansion module (Fig. 14) is called. The returned result volume is V r V r and V b If different, V b =V r Update to V r and V b If and are the same, then V r is one of the smallest volumes of S. The volume setting module (Fig. 11) is called to set all the shells SHELLS(V r ) and update the minimum volume for S. If S already has two minimum volumes (block 1565), the method proceeds to block 1570. Otherwise, update the boundary edge BOUNDARY(L C ) and internal edge INTERNAL(L C ) to find the bounding volume V b = V1, and candidate set L C ={S} is reinitialized.
[0088] As shown in block 1540, a source shell S and a candidate set LC , boundary edge BOUNDARY(L C ) and internal edge INTERNAL(L C ), the bounding volume V b , and the dilation module by bounding volume (Fig. 14) is called with direction D=+1. The returned result volume is V r V r and V b If and are different but still on the same side of S, the bounding volume is updated to V b =V r V r and V b If and are the same, then V r is the maximum volume of S, and there is exactly one minimum volume. V r and V b If and are on different sides of S, the bounding volume is V b =V r is set to
[0089] Even with the volume search algorithm described above, the overall algorithm for automatically generating volumes in the trimmed surface function is still divided into four functional steps, as shown in Figure 12. In the fourth step, a fast minimum volume search algorithm is used instead of the minimum volume detection algorithm. The former converges quickly with polynomial time complexity, while the latter slowly tries all available cases with exponential complexity.
[0090] An example shown in Figure 16A is a coffee cup model with one closed shell as the cup base (Figure 16B) and one inner surface (Figure 16C) that carves the inside of the cup. The Trim Surface function generates the split surfaces in Figures 17A-17B. After shell creation and shell pruning, the top shell is removed (Figure 17C). The volume search algorithm leaves two volumes. Once the user removes the inner volume, the outer volume is the coffee cup.
[0091] The second example (Figure 18A) has four surfaces surrounding a special part. They have intersecting curves. After splitting, many faces overlap on the screen, which can confuse the user in determining which faces to keep (Figure 18B). After applying the volume generation method, the four volumes are clearly aligned on the screen (Figure 18C). The user can then decide which volumes to remove and which to keep.
[0092] The third example (Figure 19) shows a trimming process using three cylindrical shells, arranged along the x, y, and z directions. In this case, eight smaller volumes are automatically generated from the 14 dividing shells.
[0093] The user is free to select any combination of all the small volumes. For example, the automatically generated volumes may be presented to the user by showing the identified volumes in a user display of the modeled components and / or the identified volumes may be displayed in a component list, e.g., in a sidebar of a graphical window displaying a 2D or 3D rendering of the modeled object. User selection of an automatically generated volume may be, for example, by the user clicking on a highlighted volume displayed in the graphical interface or by the user clicking on a corresponding volume listed in the component list, e.g., presented in the same color as the corresponding highlighted volume.
[0094] The system for performing the functions of the modules and sub-modules described in detail above may be a computer, an example of which is shown in the schematic diagram of FIG. 20. The system 2000 includes a processor 2002, a storage device 2004, a memory 2006 containing software 2008 defining the above-described functionality, input and output (I / O) devices 2010 (or peripherals), and a local bus or interface 2012 that enables communication within the system 2000. The local interface 2012 may be, for example, but not limited to, one or more buses or other wired or wireless connections as known in the art. The local interface 2012 may have additional components, such as controllers, buffers (caches), drivers, repeaters, receivers, etc., omitted for simplicity, to enable communication. Additionally, the local interface 2012 may include address, control, and / or data connections to enable appropriate communication between the aforementioned components.
[0095] The processor 2002 is a hardware device for executing software stored in, among other things, memory 2006. The processor 2002 may be any custom or commercially available single-core or multi-core processor, a central processing unit (CPU), a coprocessor among several processors associated with the system 2000, a semiconductor-based microprocessor (in the form of a microchip or chipset), a microprocessor, or any general device for executing software instructions. Although Figure 20 depicts the processor as a single unit, the processor may alternatively include two or more processing units distributed across two or more locations, for example, communicating via a communications network in addition to or instead of the local interface 2012.
[0096] The memory 2006 may include any one or any combination of volatile memory elements (e.g., random access memory (e.g., RAM, such as DRAM, SRAM, SDRAM, etc.)), volatile memory elements (e.g., hard drives, solid-state drives (SSD), flash drives, optical drives, tape), and non-volatile memory elements (e.g., ROM, CD-ROM, etc.). Furthermore, the memory 2006 may incorporate electronic, magnetic, optical, holographic, and / or other types of storage media. It should be noted that the memory 2006 may have a distributed architecture in which various components are located remotely from one another but may be accessed by the processor 2002.
[0097] Software 2008 defines the functions performed by system 2000 in accordance with the present invention. Software 2008 in memory 2006 may include one or more separate programs, each containing an ordered list of executable instructions for performing the logical functions of system 2000, as described below. Memory 2006 may also include an operating system (O / S) 2020. The operating system essentially controls the execution of programs in system 2000 and provides scheduling, input / output control, file and data management, memory management, and communication control, and related services.
[0098] The I / O devices 2010 may include input devices such as, but not limited to, a keyboard, mouse / trackpad, haptic sensor, touchscreen, scanner, microphone, barcode reader, QR code reader, etc. Additionally, the I / O devices 2010 may also include output devices such as, but not limited to, a printer, a display (2D, 3D, virtual reality headset), a transducer, etc. Finally, the I / O devices 2010 may also include devices that communicate bidirectionally via both input and output or via a unified interface such as a full-duplex serial bus (e.g., Universal Serial Bus (USB)), for example, an interface for access to another device, system, or network, a wireless transceiver, a copper, fiber optic, or wireless telephone interface, a bridge, a router, or other device. The output may include an interface for controlling manufacturing equipment such as, for example, a 3D printer, a computer numerically controlled (CNC) machine, and / or a milling machine.
[0099] As described above, during operation of the system 2000, the processor 2002 is configured to execute software 2008 stored in the memory 2006, to send data to and receive data from the memory 2006, and to generally control the operation of the system 2000 in accordance with the software 2008.
[0100] It will be apparent to those skilled in the art that various modifications and variations can be made to the structure of the present invention without departing from the scope or spirit of the invention. In view of the foregoing, it is intended that the present invention cover modifications and variations of this invention provided they fall within the scope of the following claims and their equivalents.
Claims
1. 1. A computer-based method for automated volume generation during trimming of a modeled object containing multiple intersecting surfaces in a computer-aided drafting (CAD) environment, comprising: receiving (1210) geometric data for each of the plurality of intersecting planes; calculating (1220) an intersection curve for the intersection of each of the plurality of intersecting surfaces; dividing the plurality of intersecting surfaces along the intersection curves to generate a plurality of divided surfaces; creating (400) a plurality of extended shells by merging manifold edges of the plurality of divided faces; removing (500) shells containing non-boundary edges from the plurality of expanded shells to generate a plurality of pruned and expanded shells; Identifying (900) a plurality of minimum volumes formed by the plurality of pruned and expanded shells; presenting said plurality of minimum volumes on a graphical user display; The method comprises:
2. 10. The method of claim 1 further comprising: receiving a user-selected minimum volume from the plurality of minimum volumes.
3. 10. The method of claim 1, Creating the plurality of expanded shells further comprises: creating a first plurality of shells from a plurality of divided faces connected by respective faces; identifying a shell in the first plurality of shells that has a manifold boundary edge; expanding the first plurality of shells by combining the shells having manifold boundary edges to form a plurality of expanded shells; The method comprises:
4. 10. The method of claim 1, Identifying a plurality of minimum volumes formed by the plurality of pruned and expanded shells may further include: identifying (930) a first minimum volume and a second minimum volume corresponding to a first side and a second side of each of the plurality of pruned and expanded shells; Identifying (940) the smaller of the first minimum volume and the second minimum volume; The method comprises:
5. 5. The method of claim 4, Identifying a plurality of minimum volumes formed by the plurality of pruned and expanded shells may further include: receiving a set of source shells from the plurality of pruned and expanded shells; selecting (920) a source shell for expansion from said set of source shells; Inserting (920) the selected source shell into the set of candidate shells; The method comprises:
6. 5. The method of claim 4, Identifying a plurality of minimum volumes formed by the plurality of pruned and expanded shells may further include: comparing all combinations of the pruned and expanded shell volumes.
7. 6. The method of claim 5, Identifying a plurality of minimum volumes formed by the plurality of pruned and expanded shells may further include: identifying a boundary shell used as the boundary of the enclosed bounding volume; determining that the boundary shell lies outside the bounding volume; removing the boundary shell from the set of candidate shells; The method comprises: