U.S. patent application number 14/514675 was filed with the patent office on 2016-04-21 for conversion of stereolithographic model into logical subcomponents.
This patent application is currently assigned to ADOBE SYSTEMS INCORPORATED. The applicant listed for this patent is ADOBE SYSTEMS INCORPORATED. Invention is credited to Harsh Vardhan Chopra, Naveen Prakash Goel, Amit Mittal.
Application Number | 20160107388 14/514675 |
Document ID | / |
Family ID | 55748344 |
Filed Date | 2016-04-21 |
United States Patent
Application |
20160107388 |
Kind Code |
A1 |
Chopra; Harsh Vardhan ; et
al. |
April 21, 2016 |
CONVERSION OF STEREOLITHOGRAPHIC MODEL INTO LOGICAL
SUBCOMPONENTS
Abstract
Techniques are disclosed for converting a stereolithographic
model into an STL data file that defines logically related
components and subcomponents of an object. A user can categorize
elements of an object to form logically related components and
subcomponents of the object. Each element is represented by a
triangle. All triangles representing each of these components and
subcomponents are then reordered and listed sequentially within the
STL. Each list is delimited at the beginning and end by two hidden
triangles, one or both of which store unique identification values
that are associated with the respective individual components.
Additionally, a reference table can be added to the STL. The
reference table includes instructions, operations or other
information that is specifically associated with each component and
subcomponent using the unique identification values. These
instructions and operations enable users to have better control
over 3D print quality than is possible using existing
techniques.
Inventors: |
Chopra; Harsh Vardhan; (New
Delhi, IN) ; Mittal; Amit; (Noida, IN) ; Goel;
Naveen Prakash; (Noida, IN) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
ADOBE SYSTEMS INCORPORATED |
San Jose |
CA |
US |
|
|
Assignee: |
ADOBE SYSTEMS INCORPORATED
San Jose
CA
|
Family ID: |
55748344 |
Appl. No.: |
14/514675 |
Filed: |
October 15, 2014 |
Current U.S.
Class: |
700/98 |
Current CPC
Class: |
G05B 2219/49008
20130101; B29C 64/393 20170801; B29C 64/386 20170801; G06T 17/00
20130101; G06T 17/10 20130101; G05B 2219/35117 20130101; G05B 15/02
20130101; B33Y 50/02 20141201; G05B 19/4099 20130101 |
International
Class: |
B29C 67/00 20060101
B29C067/00; G05B 15/02 20060101 G05B015/02 |
Claims
1. A computer-implemented data processing method comprising:
receiving, by a processor, facet data representing a
stereolithographic model, the facet data including a plurality of
visible facets each representing a visible surface of the
stereolithographic model; associating at least one of the visible
facets with a component of the stereolithographic model;
reordering, by the processor, a portion of the facet data such that
each of the visible facets associated with the component is listed
sequentially; assigning a unique identification value to the
component; delimiting, by the processor, the reordered portion of
the facet data with at least one of a beginning facet and an ending
facet containing the unique identification value, the beginning
facet and the ending facet each representing an invisible surface
of the stereolithographic model; and generating, by the processor,
reference table data representing a mapping between the unique
identification value and custom data associated with the
component.
2. The method of claim 1, further comprising performing an
operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, wherein the custom data represents the
operation.
3. The method of claim 1, further comprising performing an
operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, according to a priority or weight associated with
the component, and wherein the custom data represents the operation
and the priority or weight.
4. The method of claim 1, further comprising performing at least
one of a re-meshing operation, a search/extract/delete operation,
and an unwrapping operation on each of the visible facets
associated with the component, until a hidden triangle is reached,
which marks the end of the component.
5. The method of claim 1, further comprising appending the
reordered portion of the facet data to the reference table
data.
6. The method of claim 1, further comprising storing the reordered
portion of the facet data in a Standard Tessellation Language (STL)
file format.
7. The method of claim 1, further comprising viewing or printing
the stereolithographic model using the reordered portion of the
facet data.
8. The method of claim 1, wherein each of the visible facets
includes data representing a unit normal vector and three vertices
in Cartesian space.
9. A system comprising: a storage; and a processor operatively
coupled to the storage, the processor configured to execute
instructions stored in the storage that when executed cause the
processor to carry out a process comprising: receiving facet data
representing a stereolithographic model, the facet data including a
plurality of visible facets each representing a visible surface of
the stereolithographic model; associating at least one of the
visible facets with a component of the stereolithographic model;
reordering a portion of the facet data such that each of the
visible facets associated with the component is listed
sequentially; assigning a unique identification value to the
component; delimiting the reordered portion of the facet data with
at least one of a beginning facet and an ending facet containing
the unique identification value, the beginning facet and the ending
facet each representing an invisible surface of the
stereolithographic model; and generating reference table data
representing a mapping between the unique identification value and
custom data associated with the component, wherein the custom data
includes a method, operation or transformation that can be applied
to a component of the stereolithographic model.
10. The system of claim 9, wherein the process includes performing
an operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, and wherein the custom data represents the
operation.
11. The system of claim 9, wherein the process includes performing
an operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, according to a priority or weight associated with
the component, and wherein the custom data represents the operation
and the priority or weight.
12. The system of claim 9, wherein the process includes performing
at least one of a re-meshing operation, a search/extract/delete
operation, and an unwrapping operation on each of the visible
facets associated with the component until a hidden triangle is
reached, which marks the end of the component.
13. The system of claim 9, wherein the process includes appending
the reordered portion of the facet data to the reference table
data.
14. The system of claim 9, wherein the process includes storing the
reordered portion of the facet data in a Standard Tessellation
Language (STL) file format.
15. The system of claim 9, wherein the process includes viewing or
printing the stereolithographic model using the reordered portion
of the facet data.
16. The system of claim 9, wherein each of the visible facets
includes data representing a unit normal vector and three vertices
in Cartesian space.
17. A non-transient computer program product having instructions
encoded thereon that when executed by one or more processors cause
a process to be carried out, the process comprising: receiving
facet data representing a stereolithographic model, the facet data
including a plurality of visible facets each representing a visible
surface of the stereolithographic model; associating at least one
of the visible facets with a component of the stereolithographic
model; reordering a portion of the facet data such that each of the
visible facets associated with the component is listed
sequentially; assigning a unique identification value to the
component; and delimiting the reordered portion of the facet data
with at least one of a beginning facet and an ending facet
containing the unique identification value, the beginning facet and
the ending facet each representing an invisible surface of the
stereolithographic model.
18. The computer program product of claim 17, wherein the process
includes performing an operation on each of the visible facets
associated with the component until a hidden triangle is reached,
which marks the end of the component.
19. The computer program product of claim 17, wherein the process
includes performing an operation on each of the visible facets
associated with the component until a hidden triangle is reached,
which marks the end of the component, according to a priority or
weight associated with the component.
20. The computer program product of claim 17, wherein the process
includes appending the reordered portion of the facet data to the
reference table data.
Description
FIELD OF THE DISCLOSURE
[0001] This disclosure relates to the field of data processing, and
more particularly, to techniques for converting a
stereolithographic model into a collection of logical components
and subcomponents.
BACKGROUND
[0002] Stereolithography is a process for fabricating
three-dimensional objects by successively depositing layers of
material (e.g., plastic), one on top of the other. STL, which is
also referred to as Standard Tessellation Language, is a file
format for encoding representations of three-dimensional (3D)
structures. STL is often used for stereolithography applications
such as computer-aided design and 3D printing. An STL file
describes a raw, unstructured triangulated surface by the unit
normal vector and vertices of each triangle using a 3D Cartesian
coordinate system. The STL format is recognized by many commercial
and Open Source 3D applications.
BRIEF DESCRIPTION OF THE DRAWINGS
[0003] The accompanying drawings are not intended to be drawn to
scale. In the drawings, each identical or nearly identical
component that is illustrated in various figures is represented by
a like numeral.
[0004] FIG. 1 illustrates an example system for converting a
stereolithographic model into a collection of logical components
and subcomponents, in accordance with an embodiment of the present
invention.
[0005] FIG. 2 shows a two-dimensional rendition of an example 3D
object, in accordance with an embodiment of the present
invention.
[0006] FIG. 3 shows a portion of an example reordered STL file, in
accordance with an embodiment of the present invention.
[0007] FIG. 4 shows another portion of the example reordered STL
file of FIG. 3, in accordance with an embodiment of the present
invention.
[0008] FIGS. 5A and 5B show a flow diagram of an example
methodology for converting a stereolithographic model into a
collection of logical components and subcomponents, in accordance
with an embodiment of the present invention.
[0009] FIG. 6 is a block diagram representing an example computing
system that may be used in accordance with an embodiment of the
present invention.
DETAILED DESCRIPTION
[0010] An STL file includes data that represent a model of a
three-dimensional object. The surface of an STL-modeled object is
formed by a list of facets, or triangles. As used in this
disclosure, a "facet" or "triangle" is a set of data defining three
points in Cartesian space (the vertices), a unit normal vector,
and, in some cases, additional information, such as color. Existing
applications parse the list of triangles and render all of them in
the order they appear in the STL. One limitation of the existing
STL file structure is that the triangles in the file are logically
unrelated; that is, each surface defined by a triangle exists
independently of all other surfaces. These triangles have no
logical associations and do not contain any structural information
that can be used, for example, to apply operations to specific
components or subcomponents of the object, such as rigging,
re-meshing (e.g., reducing the number of triangles by combining
triangles together), incremental rendering of the model, or
unwrapping complex 3D models (e.g., a model of a human figure).
While the existing STL file structure is sufficient for rendering
or printing the entire object, it not possible for existing STL
viewing or rendering applications to perform operations on logical
components (e.g., rendering only the surfaces of a subcomponent of
the object) without manually placing those components into separate
STL files and processing each file independently of the other.
[0011] To this end, and in accordance with an embodiment of the
present invention, techniques are disclosed for converting a
stereolithographic model into an STL data file that defines
logically related components and subcomponents of an object. Each
element of the model is represented by a triangle. A user can
categorize these elements to form logically related components and
subcomponents of the modeled object. All triangles representing
each of these components and subcomponents are then reordered and
listed sequentially within the STL. Each list is delimited at the
beginning and ending by two additional triangles having null
vertices, which are referred to as hidden triangles because they do
not render or print into a visible element. One or both of the
delimiting triangles store unique identification values that are
associated with the respective individual components. Additionally,
a reference table is added to the STL. The reference table includes
custom data, such as instructions, operations or other custom
information, that is specifically associated with each component
and subcomponent. The reference table includes a mapping between
the unique identification values and the custom data associated
with the respective components and subcomponents. These
instructions, operations and custom information enable users to
have better control over 3D print quality than is possible using
existing techniques, in part because the information is specific to
each component. Examples of such 3D print quality control include:
user-specified, component-based wall thickness, head cooling and
layer thickness; automated part-based hollowing; and automated
part-based decimation or subdivision. STL files containing
structural information, in accordance with various embodiments of
the present invention, are compatible with existing STL
applications and specifications, which ensures the validity of the
STL file and does not change the appearance of the STL model, or
any subcomponent, when the model is rendered or printed using
existing techniques. According to various embodiments, the grouping
and embedding of group-specific logic/instructions is achieved via
hidden triangles, which will be safely ignored by existing STL
parsers/viewers. The information in the hidden triangles is used by
a custom module residing on host or inside a 3D printer. Therefore,
existing applications can continue to work with an enhanced STL, in
accordance with various embodiments, in the same manner as they
currently do. Numerous configurations and variations will be
apparent in light of this disclosure.
[0012] Example System
[0013] FIG. 1 shows an example system 100 for converting a
stereolithographic model into a collection of logical components
and subcomponents, in accordance with an embodiment of the present
invention. The system 100 can be integrated into a computing device
110, which may be, for example, a desktop or laptop personal
computer (PC), a workstation, a tablet, a smartphone, a game
console, a set-top box, or other such computing devices. The
computing device 110 includes an input device 112, a processor 114,
and a display 116. The processor 114 is configured to execute a 3D
model processing module 120. The 3D model processing module 120
may, for example, be provided as part of a graphical editing
application, a standalone application, an application plug-in, or a
service. The system 100 further includes a storage 130, such as a
database, which is configured to store 3D model data 132 in an STL
file 134. The storage 130 can be integrated into the computing
device 110 (e.g., in random access memory) or operatively connected
to the computing device 110 via a communication channel, such as a
data bus or a network interface.
[0014] Example Use Case
[0015] FIG. 2 shows a two-dimensional rendition of an example 3D
object 200, modeled in accordance with an embodiment. The object
200 is modeled by a set of triangles (e.g., 3D model data 132 of
FIG. 1), one of which is indicated at 202. In this example, the
object is a human form, although it will be understood that the
triangles can form an object of any shape and appearance. As can be
seen, some of the triangles 202 form components of the object 200,
such as the head 210, arm 212, leg 214 and foot 216 of the object
200. Other triangles 202 can form any number of different
components of the object 200, as desired by a user, and the user
can designate which triangles belong to which components. These
triangles can be represented in an STL file as sets of facet data
that define the vertices of each triangle. In accordance with an
embodiment, the author of the model can mark parts of the model as
logical components. For instance, the author can mark the triangles
forming the head 210, arm 212, leg 214 and foot 216, respectively,
as logical components. Each triangle is logically associated with
one or more other triangles by reordering the triangles in the STL
file such that logically related triangles are sequentially listed
and delimited at the beginning and end of the listing by a pair of
hidden triangles, or markers. The reordering occurs because the
triangles are not necessarily in any particular order prior to the
user marking the triangles. For instance, some or all of the
triangles that form the head 210 can be grouped together in the STL
file. Similarly, some or all of the triangles that form the arm
212, leg 214 and foot 216 can be grouped in this manner.
[0016] FIG. 3 shows a portion 300 of an example reordered STL file
(e.g., STL file 134 of FIG. 1), in accordance with an embodiment of
the present invention. This portion 300 of the STL file includes,
in ASCII format, a list of facets 310, 320, 330 for a single
component or subcomponent of an object, which is a logical grouping
of triangles in the STL file. It will be understood that the list
of facets 310, 320, 330, and any other data in the STL file, can be
stored in formats other than ASCII, such as binary. The STL file
can contain any number of such components or subcomponents 1 . . .
n, each having a unique identifier id_1 . . . id_n. Referring to
the example object 200 of FIG. 2, the components may correspond to
the head 210, arm 212, leg 214 and foot 216, respectively, of the
object 200. Facet 310 is an invisible triangle that delineates the
beginning of each logical grouping of triangles, and facet 330 is
another invisible triangle that delineates the ending of each
logical grouping. In between the beginning facet 310 and the ending
facet 330 are one or more facets 320 that represent the visible
triangles, which are surfaces of the object, associated with a
given component or subcomponent of the object. Each facet 310, 320,
330 includes a unit normal vector, which is a line perpendicular to
the triangle having a length of one unit, and three vertices that
define the corners of the triangle. In some embodiments, the normal
and each vertex are specified by three coordinates each, for a
total of twelve (12) values for each facet 310, 320, 330. These
values can be stored in a binary format using integer and floating
point numerical representations. In a binary STL file format, a two
byte count color field ("id" field) is stored along with each
triangle. This color field can be used to store metadata related to
the corresponding component or subcomponent of the object (e.g., a
unique identification number). As can be seen in FIG. 3, the
delineating facets 310 and 330 represent invisible triangles
because the normal and vertices have zero or null values. As such,
these facets 310, 330 will not render or print when processed by an
STL-compatible application.
[0017] FIG. 4 shows another portion 400 of the example reordered
STL file of FIG. 3, in accordance with an embodiment of the present
invention. This portion 400 of the STL file includes additional
facets 410 representing portions of a reference table. The
reference table provides a mapping between the unique identifiers
id_1 . . . id_n of the components and custom data (e.g.,
instructions or operations) associated with those components. The
reference table can be stored at the beginning of the STL file as a
continuous sequence of facets 410, which are invisible triangles.
Each sequence of facets 410 correspond to one of the components in
the model. The sequence of facets 410 begins with an invisible
triangle 412 having the unique identifier of the corresponding
component and a length ("len") value. The length value len
represents the number of invisible triangles 414 in the sequence of
facets 410 that are used to store custom information for the
corresponding component in the color value field of the invisible
triangles 414. The end of the reference table is delimited with
another facet 420, which is also an invisible triangle. The ending
facet 420 includes zero in the color value field to identify the
facet as an ending delimiter for the reference table. Facets that
follow the ending facet 420 of the reference table may, for
example, include the facets 310, 320 and 330 such as described with
respect to FIG. 3. With this structure, if there are n components
of the object, each having m bytes of information, then there will
be n*(m/2+1)+1 invisible triangles for the reference table and 2*n
invisible triangles associated with each component. As such, there
are a total of n*(m/2+1)+1+2n invisible triangles in the STL file
in addition to the visible triangles. The triangle count stored in
the header of the STL file is therefore incremented by this total
amount to reflect the total number of visible and invisible
triangles in the STL file.
[0018] Custom data stored in the reference table for any logical
component includes any structural information that can be used, for
example, by an STL previewer or 3D printer to process and print the
STL file intelligently. The custom data (e.g., operations or
instructions) stored in the invisible triangles 414 can enable many
new workflows that are either impossible or very difficult to
achieve using existing techniques. Such workflows, for example,
enable different operations, processing, and handling for
individual components or subcomponents of an object, such as
assigning different importance or weight to different components
and subcomponents, and using such importance or weight to apply
priority-aware, component and subcomponent specific re-meshing
techniques for optimum 3D printing; applying different
search/extract/delete operations or un-wrapping/material support
for each individual component or subcomponent; applying compression
techniques that exploit common characteristics among different
components, subcomponents or regions of the object; displaying a
component or subcomponent as soon as it is rendered rather than
waiting until the entire object is rendered to display each
component or subcomponent; and indexing the STL based on the
components or subcomponents, which enables search and extract,
delete, and other operations to be performed on a component or
subcomponent level. For example, if the custom data for a hand
component includes "delicate," then a custom handler in the 3D
printer can be created to process and print the hand with a greater
wall thickness. Similarly, other structural information can be
stored in the STL file to achieve better print quality. Another
example is part-specific 3D depth resolution (or 3D mesh density).
The 3D depth resolution can be varied by applying different
magnitudes of decimation or subdividing. Decimation includes a
process to a process to decrease mesh density, decrease 3D depth
resolution, or combine existing constituent triangles to decrease
overall number of constituent triangles. Subdividing includes a
process to increase mesh density, increase 3D depth resolution, or
further divide existing constituent triangles to add number of
constituent triangles. Greater depth resolution can provide better
detail when rendering or printing the 3D object. However, it is not
always desirable to apply the same depth resolution to all
components of the object. To this end, in accordance with an
embodiment, custom data for each logical component of the 3D object
can include different depth resolution values based on their
priority/importance/context in relation to other logical
components. In this manner, each logical component can have a
different depth resolution.
[0019] According to various embodiments, a reordered STL file, such
as described with respect to FIGS. 3 and 4, enables several
beneficial workflows. One example workflow is a fast 3D preview
workflow. Existing STL-consuming applications read the entire STL
file and convert the file into a memory representation, which may
be proprietary. Because of this, previewing large STL files can
consume a lot of time. By contrast, a reordered STL file in
accordance with various embodiments enables these applications to
handle individual components and subcomponents, which will lead to
a more responsive user interface. Furthermore, many vendors of 3D
rendering applications provide online viewer for their users to
view and work with 3D models. Currently almost all of these 3D
models are first sent to a browser from a server and then rendered
in whole by the browser. By contrast, a reordered STL file in
accordance with various embodiments enables the server to instead
send individual components and subcomponents to the browser
separately, which will enable a faster, incremental preview of the
models inside browser.
[0020] In accordance with an embodiment, another example workflow
is provided for unwrapping and texture support. Using existing
techniques, it is very difficult to unwrap a complex 3D model
(e.g., flatten a three-dimensional surface into a two-dimensional
surface) and apply texture on it. By contrast, a reordered STL file
in accordance with various embodiments enables individual
components and subcomponents to be unwrapped separately, making it
easier to apply texture on them. Furthermore, higher resolution
texture data can be generated for components and subcomponents
having a higher priority (importance).
[0021] In accordance with an embodiment, another example workflow
is provided for priority-aware re-meshing operations for 3D
printing. Using a reordered STL file in accordance with various
embodiments enables improved or optimized 3D printing by allowing
different re-meshing techniques to be applied on different
components and subcomponents. For example, a user can prevent a
lower level of decimations on specific components (e.g., the face
210 of FIG. 2), and similarly the user can indicate a higher level
of decimations on other components (e.g., the leg 214 of FIG.
2).
[0022] In accordance with an embodiment, another example workflow
is provided for search, extract, delete, move or rotate operations
for individual components of a 3D object. Using a reordered STL
file in accordance with various embodiments enables searching of
components and subcomponents based on the structural information
stored in the STL, which is not possible using existing techniques.
Additionally, a user can extract or delete individual components
and subcomponents more easily.
[0023] In accordance with an embodiment, another example workflow
is provided for part-specific handling during 3D printing. Such
part-specific handling includes component-based wall thickness, in
which a user can assign varying levels of strength to individual
components in the STL file (e.g., delicate, normal and sturdy). For
example, a delicate level may be assigned to shoes or fingers,
which can then be printed with more wall thickness as compared to
other parts. This can be done by sending instruction commands to a
3D printer engine to adjust binder and material extrusion. Other
part-specific handling includes component-based head cooling. In 3D
printing, printer head cooling also governs the strength of the 3D
printed model. As such, in accordance with an embodiment, different
cooling times can be specified for different components of the
model based on the strength assigned to those components. Yet other
part-specific handling includes component-based layer thickness.
Layer thickness governs the resolution (density of 3D mesh) of the
final 3D printout. According to an embodiment, a user can mark the
component level layer resolution for better and more optimized
printouts. For example, a human face can be marked as a high
resolution component, which will then be printed with lower layer
thickness to increase the details in the face region of the final
3D printed figurine.
[0024] In accordance with an embodiment, another example workflow
is provided for smart STL viewing. Existing STL viewers need to
parse entire STL file and render it completely, which can take
considerable time to render a large 3D model. By contrast, a
reordered STL file in accordance with various embodiments enables
the STL viewer to parse and render individual components and
subcomponents separately, which will result in a better and more
responsive application. This also allows an STL editor to operate
(cut, move, duplicate, etc.) on logical components more easily.
[0025] In accordance with an embodiment, another example workflow
is provided for automated part-based hollowing. In existing
applications, a user can only specify a single level of hollowing
for the entire 3D model. To do part-based hollowing, the user has
to separate the individual parts into separate 3D data files and
apply different hollowing parameters on individual parts. This
existing process can be very difficult and tedious to accomplish.
By contrast, a reordered STL file in accordance with various
embodiments enables a user to mark individual components for
automated processing of part-based hollowing (e.g., apply hollow
level 1 on all faces, hollow level_2 on all hands, hollow level_3
on all legs, etc.).
[0026] In accordance with an embodiment, another example workflow
is provided for automated part-based decimation and subdivision.
Decimate and subdivide operations are used in 3D modeling to
decrease or increase the density, and hence the quality, of the 3D
model meshes. With existing applications, a user can select a
certain region and decimate or subdivide the selected region.
Subdivide will increase the vertex count (and, hence, will increase
the quality) and decimation will decrease the vertex count (and,
hence, will make the model lighter but slightly inferior in
quality). Using existing techniques, decimate and subdivide
operations are very difficult and tedious to perform and cannot be
automated. By contrast, a reordered STL file in accordance with
various embodiments enables a user to assign a priority to each
component in the STL file, and then each component can be (e.g.,
automatically) decimated or subdivided based on the assigned
priority. For example, low level of decimation/higher level of
subdivision can be applied on a face if the face component is
assigned a high priority. As such, an automated process can be run
on a large set of 3D models for performing part- (priority-) based
decimation and subdivide operations (e.g., apply decimation level_1
on all faces, decimation level_2 on all hands, decimation level_3
on all legs, etc.)
[0027] Example Methodologies
[0028] FIGS. 5A and 5B show a flow diagram of an example
methodology 500 for converting a stereolithographic model into a
collection of logical components and subcomponents, in accordance
with an embodiment. The example methodology 500 may, for example,
be implemented by the 3D model processing module 120 of FIG. 1.
Referring first to FIG. 5A, the method 500 begins by receiving 510
facet data representing a stereolithographic model. The facet data
includes a plurality of visible facets each representing a visible
surface of the stereolithographic model. The method 500 continues
by associating 512, based on a user input, at least one of the
visible facets with a component of the stereolithographic model.
The user input may be obtained, for example, via a STL viewing or
authoring application in which the user can select and designate
visible facets as part of a component or subcomponent. Each of the
visible facets may, for example, include data representing a unit
normal vector and three vertices in Cartesian space. The method 500
continues by reordering 514 a portion of the facet data such that
each of the visible facets associated with the component is listed
sequentially, assigning 516 a unique identification value to the
component, and delimiting 518 the reordered portion of the facet
data with a beginning facet, an ending facet, or both, either of
which can contain the unique identification value. The beginning
facet and the ending facet each represent an invisible surface of
the stereolithographic model, such that these facets are not
rendered or printed. The method 500 continues by generating 520
reference table data representing a mapping between the unique
identification value and custom data associated with the
component.
[0029] Referring next to FIG. 5B, in some cases, the method 500
continues by performing 522 an operation on each of the visible
facets associated with the component until a hidden triangle is
reached, which marks the end of the component, where the custom
data represents the operation. In some cases, the method 500
continues by performing 524 an operation on each of the visible
facets associated with the component until a hidden triangle is
reached, which marks the end of the component, according to a
priority or weight associated with the component, where the custom
data represents the operation and the priority or weight. In some
cases, the method 500 continues by performing 526 a re-meshing
operation, a search/extract/delete operation, an unwrapping
operation, or any combination of these or other suitable operations
on each of the visible facets associated with the component, until
a hidden triangle is reached, which marks the end of the component.
In some cases, the method 500 continues by appending 528 the
reordered portion of the facet data to the reference table data. In
some cases, the method 500 continues by storing 530 the reordered
portion of the facet data in a Standard Tessellation Language (STL)
file format. In some cases, the method 500 continues by viewing or
printing 532 the stereolithographic model using the reordered
portion of the facet data.
[0030] Example Computing Device
[0031] FIG. 6 is a block diagram representing an example computing
device 1000 that may be used to perform any of the techniques as
variously described in this disclosure. For example, the input
device 112, the processor 114, the display 116, the storage 130, or
any combination of these may be implemented in the computing device
1000. The computing device 1000 may be any computer system, such as
a workstation, desktop computer, server, laptop, handheld computer,
tablet computer (e.g., the iPad.TM. tablet computer), mobile
computing or communication device (e.g., the iPhone.TM. mobile
communication device, the Android.TM. mobile communication device,
and the like), or other form of computing or telecommunications
device that is capable of communication and that has sufficient
processor power and memory capacity to perform the operations
described in this disclosure. A distributed computational system
may be provided comprising a plurality of such computing
devices.
[0032] The computing device 1000 includes one or more storage
devices 1010 and/or non-transitory computer-readable media 1020
having encoded thereon one or more computer-executable instructions
or software for implementing techniques as variously described in
this disclosure. The storage devices 1010 may include a computer
system memory or random access memory, such as a durable disk
storage (which may include any suitable optical or magnetic durable
storage device, e.g., RAM, ROM, Flash, USB drive, or other
semiconductor-based storage medium), a hard-drive, CD-ROM, or other
computer readable media, for storing data and computer-readable
instructions and/or software that implement various embodiments as
taught in this disclosure. The storage device 1010 may include
other types of memory as well, or combinations thereof. The storage
device 1010 may be provided on the computing device 1000 or
provided separately or remotely from the computing device 1000. The
non-transitory computer-readable media 1020 may include, but are
not limited to, one or more types of hardware memory,
non-transitory tangible media (for example, one or more magnetic
storage disks, one or more optical disks, one or more USB flash
drives), and the like. The non-transitory computer-readable media
1020 included in the computing device 1000 may store
computer-readable and computer-executable instructions or software
for implementing various embodiments. The computer-readable media
1020 may be provided on the computing device 1000 or provided
separately or remotely from the computing device 1000.
[0033] The computing device 1000 also includes at least one
processor 1030 for executing computer-readable and
computer-executable instructions or software stored in the storage
device 1010 and/or non-transitory computer-readable media 1020 and
other programs for controlling system hardware. Virtualization may
be employed in the computing device 1000 so that infrastructure and
resources in the computing device 1000 may be shared dynamically.
For example, a virtual machine may be provided to handle a process
running on multiple processors so that the process appears to be
using only one computing resource rather than multiple computing
resources. Multiple virtual machines may also be used with one
processor.
[0034] A user may interact with the computing device 1000 through
an output device 1040, such as a screen or monitor (e.g., the
display 116 of FIG. 1), which may display one or more user
interfaces provided in accordance with some embodiments. The output
device 1040 may also display other aspects, elements and/or
information or data associated with some embodiments. The computing
device 1000 may include other I/O devices 1050 for receiving input
from a user, for example, a keyboard, a joystick, a game
controller, a pointing device (e.g., a mouse, a user's finger
interfacing directly with a display device, etc.), or any suitable
user interface. The computing device 1000 may include other
suitable conventional I/O peripherals, such as a 3D printer. The
computing device 1000 can include and/or be operatively coupled to
various suitable devices for performing one or more of the
functions as variously described in this disclosure.
[0035] The computing device 1000 may run any operating system, such
as any of the versions of Microsoft.RTM. Windows.RTM. operating
systems, the different releases of the Unix and Linux operating
systems, any version of the MacOS.RTM. for Macintosh computers, any
embedded operating system, any real-time operating system, any open
source operating system, any proprietary operating system, any
operating systems for mobile computing devices, or any other
operating system capable of running on the computing device 1000
and performing the operations described in this disclosure. In an
embodiment, the operating system may be run on one or more cloud
machine instances.
[0036] In other embodiments, the functional components/modules may
be implemented with hardware, such as gate level logic (e.g., FPGA)
or a purpose-built semiconductor (e.g., ASIC). Still other
embodiments may be implemented with a microcontroller having a
number of input/output ports for receiving and outputting data, and
a number of embedded routines for carrying out the functionality
described in this disclosure. In a more general sense, any suitable
combination of hardware, software, and firmware can be used, as
will be apparent.
[0037] As will be appreciated in light of this disclosure, the
various modules and components of the system shown in FIG. 1, such
as the 3D model processing module 120, can be implemented in
software, such as a set of instructions (e.g., C, C++,
object-oriented C, JavaScript, Java, BASIC, etc.) encoded on any
computer readable medium or computer program product (e.g., hard
drive, server, disc, or other suitable non-transient memory or set
of memories), that when executed by one or more processors, cause
the various methodologies provided in this disclosure to be carried
out. It will be appreciated that, in some embodiments, various
functions performed by the user computing system, as described in
this disclosure, can be performed by similar processors and/or
databases in different configurations and arrangements, and that
the depicted embodiments are not intended to be limiting. Various
components of this example embodiment, including the computing
device 100, can be integrated into, for example, one or more
desktop or laptop computers, workstations, tablets, smartphones,
game consoles, set-top boxes, or other such computing devices.
Other componentry and modules typical of a computing system, such
as processors (e.g., central processing unit and co-processor,
graphics processor, etc.), input devices (e.g., keyboard, mouse,
touch pad, touch screen, etc.), and operating system, are not shown
but will be readily apparent.
[0038] Numerous embodiments will be apparent in light of the
present disclosure, and features described in this disclosure can
be combined in any number of configurations. One example embodiment
provides a system including a storage having at least one memory,
and one or more processors each operatively coupled to the storage.
The one or more processors are configured to carry out a process
including receiving facet data representing a stereolithographic
model, the facet data including a plurality of visible facets each
representing a visible surface of the stereolithographic model;
associating at least one of the visible facets with a component of
the stereolithographic model; reordering a portion of the facet
data such that each of the visible facets associated with the
component is listed sequentially; assigning a unique identification
value to the component; and delimiting the reordered portion of the
facet data with at least one of a beginning facet and an ending
facet containing the unique identification value, the beginning
facet and the ending facet each representing an invisible surface
of the stereolithographic model. In some cases, the process
includes generating reference table data representing a mapping
between the unique identification value and custom data associated
with the component. In some cases, the process includes performing
an operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, and wherein the custom data represents the
operation. In some cases, the process includes performing an
operation on each of the visible facets associated with the
component until a hidden triangle is reached, which marks the end
of the component, according to a priority or weight associated with
the component, and wherein the custom data represents the operation
and the priority or weight. In some cases, the process includes
performing at least one of a re-meshing operation, a
search/extract/delete operation, and an unwrapping operation on
each of the visible facets associated with the component until a
hidden triangle is reached, which marks the end of the component.
In some cases, the process includes appending the reordered portion
of the facet data to the reference table data. In some cases, the
process includes storing the reordered portion of the facet data in
a Standard Tessellation Language (STL) file format. In some cases,
the process includes viewing or printing the stereolithographic
model using the reordered portion of the facet data. In some cases,
each of the visible facets includes data representing a unit normal
vector and three vertices in Cartesian space. Another embodiment
provides a non-transient computer-readable medium or computer
program product having instructions encoded thereon that when
executed by one or more processors cause the processor to perform
one or more of the functions defined in the present disclosure,
such as the methodologies variously described in this paragraph. As
previously discussed, in some cases, some or all of the functions
variously described in this paragraph can be performed in any order
and at any time by one or more different processors.
[0039] The foregoing description and drawings of various
embodiments are presented by way of example only. These examples
are not intended to be exhaustive or to limit the invention to the
precise forms disclosed. Alterations, modifications, and variations
will be apparent in light of this disclosure and are intended to be
within the scope of the invention as set forth in the claims.
* * * * *