This commit is contained in:
Musicdad12 2023-09-29 11:04:30 -05:00
commit 62036c411a
1724 changed files with 225902 additions and 48182 deletions

View file

@ -1,166 +1,120 @@
--- #
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
#
Language: Cpp Language: Cpp
# BasedOnStyle: LLVM AccessModifierOffset: -4
AccessModifierOffset: -2
AlignAfterOpenBracket: Align AlignAfterOpenBracket: Align
AlignConsecutiveMacros: None AlignConsecutiveAssignments: true
AlignConsecutiveAssignments: None AlignConsecutiveDeclarations: true
AlignConsecutiveBitFields: None AlignEscapedNewlines: DontAlign
AlignConsecutiveDeclarations: None AlignOperands: true
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: true AllowShortBlocksOnASingleLine: true
AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All AllowShortFunctionsOnASingleLine: All
AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine AlwaysBreakTemplateDeclarations: false
AttributeMacros:
- __capability
BinPackArguments: true BinPackArguments: true
BinPackParameters: true BinPackParameters: false
BraceWrapping: BraceWrapping:
AfterCaseLabel: false AfterClass: true
AfterClass: false AfterControlStatement: false
AfterControlStatement: Never
AfterEnum: false AfterEnum: false
AfterFunction: false AfterFunction: true
AfterNamespace: false AfterNamespace: false
AfterObjCDeclaration: false AfterObjCDeclaration: false
AfterStruct: false AfterStruct: true
AfterUnion: false AfterUnion: false
AfterExternBlock: false AfterExternBlock: false
BeforeCatch: false BeforeCatch: false
BeforeElse: false BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false IndentBraces: false
SplitEmptyFunction: true SplitEmptyFunction: false
SplitEmptyRecord: true SplitEmptyRecord: false
SplitEmptyNamespace: true SplitEmptyNamespace: false
BreakBeforeBinaryOperators: None BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true BreakBeforeBraces: Custom
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true BreakStringLiterals: true
ColumnLimit: 120 ColumnLimit: 140
CommentPragmas: '^ IWYU pragma:' CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false CompactNamespaces: true
ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4 ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4 ContinuationIndentWidth: 4
Cpp11BracedListStyle: true Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false DerivePointerAlignment: false
DisableFormat: false DisableFormat: false
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true FixNamespaceComments: true
ForEachMacros: ForEachMacros:
- forever
- foreach - foreach
- Q_FOREACH - Q_FOREACH
- BOOST_FOREACH - BOOST_FOREACH
StatementAttributeLikeMacros:
- Q_EMIT
IncludeBlocks: Preserve IncludeBlocks: Preserve
IncludeCategories: IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Regex: '^<Q.*'
Priority: 2 Priority: 200
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)' - Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3 Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*' - Regex: '.*'
Priority: 1 Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$' IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: false IndentCaseLabels: false
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None IndentPPDirectives: None
IndentExternBlock: AfterExternBlock IndentWidth: 4
IndentRequires: false
IndentWidth: 2
IndentWrappedFunctionNames: false IndentWrappedFunctionNames: false
InsertTrailingCommas: None
JavaScriptQuotes: Leave JavaScriptQuotes: Leave
JavaScriptWrapImports: true JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true #KeepLineBreaksForNonEmptyLines: false
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: '' MacroBlockBegin: ''
MacroBlockEnd: '' MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1 MaxEmptyLinesToKeep: 1
NamespaceIndentation: None NamespaceIndentation: None
ObjCBinPackProtocolList: Auto ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2 ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2 PenaltyBreakAssignment: 150
PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakBeforeFirstCallParameter: 300
PenaltyBreakComment: 300 PenaltyBreakComment: 500
PenaltyBreakFirstLessLess: 120 PenaltyBreakFirstLessLess: 400
PenaltyBreakString: 1000 PenaltyBreakString: 600
PenaltyBreakTemplateDeclaration: 10 PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000 PenaltyExcessCharacter: 50
PenaltyReturnTypeOnItsOwnLine: 60 PenaltyReturnTypeOnItsOwnLine: 300
PenaltyIndentedWhitespace: 0
PointerAlignment: Right PointerAlignment: Right
ReflowComments: true ReflowComments: true
SortIncludes: true SortIncludes: false
SortJavaStaticImport: Before SortUsingDeclarations: false
SortUsingDeclarations: true SpaceAfterCStyleCast: true
SpaceAfterCStyleCast: false SpaceAfterTemplateKeyword: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements SpaceBeforeParens: ControlStatements
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1 SpacesBeforeTrailingComments: 1
SpacesInAngles: false SpacesInAngles: false
SpacesInConditionalStatement: false SpacesInContainerLiterals: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false SpacesInCStyleCastParentheses: false
SpacesInParentheses: false SpacesInParentheses: false
SpacesInSquareBrackets: false SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false Standard: Cpp11
BitFieldColonSpacing: Both
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4 TabWidth: 4
UseCRLF: false
UseTab: Never UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
...

View file

@ -1,4 +1,4 @@
# Doxyfile 1.9.5 # Doxyfile 1.9.8
# This file describes the settings to be used by the documentation system # This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project. # doxygen (www.doxygen.org) for a project.
@ -48,7 +48,7 @@ PROJECT_NAME = OrcaSlicer
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER = 1.5.0 PROJECT_NUMBER = 1.6.3
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a
@ -61,14 +61,14 @@ PROJECT_BRIEF = OrcaSlicer
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory. # the logo to the output directory.
PROJECT_LOGO = D:/a/OrcaSlicer/OrcaSlicer/resources/images/BambuStudio.png PROJECT_LOGO = ./resources/images/OrcaSlicer_32px.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is # into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If # entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used. # left blank the current directory will be used.
OUTPUT_DIRECTORY = OrcaSlicer-doc OUTPUT_DIRECTORY = ../
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format # sub-directories (in 2 levels) under the output directory of each output format
@ -86,7 +86,7 @@ CREATE_SUBDIRS = YES
# level increment doubles the number of directories, resulting in 4096 # level increment doubles the number of directories, resulting in 4096
# directories at level 8 which is the default and also the maximum value. The # directories at level 8 which is the default and also the maximum value. The
# sub-directories are organized in 2 levels, the first level always has a fixed # sub-directories are organized in 2 levels, the first level always has a fixed
# numer of 16 directories. # number of 16 directories.
# Minimum value: 0, maximum value: 8, default value: 8. # Minimum value: 0, maximum value: 8, default value: 8.
# This tag requires that the tag CREATE_SUBDIRS is set to YES. # This tag requires that the tag CREATE_SUBDIRS is set to YES.
@ -184,7 +184,7 @@ FULL_PATH_NAMES = YES
# will be relative from the directory where doxygen is started. # will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES. # This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH = /Users/lijiang/lab/OrcaSlicer/ STRIP_FROM_PATH = /Users/runner/work/OrcaSlicer/OrcaSlicer
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which # path mentioned in the documentation of a class, which tells the reader which
@ -193,7 +193,7 @@ STRIP_FROM_PATH = /Users/lijiang/lab/OrcaSlicer/
# specify the list of include paths that are normally passed to the compiler # specify the list of include paths that are normally passed to the compiler
# using the -I flag. # using the -I flag.
STRIP_FROM_INC_PATH = STRIP_FROM_INC_PATH = /Users/runner/work/OrcaSlicer/OrcaSlicer
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't # less readable) file names. This can be useful is your file systems doesn't
@ -363,6 +363,17 @@ MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 5 TOC_INCLUDE_HEADINGS = 5
# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
# generate identifiers for the Markdown headings. Note: Every identifier is
# unique.
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
# sequence number starting at 0 and GITHUB use the lower case version of title
# with any whitespace replaced by '-' and punctuation characters removed.
# The default value is: DOXYGEN.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
MARKDOWN_ID_STYLE = GITHUB
# When enabled doxygen tries to link words that correspond to documented # When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can # classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or # be prevented in individual cases by putting a % sign in front of the word or
@ -379,7 +390,7 @@ AUTOLINK_SUPPORT = YES
# diagrams that involve STL classes more complete and accurate. # diagrams that involve STL classes more complete and accurate.
# The default value is: NO. # The default value is: NO.
BUILTIN_STL_SUPPORT = NO BUILTIN_STL_SUPPORT = YES
# If you use Microsoft's C++/CLI language, you should set this option to YES to # If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support. # enable parsing support.
@ -418,7 +429,7 @@ DISTRIBUTE_GROUP_DOC = NO
# is disabled and one has to add nested compounds explicitly via \ingroup. # is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO. # The default value is: NO.
GROUP_NESTED_COMPOUNDS = NO GROUP_NESTED_COMPOUNDS = YES
# Set the SUBGROUPING tag to YES to allow class member groups of the same type # Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that # (for instance a group of public functions) to be put as a subgroup of that
@ -487,6 +498,14 @@ LOOKUP_CACHE_SIZE = 6
NUM_PROC_THREADS = 0 NUM_PROC_THREADS = 0
# If the TIMESTAMP tag is set different from NO then each generated page will
# contain the date or date and time when the page was generated. Setting this to
# NO can help when comparing the output of multiple runs.
# Possible values are: YES, NO, DATETIME and DATE.
# The default value is: NO.
TIMESTAMP = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Build related configuration options # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -499,7 +518,7 @@ NUM_PROC_THREADS = 0
# normally produced when WARNINGS is set to YES. # normally produced when WARNINGS is set to YES.
# The default value is: NO. # The default value is: NO.
EXTRACT_ALL = NO EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation. # be included in the documentation.
@ -568,7 +587,8 @@ HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set # undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option # to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled. # will also hide undocumented C++ concepts if enabled. This option has no effect
# if EXTRACT_ALL is enabled.
# The default value is: NO. # The default value is: NO.
HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_CLASSES = NO
@ -714,26 +734,26 @@ STRICT_PROTO_MATCHING = NO
# list. This list is created by putting \todo commands in the documentation. # list. This list is created by putting \todo commands in the documentation.
# The default value is: YES. # The default value is: YES.
GENERATE_TODOLIST = YES GENERATE_TODOLIST = NO
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation. # list. This list is created by putting \test commands in the documentation.
# The default value is: YES. # The default value is: YES.
GENERATE_TESTLIST = YES GENERATE_TESTLIST = NO
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation. # list. This list is created by putting \bug commands in the documentation.
# The default value is: YES. # The default value is: YES.
GENERATE_BUGLIST = YES GENERATE_BUGLIST = NO
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in # the deprecated list. This list is created by putting \deprecated commands in
# the documentation. # the documentation.
# The default value is: YES. # The default value is: YES.
GENERATE_DEPRECATEDLIST= YES GENERATE_DEPRECATEDLIST= NO
# The ENABLED_SECTIONS tag can be used to enable conditional documentation # The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label> # sections, marked by \if <section_label> ... \endif and \cond <section_label>
@ -859,11 +879,26 @@ WARN_IF_INCOMPLETE_DOC = YES
WARN_NO_PARAMDOC = NO WARN_NO_PARAMDOC = NO
# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
# undocumented enumeration values. If set to NO, doxygen will accept
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: NO.
WARN_IF_UNDOC_ENUM_VAL = NO
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
# at the end of the doxygen process doxygen will return with a non-zero status. # at the end of the doxygen process doxygen will return with a non-zero status.
# Possible values are: NO, YES and FAIL_ON_WARNINGS. # If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves
# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not
# write the warning messages in between other messages but write them at the end
# of a run, in case a WARN_LOGFILE is defined the warning messages will be
# besides being in the defined file also be shown at the end of a run, unless
# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
# the behavior will remain as with the setting FAIL_ON_WARNINGS.
# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
# The default value is: NO. # The default value is: NO.
WARN_AS_ERROR = NO WARN_AS_ERROR = NO
@ -908,7 +943,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = . INPUT = ./src
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@ -1031,9 +1066,6 @@ EXCLUDE_PATTERNS =
# output. The symbol name can be a fully qualified name, a word, or if the # output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass, # wildcard * is used, a substring. Examples: ANamespace, AClass,
# ANamespace::AClass, ANamespace::*Test # ANamespace::AClass, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS = EXCLUDE_SYMBOLS =
@ -1219,46 +1251,6 @@ USE_HTAGS = YES
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
# tag is set to YES then doxygen will add the directory of each input to the
# include path.
# The default value is: YES.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_ADD_INC_PATHS = YES
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
CLANG_DATABASE_PATH =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index # Configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -1270,10 +1262,11 @@ CLANG_DATABASE_PATH =
ALPHABETICAL_INDEX = YES ALPHABETICAL_INDEX = YES
# In case all classes in a project start with a common prefix, all classes will # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # that should be ignored while generating the index headers. The IGNORE_PREFIX
# can be used to specify a prefix (or a list of prefixes) that should be ignored # tag works for classes, function and member names. The entity will be placed in
# while generating the index headers. # the alphabetical list under the first letter of the entity name that remains
# after removing the prefix.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX = IGNORE_PREFIX =
@ -1293,7 +1286,7 @@ GENERATE_HTML = YES
# The default directory is: html. # The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html HTML_OUTPUT = OrcaSlicer_Dev_Document
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp). # generated HTML page (for example: .htm, .php, .asp).
@ -1352,7 +1345,12 @@ HTML_STYLESHEET =
# Doxygen will copy the style sheet files to the output directory. # Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last # Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the # style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation. # list).
# Note: Since the styling of scrollbars can currently not be overruled in
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
# one or more extra stylesheets have been specified. So if scrollbar
# customization is desired it has to be added explicitly. For an example see the
# documentation.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET = HTML_EXTRA_STYLESHEET =
@ -1368,17 +1366,13 @@ HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
# should be rendered with a dark or light theme. Default setting AUTO_LIGHT # should be rendered with a dark or light theme.
# enables light output unless the user preference is dark output. Other options # Possible values are: LIGHT always generate light mode output, DARK always
# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to # generate dark mode output, AUTO_LIGHT automatically set the mode according to
# default to dark mode unless the user prefers light mode, and TOGGLE to let the # the user preference, use light mode if no preference is set (the default),
# user toggle between dark and light mode via a button. # AUTO_DARK automatically set the mode according to the user preference, use
# Possible values are: LIGHT Always generate light output., DARK Always generate # dark mode if no preference is set and TOGGLE allow to user to switch between
# dark output., AUTO_LIGHT Automatically set the mode according to the user # light and dark mode via a button.
# preference, use light mode if no preference is set (the default)., AUTO_DARK
# Automatically set the mode according to the user preference, use dark mode if
# no preference is set. and TOGGLE Allow to user to switch between light and
# dark mode via a button..
# The default value is: AUTO_LIGHT. # The default value is: AUTO_LIGHT.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
@ -1414,15 +1408,6 @@ HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80 HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to YES can help to show when doxygen was last run and thus if the
# documentation is up to date.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that # documentation will contain a main index with vertical navigation menus that
# are dynamically created via JavaScript. If disabled, the navigation index will # are dynamically created via JavaScript. If disabled, the navigation index will
@ -1440,7 +1425,7 @@ HTML_DYNAMIC_MENUS = YES
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO HTML_DYNAMIC_SECTIONS = YES
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand # shown in the various tree structured indices initially; the user can expand
@ -1468,7 +1453,7 @@ HTML_INDEX_NUM_ENTRIES = 100
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO GENERATE_DOCSET = YES
# This tag determines the name of the docset feed. A documentation feed provides # This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider # an umbrella under which multiple documentation sets from a single provider
@ -1572,6 +1557,16 @@ BINARY_TOC = NO
TOC_EXPAND = NO TOC_EXPAND = NO
# The SITEMAP_URL tag is used to specify the full URL of the place where the
# generated documentation will be placed on the server by the user during the
# deployment of the documentation. The generated sitemap is called sitemap.xml
# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
# is specified no sitemap is generated. For information about the sitemap
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.
SITEMAP_URL =
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
@ -1736,7 +1731,7 @@ OBFUSCATE_EMAILS = YES
# The default value is: png. # The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FORMULA_FORMAT = png HTML_FORMULA_FORMAT = svg
# Use this tag to change the font size of LaTeX formulas included as images in # Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful # the HTML documentation. When you change the font size after a successful
@ -2060,9 +2055,16 @@ PDF_HYPERLINKS = YES
USE_PDFLATEX = YES USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error.
# command to the generated LaTeX files. This will instruct LaTeX to keep running # Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
# if errors occur, instead of asking the user for help. # mode nothing is printed on the terminal, errors are scrolled as if <return> is
# hit at every error; missing files that TeX tries to input or request from
# keyboard input (\read on a not open input stream) cause the job to abort,
# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
# but there is no possibility of user interaction just like in batch mode,
# SCROLL In scroll mode, TeX will stop only for missing files to input or if
# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
# each error, asking for user intervention.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
@ -2083,14 +2085,6 @@ LATEX_HIDE_INDICES = NO
LATEX_BIB_STYLE = plain LATEX_BIB_STYLE = plain
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_TIMESTAMP = NO
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered, # path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the # it will be relative to the LATEX_OUTPUT directory. If left blank the
@ -2256,7 +2250,7 @@ DOCBOOK_OUTPUT = docbook
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures # AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
# the structure of the code including all documentation. Note that this feature # the structure of the code including all documentation. Note that this feature
# is still experimental and incomplete at the moment. # is still experimental and incomplete at the moment.
# The default value is: NO. # The default value is: NO.
@ -2267,6 +2261,28 @@ GENERATE_AUTOGEN_DEF = NO
# Configuration options related to Sqlite3 output # Configuration options related to Sqlite3 output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
# database with symbols found by doxygen stored in tables.
# The default value is: NO.
GENERATE_SQLITE3 = NO
# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
# in front of it.
# The default directory is: sqlite3.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
SQLITE3_OUTPUT = sqlite3
# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
# database file will be recreated with each doxygen run. If set to NO, doxygen
# will warn if an a database file is already found and not modify it.
# The default value is: YES.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
SQLITE3_RECREATE_DB = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the Perl module output # Configuration options related to the Perl module output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -2322,7 +2338,7 @@ ENABLE_PREPROCESSING = YES
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO MACRO_EXPANSION = YES
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and # the macro expansion is limited to the macros specified with the PREDEFINED and
@ -2330,7 +2346,7 @@ MACRO_EXPANSION = NO
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO EXPAND_ONLY_PREDEF = YES
# If the SEARCH_INCLUDES tag is set to YES, the include files in the # If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found. # INCLUDE_PATH will be searched if a #include is found.
@ -2431,16 +2447,9 @@ EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES EXTERNAL_PAGES = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the dot tool # Configuration options related to diagram generator tools
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
DIA_PATH =
# If set to YES the inheritance and collaboration graphs will hide inheritance # If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class. # and usage relations if the target is undocumented or is not a class.
# The default value is: YES. # The default value is: YES.
@ -2449,7 +2458,7 @@ HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see: # available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is # Bell Labs. The other options in this section have no effect if this option is
# set to NO # set to NO
# The default value is: NO. # The default value is: NO.
@ -2502,13 +2511,15 @@ DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4"
DOT_FONTPATH = DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a # If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will
# graph for each documented class showing the direct and indirect inheritance # generate a graph for each documented class showing the direct and indirect
# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, # inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set # HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
# to TEXT the direct and indirect inheritance relations will be shown as texts / # the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
# links. # CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
# Possible values are: NO, YES, TEXT and GRAPH. # If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
# relations will be shown as texts / links.
# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
# The default value is: YES. # The default value is: YES.
CLASS_GRAPH = YES CLASS_GRAPH = YES
@ -2579,7 +2590,7 @@ DOT_WRAP_THRESHOLD = 17
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO TEMPLATE_RELATIONS = YES
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the # YES then doxygen will generate a graph for each documented file showing the
@ -2649,7 +2660,7 @@ DIR_GRAPH_MAX_DEPTH = 1
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. For an explanation of the image formats see the section # generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see: # output formats in the documentation of the dot tool (Graphviz (see:
# http://www.graphviz.org/)). # https://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this # to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement). # requirement).
@ -2686,11 +2697,12 @@ DOT_PATH =
DOTFILE_DIRS = DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that # You can include diagrams made with dia in doxygen documentation. Doxygen will
# contain msc files that are included in the documentation (see the \mscfile # then run dia to produce the diagram and insert it in the documentation. The
# command). # DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
MSCFILE_DIRS = DIA_PATH =
# The DIAFILE_DIRS tag can be used to specify one or more directories that # The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile # contain dia files that are included in the documentation (see the \diafile
@ -2738,7 +2750,7 @@ DOT_GRAPH_MAX_NODES = 50
# Minimum value: 0, maximum value: 1000, default value: 0. # Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 4 MAX_DOT_GRAPH_DEPTH = 5
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This # files in one run (i.e. multiple -o and -T options on the command line). This
@ -2767,3 +2779,19 @@ GENERATE_LEGEND = YES
# The default value is: YES. # The default value is: YES.
DOT_CLEANUP = YES DOT_CLEANUP = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will
# use a built-in version of mscgen tool to produce the charts. Alternatively,
# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,
# specifying prog as the value, doxygen will call the tool as prog -T
# <outfile_format> -o <outputfile> <inputfile>. The external tool should support
# output file formats "png", "eps", "svg", and "ismap".
MSCGEN_TOOL =
# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).
MSCFILE_DIRS =

View file

@ -1,29 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**3mf File for This Bug**
If it is related to slicing, please append the 3mf file. It could be extremely helpful to solve the issue.
**To Reproduce**
Steps to reproduce the behavior
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Printer model**
**Desktop (please complete the following information):**
- OS: [e.g. iOS, Windows]
- Version [e.g. 22]

102
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,102 @@
name: Bug Report
description: File a bug report
labels: bug
body:
- type: markdown
attributes:
value: |
**Thank you for using Orca Slicer and wanting to report a bug.**
Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment.
- type: input
id: version
attributes:
label: OrcaSlicer Version
description: Which version of Orca Slicer are you running? You can see the full version in `Help` -> `About Orca Slicer`.
placeholder: e.g. 1.6.6
validations:
required: true
- type: input
id: os_info
attributes:
label: OS version
description: Which OS version are you using?
placeholder: |
OS: Windows 7/8/10/11 ... , Ubuntu 22.04/Fedora 36 ... , macOS 10.15/11.1/12.3 ...
validations:
required: true
- type: textarea
id: system_info
attributes:
label: Additional system information
description: For the performance issue, please also show the CPU、Memory information; For the 3D Rendering issue, please also show the Display Card information.
placeholder: |
CPU: 11th gen intel r core tm i7-1185g7/amd ryzen 7 6800h/...
Memory: 32/16 GB...
Display Card: NVIDIA Quadro P400/...
validations:
required: false
- type: input
id: printer
attributes:
label: Printer
description: Which printer was selected
placeholder: Voron 2.4/VzBot/Prusa MK4/Bambu Lab X1 series/Bambu Lab P1P/...
validations:
required: true
- type: textarea
id: reproduce_steps
attributes:
label: How to reproduce
description: Please described the detailed steps to reproduce this issue
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: actual_results
attributes:
label: Actual results
description: What happens after the above steps? Please, enclose a screenshot whenever possible (even when you think the description is clear).
validations:
required: true
- type: textarea
id: expected_results
attributes:
label: Expected results
description: What should happen after the above steps?
validations:
required: true
- type: markdown
id: file_required
attributes:
value: |
Please be sure to add the following files:
* Please upload a ZIP archive containing the **project file** used when the problem arise. Please export it just before or after the problem occurs. Even if you did nothing and/or there is no object, export it! (We need the configurations in project file).
You can export the project file from the application menu in `File`->`Save project as...`, then zip it
* A **log file** for crashes and similar issues.
You can find your log file here:
Windows: `%APPDATA%\OrcaSlicer\log` or usually `C:\Users\<your username>\AppData\Roaming\OrcaSlicer\log`
MacOS: `$HOME/Library/Application Support/OrcaSlicer/log`
Linux: `$HOME/.config/OrcaSlicer/log`
If Orca Slicer still starts, you can also reach this directory from the application menu in `Help` -> `Show Configuration Folder`
You can zip the log directory, or just select the newest logs when this issue happens, and zip them
- type: textarea
id: file_uploads
attributes:
label: Project file & Debug log uploads
description: Drop the project file and debug log here
placeholder: |
Project File: `File` -> `Save project as...` then zip it & drop it here
Log File: `Help` -> `Show Configuration Folder`, then zip the log directory, or just select the newest logs in `log` when this issue happens and zip them, then drop the zip file here
validations:
required: true
- type: checkboxes
id: file_checklist
attributes:
label: Checklist of files to include
options:
- label: Log file
- label: Project file

View file

@ -1,10 +0,0 @@
---
name: Custom issue template
about: For generic ideas such as enhancement of a feature, some questions, and etc.
title: ''
labels: ''
assignees: ''
---

View file

@ -10,6 +10,9 @@ assignees: ''
**Is your feature request related to a problem? Please describe.** **Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Which printers will be beneficial to this feature**
E.g. Voron/Klipper based printer/etc...
**Describe the solution you'd like** **Describe the solution you'd like**
A clear and concise description of what you want to happen. A clear and concise description of what you want to happen.

127
.github/workflows/build_deps.yml vendored Normal file
View file

@ -0,0 +1,127 @@
# name: Build Deps
name: Build deps
on:
pull_request:
branches:
- main
paths:
- 'deps/**'
- .github/workflows/build_deps.yml
push:
branches:
- main
paths:
- 'deps/**'
- .github/workflows/build_deps.yml
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build_deps:
strategy:
fail-fast: false
matrix:
include:
# - os: ubuntu-22.04
- os: windows-latest
# - os: macos-12
# arch: x86_64
# - os: macos-12
# arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: setup dev on Windows
if: matrix.os == 'Windows'
uses: microsoft/setup-msbuild@v1.1
- name: Get the date on Ubuntu and macOS
if: matrix.os != 'windows-latest'
id: get-date-unix
run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
shell: bash
- name: Get the date on Windows
if: matrix.os == 'windows-latest'
id: get-date-windows
run: echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
shell: pwsh
- name: Build on Windows
if: matrix.os == 'windows-latest'
working-directory: ${{ github.workspace }}
run: |
choco install strawberryperl
mkdir ${{ github.workspace }}/deps/build
mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep
.\build_release_vs2022.bat deps
cd ${{ github.workspace }}/deps/build
- name: Build on Mac x86_64
if: matrix.os == 'macos-12' && matrix.arch == 'x86_64'
working-directory: ${{ github.workspace }}
run: |
brew install cmake git gettext
mkdir -p ${{ github.workspace }}/deps/build_x86_64
mkdir -p ${{ github.workspace }}/deps/build_x86_64/OrcaSlicer_dep_x86_64
./build_release_macos.sh -dp -a x86_64
- name: Build on Mac arm64
if: matrix.os == 'macos-12' && matrix.arch == 'arm64'
working-directory: ${{ github.workspace }}
run: |
brew install cmake git gettext
mkdir -p ${{ github.workspace }}/deps/build_arm64
mkdir -p ${{ github.workspace }}/deps/build_arm64/OrcaSlicer_dep_arm64
./build_release_macos.sh -dp -a arm64
- name: Build on Ubuntu
if: matrix.os == 'ubuntu-22.04'
working-directory: ${{ github.workspace }}
run: |
sudo apt-get update
sudo apt-get install -y cmake git g++ build-essential libgl1-mesa-dev m4 \
libwayland-dev libxkbcommon-dev wayland-protocols extra-cmake-modules pkgconf \
libglu1-mesa-dev libcairo2-dev libgtk-3-dev libsoup2.4-dev libwebkit2gtk-4.0-dev \
libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-bad libosmesa6-dev wget sudo autoconf curl libunwind-dev
mkdir -p ${{ github.workspace }}/deps/build
mkdir -p ${{ github.workspace }}/deps/build/destdir
sudo ./BuildLinux.sh -ur
sudo chown $USER -R ./
./BuildLinux.sh -dr
- name: Upload Mac arm64 artifacts
if: matrix.os == 'macos-12' && matrix.arch == 'arm64'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_dep_mac_arm64_${{ env.date }}
path: ${{ github.workspace }}/deps/build_arm64/OrcaSlicer_dep*.tar.gz
- name: Upload Mac x86_64 artifacts
if: matrix.os == 'macos-12' && matrix.arch == 'x86_64'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_dep_mac_x86_64_${{ env.date }}
path: ${{ github.workspace }}/deps/build_x86_64/OrcaSlicer_dep*.tar.gz
- name: Upload Windows artifacts
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_dep_win64_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
- name: Upload Ubuntu artifacts
if: matrix.os == 'ubuntu-22.04'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_dep_ubuntu_${{ env.date }}
path: ${{ github.workspace }}/deps/build/destdir

View file

@ -1,83 +0,0 @@
name: Build Linux
on:
push:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
pull_request:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
jobs:
appimage-builder:
name: Linux AppImage Build
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y autoconf build-essential cmake curl eglexternalplatform-dev \
extra-cmake-modules file git libcairo2-dev libcurl4-openssl-dev libdbus-1-dev libglew-dev libglu1-mesa-dev \
libglu1-mesa-dev libgstreamer1.0-dev libgstreamerd-3-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev \
libgtk-3-dev libgtk-3-dev libmspack-dev libosmesa6-dev libsecret-1-dev libsoup2.4-dev libssl-dev libudev-dev libwayland-dev \
libwebkit2gtk-4.0-dev libxkbcommon-dev locales locales-all m4 pkgconf sudo wayland-protocols wget
- name: Install dependencies from BuildLinux.sh
shell: bash
run: sudo ./BuildLinux.sh -ur
- name: Fix permissions
shell: bash
run: sudo chown $USER -R ./
# - name: Build deps
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps_x64
# with:
# path: ${{ github.workspace }}/deps/build/destdir
# key: build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: Build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: ./BuildLinux.sh -dr
- name: Download and extract deps
working-directory: ${{ github.workspace }}
run: |
mkdir -p ${{ github.workspace }}/deps/build
mkdir -p ${{ github.workspace }}/deps/build/destdir
curl -LJO https://github.com/SoftFever/FileSharing/releases/download/OrcaSlicer_deps_Mar/OrcaSlicer_dep_ubuntu_05-04-2023.tar.gz
tar -zxf OrcaSlicer_dep_ubuntu_05-04-2023.tar.gz -C ${{ github.workspace }}/deps/build
chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build/destdir
ls -l ${{ github.workspace }}/deps/build/destdir
rm OrcaSlicer_dep_ubuntu_05-04-2023.tar.gz
- name: Build Studio
shell: bash
run: |
./BuildLinux.sh -isr
chmod +x ./build/OrcaSlicer_ubu64.AppImage
- uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Linux
path: './build/OrcaSlicer_ubu64.AppImage'

View file

@ -1,111 +0,0 @@
name: Build Mac AppleSilicon
on:
push:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
pull_request:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
jobs:
build_osx_arm64:
name: Build Mac AppleSilicon
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Install tools
run: |
brew install cmake git gettext zstd
- run: mkdir -p ${{ github.workspace }}/deps/build_arm64
- run: mkdir -p ${{ github.workspace }}/deps/build_arm64/OrcaSlicer_dep_arm64
# - name: build deps
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps_arm64
# with:
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
# key: build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: ./build_release_macos.sh -d -a arm64
- name: Download and extract deps
working-directory: ${{ github.workspace }}
run: |
curl -LJO https://github.com/SoftFever/FileSharing/releases/download/OrcaSlicer_deps_Mar/OrcaSlicer_dep_mac_arm64_11-03-2023.tar.gz
tar -zxf OrcaSlicer_dep_mac_arm64_11-03-2023.tar.gz -C ${{ github.workspace }}/deps/build_arm64
chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build_arm64/OrcaSlicer_dep_arm64
ls -l ${{ github.workspace }}/deps/build_arm64/OrcaSlicer_dep_arm64
rm OrcaSlicer_dep_mac_arm64_11-03-2023.tar.gz
- name: Build studio
working-directory: ${{ github.workspace }}
run: |
./build_release_macos.sh -s -n -a arm64
- name: Sign app
working-directory: ${{ github.workspace }}
if: github.event_name != 'pull_request'
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
CERTIFICATE_ID: ${{ secrets.MACOS_CERTIFICATE_ID }}
run: |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security import $CERTIFICATE_PATH -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $P12_PASSWORD $KEYCHAIN_PATH
codesign --deep --force --verbose --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build_arm64/OrcaSlicer/OrcaSlicer.app
- name: Pack app
working-directory: ${{ github.workspace }}
run: |
export ver=$(grep '^#define SoftFever_VERSION' ./build_arm64/src/libslic3r/libslic3r_version.h | cut -d ' ' -f3)
ver="_V${ver//\"}"
cd ${{ github.workspace }}/build_arm64/OrcaSlicer
zip -FSrq OrcaSlicer${ver}_Mac_AppleSilicon_signed.zip ./OrcaSlicer.app
# (wip: staple failed, error 65)
# - name: Notarize the app
# run: |
# cd ${{ github.workspace }}/build_arm64/OrcaSlicer
# xcrun notarytool store-credentials "notarytool-profile" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}"
# ditto -c -k --keepParent "OrcaSlicer.app" "OrcaSlicer.zip"
# xcrun notarytool submit "OrcaSlicer.zip" --keychain-profile "notarytool-profile" --wait
# xcrun stapler staple OrcaSlicer.app
# zip -FSrq OrcaSlicer_Mac_notarized.zip OrcaSlicer.app
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Mac_AppleSilicon
path: ${{ github.workspace }}/build_arm64/OrcaSlicer/OrcaSlicer*.zip

View file

@ -1,110 +0,0 @@
name: Build Mac Intel
on:
push:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
pull_request:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
jobs:
build_osx_x86_64:
name: Build Mac Intel
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Install tools
run: |
brew install cmake git gettext
- run: mkdir -p ${{ github.workspace }}/deps/build_x86_64
- run: mkdir -p ${{ github.workspace }}/deps/build_x86_64/OrcaSlicer_dep_x86_64
# - name: build deps
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps_x64
# with:
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
# key: build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: ./build_release_macos.sh -d -a x86_64
- name: Download and extract deps
working-directory: ${{ github.workspace }}
run: |
curl -LJO https://github.com/SoftFever/FileSharing/releases/download/OrcaSlicer_deps_Mar/OrcaSlicer_dep_mac_x86_64_11-03-2023.tar.gz
tar -zxf OrcaSlicer_dep_mac_x86_64_11-03-2023.tar.gz -C ${{ github.workspace }}/deps/build_x86_64
chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build_x86_64/OrcaSlicer_dep_x86_64
ls -l ${{ github.workspace }}/deps/build_x86_64/OrcaSlicer_dep_x86_64
rm OrcaSlicer_dep_mac_x86_64_11-03-2023.tar.gz
- name: Build studio
working-directory: ${{ github.workspace }}
run: ./build_release_macos.sh -s -n -a x86_64
- name: Sign app
working-directory: ${{ github.workspace }}
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
CERTIFICATE_ID: ${{ secrets.MACOS_CERTIFICATE_ID }}
if: github.event_name != 'pull_request'
run: |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security import $CERTIFICATE_PATH -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $P12_PASSWORD $KEYCHAIN_PATH
codesign --deep --force --verbose --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build_x86_64/OrcaSlicer/OrcaSlicer.app
- name: pack app
working-directory: ${{ github.workspace }}
run: |
export ver=$(grep '^#define SoftFever_VERSION' ./build_x86_64/src/libslic3r/libslic3r_version.h | cut -d ' ' -f3)
ver="_V${ver//\"}"
cd ${{ github.workspace }}/build_x86_64/OrcaSlicer
zip -FSrq OrcaSlicer${ver}_Mac_Intel_signed.zip OrcaSlicer.app
# (wip: staple failed, error 65)
# - name: Notarize the app
# run: |
# xcrun notarytool store-credentials "notarytool-profile" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}"
# ditto -c -k --keepParent "OrcaSlicer.app" "OrcaSlicer.zip"
# xcrun notarytool submit "OrcaSlicer.zip" --keychain-profile "notarytool-profile" --wait
# xcrun stapler staple OrcaSlicer.app
# zip -FSrq OrcaSlicer_Mac_notarized.zip OrcaSlicer.app
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Mac_Intel
path: ${{ github.workspace }}/build_x86_64/OrcaSlicer/OrcaSlicer*.zip

287
.github/workflows/build_orca.yml vendored Normal file
View file

@ -0,0 +1,287 @@
name: Build OrcaSlicer
on:
push:
branches:
- main
paths:
- 'src/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'localization/**'
- 'resources/**'
- ".github/workflows/build_orca.yml"
pull_request:
branches:
- main
paths:
- 'src/**'
- '**/CMakeLists.txt'
- 'version.inc'
- ".github/workflows/build_orca.yml"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build_orca:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: windows-2019
- os: macos-12
arch: x86_64
- os: macos-12
arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Get the version and date on Ubuntu and macOS
if: matrix.os != 'windows-2019'
id: get-version-unix
run: |
ver=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2)
echo "ver=$ver" >> $GITHUB_ENV
echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
shell: bash
- name: Get the version and date on Windows
if: matrix.os == 'windows-2019'
id: get-version-windows
run: |
echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
# Extract the version from the file
$versionContent = Get-Content version.inc -Raw
if ($versionContent -match 'set\(SoftFever_VERSION "(.*?)"\)') {
$ver = $matches[1]
}
echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
echo "date: ${{ env.date }} version: $ver"
shell: pwsh
# Mac
- name: Install tools mac
if: matrix.os == 'macos-12'
run: |
brew install cmake git gettext zstd
mkdir -p ${{ github.workspace }}/deps/build_${{matrix.arch}}
mkdir -p ${{ github.workspace }}/deps/build_${{matrix.arch}}/OrcaSlicer_dep_${{matrix.arch}}
# - name: build deps
# if: matrix.os == 'macos-12'
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps_${{matrix.arch}}
# with:
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
# key: build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: ./build_release_macos.sh -d -a ${{matrix.arch}}
- name: Download and extract deps
if: matrix.os == 'macos-12'
working-directory: ${{ github.workspace }}
run: |
curl -LJO https://github.com/SoftFever/FileSharing/releases/download/2023.08.2/OrcaSlicer_dep_mac_${{matrix.arch}}_06-08-2023.tar.gz
tar -zxfOrcaSlicer_dep_mac_${{matrix.arch}}_06-08-2023.tar.gz -C ${{ github.workspace }}/deps/build_${{matrix.arch}}
chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build_${{matrix.arch}}/OrcaSlicer_dep_${{matrix.arch}}
ls -l ${{ github.workspace }}/deps/build_${{matrix.arch}}/OrcaSlicer_dep_${{matrix.arch}}
rm OrcaSlicer_dep_mac_${{matrix.arch}}_06-08-2023.tar.gz
- name: Build slicer mac
if: matrix.os == 'macos-12'
working-directory: ${{ github.workspace }}
run: |
./build_release_macos.sh -s -n -a ${{matrix.arch}}
# Thanks to RaySajuuk, it's working now
- name: Sign app and notary
if: github.ref == 'refs/heads/main' && matrix.os == 'macos-12'
working-directory: ${{ github.workspace }}
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
CERTIFICATE_ID: ${{ secrets.MACOS_CERTIFICATE_ID }}
run: |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security import $CERTIFICATE_PATH -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $P12_PASSWORD $KEYCHAIN_PATH
codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build_${{matrix.arch}}/OrcaSlicer/OrcaSlicer.app
ln -s /Applications ${{ github.workspace }}/build_${{matrix.arch}}/OrcaSlicer/Applications
hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build_${{matrix.arch}}/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg
codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg
xcrun notarytool store-credentials "notarytool-profile" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}"
xcrun notarytool submit "OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg" --keychain-profile "notarytool-profile" --wait
xcrun stapler staple OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg
- name: Create DMG without notary
if: github.ref != 'refs/heads/main' && matrix.os == 'macos-12'
working-directory: ${{ github.workspace }}
run: |
ln -s /Applications ${{ github.workspace }}/build_${{matrix.arch}}/OrcaSlicer/Applications
hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build_${{matrix.arch}}/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg
- name: Upload artifacts mac
if: matrix.os == 'macos-12'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}
path: ${{ github.workspace }}/OrcaSlicer_Mac_${{matrix.arch}}_V${{ env.ver }}.dmg
# Windows
- name: setup MSVC
if: matrix.os == 'windows-2019'
uses: microsoft/setup-msbuild@v1.1
- name: Install nsis
if: matrix.os == 'windows-2019'
run: |
choco install nsis
- name: download deps
if: matrix.os == 'windows-2019'
shell: powershell
run: '(new-object System.Net.WebClient).DownloadFile("https://github.com/SoftFever/FileSharing/releases/download/4/OrcaSlicer_dep_18Jul2023.zip", "$env:temp\OrcaSlicer_dep_18Jul2023.zip")'
- name: maker dir
if: matrix.os == 'windows-2019'
working-directory: ${{ github.workspace }}
run: |
mkdir ${{ github.workspace }}/deps/build
mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep
- name: extract deps
if: matrix.os == 'windows-2019'
working-directory: ${{ github.workspace }}/deps/build
shell: cmd
run: '"C:/Program Files/7-Zip/7z.exe" x %temp%\OrcaSlicer_dep_18Jul2023.zip'
# - name: build deps
# if: matrix.os == 'windows-2019'
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps
# with:
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
# key: ${{ runner.os }}-build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: .\build_release_vs2022.bat deps
# - run: Get-ChildItem ${{ github.workspace }}/deps/build/ -Exclude OrcaSlicer_dep | Remove-Item -Recurse -Force
- name: Build slicer Win
if: matrix.os == 'windows-2019'
working-directory: ${{ github.workspace }}
run: .\build_release.bat slicer
- name: Create installer Win
if: matrix.os == 'windows-2019'
working-directory: ${{ github.workspace }}/build
run: |
cpack -G NSIS
# - name: pack app
# if: matrix.os == 'windows-2019'
# working-directory: ${{ github.workspace }}/build
# shell: cmd
# run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_dev_build.zip ${{ github.workspace }}/build/OrcaSlicer'
- name: Upload artifacts Win zip
if: matrix.os == 'windows-2019'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Windows_V${{ env.ver }}_portable
path: ${{ github.workspace }}/build/OrcaSlicer
- name: Upload artifacts Win installer
if: matrix.os == 'windows-2019'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Windows_V${{ env.ver }}
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
# Ubuntu
- name: Install dependencies
if: matrix.os == 'ubuntu-20.04'
run: |
sudo apt-get update
sudo apt-get install -y autoconf build-essential cmake curl eglexternalplatform-dev \
extra-cmake-modules file git libcairo2-dev libcurl4-openssl-dev libdbus-1-dev libglew-dev libglu1-mesa-dev \
libglu1-mesa-dev libgstreamer1.0-dev libgstreamerd-3-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev \
libgtk-3-dev libgtk-3-dev libmspack-dev libosmesa6-dev libsecret-1-dev libsoup2.4-dev libssl-dev libudev-dev libwayland-dev \
libwebkit2gtk-4.0-dev libxkbcommon-dev locales locales-all m4 pkgconf sudo wayland-protocols wget
- name: Install dependencies from BuildLinux.sh
if: matrix.os == 'ubuntu-20.04'
shell: bash
run: sudo ./BuildLinux.sh -ur
- name: Fix permissions
if: matrix.os == 'ubuntu-20.04'
shell: bash
run: sudo chown $USER -R ./
# - name: Build deps
# if: matrix.os == 'ubuntu-20.04'
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps_x64
# with:
# path: ${{ github.workspace }}/deps/build/destdir
# key: build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: Build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: ./BuildLinux.sh -dr
- name: Download and extract deps
if: matrix.os == 'ubuntu-20.04'
working-directory: ${{ github.workspace }}
run: |
mkdir -p ${{ github.workspace }}/deps/build
mkdir -p ${{ github.workspace }}/deps/build/destdir
curl -LJO https://github.com/SoftFever/FileSharing/releases/download/2023.08/OrcaSlicer_dep_ubuntu_02-08-2023.tar.gz
tar -zxf OrcaSlicer_dep_ubuntu_02-08-2023.tar.gz -C ${{ github.workspace }}/deps/build
chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build/destdir
ls -l ${{ github.workspace }}/deps/build/destdir
rm OrcaSlicer_dep_ubuntu_02-08-2023.tar.gz
- name: Build slicer
if: matrix.os == 'ubuntu-20.04'
shell: bash
run: |
./BuildLinux.sh -isr
chmod +x ./build/OrcaSlicer_ubu64.AppImage
- name: Upload artifacts Ubuntu
if: matrix.os == 'ubuntu-20.04'
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Linux_V${{ env.ver }}
path: './build/OrcaSlicer_ubu64.AppImage'

View file

@ -1,79 +0,0 @@
name: Build Win64
on:
push:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
pull_request:
branches:
- main
paths:
- 'src/**'
- 'deps/**'
- '**/CMakeLists.txt'
- 'version.inc'
- 'bbl/**'
- 'resources/**'
jobs:
build_win64:
name: Build Win64
runs-on: windows-2019
steps:
- uses: actions/checkout@v3
- uses: ilammy/msvc-dev-cmd@v1
- name: Install perl
run: |
choco install strawberryperl
- run: mkdir ${{ github.workspace }}/deps/build
- run: mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep
- name: download deps
shell: powershell
run: '(new-object System.Net.WebClient).DownloadFile("https://github.com/SoftFever/FileSharing/releases/download/OrcaSlicer_deps_Mar/OrcaSlicer_dep_05May2023.zip", "$env:temp\OrcaSlicer_dep_05May2023.zip")'
- name: extract deps
working-directory: ${{ github.workspace }}/deps/build
shell: cmd
run: '"C:/Program Files/7-Zip/7z.exe" x %temp%\OrcaSlicer_dep_05May2023.zip'
- run: dir "${{ github.workspace }}\deps\build\OrcaSlicer_dep"
# - name: build deps
# id: cache_deps
# uses: actions/cache@v3
# env:
# cache-name: ${{ runner.os }}-cache-orcaslicer_deps
# with:
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
# key: ${{ runner.os }}-build-${{ env.cache-name }}
# - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }}
# name: build deps
# working-directory: ${{ github.workspace }}
# continue-on-error: true
# run: .\build_release.bat deps
# - run: Get-ChildItem ${{ github.workspace }}/deps/build/ -Exclude OrcaSlicer_dep | Remove-Item -Recurse -Force
- name: Build studio
working-directory: ${{ github.workspace }}
run: .\build_release.bat studio
# - name: pack app
# working-directory: ${{ github.workspace }}/build
# shell: cmd
# run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_dev_build.zip ${{ github.workspace }}/build/OrcaSlicer'
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: OrcaSlicer_Win64_nightly
path: ${{ github.workspace }}/build/OrcaSlicer

26
.github/workflows/check_locale.yml vendored Normal file
View file

@ -0,0 +1,26 @@
name: Check locale
on:
pull_request:
branches:
- main
paths:
- 'localization/**'
- ".github/workflows/check_locale.yml"
jobs:
check_translation:
name: Check translation
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install gettext
run: |
sudo apt-get update
sudo apt-get install -y gettext
- name: Check translation format
run: |
./run_gettext.sh

7
.gitignore vendored
View file

@ -18,9 +18,12 @@ local-lib
/src/TAGS /src/TAGS
/.vscode/ /.vscode/
build-linux/* build-linux/*
deps/build-linux/* deps/build*/*
**/.DS_Store **/.DS_Store
install_* install_*
build_*/ build_*/
SVG SVG
src/OrcaSlicer-doc/ src/OrcaSlicer-doc/
.idea/
/.cache/
*.mo

8
.idea/.gitignore generated vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

2
.idea/OrcaSlicer.iml generated Normal file
View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

7
.idea/codeStyles/Project.xml generated Normal file
View file

@ -0,0 +1,7 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

4
.idea/misc.xml generated Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

8
.idea/modules.xml generated Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/OrcaSlicer.iml" filepath="$PROJECT_DIR$/.idea/OrcaSlicer.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View file

@ -1,103 +0,0 @@
{
"build_systems":
[
{
"name": "List",
//"file_regex": " at ([^-\\s]*) line ([0-9]*)",
// "file_regex": " at (D\\:\\/src\\/Slic3r\\/.*?) line ([0-9]*)",
"shell_cmd": "ls -l"
},
{
"name": "Run",
"working_dir": "$project_path",
"file_regex": " at (.*?) line ([0-9]*)",
// "shell_cmd": "chdir & perl slic3r.pl --DataDir \"C:\\Users\\Public\\Documents\\Prusa3D\\Slic3r settings MK2\" --gui \"..\\Slic3r-tests\\gap fill torture 20 -rt.stl\""
"shell_cmd": "chdir & perl slic3r.pl"
},
{
"name": "full",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"shell_cmd": "chdir & perl Build.pl"
},
{
"name": "xs",
"working_dir": "$project_path/build",
// for Visual Studio:
"file_regex": "^(..[^:]*)\\(([0-9]+)\\)(.*)$",
// For GCC:
// "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"shell_cmd": "chdir & ninja -j 6 -v",
"env": {
// "PATH": "C:\\Program Files (x86)\\MSBuild\\12.0\\bin\\amd64;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\BIN\\amd64;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\Tools;%PATH%;c:\\wperl64d\\site\\bin;c:\\wperl64d\\bin",
// "PERL_CPANM_HOME": "c:\\wperl64d\\cpanm",
// "WXDIR": "D:\\src-perl\\wxWidgets-3.0.3-beta1",
// "BOOST_DIR": "D:\\src-perl\\boost_1_61_0",
// "BOOST_INCLUDEDIR": "D:\\src-perl\\boost_1_61_0",
// "BOOST_LIBRARYDIR": "D:\\src-perl\\boost_1_61_0\\stage\\x64\\lib",
// "SLIC3R_STATIC": "1"
}
},
{
"name": "xs & run",
"working_dir": "$project_path/build",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"shell_cmd": "chdir & ninja -j 6 & cd .. & perl slic3r.pl --gui \"..\\Slic3r-tests\\star3-big2.stl\""
},
{
"name": "Slic3r - clean",
"working_dir": "$project_path/build",
"file_regex": "^(..[^:]*)(?::|\\()([0-9]+)(?::|\\))(?:([0-9]+):)?\\s*(.*)",
"shell_cmd": ["chdir & ninja clean"]
},
{
"name": "run tests",
"working_dir": "$project_path/build",
// for Visual Studio:
"file_regex": "^(..[^:]*)\\(([0-9]+)\\)(.*)$",
"shell_cmd": "chdir & ctest --verbose"
},
{
"name": "Clean & Configure",
"working_dir": "$project_path",
// for Visual Studio:
"file_regex": "^(..[^:]*)(?::|\\()([0-9]+)(?::|\\))(?:([0-9]+):)?\\s*(.*)",
"shell_cmd": "chdir & rmdir /S /Q build & mkdir build & cd build & cmake -G Ninja .. -DCMAKE_COLOR_MAKEFILE=OFF -DCMAKE_RULE_PROGRESS=OFF -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo"
},
{
"name": "Configure",
"working_dir": "$project_path/build",
// for Visual Studio:
"file_regex": "^(..[^:]*)(?::|\\()([0-9]+)(?::|\\))(?:([0-9]+):)?\\s*(.*)",
"shell_cmd": "cmake -G Ninja .. -DCMAKE_COLOR_MAKEFILE=OFF -DCMAKE_RULE_PROGRESS=OFF -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo"
}
],
"folders":
[
{
"path": ".",
// "folder_exclude_patterns": [".svn", "._d", ".metadata", ".settings"],
"file_exclude_patterns": ["XS.c", "*.pch", "*.ilk", "*.js" ]
}
],
"settings":
{
"sublimegdb_workingdir": "${folder:${project_path:run}}",
// NOTE: You MUST provide --interpreter=mi for the plugin to work
// "sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi -ex 'target localhost:2345'",
// "sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi perl --args perl slic3r.pl",
// "sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi perl --args slic3r.pl ",
// "sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi -e C:\\Strawberry\\perl\\bin\\perl.exe -s C:\\Strawberry\\perl\\site\\lib\\auto\\Slic3r\\XS\\XS.xs.dll --args perl slic3r.pl -j 1 --gui D:\\src\\Slic3r-tests\\star3-big.stl",
"sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi perl.exe --args perl slic3r.pl -j 1 --gui", // D:\\src\\Slic3r-tests\\star3-big.stl",
// "sublimegdb_commandline": "D:\\Qt\\Tools\\mingw492_32\\bin\\gdb.exe --interpreter=mi -x slic3r.gdb",
// "arguments": "slic3r -j 1 --gui ../Slic3r-tests/star3-big.stl",
// "arguments": "../slic3r.pl -j 1 --gui",
// "sublimegdb_exec_cmd": "-exec-continue",
// Add "pending breakpoints" for symbols that are dynamically loaded from
// external shared libraries
"debug_ext" : true,
"run_after_init": false,
"close_views": false
}
}

View file

@ -3,7 +3,7 @@
print "This script is currently used for installing Perl dependenices for running\n"; print "This script is currently used for installing Perl dependenices for running\n";
print "the libslic3r unit / integration tests through Perl prove.\n"; print "the libslic3r unit / integration tests through Perl prove.\n";
print "If you don't plan to run the unit / integration tests, you don't need to\n"; print "If you don't plan to run the unit / integration tests, you don't need to\n";
print "install these dependencies to build and run BambuSlicer.\n"; print "install these dependencies to build and run OrcaSlicer.\n";
use strict; use strict;
use warnings; use warnings;

View file

@ -27,6 +27,19 @@ function check_available_memory_and_disk() {
fi fi
} }
function usage() {
echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]"
echo " -i: Generate appimage (optional)"
echo " -g: force gtk2 build"
echo " -b: build in debug mode"
echo " -d: build deps (optional)"
echo " -s: build orca-slicer (optional)"
echo " -u: only update clock & dependency packets (optional and need sudo)"
echo " -r: skip free ram check (low ram compiling)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
}
unset name unset name
while getopts ":dsiuhgbr" opt; do while getopts ":dsiuhgbr" opt; do
case ${opt} in case ${opt} in
@ -40,7 +53,7 @@ while getopts ":dsiuhgbr" opt; do
BUILD_DEPS="1" BUILD_DEPS="1"
;; ;;
s ) s )
BUILD_BAMBU_STUDIO="1" BUILD_ORCA="1"
;; ;;
b ) b )
BUILD_DEBUG="1" BUILD_DEBUG="1"
@ -51,16 +64,7 @@ while getopts ":dsiuhgbr" opt; do
r ) r )
SKIP_RAM_CHECK="1" SKIP_RAM_CHECK="1"
;; ;;
h ) echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" h ) usage
echo " -i: Generate appimage (optional)"
echo " -g: force gtk2 build"
echo " -b: build in debug mode"
echo " -d: build deps (optional)"
echo " -s: build orca-slicer (optional)"
echo " -u: only update clock & dependency packets (optional and need sudo)"
echo " -r: skip free ram check (low ram compiling)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
exit 0 exit 0
;; ;;
esac esac
@ -68,31 +72,16 @@ done
if [ $OPTIND -eq 1 ] if [ $OPTIND -eq 1 ]
then then
echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" usage
echo " -i: Generate appimage (optional)"
echo " -g: force gtk2 build"
echo " -b: build in debug mode"
echo " -d: build deps (optional)"
echo " -s: build orca-slicer (optional)"
echo " -u: only update clock & dependency packets (optional and need sudo)"
echo " -r: skip free ram check (low ram compiling)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
exit 0 exit 0
fi fi
# mkdir build # Addtional Dev packages for OrcaSlicer
if [ ! -d "build" ]
then
mkdir build
fi
# Addtional Dev packages for BambuStudio
export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules" export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules"
# libwebkit2gtk-4.1-dev ?? # libwebkit2gtk-4.1-dev ??
export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w)
if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then
sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file gettext
fi fi
#FIXME: require root for -u option #FIXME: require root for -u option
@ -109,11 +98,11 @@ then
echo -e "\nFind libgtk-3, installing: libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n" echo -e "\nFind libgtk-3, installing: libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n"
apt install -y libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git apt install -y libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git
fi fi
# for ubuntu 22.04: # for ubuntu 22+ and 23+:
ubu_version="$(cat /etc/issue)" ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)"
if [[ $ubu_version == "Ubuntu 22.04"* ]] if [ $ubu_major_version == "22" ] || [ $ubu_major_version == "23" ]
then then
apt install -y curl libssl-dev libcurl4-openssl-dev m4 apt install -y curl libfuse-dev libssl-dev libcurl4-openssl-dev m4
fi fi
if [[ -n "$BUILD_DEBUG" ]] if [[ -n "$BUILD_DEBUG" ]]
then then
@ -212,7 +201,13 @@ then
echo "done" echo "done"
fi fi
if [[ -n "$BUILD_BAMBU_STUDIO" ]] # Create main "build" directory
if [ ! -d "build" ]
then
mkdir build
fi
if [[ -n "$BUILD_ORCA" ]]
then then
echo "[7/9] Configuring Slic3r..." echo "[7/9] Configuring Slic3r..."
BUILD_ARGS="" BUILD_ARGS=""
@ -235,11 +230,8 @@ then
# make Slic3r # make Slic3r
echo "[8/9] Building Slic3r..." echo "[8/9] Building Slic3r..."
make -j$NCORES OrcaSlicer # Slic3r make -j$NCORES OrcaSlicer # Slic3r
# make .mo
# make gettext_po_to_mo # FIXME: DeftDawg: complains about msgfmt not existing even in SuperSlicer, did this ever work?
popd popd
./run_gettext.sh
echo "done" echo "done"
fi fi

View file

@ -42,7 +42,6 @@ set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux")
set(IS_CROSS_COMPILE FALSE) set(IS_CROSS_COMPILE FALSE)
if (APPLE) if (APPLE)
set(CMAKE_FIND_FRAMEWORK LAST) set(CMAKE_FIND_FRAMEWORK LAST)
set(CMAKE_FIND_APPBUNDLE LAST) set(CMAKE_FIND_APPBUNDLE LAST)
@ -281,6 +280,11 @@ if (APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new")
endif () endif ()
if(MSVC)
# 添加编译选项,忽略警告 C4305 (格式转换截断)
add_compile_options(/wd4305)
endif()
# Where all the bundled libraries reside? # Where all the bundled libraries reside?
set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(LIBDIR_BIN ${CMAKE_CURRENT_BINARY_DIR}/src) set(LIBDIR_BIN ${CMAKE_CURRENT_BINARY_DIR}/src)
@ -406,6 +410,7 @@ if(SLIC3R_STATIC)
set(TBB_STATIC 1) set(TBB_STATIC 1)
endif() endif()
set(TBB_DEBUG 1) set(TBB_DEBUG 1)
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO RelWithDebInfo Release "")
find_package(TBB REQUIRED) find_package(TBB REQUIRED)
# include_directories(${TBB_INCLUDE_DIRS}) # include_directories(${TBB_INCLUDE_DIRS})
# add_definitions(${TBB_DEFINITIONS}) # add_definitions(${TBB_DEFINITIONS})
@ -502,10 +507,14 @@ find_package(glfw3 REQUIRED)
# Find the Cereal serialization library # Find the Cereal serialization library
find_package(cereal REQUIRED) find_package(cereal REQUIRED)
set_target_properties(cereal PROPERTIES IMPORTED_GLOBAL TRUE)
if (NOT TARGET cereal::cereal)
add_library(cereal::cereal ALIAS cereal)
endif ()
# l10n # l10n
set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n") set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n")
set(BBL_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bbl/i18n") set(BBL_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/localization/i18n")
add_custom_target(gettext_make_pot add_custom_target(gettext_make_pot
COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost
-f "${BBL_L18N_DIR}/list.txt" -f "${BBL_L18N_DIR}/list.txt"
@ -563,6 +572,20 @@ else ()
"OpenVDB installation with the OPENVDB_FIND_MODULE_PATH cache variable.") "OpenVDB installation with the OPENVDB_FIND_MODULE_PATH cache variable.")
endif () endif ()
find_path(SPNAV_INCLUDE_DIR spnav.h)
if (SPNAV_INCLUDE_DIR)
find_library(HAVE_SPNAV spnav)
if (HAVE_SPNAV)
add_definitions(-DHAVE_SPNAV)
add_library(libspnav SHARED IMPORTED)
target_link_libraries(libspnav INTERFACE spnav)
message(STATUS "SPNAV library found")
else()
message(STATUS "SPNAV library NOT found, Spacenavd not supported")
endif()
else()
message(STATUS "SPNAV library NOT found, Spacenavd not supported")
endif()
set(TOP_LEVEL_PROJECT_DIR ${PROJECT_SOURCE_DIR}) set(TOP_LEVEL_PROJECT_DIR ${PROJECT_SOURCE_DIR})
function(orcaslicer_copy_dlls target config postfix output_dlls) function(orcaslicer_copy_dlls target config postfix output_dlls)
@ -694,7 +717,10 @@ endif()
# Resources install target, configure fhs.hpp on UNIX # Resources install target, configure fhs.hpp on UNIX
if (WIN32) if (WIN32)
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "./resources")
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
include(InstallRequiredSystemLibraries)
install (PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ".")
elseif (SLIC3R_FHS) elseif (SLIC3R_FHS)
# CMAKE_INSTALL_FULL_DATAROOTDIR: read-only architecture-independent data root (share) # CMAKE_INSTALL_FULL_DATAROOTDIR: read-only architecture-independent data root (share)
set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/OrcaSlicer") set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/OrcaSlicer")
@ -703,8 +729,8 @@ elseif (SLIC3R_FHS)
) )
install(FILES src/platform/unix/OrcaSlicer.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications) install(FILES src/platform/unix/OrcaSlicer.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
foreach(SIZE 32 128 192) foreach(SIZE 32 128 192)
install(FILES ${SLIC3R_RESOURCES_DIR}/images/BambuStudio_${SIZE}px.png install(FILES ${SLIC3R_RESOURCES_DIR}/images/OrcaSlicer_${SIZE}px.png
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME BambuStudio.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME OrcaSlicer.png
) )
endforeach() endforeach()
elseif (CMAKE_MACOSX_BUNDLE) elseif (CMAKE_MACOSX_BUNDLE)
@ -714,4 +740,34 @@ else ()
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
endif () endif ()
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE.txt DESTINATION ".")
configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp) configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp)
set (CPACK_PACKAGE_NAME "OrcaSlicer")
set (CPACK_PACKAGE_VENDOR "SoftFever")
set (CPACK_PACKAGE_VERSION_MAJOR "${ORCA_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${ORCA_VERSION_MINOR}")
set (CPACK_PACKAGE_VERSION_PATCH "${ORCA_VERSION_PATCH}")
set (CPACK_PACKAGE_FILE_NAME "OrcaSlicer_Windows_Installer_${SoftFever_VERSION}")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Orca Slicer is an open source slicer for FDM printers")
set (CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SoftFever/OrcaSlicer")
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
set (CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/images\\\\OrcaSlicer.ico")
set (CPACK_NSIS_MUI_ICON "${CPACK_PACKAGE_ICON}")
set (CPACK_NSIS_MUI_UNIICON "${CPACK_PACKAGE_ICON}")
set (CPACK_NSIS_INSTALLED_ICON_NAME "$INSTDIR\\\\orca-slicer.exe")
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
CreateShortCut \\\"$DESKTOP\\\\OrcaSlicer.lnk\\\" \\\"$INSTDIR\\\\orca-slicer.exe\\\"
")
set (CPACK_PACKAGE_CHECKSUM SHA256)
set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "OrcaSlicer")
set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set (CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
# set (CPACK_NSIS_MODIFY_PATH "ON")
set(CPACK_PACKAGE_EXECUTABLES "orca-slicer;OrcaSlicer")
set(CPACK_CREATE_DESKTOP_LINKS "orca-slicer")
set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE.txt) # must also include in install command
set(CPACK_WIX_UPGRADE_GUID "058245e8-20e0-4a95-9ab7-1acfe17ad511")
set(CPACK_GENERATOR NSIS)
include(CPack)

View file

@ -1,71 +0,0 @@
# Build Bambu Slicer in a container
#
# Build an AppImage using rootless Podman (refer to https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md):
# rm -rf build; podman build . -t orca-slicer-builder && podman run --rm localhost/orca-slicer-builder /bin/bash -c 'tar -c $(find build | grep ubu64.AppImage | head -1)' | tar -xv
#
# Troubleshooting the build container:
# podman run -it --name orca-slicer-builder localhost/orca-slicer-builder /bin/bash
#
# Debugging the resulting AppImage:
# 1) Install `gdb`
# 2) In a terminal in the same directory as the AppImage, start it with following:
# echo -e "run\nbt\nquit" | gdb ./BambuStudio_ubu64.AppImage
# 3) Find related issue using backtrace output for clues and add backtrace to it on github
#
# Docker alternative AppImage build syntax (use this if you can't install podman):
# rm -rf build; docker build . --file Containerfile -t orca-slicer-builder; docker run --rm orca-slicer-builder /bin/bash -c 'tar -c $(find build | grep ubu64.AppImage | head -1)' | tar -xv
#
#
# TODO: bind mount OrcaSlicer to inside the container instead of COPY to enable faster rebuilds during dev work.
FROM docker.io/ubuntu:20.04
LABEL maintainer "DeftDawg <DeftDawg@gmail.com>"
# Disable interactive package configuration
RUN apt-get update && \
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Add a deb-src
RUN echo deb-src http://archive.ubuntu.com/ubuntu \
$(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
git \
build-essential \
autoconf pkgconf m4 \
cmake extra-cmake-modules \
libglu1-mesa-dev libglu1-mesa-dev \
libwayland-dev libxkbcommon-dev wayland-protocols \
eglexternalplatform-dev libglew-dev \
libgtk-3-dev \
libdbus-1-dev \
libcairo2-dev \
libgtk-3-dev libwebkit2gtk-4.0-dev \
libsoup2.4-dev \
libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-base1.0-dev libgstreamerd-3-dev \
libmspack-dev \
libosmesa6-dev \
libssl-dev libcurl4-openssl-dev libsecret-1-dev \
libudev-dev \
curl \
wget \
file \
sudo
COPY ./ OrcaSlicer
WORKDIR OrcaSlicer
# These can run together, but we run them seperate for podman caching
# Update System dependencies
RUN ./BuildLinux.sh -u
# Build dependencies in ./deps
RUN ./BuildLinux.sh -d
# Build slic3r
RUN ./BuildLinux.sh -s
# Build AppImage
ENV container podman
RUN ./BuildLinux.sh -i

View file

@ -1,15 +0,0 @@
#!/bin/bash
PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
set -x
# Wishlist hint: For developers, creating a Docker Compose
# setup with persistent volumes for the build & deps directories
# would speed up recompile times significantly. For end users,
# the simplicity of a single Docker image and a one-time compilation
# seems better.
docker build -t bambustudio \
--build-arg USER=$USER \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
$PROJECT_ROOT

View file

@ -1,25 +0,0 @@
#!/bin/bash
set -x
# Just in case, here's some other things that might help:
# Force the container's hostname to be the same as your workstation
# -h $HOSTNAME \
# If there's problems with the X display, try this
# -v /tmp/.X11-unix:/tmp/.X11-unix \
docker run \
`# Use the hosts networking. Printer wifi and also dbus communication` \
--net=host \
`# Some X installs will not have permissions to talk to sockets for shared memory` \
--ipc host \
`# Run as your workstations username to keep permissions the same` \
-u $USER \
`# Bind mount your home directory into the container for loading/saving files` \
-v $HOME:/home/$USER \
`# Pass the X display number to the container` \
-e DISPLAY=$DISPLAY \
`# It seems that libGL and dbus things need privileged mode` \
--privileged=true \
`# Attach tty for running bambu with command line things` \
-ti \
`# Pass all parameters from this script to the bambu ENTRYPOINT binary` \
bambustudio $*

View file

@ -1,94 +0,0 @@
FROM docker.io/ubuntu:20.04
LABEL maintainer "DeftDawg <DeftDawg@gmail.com>"
# Disable interactive package configuration
RUN apt-get update && \
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Add a deb-src
RUN echo deb-src http://archive.ubuntu.com/ubuntu \
$(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
autoconf \
build-essential \
cmake \
curl \
eglexternalplatform-dev \
extra-cmake-modules \
file \
git \
gstreamer1.0-plugins-bad \
gstreamer1.0-libav \
libcairo2-dev \
libcurl4-openssl-dev \
libdbus-1-dev \
libglew-dev \
libglu1-mesa-dev \
libglu1-mesa-dev \
libgstreamer1.0-dev \
libgstreamerd-3-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-good1.0-dev \
libgtk-3-dev \
libgtk-3-dev \
libmspack-dev \
libosmesa6-dev \
libsecret-1-dev \
libsoup2.4-dev \
libssl-dev \
libudev-dev \
libwayland-dev \
libwebkit2gtk-4.0-dev \
libxkbcommon-dev \
locales \
locales-all \
m4 \
pkgconf \
sudo \
wayland-protocols \
wget
# Change your locale here if you want. See the output
# of `locale -a` to pick the correct string formatting.
ENV LC_ALL=en_US.utf8
RUN locale-gen $LC_ALL
# Set this so that Orca Slicer doesn't complain about
# the CA cert path on every startup
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
COPY ./ BambuStudio
WORKDIR BambuStudio
# These can run together, but we run them seperate for podman caching
# Update System dependencies
RUN ./BuildLinux.sh -u
# Build dependencies in ./deps
RUN ./BuildLinux.sh -d
# Build slic3r
RUN ./BuildLinux.sh -s
# Build AppImage
ENV container podman
RUN ./BuildLinux.sh -i
# It's easier to run Orca Slicer as the same username,
# UID and GID as your workstation. Since we bind mount
# your home directory into the container, it's handy
# to keep permissions the same. Just in case, defaults
# are root.
SHELL ["/bin/bash", "-l", "-c"]
ARG USER=root
ARG UID=0
ARG GID=0
RUN [[ "$UID" != "0" ]] \
&& groupadd -g $GID $USER \
&& useradd -u $UID -g $GID $USER
# Using an entrypoint instead of CMD because the binary
# accepts several command line arguments.
ENTRYPOINT ["/BambuStudio/build/package/bin/orca-slicer"]

View file

@ -1,17 +1,9 @@
[![Build OrcaSlicer](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_orca.yml/badge.svg?branch=main)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_orca.yml)
[![Build Win64](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_win.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_win.yml) # Orca Slicer
[![Build Mac AppleSilicon](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_arm64.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_arm64.yml) Orca Slicer is an open source slicer for FDM printers.
[![Build Mac Intel](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_x64.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_x64.yml) You can download Orca Slicer here: [github releases page](https://github.com/SoftFever/OrcaSlicer/releases/).
[![Build Linux](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_linux.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_linux.yml) ![discord-mark-blue](https://github.com/SoftFever/OrcaSlicer/assets/103989404/b97d5ffc-072d-4d0a-bbda-e67ef373876f) Join community: [OrcaSlicer Official Discord Server](https://discord.gg/WTEkCR6SnV)
# Orca Slicer
Orca Slicer is a fork of Bambu Studio. It was previously known as BambuStudio-SoftFever.
Bambu Studio is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community.
Orca Slicer incorporates a lot of features from SuperSlicer by @supermerill
Prebuilt binaries are available through the [github releases page](https://github.com/SoftFever/OrcaSlicer/releases/).
# Main features # Main features
- Auto calibrations for all printers - Auto calibrations for all printers
@ -21,29 +13,41 @@ Prebuilt binaries are available through the [github releases page](https://githu
- More granular controls - More granular controls
- More features can be found in [change notes](https://github.com/SoftFever/OrcaSlicer/releases/) - More features can be found in [change notes](https://github.com/SoftFever/OrcaSlicer/releases/)
### Some background
OrcaSlicer is fork of Bambu Studio
It was previously known as BambuStudio-SoftFever
Bambu Studio is forked from [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community.
Orca Slicer incorporates a lot of features from SuperSlicer by @supermerill
Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr)
# How to install # How to install
**Windows**: **Windows**:
1. Unzip the binaries to any folder you prefer, then execute orca-slicer.exe to start the application. 1. Install and run
- *If you have troubles to run the build, you might need to install following runtimes:* - *If you have troubles to run the build, you might need to install following runtimes:*
- [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe) - [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe)
- [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.exe) - [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.exe)
**Mac**: **Mac**:
1. Download the right binaries for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU. 1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU.
2. Double click to unzip the package, move OrcaSlicer.app to Application folder. 2. Drag OrcaSlicer.app to Application folder.
3. The app is signed but not notarized at the moment due to the proptiery network plugin. 3. *If you want to run a build from a PR, you also need following instructions bellow*
We have two options to make it run on our machines <details quarantine>
- Option 1: - Option 1 (You only need to do this once. After that the app can be oppened normally.):
Execute this command in terminal: `xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app` - Step 1: Hold _cmd_ and right click the app, from the context menu choose **Open**.
```console - Step 2: A warning window will pop up, click _Open_
softfever@mac:~$ xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app
``` - Option 2:
- Option 2: Execute this command in terminal: `xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app`
- Step 1: open the app, a warning window will pop up ```console
![image](./SoftFever_doc/mac_cant_open.png) softfever@mac:~$ xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app
- Step 2: in `System Settings` -> `Privacy & Security`, click `Open Anyway`: ```
![image](./SoftFever_doc/mac_security_setting.png) - Option 3:
- Step 1: open the app, a warning window will pop up
![image](./SoftFever_doc/mac_cant_open.png)
- Step 2: in `System Settings` -> `Privacy & Security`, click `Open Anyway`:
![image](./SoftFever_doc/mac_security_setting.png)
</details>
**Linux(Ubuntu)**: **Linux(Ubuntu)**:
1. If you run into trouble to execute it, try this command in terminal: 1. If you run into trouble to execute it, try this command in terminal:
`chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage` `chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage`
@ -57,7 +61,8 @@ Prebuilt binaries are available through the [github releases page](https://githu
- run `build_release_macos.sh` - run `build_release_macos.sh`
- Ubuntu - Ubuntu
- run `BuildLinux.sh -udisr` - run 'sudo ./BuildLinux.sh -u'
- run './BuildLinux.sh -dsir'
# Note: # Note:
@ -71,6 +76,22 @@ If you're running Klipper, it's recommended to add the following configuration t
resolution: 0.1 resolution: 0.1
``` ```
# Supports
**Orca Slicer** is an open-source project, and I'm deeply grateful to all my sponsors and backers.
Their generous support enables me to purchase filaments and other essential 3D printing materials for the project.
Thank you! :)
### Sponsors:
<a href="https://peopoly.net/">
<img src="SoftFever_doc\sponsor_logos\peopoly-standard-logo.png" alt="Peopoly" width="64" height="">
</a>
### Backers:
*todo: extract ko-fi backers list*
Support me
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G5IP3CP)
# License # License
Orca Slicer is licensed under the GNU Affero General Public License, version 3. Orca Slicer is based on Bambu Studio by BambuLab. Orca Slicer is licensed under the GNU Affero General Public License, version 3. Orca Slicer is based on Bambu Studio by BambuLab.
@ -82,5 +103,7 @@ Slic3r is licensed under the GNU Affero General Public License, version 3. Slic3
The GNU Affero General Public License, version 3 ensures that if you use any part of this software in any way (even behind a web server), your software must be released under the same license. The GNU Affero General Public License, version 3 ensures that if you use any part of this software in any way (even behind a web server), your software must be released under the same license.
The bambu networking plugin is based on non-free libraries. It is optional to the Orca Slicer and provides extended functionalities for users. Orca Slicer includes a pressure advance calibration pattern test adapted from Andrew Ellis' generator, which is licensed under GNU General Public License, version 3. Ellis' generator is itself adapted from a generator developed by Sineos for Marlin, which is licensed under GNU General Public License, version 3.
The bambu networking plugin is based on non-free libraries from Bambulab. It is optional to the Orca Slicer and provides extended functionalities for Bambulab printer users.

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View file

@ -1,4 +0,0 @@
# Add individual tools as executables in separate directories
add_subdirectory(bbs_gcode_checker)
install(TARGETS bbs_gcode_checker RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}")

View file

@ -1,6 +0,0 @@
cmake_minimum_required (VERSION 3.8)
project ("bbs_gcode_checker")
add_executable (bbs_gcode_checker "main.cpp" "GCodeChecker.cpp" "GCodeChecker.h" )

View file

@ -1,702 +0,0 @@
#include "GCodeChecker.h"
#include <fstream>
#include <math.h>
#include <map>
#include <string.h>
namespace BambuStudio {
//BBS: only check wodth when dE is longer than this value
const double CHECK_WIDTH_E_THRESHOLD = 0.0025;
const double WIDTH_THRESHOLD = 0.02;
const double RADIUS_THRESHOLD = 0.005;
const double filament_diameter = 1.75;
const double Pi = 3.14159265358979323846;
const std::string Extrusion_Role_Tag = " FEATURE: ";
const std::string Width_Tag = " LINE_WIDTH: ";
const std::string Wipe_Start_Tag = " WIPE_START";
const std::string Wipe_End_Tag = " WIPE_END";
const std::string Layer_Change_Tag = " CHANGE_LAYER";
const std::string Height_Tag = " LAYER_HEIGHT: ";
const std::string filament_flow_ratio_tag = " filament_flow_ratio";
const std::string nozzle_temperature_Tag = " nozzle_temperature =";
const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_initial_layer";
const std::string Z_HEIGHT_TAG = " Z_HEIGHT: ";
const std::string Initial_Layer_Ptint_Height_Tag = " initial_layer_print_height =";
GCodeCheckResult GCodeChecker::parse_file(const std::string& path)
{
std::ifstream file(path);
if (file.fail()) {
std::cout << "Failed to open file " << path << std::endl;
return GCodeCheckResult::ParseFailed;
}
std::string line_raw;
std::string line;
while (std::getline(file, line_raw)) {
const char *c = line_raw.c_str();
c = skip_whitespaces(c);
if (std::toupper(*c) == 'N')
c = skip_word(c);
c = skip_whitespaces(c);
line = c;
if (parse_line(line) != GCodeCheckResult::Success) {
std::cout << "Failed to parse line " << line_raw << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
if (m_layer_num == 0) {
std::cout << "Invalid gcode file without layer change comment" << std::endl;
return GCodeCheckResult::ParseFailed;
}
return GCodeCheckResult::Success;
}
bool GCodeChecker::include_chinese(const char* str)
{
char c;
while(1)
{
c=*str++;
if (is_end_of_line(c))
break;
if ((c & 0x80) && (*str & 0x80))
return true;
}
return false;
}
GCodeCheckResult GCodeChecker::parse_line(const std::string& line)
{
// update start position
m_start_position = m_end_position;
GCodeCheckResult ret;
const char *c = skip_whitespaces(line.c_str());
if (include_chinese(c)) {
//chinese is forbidden
return GCodeCheckResult::ParseFailed;
} if (is_end_of_line(*c)) {
//BBS: skip empty line
return GCodeCheckResult::Success;
} else if (is_comment_line(*c)) {
GCodeLine gcode_line;
gcode_line.m_raw = c;
ret = parse_comment(gcode_line);
if (ret != GCodeCheckResult::Success)
return ret;
} else {
GCodeLine gcode_line;
gcode_line.m_raw = c;
ret = parse_command(gcode_line);
if (ret != GCodeCheckResult::Success)
return ret;
ret = check_line_width(gcode_line);
if (ret != GCodeCheckResult::Success)
return ret;
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
{
const char *c = line.m_raw.c_str();
c++;
std::string comment = c;
// extrusion role tag
if (starts_with(comment, Extrusion_Role_Tag)) {
m_role = string_to_role(comment.substr(Extrusion_Role_Tag.length()));
if (m_role == erExternalPerimeter) {
if (z_height == initial_layer_height && nozzle_temp != nozzle_temperature_initial_layer[filament_id]) {
std::cout << "invalid filament nozzle initial layer temperature comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
if (z_height != initial_layer_height && nozzle_temp != nozzle_temperature[filament_id]) {
std::cout << "invalid filament nozzle temperature comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
} else if (starts_with(comment, Wipe_Start_Tag)) {
m_wiping = true;
} else if (starts_with(comment, Wipe_End_Tag)) {
m_wiping = false;
} else if (starts_with(comment, Height_Tag)) {
std::string str = comment.substr(Height_Tag.size());
if (!parse_double_from_str(str, m_height)) {
std::cout << "invalid height comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
} else if (starts_with(comment, Width_Tag)) {
std::string str = comment.substr(Width_Tag.size());
if (!parse_double_from_str(str, m_width)) {
std::cout << "invalid width comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
} else if (starts_with(comment, Layer_Change_Tag)) {
m_layer_num++;
} else if (starts_with(comment, filament_flow_ratio_tag))
{
std::string str = comment.substr(filament_flow_ratio_tag.size()+3);
if (!parse_double_from_str(str, filament_flow_ratio))
{
std::cout << "invalid filament flow ratio comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
else if (starts_with(comment, nozzle_temperature_Tag)) {
std::string str = comment.substr(nozzle_temperature_Tag.size() + 1);
if (!parse_double_from_str(str, nozzle_temperature)) {
std::cout << "invalid nozzle temperature comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
else if (starts_with(comment, nozzle_temperature_initial_layer_Tag)) {
std::string str = comment.substr(nozzle_temperature_initial_layer_Tag.size() + 3);
if (!parse_double_from_str(str, nozzle_temperature_initial_layer)) {
std::cout << "invalid nozzle temperature initial layer comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
} else if (starts_with(comment, Z_HEIGHT_TAG)) {
std::string str = comment.substr(Z_HEIGHT_TAG.size());
if (!parse_double_from_str(str, z_height)) {
std::cout << "invalid z height comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
} else if (starts_with(comment, Initial_Layer_Ptint_Height_Tag)) {
std::string str = comment.substr(Initial_Layer_Ptint_Height_Tag.size());
if (!parse_double_from_str(str, initial_layer_height)) {
std::cout << "invalid initial layer height comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_command(GCodeLine& gcode_line)
{
const std::string cmd = gcode_line.cmd();
GCodeCheckResult ret = GCodeCheckResult::Success;
switch (::toupper(cmd[0])) {
case 'G':
{
switch (::atoi(&cmd[1]))
{
case 0:
case 1: { ret = parse_G0_G1(gcode_line); break; } // Move
case 2:
case 3: { ret = parse_G2_G3(gcode_line); break; } // Move
case 90: { ret = parse_G90(gcode_line); break; } // Set to Absolute Positioning
case 91: { ret = parse_G91(gcode_line); break; } // Set to Relative Positioning
case 92: { ret = parse_G92(gcode_line); break; } // Set Position
default: { break; }
}
break;
}
case 'M':{
switch (::atoi(&cmd[1]))
{
case 82: { ret = parse_M82(gcode_line); break; } // Set to Absolute extrusion
case 83: { ret = parse_M83(gcode_line); break; } // Set to Relative extrusion
case 104: {
ret = parse_M104_M109(gcode_line);
break;
} // Set to nozzle temperature
case 109: {
ret = parse_M104_M109(gcode_line);
break;
} // Set to nozzle temperature
default: { break; }
}
break;
}
case 'T':{
int pt = ::atoi(&cmd[1]);
if (pt == 1000 || pt == 1100 || pt == 255) {
break;
}
if (pt < 0 || pt > 254 || pt >= filament_flow_ratio.size()) {
std::cout << "Invalid T command"<<std::endl;
ret = GCodeCheckResult::ParseFailed;
break;
}
filament_id = pt;
flow_ratio = filament_flow_ratio[pt];
break;
}
default: {
//BBS: other g command? impossible! must be invalid
ret = GCodeCheckResult::ParseFailed;
break;
}
}
return ret;
}
GCodeCheckResult GCodeChecker::parse_axis(GCodeLine& gcode_line)
{
const std::string cmd = gcode_line.m_raw;
const char* c = cmd.c_str();
c = skip_word(c);
while (! is_end_of_gcode_line(*c)) {
c = skip_whitespaces(c);
if (is_end_of_gcode_line(*c))
break;
Axis axis = UNKNOWN_AXIS;
switch (*c) {
case 'X': axis = X; break;
case 'Y': axis = Y; break;
case 'Z': axis = Z; break;
case 'E': axis = E; break;
case 'F': axis = F; break;
case 'I': axis = I; break;
case 'J': axis = J; break;
case 'P': axis = P; break;
default:
//BBS: invalid command which has invalid axis
std::cout << "Invalid gcode because of invalid axis!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
char *pend = nullptr;
double v = strtod(++c, &pend);
if (pend != nullptr && is_end_of_word(*pend) && !isnan(v) && !isinf(v)) {
gcode_line.m_axis[int(axis)] = v;
if (gcode_line.m_mask & (1 << int(axis))) {
//BBS: invalid command which has duplicated axis
std::cout << "Invalid gcode because of duplicated axis!" << std::endl;
return GCodeCheckResult::ParseFailed;
} else {
gcode_line.m_mask |= 1 << int(axis);
}
if (c == pend) {
//BBS: invalid command which has invalid axis value
std::cout << "Invalid gcode because of invalid axis value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
c = pend;
} else {
//BBS: invalid command for invalid axis value
std::cout << "Invalid gcode because of invalid axis value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_G0_G1(GCodeLine& gcode_line)
{
if (parse_axis(gcode_line) != GCodeCheckResult::Success)
return GCodeCheckResult::ParseFailed;
//BBS: invalid G1 command which has no axis or invalid axis
if ((!gcode_line.m_mask) ||
gcode_line.has(I) ||
gcode_line.has(J)) {
std::cout << "Invalid G0_G1 gcode because of no axis or invalid axis!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
//BBS: invalid G1 command which has zero speed
if (gcode_line.has(F) && gcode_line.get(F) == 0.0) {
std::cout << "Invalid G0_G1 gcode because has F axis but 0 speed!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_G2_G3(GCodeLine& gcode_line)
{
if (parse_axis(gcode_line) != GCodeCheckResult::Success)
return GCodeCheckResult::ParseFailed;
//BBS: invalid G2_G3 command which has no axis or Z axis
if (!gcode_line.m_mask) {
std::cout << "Invalid G2_G3 gcode because of no axis or has Z axis!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
//BBS: invalid G2_G3 command which has zero speed
if (gcode_line.has(F) && gcode_line.get(F) == 0.0) {
std::cout << "Invalid G2_G3 gcode because has F axis but 0 speed!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
//BBS: invalid G2_G3 command which has no I and J axis
if (!gcode_line.has(I) &&
!gcode_line.has(J)) {
std::cout << "Invalid G2_G3 gcode because of no I and J axis at same time!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
//BBS: invalid G2_G3 command which has no X and Y axis at same time
if (!gcode_line.has(X) && !gcode_line.has(Y) && !gcode_line.has(I) && !gcode_line.has(J)) {
if (!gcode_line.has(X) || !gcode_line.has(P) || (int)gcode_line.get(P) != 1) {
std::cout << "Invalid G2_G3 gcode because of no X and Y axis at same time!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_G90(const GCodeLine& gcode_line)
{
const char* c = gcode_line.m_raw.c_str();
//BBS: G90 is single command with no argument
if (!is_single_gcode_word(c)) {
std::cout << "Invalid G90 gcode with invalid end!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
m_global_positioning_type = EPositioningType::Absolute;
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_G91(const GCodeLine& gcode_line)
{
const char* c = gcode_line.m_raw.c_str();
//BBS: G91 is single command with no argument
if (!is_single_gcode_word(c)) {
std::cout << "Invalid G91 gcode with invalid end!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
m_global_positioning_type = EPositioningType::Relative;
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_G92(GCodeLine& gcode_line)
{
if (parse_axis(gcode_line) != GCodeCheckResult::Success)
return GCodeCheckResult::ParseFailed;
//BBS: invalid G92 command which has no axis or invalid axis
if (!gcode_line.m_mask ||
gcode_line.has(F) ||
gcode_line.has(I) ||
gcode_line.has(J)) {
std::cout << "Invalid G2_G3 gcode because of no axis or invalid axis!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
if (gcode_line.has(X))
m_origin[X] = m_end_position[X] - gcode_line.get(X);
if (gcode_line.has(Y))
m_origin[Y] = m_end_position[Y] - gcode_line.get(Y);
if (gcode_line.has(Z))
m_origin[Z] = m_end_position[Z] - gcode_line.get(Z);
if (gcode_line.has(E))
m_end_position[E] = gcode_line.get(E);
for (unsigned char a = X; a <= E; ++a) {
m_origin[a] = m_end_position[a];
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_M82(const GCodeLine& gcode_line)
{
const char* c = gcode_line.m_raw.c_str();
//BBS: M82 is single command with no argument
if (!is_single_gcode_word(c)) {
std::cout << "Invalid M82 gcode with invalid end!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
m_e_local_positioning_type = EPositioningType::Absolute;
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_M83(const GCodeLine& gcode_line)
{
const char* c = gcode_line.m_raw.c_str();
//BBS: M83 is single command with no argument
if (!is_single_gcode_word(c)) {
std::cout << "Invalid M83 gcode with invalid end!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
m_e_local_positioning_type = EPositioningType::Relative;
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::parse_M104_M109(const GCodeLine &gcode_line)
{
const char *c = gcode_line.m_raw.c_str();
const char *rs = strchr(c,'S');
std::string str=rs;
str = str.substr(1);
for (int i = 0; i < str.size(); i++) {
if (str[i] == ' ')
str=str.substr(0,i);
}
if (!parse_double_from_str(str, nozzle_temp)) {
std::cout << "invalid nozzle temperature comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
return GCodeCheckResult::Success;
}
double GCodeChecker::calculate_G1_width(const std::array<double, 3>& source,
const std::array<double, 3>& target,
double e, double height, bool is_bridge) const
{
double volume = (e / flow_ratio) * Pi * (filament_diameter / 2.0f) * (filament_diameter / 2.0f);
std::array<double, 3> delta = { target[0] - source[0],
target[1] - source[1],
target[2] - source[2] };
double length = sqrt(delta[0] * delta[0] + delta[1] * delta[1] + delta[2] * delta[2]);
double mm3_per_mm = volume / length;
return is_bridge? 2 * sqrt(mm3_per_mm/Pi) :
(mm3_per_mm / height) + height * (1 - 0.25 * Pi);
}
double GCodeChecker::calculate_G2_G3_width(const std::array<double, 2>& source,
const std::array<double, 2>& target,
const std::array<double, 2>& center,
bool is_ccw, double e, double height,
bool is_bridge) const
{
std::array<double, 2> v1 = { source[0] - center[0], source[1] - center[1] };
std::array<double, 2> v2 = { target[0] - center[0], target[1] - center[1] };
double dot = v1[0] * v2[0] + v1[1] * v2[1];
double cross = v1[0] * v2[1] - v1[1] * v2[0];
double radian = atan2(cross, dot);
radian = is_ccw ?
(radian < 0 ? 2 * Pi + radian : radian) :
(radian < 0 ? -radian : 2 * Pi - radian);
double radius = sqrt(v1[0] * v1[0] + v1[1] * v1[1]);
double length = radius * radian;
double volume = (e / flow_ratio) * Pi * (filament_diameter / 2) * (filament_diameter / 2);
double mm3_per_mm = volume / length;
return is_bridge? 2 * sqrt(mm3_per_mm/Pi) :
(mm3_per_mm / height) + height * (1 - 0.25 * Pi);
}
GCodeCheckResult GCodeChecker::check_line_width(const GCodeLine& gcode_line)
{
//BBS: don't need to check extrusion before first layer
if (m_layer_num <= 0) {
return GCodeCheckResult::Success;
}
GCodeCheckResult ret = GCodeCheckResult::Success;
//BBS: only need to handle G0 G1 G2 G3
const std::string cmd = gcode_line.cmd();
int cmd_id = ::atoi(&cmd[1]);
if (::toupper(cmd[0]) == 'G')
switch (::atoi(&cmd[1]))
{
case 0:
case 1: { ret = check_G0_G1_width(gcode_line); break; }
case 2:
case 3: { ret = check_G2_G3_width(gcode_line); break; }
default: { break; }
}
return ret;
}
GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
{
auto absolute_position = [this](Axis axis, const GCodeLine& lineG1) {
bool is_relative = (m_global_positioning_type == EPositioningType::Relative);
if (axis == E)
is_relative |= (m_e_local_positioning_type == EPositioningType::Relative);
if (lineG1.has(Axis(axis))) {
double ret = lineG1.get(Axis(axis));
return is_relative ? m_start_position[axis] + ret : m_origin[axis] + ret;
} else
return m_start_position[axis];
};
auto move_type = [this](const std::array<double, 4>& delta_pos) {
EMoveType type = EMoveType::Noop;
if (m_wiping)
type = EMoveType::Wipe;
else if (delta_pos[E] < 0.0f)
type = (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) ? EMoveType::Travel : EMoveType::Retract;
else if (delta_pos[E] > 0.0f) {
if (delta_pos[X] == 0.0f && delta_pos[Y] == 0.0f)
type = (delta_pos[Z] == 0.0f) ? EMoveType::Unretract : EMoveType::Travel;
else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f)
type = EMoveType::Extrude;
}
else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f)
type = EMoveType::Travel;
return type;
};
for (unsigned char a = X; a <= E; ++a) {
m_end_position[a] = absolute_position((Axis)a, line);
}
// calculates movement deltas
std::array<double, 4> delta_pos;
for (unsigned char a = X; a <= E; ++a)
delta_pos[a] = m_end_position[a] - m_start_position[a];
// Todo: currently, for precision, there alwasy has possible to generate
// such gcode because of decimal truncation
/*if (line.has(Axis(E)) && delta_pos[E] == 0.0 && !m_wiping) {
std::cout << "Invalid GCode because has E axis but 0 extrusion" << std::endl;
return GCodeCheckResult::CheckFailed;
}*/
EMoveType type = move_type(delta_pos);
if (type == EMoveType::Extrude && m_end_position[Z] == 0.0f)
type = EMoveType::Travel;
//BBS: calculate line width and compare.
//Don't need to check gap fill which has verious width
if (type == EMoveType::Extrude &&
m_role != erGapFill &&
delta_pos[E] > CHECK_WIDTH_E_THRESHOLD) {
std::array<double, 3> source = { m_start_position[X], m_start_position[Y], m_start_position[Z] };
std::array<double, 3> target = { m_end_position[X], m_end_position[Y], m_end_position[Z] };
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
if (!is_bridge) {
double width_real = calculate_G1_width(source, target, delta_pos[E], m_height, is_bridge);
if (fabs(width_real - m_width) > WIDTH_THRESHOLD) {
std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl;
std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl;
return GCodeCheckResult::CheckFailed;
}
}
}
return GCodeCheckResult::Success;
}
GCodeCheckResult GCodeChecker::check_G2_G3_width(const GCodeLine& line)
{
auto absolute_position = [this](Axis axis, const GCodeLine& lineG2_3) {
bool is_relative = (m_global_positioning_type == EPositioningType::Relative);
if (axis == E)
is_relative |= (m_e_local_positioning_type == EPositioningType::Relative);
if (lineG2_3.has(Axis(axis))) {
double ret = lineG2_3.get(Axis(axis));
if (axis == I)
return m_start_position[X] + ret;
else if (axis == J)
return m_start_position[Y] + ret;
else
return is_relative ? m_start_position[axis] + ret : m_origin[axis] + ret;
} else {
if (axis == I)
return m_start_position[X];
else if (axis == J)
return m_start_position[Y];
else
return m_start_position[axis];
}
};
auto move_type = [this](const double& delta_E) {
EMoveType type = EMoveType::Noop;
if (m_wiping)
type = EMoveType::Wipe;
else if (delta_E < 0.0f || delta_E == 0.0f)
type = EMoveType::Travel;
else
type = EMoveType::Extrude;
return type;
};
for (unsigned char a = X; a <= E; ++a) {
m_end_position[a] = absolute_position((Axis)a, line);
}
std::array<double, 2> source = { m_start_position[X], m_start_position[Y] };
std::array<double, 2> target = { m_end_position[X], m_end_position[Y] };
std::array<double, 2> center = { absolute_position(I, line),absolute_position(J, line) };
const std::string& cmd = line.cmd();
bool is_ccw = (::atoi(&cmd[1]) == 2) ? false : true;
double delta_e = m_end_position[E] - m_start_position[E];
EMoveType type = move_type(delta_e);
//BBS: judge whether is normal arc by radius
double radius1 = sqrt(pow((source[0] - center[0]), 2) + pow((source[1] - center[1]), 2));
double radius2 = sqrt(pow((target[0] - center[0]), 2) + pow((target[1] - center[1]), 2));
if (fabs(radius2 - radius1) > RADIUS_THRESHOLD) {
std::cout << "Invalid G2_G3 because of abnormal radius." << std::endl;
std::cout << "radius1: " << radius1 << " radius2: " << radius2 << std::endl;
return GCodeCheckResult::CheckFailed;
}
//BBS: calculate line width and compare
//Don't need to check gap fill which has verious width
if (type == EMoveType::Extrude &&
m_role != erGapFill &&
delta_e > CHECK_WIDTH_E_THRESHOLD) {
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
if (!is_bridge) {
double width_real = calculate_G2_G3_width(source, target, center, is_ccw, delta_e, m_height, is_bridge);
if (fabs(width_real - m_width) > WIDTH_THRESHOLD) {
std::cout << "Invalid G2_G3 because has abnormal line width." << std::endl;
std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl;
return GCodeCheckResult::CheckFailed;
}
}
}
return GCodeCheckResult::Success;
}
const std::map<std::string, ExtrusionRole> string_to_role_map = {
{ "Inner wall", erPerimeter },
{ "Outer wall", erExternalPerimeter },
{ "Overhang wall", erOverhangPerimeter },
{ "Sparse infill", erInternalInfill },
{ "Internal solid infill", erSolidInfill },
{ "Top surface", erTopSolidInfill },
{ "Bottom surface", erBottomSurface },
{ "Ironing", erIroning },
{ "Bridge", erBridgeInfill },
{ "Gap infill", erGapFill },
{ "Skirt", erSkirt },
{ "Brim", erBrim },
{ "Support", erSupportMaterial },
{ "Support interface", erSupportMaterialInterface },
{ "Support transition", erSupportTransition },
{ "Prime tower", erWipeTower },
{ "Custom", erCustom },
{ "Mixed", erMixed }
};
ExtrusionRole GCodeChecker::string_to_role(const std::string &role)
{
for (auto it = string_to_role_map.begin(); it != string_to_role_map.end(); it++) {
if (role == it->first)
return it->second;
}
return erNone;
}
}

View file

@ -1,222 +0,0 @@
#ifndef _GCodeChecker_H_
#define _GCodeChecker_H_
#include <iostream>
#include <string>
#include <vector>
#include <array>
namespace BambuStudio {
enum class GCodeCheckResult : unsigned char
{
Success,
ParseFailed,
CheckFailed,
Count
};
enum class EMoveType : unsigned char
{
Noop,
Retract,
Unretract,
Tool_change,
Color_change,
Pause_Print,
Custom_GCode,
Travel,
Wipe,
Extrude,
Count
};
enum Axis {
X=0,
Y,
Z,
E,
F,
I,
J,
P,
NUM_AXES,
UNKNOWN_AXIS = NUM_AXES,
};
enum ExtrusionRole : uint8_t {
erNone,
erPerimeter,
erExternalPerimeter,
erOverhangPerimeter,
erInternalInfill,
erSolidInfill,
erTopSolidInfill,
erBottomSurface,
erIroning,
erBridgeInfill,
erGapFill,
erSkirt,
erBrim,
erSupportMaterial,
erSupportMaterialInterface,
erSupportTransition,
erWipeTower,
erCustom,
// Extrusion role for a collection with multiple extrusion roles.
erMixed,
erCount
};
class GCodeChecker {
public:
class GCodeLine {
public:
GCodeLine() {}
const std::string cmd() const {
const char *cmd = GCodeChecker::skip_whitespaces(m_raw.c_str());
return std::string(cmd, GCodeChecker::skip_word(cmd) - cmd);
}
bool has(Axis axis) const { return (m_mask & (1 << int(axis))) != 0; }
double get(Axis axis) const { return m_axis[int(axis)]; }
std::string m_raw;
double m_axis[NUM_AXES] = { 0.0f };
uint32_t m_mask = 0;
};
enum class EPositioningType : unsigned char
{
Absolute,
Relative
};
GCodeChecker() {}
GCodeCheckResult parse_file(const std::string& path);
private:
bool include_chinese(const char* str);
GCodeCheckResult parse_line(const std::string& line);
GCodeCheckResult parse_command(GCodeLine& gcode_line);
GCodeCheckResult parse_axis(GCodeLine& gcode_line);
GCodeCheckResult parse_G0_G1(GCodeLine& gcode_line);
GCodeCheckResult parse_G2_G3(GCodeLine& gcode_line);
GCodeCheckResult parse_G90(const GCodeLine& gcode_line);
GCodeCheckResult parse_G91(const GCodeLine& gcode_line);
GCodeCheckResult parse_G92(GCodeLine& gcode_line);
GCodeCheckResult parse_M82(const GCodeLine& gcode_line);
GCodeCheckResult parse_M83(const GCodeLine& gcode_line);
GCodeCheckResult parse_M104_M109(const GCodeLine &gcode_line);
GCodeCheckResult parse_comment(GCodeLine& gcode_line);
GCodeCheckResult check_line_width(const GCodeLine& gcode_line);
GCodeCheckResult check_G0_G1_width(const GCodeLine& gcode_line);
GCodeCheckResult check_G2_G3_width(const GCodeLine& gcode_line);
double calculate_G1_width(const std::array<double, 3>& source,
const std::array<double, 3>& target,
double e, double height, bool is_bridge) const;
double calculate_G2_G3_width(const std::array<double, 2>& source,
const std::array<double, 2>& target,
const std::array<double, 2>& center,
bool is_ccw, double e, double height, bool is_bridge) const;
public:
static bool is_whitespace(char c) { return c == ' ' || c == '\t'; }
static bool is_end_of_line(char c) { return c == '\r' || c == '\n' || c == 0; }
static bool is_comment_line(char c) { return c == ';'; }
static bool is_end_of_gcode_line(char c) { return is_comment_line(c) || is_end_of_line(c); }
static bool is_end_of_word(char c) { return is_whitespace(c) || is_end_of_gcode_line(c); }
static const char* skip_word(const char *c) {
for (; ! is_end_of_word(*c); ++ c)
; // silence -Wempty-body
return c;
}
static const char* skip_whitespaces(const char *c) {
for (; is_whitespace(*c); ++ c)
; // silence -Wempty-body
return c;
}
static bool is_single_gcode_word(const char* c) {
c = skip_word(c);
c = skip_whitespaces(c);
return is_end_of_gcode_line(*c);
}
static bool starts_with(const std::string &comment, const std::string &tag) {
size_t tag_len = tag.size();
return comment.size() >= tag_len && comment.substr(0, tag_len) == tag;
}
static ExtrusionRole string_to_role(const std::string& role);
//BBS: Returns true if the number was parsed correctly into out and the number spanned the whole input string.
static bool parse_double_from_str(const std::string& input, double& out) {
size_t read = 0;
try {
out = std::stod(input, &read);
return input.size() == read;
} catch (...) {
return false;
}
}
static bool parse_double_from_str(const std::string &input, std::vector<double> &out)
{
std::string cmd=input;
size_t read = 0;
while (cmd.size() >= 5)
{
int pt = 0;
for (pt = 0; pt < cmd.size(); pt++) {
char temp = cmd[pt];
if (temp == ',')
{
try {
double num = std::stod(cmd.substr(0, pt), &read);
out.push_back(num);
cmd = cmd.substr(pt+1);
break;
} catch (...) {
return false;
}
}
}
}
double num = std::stod(cmd, &read);
out.push_back(num);
return true;
}
private:
EPositioningType m_global_positioning_type = EPositioningType::Absolute;
EPositioningType m_e_local_positioning_type = EPositioningType::Absolute;
std::array<double, 4> m_start_position = { 0.0, 0.0, 0.0, 0.0 };
std::array<double, 4> m_end_position = { 0.0, 0.0, 0.0, 0.0 };
std::array<double, 4> m_origin = { 0.0, 0.0, 0.0, 0.0 };
//BBS: use these value to save information from comment
ExtrusionRole m_role = erNone;
bool m_wiping = false;
int m_layer_num = 0;
double m_height = 0.0;
double m_width = 0.0;
double z_height=0.0f;
double initial_layer_height=0.0f;
int filament_id;
double flow_ratio = 0;
double nozzle_temp = 0.0f;
std::vector<double> filament_flow_ratio;
std::vector<double> nozzle_temperature;
std::vector<double> nozzle_temperature_initial_layer;
};
}
#endif

View file

@ -1,24 +0,0 @@
#include "GCodeChecker.h"
using namespace std;
using namespace BambuStudio;
int main(int argc, char *argv[])
{
if (argc != 2) {
cout << "Invalid input arguments" << endl;
return -1;
}
string path(argv[1]);
cout << "Start to check file " << path << endl;
GCodeChecker checker;
//BBS: parse and check whether has invalid gcode
if (checker.parse_file(path) != GCodeCheckResult::Success) {
cout << "Failed to parse and check file " << path << endl;
return -1;
}
cout << "Success to parse and check file" << path << endl;
return 0;
}

View file

@ -3,21 +3,24 @@ cd deps
mkdir build mkdir build
cd build cd build
set DEPS=%CD%/OrcaSlicer_dep set DEPS=%CD%/OrcaSlicer_dep
if "%1"=="studio" ( if "%1"=="slicer" (
GOTO :studio GOTO :slicer
) )
echo "building deps.." echo "building deps.."
cmake ../ -G "Visual Studio 16 2019" -DDESTDIR="%CD%/OrcaSlicer_dep" -DCMAKE_BUILD_TYPE=Release cmake ../ -G "Visual Studio 16 2019" -DDESTDIR="%CD%/OrcaSlicer_dep" -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release --target ALL_BUILD -- -m cmake --build . --config Release --target deps -- -m
if "%1"=="deps" exit /b 0 if "%1"=="deps" exit /b 0
:studio :slicer
echo "building studio..." echo "building Orca Slicer..."
cd %WP% cd %WP%
mkdir build mkdir build
cd build cd build
cmake .. -G "Visual Studio 16 2019" -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" cmake .. -G "Visual Studio 16 2019" -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0"
cmake --build . --config Release --target ALL_BUILD -- -m cmake --build . --config Release --target ALL_BUILD -- -m
cd ..
call run_gettext.bat
cd build
cmake --build . --target install --config Release cmake --build . --target install --config Release

View file

@ -12,7 +12,7 @@ while getopts ":a:sdphn" opt; do
export ARCH="$OPTARG" export ARCH="$OPTARG"
;; ;;
s ) s )
export BUILD_TARGET="studio" export BUILD_TARGET="slicer"
;; ;;
n ) n )
export NIGHTLY_BUILD="1" export NIGHTLY_BUILD="1"
@ -20,7 +20,7 @@ while getopts ":a:sdphn" opt; do
h ) echo "Usage: ./build_release_macos.sh [-d]" h ) echo "Usage: ./build_release_macos.sh [-d]"
echo " -d: Build deps only" echo " -d: Build deps only"
echo " -a: Set ARCHITECTURE (arm64 or x86_64)" echo " -a: Set ARCHITECTURE (arm64 or x86_64)"
echo " -s: Build studio only" echo " -s: Build slicer only"
echo " -n: Nightly build" echo " -n: Nightly build"
exit 0 exit 0
;; ;;
@ -54,12 +54,12 @@ mkdir -p build_$ARCH
cd build_$ARCH cd build_$ARCH
DEPS=$PWD/OrcaSlicer_dep_$ARCH DEPS=$PWD/OrcaSlicer_dep_$ARCH
mkdir -p $DEPS mkdir -p $DEPS
if [ "studio." != $BUILD_TARGET. ]; if [ "slicer." != $BUILD_TARGET. ];
then then
echo "building deps..." echo "building deps..."
echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}" echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}"
cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}
cmake --build . --config Release --target all cmake --build . --config Release --target deps
if [ "1." == "$PACK_DEPS". ]; if [ "1." == "$PACK_DEPS". ];
then then
tar -zcvf OrcaSlicer_dep_mac_${ARCH}_$(date +"%d-%m-%Y").tar.gz OrcaSlicer_dep_$ARCH tar -zcvf OrcaSlicer_dep_mac_${ARCH}_$(date +"%d-%m-%Y").tar.gz OrcaSlicer_dep_$ARCH
@ -75,9 +75,12 @@ fi
cd $WD cd $WD
mkdir -p build_$ARCH mkdir -p build_$ARCH
cd build_$ARCH cd build_$ARCH
echo "building studio..." echo "building slicer..."
cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH}
cmake --build . --config Release --target ALL_BUILD cmake --build . --config Release --target ALL_BUILD
cd ..
./run_gettext.sh
cd build_$ARCH
mkdir -p OrcaSlicer mkdir -p OrcaSlicer
cd OrcaSlicer cd OrcaSlicer
rm -r ./OrcaSlicer.app rm -r ./OrcaSlicer.app

26
build_release_vs2022.bat Normal file
View file

@ -0,0 +1,26 @@
set WP=%CD%
cd deps
mkdir build
cd build
set DEPS=%CD%/OrcaSlicer_dep
if "%1"=="slicer" (
GOTO :slicer
)
echo "building deps.."
cmake ../ -G "Visual Studio 17 2022" -A x64 -DDESTDIR="%CD%/OrcaSlicer_dep" -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release --target deps -- -m
if "%1"=="deps" exit /b 0
:slicer
echo "building Orca Slicer..."
cd %WP%
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release --target ALL_BUILD -- -m
cd ..
call run_gettext.bat
cd build
cmake --build . --target install --config Release

View file

@ -1,23 +0,0 @@
set WP=%CD%
cd deps
mkdir build
cd build
set DEPS=%CD%/OrcaSlicer_dep
if "%1"=="studio" (
GOTO :studio
)
echo "building deps.."
cmake ../ -G "Visual Studio 16 2019" -DDESTDIR="%CD%/OrcaSlicer_dep" -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release --target ALL_BUILD -- -m
if "%1"=="deps" exit /b 0
:studio
echo "building studio..."
cd %WP%
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0"
cmake --build . --config RelWithDebInfo --target ALL_BUILD -- -m
@REM cmake --build . --target install --config RelWithDebInfo

View file

@ -1,495 +0,0 @@
@setlocal disableDelayedExpansion enableExtensions
@IF "%PS_ECHO_ON%" NEQ "" (echo on) ELSE (echo off)
@GOTO :MAIN
:HELP
@ECHO.
@ECHO Performs initial build or rebuild of the app (build) and deps (build/deps).
@ECHO Default options are determined from build directories and system state.
@ECHO.
@ECHO Usage: build_win [-ARCH ^<arch^>] [-CONFIG ^<config^>] [-VERSION ^<version^>]
@ECHO [-PRODUCT ^<product^>] [-DESTDIR ^<directory^>]
@ECHO [-STEPS ^<all^|all-dirty^|app^|app-dirty^|deps^|deps-dirty^>]
@ECHO [-RUN ^<console^|custom^|none^|viewer^|window^>]
@ECHO.
@ECHO -a -ARCH Target processor architecture
@ECHO Default: %PS_ARCH_HOST%
@ECHO -c -CONFIG MSVC project config
@ECHO Default: %PS_CONFIG_DEFAULT%
@ECHO -v -VERSION Major version number of MSVC installation to use for build
@ECHO Default: %PS_VERSION_SUPPORTED%
@ECHO -p -PRODUCT Product ID of MSVC installation to use for build
@ECHO Default: %PS_PRODUCT_DEFAULT%
@ECHO -s -STEPS Performs only the specified build steps:
@ECHO all - clean and build deps and app
@ECHO all-dirty - build deps and app without cleaning
@ECHO app - clean and build main applications
@ECHO app-dirty - build main applications without cleaning
@ECHO deps - clean and build deps
@ECHO deps-dirty - build deps without cleaning
@ECHO Default: %PS_STEPS_DEFAULT%
@ECHO -r -RUN Specifies what to perform at the run step:
@ECHO console - run and wait on orca-slicer-console.exe
@ECHO custom - run and wait on your custom build/%PS_CUSTOM_RUN_FILE%
@ECHO ide - open project in Visual Studio if not open (no wait)
@ECHO none - run step does nothing
@ECHO viewer - run bambu-gcodeviewer.exe (no wait)
@ECHO window - run orca-slicer.exe (no wait)
@ECHO Default: none
@ECHO -d -DESTDIR Deps destination directory
@ECHO Warning: Changing destdir path will not delete the old destdir.
@ECHO Default: %PS_DESTDIR_DEFAULT_MSG%
@ECHO.
@ECHO Examples:
@ECHO.
@ECHO Initial build: build_win -d "c:\src\BambuSlicer-deps"
@ECHO Build post deps change: build_win -s all
@ECHO App dirty build: build_win
@ECHO App dirty build ^& run: build_win -r console
@ECHO All clean build ^& run: build_win -s all -r console -d "deps\build\out_deps"
@ECHO.
GOTO :END
:MAIN
REM Script constants
SET START_TIME=%TIME%
SET PS_START_DIR=%CD%
SET PS_SOLUTION_NAME=BambuStudio
SET PS_CHOICE_TIMEOUT=30
SET PS_CUSTOM_RUN_FILE=custom_run.bat
SET PS_DEPS_PATH_FILE_NAME=.DEPS_PATH.txt
SET PS_DEPS_PATH_FILE=%~dp0deps\build\%PS_DEPS_PATH_FILE_NAME%
SET PS_CONFIG_LIST="Debug;MinSizeRel;Release;RelWithDebInfo"
REM The officially supported toolchain version is 16 (Visual Studio 2019)
REM TODO: Update versions after Boost gets rolled to 1.78 or later
SET PS_VERSION_SUPPORTED=16
SET PS_VERSION_EXCEEDED=17
SET VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
IF NOT EXIST "%VSWHERE%" SET VSWHERE=%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe
FOR /F "tokens=4 USEBACKQ delims=." %%I IN (`"%VSWHERE%" -nologo -property productId`) DO SET PS_PRODUCT_DEFAULT=%%I
IF "%PS_PRODUCT_DEFAULT%" EQU "" (
SET EXIT_STATUS=-1
@ECHO ERROR: No Visual Studio installation found. 1>&2
GOTO :HELP
)
REM Default to the latest supported version if multiple are available
FOR /F "tokens=1 USEBACKQ delims=." %%I IN (
`^""%VSWHERE%" -version "[%PS_VERSION_SUPPORTED%,%PS_VERSION_EXCEEDED%)" -latest -nologo -property catalog_buildVersion^"`
) DO SET PS_VERSION_SUPPORTED=%%I
REM Probe build directories and system state for reasonable default arguments
pushd %~dp0
SET PS_CONFIG=RelWithDebInfo
SET PS_ARCH=%PROCESSOR_ARCHITECTURE:amd64=x64%
CALL :TOLOWER PS_ARCH
SET PS_RUN=none
SET PS_DESTDIR=
SET PS_VERSION=
SET PS_PRODUCT=%PS_PRODUCT_DEFAULT%
CALL :RESOLVE_DESTDIR_CACHE
REM Set up parameters used by help menu
SET EXIT_STATUS=0
SET PS_CONFIG_DEFAULT=%PS_CONFIG%
SET PS_ARCH_HOST=%PS_ARCH%
(echo " -help /help -h /h -? /? ")| findstr /I /C:" %~1 ">nul && GOTO :HELP
REM Parse arguments
SET EXIT_STATUS=1
SET PS_CURRENT_STEP=arguments
SET PARSER_STATE=
SET PARSER_FAIL=
FOR %%I in (%*) DO CALL :PARSE_OPTION "ARCH CONFIG DESTDIR STEPS RUN VERSION PRODUCT" PARSER_STATE "%%~I"
IF "%PARSER_FAIL%" NEQ "" (
@ECHO ERROR: Invalid switch: %PARSER_FAIL% 1>&2
GOTO :HELP
)ELSE IF "%PARSER_STATE%" NEQ "" (
@ECHO ERROR: Missing parameter for: %PARSER_STATE% 1>&2
GOTO :HELP
)
REM Validate arguments
SET PS_ASK_TO_CONTINUE=
CALL :TOLOWER PS_ARCH
SET PS_ARCH=%PS_ARCH:amd64=x64%
CALL :PARSE_OPTION_VALUE %PS_CONFIG_LIST:;= % PS_CONFIG
IF "%PS_CONFIG%" EQU "" GOTO :HELP
REM RESOLVE_DESTDIR_CACHE must go after PS_ARCH and PS_CONFIG, but before PS STEPS
CALL :RESOLVE_DESTDIR_CACHE
IF "%PS_STEPS%" EQU "" SET PS_STEPS=%PS_STEPS_DEFAULT%
CALL :PARSE_OPTION_VALUE "all all-dirty deps-dirty deps app-dirty app app-cmake" PS_STEPS
IF "%PS_STEPS%" EQU "" GOTO :HELP
(echo %PS_STEPS%)| findstr /I /C:"dirty">nul && SET PS_STEPS_DIRTY=1 || SET PS_STEPS_DIRTY=
IF "%PS_STEPS%" EQU "app-cmake" SET PS_STEPS_DIRTY=1
IF "%PS_DESTDIR%" EQU "" SET PS_DESTDIR=%PS_DESTDIR_CACHED%
IF "%PS_DESTDIR%" EQU "" (
@ECHO ERROR: Parameter required: -DESTDIR 1>&2
GOTO :HELP
)
CALL :CANONICALIZE_PATH PS_DESTDIR "%PS_START_DIR%"
IF "%PS_DESTDIR%" NEQ "%PS_DESTDIR_CACHED%" (
(echo "all deps all-dirty deps-dirty")| findstr /I /C:"%PS_STEPS%">nul || (
IF EXIST "%PS_DESTDIR%" (
@ECHO WARNING: DESTDIR does not match cache: 1>&2
@ECHO WARNING: new: %PS_DESTDIR% 1>&2
@ECHO WARNING: old: %PS_DESTDIR_CACHED% 1>&2
SET PS_ASK_TO_CONTINUE=1
) ELSE (
@ECHO ERROR: Invalid parameter: DESTDIR=%PS_DESTDIR% 1>&2
GOTO :HELP
)
)
)
SET PS_DESTDIR_DEFAULT_MSG=
CALL :PARSE_OPTION_VALUE "console custom ide none viewer window" PS_RUN
IF "%PS_RUN%" EQU "" GOTO :HELP
IF "%PS_RUN%" NEQ "none" IF "%PS_STEPS:~0,4%" EQU "deps" (
@ECHO ERROR: RUN=%PS_RUN% specified with STEPS=%PS_STEPS%
@ECHO ERROR: RUN=none is the only valid option for STEPS "deps" or "deps-dirty"
GOTO :HELP
)
IF DEFINED PS_VERSION (
SET /A PS_VERSION_EXCEEDED=%PS_VERSION% + 1
) ELSE SET PS_VERSION=%PS_VERSION_SUPPORTED%
SET MSVC_FILTER=-products Microsoft.VisualStudio.Product.%PS_PRODUCT% -version "[%PS_VERSION%,%PS_VERSION_EXCEEDED%)"
FOR /F "tokens=* USEBACKQ" %%I IN (`^""%VSWHERE%" %MSVC_FILTER% -nologo -property installationPath^"`) DO SET MSVC_DIR=%%I
IF NOT EXIST "%MSVC_DIR%" (
@ECHO ERROR: Compatible Visual Studio installation not found. 1>&2
GOTO :HELP
)
REM Give the user a chance to cancel if we found something odd.
IF "%PS_ASK_TO_CONTINUE%" EQU "" GOTO :BUILD_ENV
@ECHO.
@ECHO Unexpected parameters detected. Build paused for %PS_CHOICE_TIMEOUT% seconds.
choice /T %PS_CHOICE_TIMEOUT% /C YN /D N /M "Continue"
IF %ERRORLEVEL% NEQ 1 GOTO :HELP
REM Set up MSVC environment
:BUILD_ENV
SET EXIT_STATUS=2
SET PS_CURRENT_STEP=environment
@ECHO **********************************************************************
@ECHO ** Build Config: %PS_CONFIG%
@ECHO ** Target Arch: %PS_ARCH%
@ECHO ** Build Steps: %PS_STEPS%
@ECHO ** Run App: %PS_RUN%
@ECHO ** Deps path: %PS_DESTDIR%
@ECHO ** Using Microsoft Visual Studio installation found at:
@ECHO ** %MSVC_DIR%
CALL "%MSVC_DIR%\Common7\Tools\vsdevcmd.bat" -arch=%PS_ARCH% -host_arch=%PS_ARCH_HOST% -app_platform=Desktop
IF %ERRORLEVEL% NEQ 0 GOTO :END
REM Need to reset the echo state after vsdevcmd.bat clobbers it.
@IF "%PS_ECHO_ON%" NEQ "" (echo on) ELSE (echo off)
IF "%PS_DRY_RUN_ONLY%" NEQ "" (
@ECHO Script terminated early because PS_DRY_RUN_ONLY is set. 1>&2
GOTO :END
)
IF /I "%PS_STEPS:~0,3%" EQU "app" GOTO :BUILD_APP
REM Build deps
:BUILD_DEPS
SET EXIT_STATUS=3
SET PS_CURRENT_STEP=deps
IF "%PS_STEPS_DIRTY%" EQU "" (
CALL :MAKE_OR_CLEAN_DIRECTORY deps\build "%PS_DEPS_PATH_FILE_NAME%" .vs
CALL :MAKE_OR_CLEAN_DIRECTORY "%PS_DESTDIR%"
)
cd deps\build || GOTO :END
cmake.exe .. -DDESTDIR="%PS_DESTDIR%"
IF %ERRORLEVEL% NEQ 0 IF "%PS_STEPS_DIRTY%" NEQ "" (
(del CMakeCache.txt && cmake.exe .. -DDESTDIR="%PS_DESTDIR%") || GOTO :END
) ELSE GOTO :END
(echo %PS_DESTDIR%)> "%PS_DEPS_PATH_FILE%"
msbuild /m ALL_BUILD.vcxproj /p:Configuration=%PS_CONFIG% /v:quiet || GOTO :END
cd ..\..
IF /I "%PS_STEPS:~0,4%" EQU "deps" GOTO :RUN_APP
REM Build app
:BUILD_APP
SET EXIT_STATUS=4
SET PS_CURRENT_STEP=app
IF "%PS_STEPS_DIRTY%" EQU "" CALL :MAKE_OR_CLEAN_DIRECTORY build "%PS_CUSTOM_RUN_FILE%" .vs
cd build || GOTO :END
REM Make sure we have a custom batch file skeleton for the run stage
set PS_CUSTOM_BAT=%PS_CUSTOM_RUN_FILE%
CALL :CANONICALIZE_PATH PS_CUSTOM_BAT
IF NOT EXIST %PS_CUSTOM_BAT% CALL :WRITE_CUSTOM_SCRIPT_SKELETON %PS_CUSTOM_BAT%
SET PS_PROJECT_IS_OPEN=
FOR /F "tokens=2 delims=," %%I in (
'tasklist /V /FI "IMAGENAME eq devenv.exe " /NH /FO CSV ^| find "%PS_SOLUTION_NAME%"'
) do SET PS_PROJECT_IS_OPEN=%%~I
cmake.exe .. -DCMAKE_PREFIX_PATH="%PS_DESTDIR%\usr\local" -DCMAKE_CONFIGURATION_TYPES=%PS_CONFIG_LIST%
IF %ERRORLEVEL% NEQ 0 IF "%PS_STEPS_DIRTY%" NEQ "" (
(del CMakeCache.txt && cmake.exe .. -DCMAKE_PREFIX_PATH="%PS_DESTDIR%\usr\local" -DCMAKE_CONFIGURATION_TYPES=%PS_CONFIG_LIST%) || GOTO :END
) ELSE GOTO :END
REM Skip the build step if we're using the undocumented app-cmake to regenerate the full config from inside devenv
IF "%PS_STEPS%" NEQ "app-cmake" msbuild /m ALL_BUILD.vcxproj /p:Configuration=%PS_CONFIG% /v:quiet || GOTO :END
(echo %PS_DESTDIR%)> "%PS_DEPS_PATH_FILE_FOR_CONFIG%"
REM Run app
:RUN_APP
REM All build steps complete.
CALL :DIFF_TIME ELAPSED_TIME %START_TIME% %TIME%
IF "%PS_CURRENT_STEP%" NEQ "arguments" (
@ECHO.
@ECHO Total Build Time Elapsed %ELAPSED_TIME%
)
SET EXIT_STATUS=5
SET PS_CURRENT_STEP=run
IF "%PS_RUN%" EQU "none" GOTO :PROLOGUE
cd src\%PS_CONFIG% || GOTO :END
SET PS_PROJECT_IS_OPEN=
FOR /F "tokens=2 delims=," %%I in (
'tasklist /V /FI "IMAGENAME eq devenv.exe " /NH /FO CSV ^| find "%PS_SOLUTION_NAME%"'
) do SET PS_PROJECT_IS_OPEN=%%~I
@ECHO.
@ECHO Running %PS_RUN% application...
@REM icacls below is just a hack for file-not-found error handling
IF "%PS_RUN%" EQU "console" (
icacls orca-slicer-console.exe >nul || GOTO :END
start /wait /b orca-slicer-console.exe
) ELSE IF "%PS_RUN%" EQU "window" (
icacls orca-slicer.exe >nul || GOTO :END
start orca-slicer.exe
) ELSE IF "%PS_RUN%" EQU "viewer" (
icacls bambu-gcodeviewer.exe >nul || GOTO :END
start bambu-gcodeviewer.exe
) ELSE IF "%PS_RUN%" EQU "custom" (
icacls %PS_CUSTOM_BAT% >nul || GOTO :END
CALL %PS_CUSTOM_BAT%
) ELSE IF "%PS_RUN%" EQU "ide" (
IF "%PS_PROJECT_IS_OPEN%" NEQ "" (
@ECHO WARNING: Solution is already open in Visual Studio. Skipping ide run step. 1>&2
) ELSE (
@ECHO Preparing to run Visual Studio...
cd ..\.. || GOTO :END
REM This hack generates a single config for MSVS, guaranteeing it gets set as the active config.
cmake.exe .. -DCMAKE_PREFIX_PATH="%PS_DESTDIR%\usr\local" -DCMAKE_CONFIGURATION_TYPES=%PS_CONFIG% > nul 2> nul || GOTO :END
REM Now launch devenv with the single config (setting it active) and a /command switch to re-run cmake and generate the full config list
start devenv.exe %PS_SOLUTION_NAME%.sln /command ^"shell /o ^^^"%~f0^^^" -d ^^^"%PS_DESTDIR%^^^" -c %PS_CONFIG% -a %PS_ARCH% -r none -s app-cmake^"
REM If devenv fails to launch just directly regenerate the full config list.
IF %ERRORLEVEL% NEQ 0 (
cmake.exe .. -DCMAKE_PREFIX_PATH="%PS_DESTDIR%\usr\local" -DCMAKE_CONFIGURATION_TYPES=%PS_CONFIG_LIST% 2> nul 1> nul || GOTO :END
)
)
)
@REM ********** DON'T ADD ANY CODE BETWEEN THESE TWO SECTIONS **********
@REM RUN_APP may hand off control, so let exit codes fall through to PROLOGUE.
:PROLOGUE
SET EXIT_STATUS=%ERRORLEVEL%
:END
@IF "%PS_ECHO_ON%%PS_DRY_RUN_ONLY%" NEQ "" (
@ECHO **********************************************************************
@ECHO ** Script Parameters:
@ECHO **********************************************************************
@SET PS_
)
IF "%EXIT_STATUS%" NEQ "0" (
IF "%PS_CURRENT_STEP%" NEQ "arguments" (
@ECHO.
@ECHO ERROR: *** Build process failed at %PS_CURRENT_STEP% step. *** 1>&2
)
) ELSE (
@ECHO All steps completed successfully.
)
popd
exit /B %EXIT_STATUS%
GOTO :EOF
REM Functions and stubs start here.
:RESOLVE_DESTDIR_CACHE
@REM Resolves all DESTDIR cache values and sets PS_STEPS_DEFAULT
@REM Note: This just sets global variables, so it doesn't use setlocal.
SET PS_DEPS_PATH_FILE_FOR_CONFIG=%~dp0build\.vs\%PS_ARCH%\%PS_CONFIG%\%PS_DEPS_PATH_FILE_NAME%
mkdir "%~dp0build\.vs\%PS_ARCH%\%PS_CONFIG%" > nul 2> nul
REM Copy a legacy file if we don't have one in the proper location.
echo f|xcopy /D "%~dp0build\%PS_ARCH%\%PS_CONFIG%\%PS_DEPS_PATH_FILE_NAME%" "%PS_DEPS_PATH_FILE_FOR_CONFIG%" > nul 2> nul
CALL :CANONICALIZE_PATH PS_DEPS_PATH_FILE_FOR_CONFIG
IF EXIST "%PS_DEPS_PATH_FILE_FOR_CONFIG%" (
FOR /F "tokens=* USEBACKQ" %%I IN ("%PS_DEPS_PATH_FILE_FOR_CONFIG%") DO (
SET PS_DESTDIR_CACHED=%%I
SET PS_DESTDIR_DEFAULT_MSG=%%I
)
SET PS_STEPS_DEFAULT=app-dirty
) ELSE IF EXIST "%PS_DEPS_PATH_FILE%" (
FOR /F "tokens=* USEBACKQ" %%I IN ("%PS_DEPS_PATH_FILE%") DO (
SET PS_DESTDIR_CACHED=%%I
SET PS_DESTDIR_DEFAULT_MSG=%%I
)
SET PS_STEPS_DEFAULT=app
) ELSE (
SET PS_DESTDIR_CACHED=
SET PS_DESTDIR_DEFAULT_MSG=Cache missing. Argument required.
SET PS_STEPS_DEFAULT=all
)
GOTO :EOF
:PARSE_OPTION
@REM Argument parser called for each argument
@REM %1 - Valid option list
@REM %2 - Variable name for parser state; must be unset when parsing finished
@REM %3 - Current argument value
@REM PARSER_FAIL will be set on an error
@REM Note: Must avoid delayed expansion since filenames may contain ! character
setlocal disableDelayedExpansion
IF "%PARSER_FAIL%" NEQ "" GOTO :EOF
CALL SET LAST_ARG=%%%2%%
IF "%LAST_ARG%" EQU "" (
CALL :PARSE_OPTION_NAME %1 %~2 %~3 1
SET ARG_TYPE=NAME
) ELSE (
SET PS_SET_COMMAND=SET PS_%LAST_ARG%=%~3
SET ARG_TYPE=LAST_ARG
SET %~2=
)
CALL SET LAST_ARG=%%%2%%
IF "%LAST_ARG%%ARG_TYPE%" EQU "NAME" SET PARSER_FAIL=%~3
(
endlocal
SET PARSER_FAIL=%PARSER_FAIL%
SET %~2=%LAST_ARG%
%PS_SET_COMMAND%
)
GOTO :EOF
:PARSE_OPTION_VALUE
setlocal disableDelayedExpansion
@REM Parses value and verifies it is within the supplied list
@REM %1 - Valid option list
@REM %2 - In/out variable name; unset on error
CALL SET NAME=%~2
CALL SET SAVED_VALUE=%%%NAME%%%
CALL :PARSE_OPTION_NAME %1 %NAME% -%SAVED_VALUE%
CALL SET NEW_VALUE=%%%NAME%%%
IF "%NEW_VALUE%" EQU "" (
@ECHO ERROR: Invalid parameter: %NAME:~3%=%SAVED_VALUE% 1>&2
)
endlocal & SET %NAME%=%NEW_VALUE%
GOTO :EOF
:PARSE_OPTION_NAME
@REM Parses an option name
@REM %1 - Valid option list
@REM %2 - Out variable name; unset on error
@REM %3 - Current argument value
@REM %4 - Boolean indicating single character switches are valid
@REM Note: Delayed expansion safe because ! character is invalid in option name
setlocal enableDelayedExpansion
IF "%4" NEQ "" FOR %%I IN (%~1) DO @(
SET SHORT_NAME=%%~I
SET SHORT_ARG_!SHORT_NAME:~0,1!=%%~I
)
@SET OPTION_NAME=%~3
@(echo %OPTION_NAME%)| findstr /R /C:"[-/]..*">nul || GOTO :PARSE_OPTION_NAME_FAIL
@SET OPTION_NAME=%OPTION_NAME:~1%
IF "%4" NEQ "" (
IF "%OPTION_NAME%" EQU "%OPTION_NAME:~0,1%" (
IF "!SHORT_ARG_%OPTION_NAME:~0,1%!" NEQ "" SET OPTION_NAME=!SHORT_ARG_%OPTION_NAME:~0,1%!
)
)
@(echo %OPTION_NAME%)| findstr /R /C:".[ ][ ]*.">nul && GOTO :PARSE_OPTION_NAME_FAIL
@(echo %~1 )| findstr /I /C:" %OPTION_NAME% ">nul || GOTO :PARSE_OPTION_NAME_FAIL
FOR %%I IN (%~1) DO SET OPTION_NAME=!OPTION_NAME:%%~I=%%~I!
endlocal & SET %~2=%OPTION_NAME%
GOTO :EOF
:PARSE_OPTION_NAME_FAIL
endlocal & SET %~2=
GOTO :EOF
:MAKE_OR_CLEAN_DIRECTORY
@REM Create directory if it doesn't exist or clean it if it does
@REM %1 - Directory path to clean or create
@REM %* - Optional list of files/dirs to keep (in the base directory only)
setlocal disableDelayedExpansion
IF NOT EXIST "%~1" (
@ECHO Creating %~1
mkdir "%~1" && (
endlocal
GOTO :EOF
)
)
@ECHO Cleaning %~1 ...
SET KEEP_LIST=
:MAKE_OR_CLEAN_DIRECTORY_ARG_LOOP
IF "%~2" NEQ "" (
SET KEEP_LIST=%KEEP_LIST% "%~2"
SHIFT /2
GOTO :MAKE_OR_CLEAN_DIRECTORY_ARG_LOOP
)
for /F "usebackq delims=" %%I in (`dir /a /b "%~1"`) do (
(echo %KEEP_LIST%)| findstr /I /L /C:"\"%%I\"">nul || (
rmdir /s /q "%~1\%%I" 2>nul ) || del /q /f "%~1\%%I"
)
endlocal
GOTO :EOF
:TOLOWER
@REM Converts supplied environment variable to lowercase
@REM %1 - Input/output variable name
@REM Note: This is slow on very long strings, but is used only on very short ones
setlocal disableDelayedExpansion
@FOR %%b IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) DO @CALL set %~1=%%%1:%%b=%%b%%
@CALL SET OUTPUT=%%%~1%%
endlocal & SET %~1=%OUTPUT%
GOTO :EOF
:CANONICALIZE_PATH
@REM Canonicalizes the path in the supplied variable
@REM %1 - Input/output variable containing path to canonicalize
@REM %2 - Optional base directory
setlocal
CALL :CANONICALIZE_PATH_INNER %1 %%%~1%% %2
endlocal & SET %~1=%OUTPUT%
GOTO :EOF
:CANONICALIZE_PATH_INNER
if "%~3" NEQ "" (pushd %3 || GOTO :EOF)
SET OUTPUT=%~f2
if "%~3" NEQ "" popd
GOTO :EOF
:DIFF_TIME
@REM Calculates elapsed time between two timestamps (TIME environment variable format)
@REM %1 - Output variable
@REM %2 - Start time
@REM %3 - End time
setlocal EnableDelayedExpansion
set START_ARG=%2
set END_ARG=%3
set END=!END_ARG:%TIME:~8,1%=%%100)*100+1!
set START=!START_ARG:%TIME:~8,1%=%%100)*100+1!
set /A DIFF=((((10!END:%TIME:~2,1%=%%100)*60+1!%%100)-((((10!START:%TIME:~2,1%=%%100)*60+1!%%100), DIFF-=(DIFF^>^>31)*24*60*60*100
set /A CC=DIFF%%100+100,DIFF/=100,SS=DIFF%%60+100,DIFF/=60,MM=DIFF%%60+100,HH=DIFF/60+100
@endlocal & set %1=%HH:~1%%TIME:~2,1%%MM:~1%%TIME:~2,1%%SS:~1%%TIME:~8,1%%CC:~1%
@GOTO :EOF
:WRITE_CUSTOM_SCRIPT_SKELETON
@REM Writes the following text to the supplied file
@REM %1 - Output filename
setlocal
@(
ECHO @ECHO.
ECHO @ECHO ********************************************************************************
ECHO @ECHO ** This is a custom run script skeleton.
ECHO @ECHO ********************************************************************************
ECHO @ECHO.
ECHO @ECHO ********************************************************************************
ECHO @ECHO ** The working directory is:
ECHO @ECHO ********************************************************************************
ECHO dir
ECHO @ECHO.
ECHO @ECHO ********************************************************************************
ECHO @ECHO ** The environment is:
ECHO @ECHO ********************************************************************************
ECHO set
ECHO @ECHO.
ECHO @ECHO ********************************************************************************
ECHO @ECHO ** Edit or replace this script to run custom steps after a successful build:
ECHO @ECHO ** %~1
ECHO @ECHO ********************************************************************************
ECHO @ECHO.
) > "%~1"
endlocal
GOTO :EOF

View file

@ -238,7 +238,8 @@ endif()
set(OpenVDB_LIB_COMPONENTS "") set(OpenVDB_LIB_COMPONENTS "")
set(OpenVDB_DEBUG_SUFFIX "d" CACHE STRING "Suffix for the debug libraries") set(OpenVDB_DEBUG_SUFFIX "d" CACHE STRING "Suffix for the debug libraries")
get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) # get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
set(_is_multi FALSE)
foreach(COMPONENT ${OpenVDB_FIND_COMPONENTS}) foreach(COMPONENT ${OpenVDB_FIND_COMPONENTS})
set(LIB_NAME ${COMPONENT}) set(LIB_NAME ${COMPONENT})

View file

@ -1,29 +1,19 @@
# This is a wrapper of FindTBB which prefers the config scripts if available in the system # ported from PrusaSlicer
# but only if building with dynamic dependencies. The config scripts potentially belong
# to TBB >= 2020 which is incompatible with OpenVDB in our static dependency bundle.
# This workaround is useful for package maintainers on Linux systems to use newer versions
# of intel TBB (renamed to oneTBB from version 2021 up).
set(_q "") set(_q "")
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
set(_q QUIET) set(_q QUIET)
endif() endif()
# Only consider the config scripts if not building with the static dependencies
# and this call is not made from a static dependency build (e.g. dep_OpenVDB will use this module)
# BUILD_SHARED_LIBS will always be defined for dependency projects and will be OFF.
# Newer versions of TBB also discourage from using TBB as a static library
if (NOT SLIC3R_STATIC AND (NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS))
find_package(${CMAKE_FIND_PACKAGE_NAME} ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} CONFIG ${_q})
if(NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) find_package(${CMAKE_FIND_PACKAGE_NAME} ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} CONFIG ${_q})
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND)
message(STATUS "Falling back to MODULE search for ${CMAKE_FIND_PACKAGE_NAME}...") if(NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
else() if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND)
message(STATUS "${CMAKE_FIND_PACKAGE_NAME} found in ${${CMAKE_FIND_PACKAGE_NAME}_DIR}") message(STATUS "Falling back to MODULE search for ${CMAKE_FIND_PACKAGE_NAME}...")
endif() else()
message(STATUS "${CMAKE_FIND_PACKAGE_NAME} found in ${${CMAKE_FIND_PACKAGE_NAME}_DIR}")
endif() endif()
endif()
endif ()
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND) if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FOUND)
include(${CMAKE_CURRENT_LIST_DIR}/FindTBB.cmake.in) include(${CMAKE_CURRENT_LIST_DIR}/FindTBB.cmake.in)

View file

@ -52,7 +52,7 @@
<string>OBJ</string> <string>OBJ</string>
</array> </array>
<key>CFBundleTypeIconFile</key> <key>CFBundleTypeIconFile</key>
<string>BambuStudio.icns</string> <string>OrcaSlicer.icns</string>
<key>CFBundleTypeName</key> <key>CFBundleTypeName</key>
<string>STL</string> <string>STL</string>
<key>CFBundleTypeRole</key> <key>CFBundleTypeRole</key>
@ -69,7 +69,7 @@
<string>AMF</string> <string>AMF</string>
</array> </array>
<key>CFBundleTypeIconFile</key> <key>CFBundleTypeIconFile</key>
<string>BambuStudio.icns</string> <string>OrcaSlicer.icns</string>
<key>CFBundleTypeName</key> <key>CFBundleTypeName</key>
<string>AMF</string> <string>AMF</string>
<key>CFBundleTypeRole</key> <key>CFBundleTypeRole</key>
@ -86,7 +86,7 @@
<string>3MF</string> <string>3MF</string>
</array> </array>
<key>CFBundleTypeIconFile</key> <key>CFBundleTypeIconFile</key>
<string>BambuStudio.icns</string> <string>OrcaSlicer.icns</string>
<key>CFBundleTypeName</key> <key>CFBundleTypeName</key>
<string>3MF</string> <string>3MF</string>
<key>CFBundleTypeRole</key> <key>CFBundleTypeRole</key>
@ -118,5 +118,13 @@
<true/> <true/>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string> <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>NSAppTransportSecurity</key>
<dict>
<!-- Disable App Transport Security. Resolves https://github.com/SoftFever/OrcaSlicer/issues/791 -->
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
</dict> </dict>
</plist> </plist>

View file

@ -7,7 +7,7 @@ else()
endif() endif()
if(IS_CROSS_COMPILE AND APPLE) if(IS_CROSS_COMPILE AND APPLE)
bambustudio_add_cmake_project(Blosc orcaslicer_add_cmake_project(Blosc
#URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip #URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip
#URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9 #URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9
URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip
@ -26,7 +26,7 @@ if(IS_CROSS_COMPILE AND APPLE)
-DDEACTIVATE_AVX2=ON -DDEACTIVATE_AVX2=ON
) )
else() else()
bambustudio_add_cmake_project(Blosc orcaslicer_add_cmake_project(Blosc
#URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip #URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip
#URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9 #URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9
URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip

View file

@ -90,7 +90,7 @@ if (_cfg_rel GREATER -1 OR _cfg_relwdeb GREATER -1 OR _cfg_minsizerel GREATER -1
list(APPEND _boost_variants release) list(APPEND _boost_variants release)
endif() endif()
if (_cfg_deb GREATER -1 OR (MSVC AND ${DEP_DEBUG}) ) if (MSVC AND ${DEP_DEBUG} )
list(APPEND _boost_variants debug) list(APPEND _boost_variants debug)
endif() endif()

View file

@ -1,4 +1,4 @@
bambustudio_add_cmake_project( orcaslicer_add_cmake_project(
CGAL CGAL
GIT_REPOSITORY https://github.com/CGAL/cgal.git GIT_REPOSITORY https://github.com/CGAL/cgal.git
GIT_TAG caacd806dc55c61cc68adaad99f2240f00493b29 # releases/CGAL-5.3 GIT_TAG caacd806dc55c61cc68adaad99f2240f00493b29 # releases/CGAL-5.3

6
deps/CMakeLists.txt vendored
View file

@ -34,7 +34,7 @@ endif ()
set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory") set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory")
set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Path for downloaded source packages.") set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Path for downloaded source packages.")
option(DEP_DEBUG "Build debug variants (only applicable on Windows)" ON) option(DEP_DEBUG "Build debug variants (only applicable on Windows)" OFF)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF) option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF)
@ -85,7 +85,7 @@ if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.") message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.")
endif () endif ()
function(bambustudio_add_cmake_project projectname) function(orcaslicer_add_cmake_project projectname)
cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN}) cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
set(_configs_line -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}) set(_configs_line -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
@ -145,7 +145,7 @@ else()
endif() endif()
endfunction(bambustudio_add_cmake_project) endfunction(orcaslicer_add_cmake_project)
if (MSVC) if (MSVC)

View file

@ -55,7 +55,7 @@ else()
set(_curl_static ON) set(_curl_static ON)
endif() endif()
bambustudio_add_cmake_project(CURL orcaslicer_add_cmake_project(CURL
# GIT_REPOSITORY https://github.com/curl/curl.git # GIT_REPOSITORY https://github.com/curl/curl.git
# GIT_TAG curl-7_75_0 # GIT_TAG curl-7_75_0
URL https://github.com/curl/curl/archive/refs/tags/curl-7_75_0.zip URL https://github.com/curl/curl/archive/refs/tags/curl-7_75_0.zip

View file

@ -1,4 +1,4 @@
bambustudio_add_cmake_project(Cereal orcaslicer_add_cmake_project(Cereal
URL "https://github.com/USCiLab/cereal/archive/v1.2.2.tar.gz" URL "https://github.com/USCiLab/cereal/archive/v1.2.2.tar.gz"
URL_HASH SHA256=1921f26d2e1daf9132da3c432e2fd02093ecaedf846e65d7679ddf868c7289c4 URL_HASH SHA256=1921f26d2e1daf9132da3c432e2fd02093ecaedf846e65d7679ddf868c7289c4
CMAKE_ARGS CMAKE_ARGS

View file

@ -1,4 +1,4 @@
bambustudio_add_cmake_project(EXPAT orcaslicer_add_cmake_project(EXPAT
# GIT_REPOSITORY https://github.com/nigels-com/glew.git # GIT_REPOSITORY https://github.com/nigels-com/glew.git
# GIT_TAG 3a8eff7 # 2.1.0 # GIT_TAG 3a8eff7 # 2.1.0
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/expat SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/expat

View file

@ -10,7 +10,7 @@ else()
set(_ft_disable_zlib "-D FT_DISABLE_ZLIB=TRUE") set(_ft_disable_zlib "-D FT_DISABLE_ZLIB=TRUE")
endif() endif()
bambustudio_add_cmake_project(FREETYPE orcaslicer_add_cmake_project(FREETYPE
URL https://mirror.ossplanet.net/nongnu/freetype/freetype-2.12.1.tar.gz URL https://mirror.ossplanet.net/nongnu/freetype/freetype-2.12.1.tar.gz
URL_HASH SHA256=efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938 URL_HASH SHA256=efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938
#DEPENDS ${ZLIB_PKG} #DEPENDS ${ZLIB_PKG}

View file

@ -2,7 +2,7 @@
set(OpenGL_GL_PREFERENCE "LEGACY") # to prevent a nasty warning by cmake set(OpenGL_GL_PREFERENCE "LEGACY") # to prevent a nasty warning by cmake
find_package(OpenGL QUIET REQUIRED) find_package(OpenGL QUIET REQUIRED)
bambustudio_add_cmake_project( orcaslicer_add_cmake_project(
GLEW GLEW
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/glew SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/glew
) )

View file

@ -12,7 +12,7 @@ else()
set(_glfw_use_wayland "-DGLFW_USE_WAYLAND=FF") set(_glfw_use_wayland "-DGLFW_USE_WAYLAND=FF")
endif() endif()
bambustudio_add_cmake_project(GLFW orcaslicer_add_cmake_project(GLFW
URL https://github.com/glfw/glfw/archive/refs/tags/3.3.7.zip URL https://github.com/glfw/glfw/archive/refs/tags/3.3.7.zip
URL_HASH SHA256=e02d956935e5b9fb4abf90e2c2e07c9a0526d7eacae8ee5353484c69a2a76cd0 URL_HASH SHA256=e02d956935e5b9fb4abf90e2c2e07c9a0526d7eacae8ee5353484c69a2a76cd0
#DEPENDS dep_Boost #DEPENDS dep_Boost

View file

@ -11,7 +11,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif () endif ()
endif() endif()
bambustudio_add_cmake_project(JPEG orcaslicer_add_cmake_project(JPEG
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip
URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1 URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1
DEPENDS ${ZLIB_PKG} DEPENDS ${ZLIB_PKG}

View file

@ -1,4 +1,4 @@
bambustudio_add_cmake_project(NLopt orcaslicer_add_cmake_project(NLopt
URL "https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz" URL "https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz"
URL_HASH SHA256=c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae URL_HASH SHA256=c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae
CMAKE_ARGS CMAKE_ARGS

View file

@ -4,11 +4,15 @@ else()
set(library_build_type "Static") set(library_build_type "Static")
endif() endif()
bambustudio_add_cmake_project(OCCT
# get relative path of CMAKE_BINARY_DIR against root source directory
file(RELATIVE_PATH BINARY_DIR_REL ${CMAKE_SOURCE_DIR}/.. ${CMAKE_BINARY_DIR})
orcaslicer_add_cmake_project(OCCT
URL https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip URL https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip
URL_HASH SHA256=28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc URL_HASH SHA256=28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc
#PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch #PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch
PATCH_COMMAND git apply --directory deps/build/dep_OCCT-prefix/src/dep_OCCT --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch PATCH_COMMAND git apply --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch
#DEPENDS dep_Boost #DEPENDS dep_Boost
#DEPENDS dep_FREETYPE #DEPENDS dep_FREETYPE
CMAKE_ARGS CMAKE_ARGS

View file

@ -1,5 +1,5 @@
bambustudio_add_cmake_project(OpenCSG orcaslicer_add_cmake_project(OpenCSG
# GIT_REPOSITORY https://github.com/floriankirsch/OpenCSG.git # GIT_REPOSITORY https://github.com/floriankirsch/OpenCSG.git
# GIT_TAG 83e274457b46c9ad11a4ee599203250b1618f3b9 #v1.4.2 # GIT_TAG 83e274457b46c9ad11a4ee599203250b1618f3b9 #v1.4.2
URL https://github.com/floriankirsch/OpenCSG/archive/refs/tags/opencsg-1-4-2-release.zip URL https://github.com/floriankirsch/OpenCSG/archive/refs/tags/opencsg-1-4-2-release.zip

31
deps/OpenEXR/0001-OpenEXR-GCC13.patch vendored Normal file
View file

@ -0,0 +1,31 @@
--- a/OpenEXR/IlmImf/ImfDwaCompressor.cpp
+++ b/OpenEXR/IlmImf/ImfDwaCompressor.cpp
@@ -159,6 +159,7 @@
#include <limits>
#include <cstddef>
+#include <cstdint>
// Windows specific addition to prevent the indirect import of the redefined min/max macros
--- a/OpenEXR/IlmImf/ImfHuf.h
+++ b/OpenEXR/IlmImf/ImfHuf.h
@@ -40,6 +40,8 @@
#include "ImfExport.h"
#include "ImfNamespace.h"
+#include <cstdint>
+
//-----------------------------------------------------------------------------
//
// 16-bit Huffman compression and decompression:
--- a/OpenEXR/IlmImf/ImfMisc.h
+++ b/OpenEXR/IlmImf/ImfMisc.h
@@ -51,6 +51,7 @@
#include "ImfForward.h"
#include <cstddef>
+#include <cstdint>
#include <vector>

View file

@ -29,16 +29,24 @@ if (APPLE AND IS_CROSS_COMPILE)
${_cmake_openexr_arch} ${_cmake_openexr_arch}
) )
else() else()
bambustudio_add_cmake_project(OpenEXR
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch)
else ()
set(_patch_cmd "")
endif ()
orcaslicer_add_cmake_project(OpenEXR
# GIT_REPOSITORY https://github.com/openexr/openexr.git # GIT_REPOSITORY https://github.com/openexr/openexr.git
URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip
URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de
PATCH_COMMAND ${_patch_cmd}
DEPENDS ${ZLIB_PKG} DEPENDS ${ZLIB_PKG}
GIT_TAG v2.5.5 GIT_TAG v2.5.5
CMAKE_ARGS CMAKE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DBUILD_TESTING=OFF -DBUILD_TESTING=OFF
-DPYILMBASE_ENABLE:BOOL=OFF -DPYILMBASE_ENABLE:BOOL=OFF
-DOPENEXR_VIEWERS_ENABLE:BOOL=OFF -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF
-DOPENEXR_BUILD_UTILS:BOOL=OFF -DOPENEXR_BUILD_UTILS:BOOL=OFF
) )

View file

@ -6,9 +6,10 @@ else()
set(_build_static ON) set(_build_static ON)
endif() endif()
bambustudio_add_cmake_project(OpenVDB orcaslicer_add_cmake_project(OpenVDB
URL https://github.com/tamasmeszaros/openvdb/archive/refs/tags/v6.2.1-prusa3d.zip #v6.2.1 patched # support vs2022, update to 8.2
URL_HASH SHA256=caf9f0c91976722883ff9cb32420ef142af22f7e625fc643b91c23d6e4172f62 URL https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip
URL_HASH SHA256=f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81
DEPENDS dep_TBB dep_Blosc dep_OpenEXR dep_Boost DEPENDS dep_TBB dep_Blosc dep_OpenEXR dep_Boost
CMAKE_ARGS CMAKE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON

4
deps/PNG/PNG.cmake vendored
View file

@ -7,7 +7,7 @@ endif ()
if(APPLE AND IS_CROSS_COMPILE) if(APPLE AND IS_CROSS_COMPILE)
# TODO: check if it doesn't create problem when compiling from arm to x86_64 # TODO: check if it doesn't create problem when compiling from arm to x86_64
bambustudio_add_cmake_project(PNG orcaslicer_add_cmake_project(PNG
GIT_REPOSITORY https://github.com/glennrp/libpng.git GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG v1.6.35 GIT_TAG v1.6.35
DEPENDS ${ZLIB_PKG} DEPENDS ${ZLIB_PKG}
@ -26,7 +26,7 @@ set(_patch_step "")
if (APPLE) if (APPLE)
set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch) set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch)
endif () endif ()
bambustudio_add_cmake_project(PNG orcaslicer_add_cmake_project(PNG
# GIT_REPOSITORY https://github.com/glennrp/libpng.git # GIT_REPOSITORY https://github.com/glennrp/libpng.git
# GIT_TAG v1.6.35 # GIT_TAG v1.6.35
URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip

View file

@ -1,5 +1,5 @@
include(GNUInstallDirs) include(GNUInstallDirs)
bambustudio_add_cmake_project(Qhull orcaslicer_add_cmake_project(Qhull
URL "https://github.com/qhull/qhull/archive/v8.0.1.zip" URL "https://github.com/qhull/qhull/archive/v8.0.1.zip"
URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b
CMAKE_ARGS CMAKE_ARGS

11
deps/TBB/0001-TBB-GCC13.patch vendored Normal file
View file

@ -0,0 +1,11 @@
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -219,7 +219,7 @@
#if __TBB_TASK_PRIORITY
//! Pointer to the next offloaded lower priority task.
/** Used to maintain a list of offloaded tasks inside the scheduler. **/
- task* next_offloaded;
+ tbb::task* next_offloaded;
};
#endif /* __TBB_TASK_PRIORITY */

9
deps/TBB/TBB.cmake vendored
View file

@ -1,11 +1,12 @@
bambustudio_add_cmake_project( orcaslicer_add_cmake_project(
TBB TBB
URL "https://github.com/wjakob/tbb/archive/a0dc9bf76d0120f917b641ed095360448cabc85b.tar.gz" URL "https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.5.0.zip"
URL_HASH SHA256=0545cb6033bd1873fcae3ea304def720a380a88292726943ae3b9b207f322efe URL_HASH SHA256=83ea786c964a384dd72534f9854b419716f412f9d43c0be88d41874763e7bb47
#PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-TBB-GCC13.patch
CMAKE_ARGS CMAKE_ARGS
-DTBB_BUILD_SHARED=OFF -DTBB_BUILD_SHARED=OFF
-DTBB_BUILD_TESTS=OFF -DTBB_BUILD_TESTS=OFF
-DTBB_BUILD_TESTS=OFF -DTBB_TEST=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_DEBUG_POSTFIX=_debug -DCMAKE_DEBUG_POSTFIX=_debug
) )

View file

@ -2,7 +2,7 @@ find_package(OpenGL QUIET REQUIRED)
if (APPLE) if (APPLE)
message(STATUS "Compiling TIFF for macos ${CMAKE_SYSTEM_VERSION}.") message(STATUS "Compiling TIFF for macos ${CMAKE_SYSTEM_VERSION}.")
bambustudio_add_cmake_project(TIFF orcaslicer_add_cmake_project(TIFF
URL https://gitlab.com/libtiff/libtiff/-/archive/v4.3.0/libtiff-v4.3.0.zip URL https://gitlab.com/libtiff/libtiff/-/archive/v4.3.0/libtiff-v4.3.0.zip
URL_HASH SHA256=4fca1b582c88319f3ad6ecd5b46320eadaf5eb4ef6f6c32d44caaae4a03d0726 URL_HASH SHA256=4fca1b582c88319f3ad6ecd5b46320eadaf5eb4ef6f6c32d44caaae4a03d0726
DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG
@ -14,7 +14,7 @@ if (APPLE)
-Dpixarlog:BOOL=OFF -Dpixarlog:BOOL=OFF
) )
else() else()
bambustudio_add_cmake_project(TIFF orcaslicer_add_cmake_project(TIFF
URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip
URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32 URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32
DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG

View file

@ -1,4 +1,4 @@
bambustudio_add_cmake_project(ZLIB orcaslicer_add_cmake_project(ZLIB
# GIT_REPOSITORY https://github.com/madler/zlib.git # GIT_REPOSITORY https://github.com/madler/zlib.git
# GIT_TAG v1.2.11 # GIT_TAG v1.2.11
URL https://github.com/madler/zlib/archive/refs/tags/v1.2.11.zip URL https://github.com/madler/zlib/archive/refs/tags/v1.2.11.zip

View file

@ -26,7 +26,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-wxWidget-fix.patch) set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-wxWidget-fix.patch)
endif () endif ()
bambustudio_add_cmake_project( orcaslicer_add_cmake_project(
wxWidgets wxWidgets
GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets" GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets"
GIT_TAG ${_wx_git_tag} GIT_TAG ${_wx_git_tag}

View file

@ -1,12 +1,13 @@
- [Flow rate](#Flow-rate) - [Flow rate](#Flow-rate)
- [Pressure Advance](#Pressure-Advance) - [Pressure Advance](#Pressure-Advance)
1. [Line method](#Line-method) 1. [Line method](#Line-method)
2. [Tower method](#Tower-method) 2. [Pattern method](#Pattern-method)
3. [Tower method](#Tower-method)
- [Temp tower](#Temp-tower) - [Temp tower](#Temp-tower)
- [Retraction test](#Retraction-test) - [Retraction test](#Retraction-test)
- [Orca Tolerance Test](#Orca-Tolerance-Test) - [Orca Tolerance Test](#Orca-Tolerance-Test)
- [Advanced calibration] - [Advanced calibration](#Advanced-Calibration)
1. [Max Volumetric speed] 1. [Max Volumetric speed](#Max-Volumetric-speed)
2. [VFA] 2. [VFA]
**NOTE**: After completing the calibration process, remember to create a new project in order to exit the calibration mode. **NOTE**: After completing the calibration process, remember to create a new project in order to exit the calibration mode.
@ -32,10 +33,13 @@ Steps
![image](https://user-images.githubusercontent.com/103989404/210139721-919be130-fbba-4e3a-aa58-8a563e8c7792.png) ![image](https://user-images.githubusercontent.com/103989404/210139721-919be130-fbba-4e3a-aa58-8a563e8c7792.png)
# Pressure Advance # Pressure Advance
I will present two approaches for calibrating the pressure advance value. Both methods have their own advantages and disadvantages. It is important to note that each method has two versions: one for a direct drive extruder and one for a Bowden extruder. Make sure to select the appropriate version for your test.
##### *NOTE: For Bambulab X1/X1C users, make sure you do not select the 'Flow calibration' option.* Orca Slicer includes three approaches for calibrating the pressure advance value. Each method has its own advantages and disadvantages. It is important to note that each method has two versions: one for a direct drive extruder and one for a Bowden extruder. Make sure to select the appropriate version for your test.
##### *NOTE: For Bambulab X1/X1C users, make sure you do not select the 'Flow calibration' option when printings.*
![uncheck](https://user-images.githubusercontent.com/103989404/221345187-3c317a46-4d85-4221-99b9-adb5c7f48026.jpeg) ![uncheck](https://user-images.githubusercontent.com/103989404/221345187-3c317a46-4d85-4221-99b9-adb5c7f48026.jpeg)
### Line method ### Line method
The line method is quick and straightforward to test. However, its accuracy highly depends on your first layer quality. It is suggested to turn on the bed mesh leveling for this test. The line method is quick and straightforward to test. However, its accuracy highly depends on your first layer quality. It is suggested to turn on the bed mesh leveling for this test.
Steps: Steps:
1. Select the printer, filament, and process you would like to use for the test. 1. Select the printer, filament, and process you would like to use for the test.
@ -48,7 +52,27 @@ Steps:
![line_0 016](https://user-images.githubusercontent.com/103989404/210140046-dc5adf6a-42e8-48cd-950c-5e81558da967.jpg) ![line_0 016](https://user-images.githubusercontent.com/103989404/210140046-dc5adf6a-42e8-48cd-950c-5e81558da967.jpg)
![image](https://user-images.githubusercontent.com/103989404/210140079-61a4aba4-ae01-4988-9f8e-2a45a90cdb7d.png) ![image](https://user-images.githubusercontent.com/103989404/210140079-61a4aba4-ae01-4988-9f8e-2a45a90cdb7d.png)
### Pattern method
The pattern method is adapted from [Andrew Ellis' pattern method generator](https://ellis3dp.com/Pressure_Linear_Advance_Tool/), which was itself derived from the [Marlin pattern method](https://marlinfw.org/tools/lin_advance/k-factor.html) developed by [Sineos](https://github.com/Sineos/k-factorjs).
[Instructions for using and reading the pattern method](https://ellis3dp.com/Print-Tuning-Guide/articles/pressure_linear_advance/pattern_method.html) are provided in [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide/), with only a few Orca Slicer differences to note.
First and foremost, when you initiate the test, you'll only see a small rectangular prism on the plate. This object serves a few purposes:
1. The test pattern itself is added in as custom G-Code at each layer, same as you could do by hand actually. The rectangular prism gives us the layers in which to insert that G-Code. This also means that **you'll see the full test pattern when you move to the Preview pane**
2. The prism acts as a handle, enabling you to move the test pattern wherever you'd like on the plate by moving the prism
3. The filament selected for the prism is also used for the test pattern
Next, Ellis' generator provided the ability to adjust specific printer, filament, and print profile settings. You can make these same changes in Orca Slicer by adjusting the settings in the Prepare pane as you would with any other print. When you initiate the calibration test, Ellis' default settings are applied. A few things to note about these settings:
1. Ellis specified line widths as a percent of filament diameter. The Orca pattern method does the same to provide its suggested defaults, making use of Ellis' percentages in combination with your specified nozzle diameter
2. In terms of line width, the pattern only makes use of the `Default` and `First layer` widths
3. In terms of speed, the pattern only uses the `First layer speed -> First layer` and `Other layers speed -> Outer wall` speeds
4. The infill pattern beneath the numbers cannot be changed becuase it's not actually an infill pattern pulled from the settings. All of the pattern G-Code is custom written, so that "infill" is, effectively, hand-drawn and so not processed through the usual channels that would enable Orca to recognize it as infill
### Tower method ### Tower method
The tower method may take a bit more time to complete, but it does not rely on the quality of the first layer. The tower method may take a bit more time to complete, but it does not rely on the quality of the first layer.
The PA value for this test will be increased by 0.002 for every 1 mm increase in height. (**NOTE** 0.02 for Bowden) The PA value for this test will be increased by 0.002 for every 1 mm increase in height. (**NOTE** 0.02 for Bowden)
Steps: Steps:
@ -82,6 +106,27 @@ You can assess the tolerance using either an M6 Allen key or the printed hexagon
![image](./images/OrcaToleranceTes_m6.jpg) ![image](./images/OrcaToleranceTes_m6.jpg)
![image](./images/OrcaToleranceTest_print.jpg) ![image](./images/OrcaToleranceTest_print.jpg)
# Advanced Calibration
## Max Volumetric speed
This is a test designed to calibrate the maximum volumetric speed of the specific filament. The generic or 3rd party filament types may not have the correct volumetric flow rate set in the filament. This test will help you to find the maximum volumetric speed of the filament.
You will be promted to enter the settings for the test: start volumetric speed, end volumentric speed, and step. It is recommended to use the default values (5mm³/s start, 20mm³/s end, with a step of 0.5), unless you already have an idea of the lower or upper limit for your filament. Select "OK", slice the plate, and send it to the printer.
Once printed, take note of where the layers begin to fail and where the quality begins to suffer. Pay attention to changes from matte to shiny as well.
![image](./images/vmf_measurement_point.jpg)
Using calipers or a ruler, measure the height of the print at that point. Use the following calculation to determine the correct max flow value: `start + (height-measured * step)` . For example in the photo below, and using the default setting values, the print quality began to suffer at 19mm measured, so the calculation would be: `5 + (19 * 0.5)` , or `13mm³/s` using the default values. Enter your number into the "Max volumetric speed" value in the filament settings.
![image](./images/caliper_sample_mvf.jpg)
You can also return to OrcaSlicer in the "Preview" tab, make sure the color scheme "flow" is selected. Scroll down to the layer height that you measured, and click on the toolhead slider. This will indicate the max flow level for your filmanet.
![image](./images/max_volumetric_flow.jpg)
#### *NOTE You may also choose to conservatively reduce the flow by 5-10% to ensure print quality.*
*** ***
*Credits:* *Credits:*
- *The Flowrate test and retraction test is inspired by [SuperSlicer](https://github.com/supermerill/SuperSlicer)* - *The Flowrate test and retraction test is inspired by [SuperSlicer](https://github.com/supermerill/SuperSlicer)*

View file

@ -12,24 +12,24 @@ Full manual for GNUgettext can be seen here: http://www.gnu.org/software/gettext
### Scenario 1. How do I add a translation or fix an existing translation ### Scenario 1. How do I add a translation or fix an existing translation
1. Get PO-file 'BambuStudio_xx.pot' from corresponding sub-folder here: 1. Get PO-file 'OrcaSlicer_xx.pot' from corresponding sub-folder here:
https://github.com/bambulab/BambuStudio/tree/master/bbl/i18n https://github.com/softfever/OrcaSlicer/tree/master/localization/i18n
2. Open this file in PoEdit as "Edit a translation" 2. Open this file in PoEdit as "Edit a translation"
3. Apply your corrections to the translation 3. Apply your corrections to the translation
4. Push changed BambuStudio_xx.po into the original folder 4. Push changed OrcaSlicer_xx.po into the original folder
5. copy BambuStudio_xx.mo into resources/i18n/xx and rename it to BambuStudio.mo, then push the changed file. 5. copy OrcaSlicer_xx.mo into resources/i18n/xx and rename it to OrcaSlicer.mo, then push the changed file.
### Scenario 2. How do I add a new language support ### Scenario 2. How do I add a new language support
1. Get file BambuStudio.pot here : 1. Get file OrcaSlicer.pot here :
https://github.com/bambulab/BambuStudio/tree/master/bbl/i18n https://github.com/softfever/OrcaSlicer/tree/master/localization/i18n
2. Open it in PoEdit for "Create new translation" 2. Open it in PoEdit for "Create new translation"
3. Select Translation Language (for example French). 3. Select Translation Language (for example French).
4. As a result you will have fr.po - the file containing translation to French. 4. As a result you will have fr.po - the file containing translation to French.
Notice. When the translation is complete you need to: Notice. When the translation is complete you need to:
- Rename the file to BambuStudio_fr.po - Rename the file to OrcaSlicer_fr.po
- Click "Save file" button. BambuStudio_fr.mo will be created immediately - Click "Save file" button. OrcaSlicer_fr.mo will be created immediately
- Bambu_Studio_fr.po needs to be copied into the sub-folder fr of https://github.com/bambulab/BambuStudio/tree/master/bbl/i18n, and be pushed - Bambu_Studio_fr.po needs to be copied into the sub-folder fr of https://github.com/softfever/OrcaSlicer/tree/master/localization/i18n, and be pushed
- copy BambuStudio_xx.mo into resources/i18n/xx and rename it to BambuStudio.mo, then push the changed file. - copy OrcaSlicer_xx.mo into resources/i18n/xx and rename it to OrcaSlicer.mo, then push the changed file.
( name of folder "fr" means "French" - the translation language). ( name of folder "fr" means "French" - the translation language).
### Scenario 3. How do I add a new text resource when implementing a feature to Orca Slicer ### Scenario 3. How do I add a new text resource when implementing a feature to Orca Slicer
@ -43,11 +43,11 @@ If you add new file resource, add it to the list of files containing macro `L()`
### Scenario 4. How do I use GNUgettext to localize my own application taking Orca Slicer as an example ### Scenario 4. How do I use GNUgettext to localize my own application taking Orca Slicer as an example
1. For convenience create a list of files with this macro `L(s)`. We have 1. For convenience create a list of files with this macro `L(s)`. We have
https://github.com/bambulab/BambuStudio/blob/master/bbl/i18n/list.txt. https://github.com/softfever/OrcaSlicer/blob/master/localization/i18n/list.txt.
2. Create template file(*.POT) with GNUgettext command: 2. Create template file(*.POT) with GNUgettext command:
``` ```
xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o BambuStudio.pot -f list.txt xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o OrcaSlicer.pot -f list.txt
``` ```
Use flag `--from-code=UTF-8` to specify that the source strings are in UTF-8 encoding Use flag `--from-code=UTF-8` to specify that the source strings are in UTF-8 encoding

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

View file

@ -6,48 +6,68 @@
"files": [ "files": [
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/en/OrcaSlicer_en.po", "pattern": "localization/i18n/en/OrcaSlicer_en.po",
"lang": "en" "lang": "en"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/fr/OrcaSlicer_fr.po", "pattern": "localization/i18n/fr/OrcaSlicer_fr.po",
"lang": "fr" "lang": "fr"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/de/OrcaSlicer_de.po", "pattern": "localization/i18n/de/OrcaSlicer_de.po",
"lang": "de" "lang": "de"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/sv/OrcaSlicer_sv.po", "pattern": "localization/i18n/sv/OrcaSlicer_sv.po",
"lang": "sv" "lang": "sv"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/es/OrcaSlicer_es.po", "pattern": "localization/i18n/es/OrcaSlicer_es.po",
"lang": "es" "lang": "es"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/nl/OrcaSlicer_nl.po", "pattern": "localization/i18n/nl/OrcaSlicer_nl.po",
"lang": "nl" "lang": "nl"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/hu/OrcaSlicer_hu.po", "pattern": "localization/i18n/hu/OrcaSlicer_hu.po",
"lang": "hu" "lang": "hu"
}, },
{ {
"type": "po", "type": "po",
"pattern": "bbl/i18n/ja/OrcaSlicer_ja.po", "pattern": "localization/i18n/ja/OrcaSlicer_ja.po",
"lang": "ja" "lang": "ja"
},
{
"type": "po",
"pattern": "localization/i18n/ko/OrcaSlicer_ko.po",
"lang": "ko"
},
{
"type": "po",
"pattern": "localization/i18n/ru/OrcaSlicer_ru.po",
"lang": "ru"
},
{
"type": "po",
"pattern": "localization/i18n/zh_TW/OrcaSlicer_zh_TW.po",
"lang": "zh_TW"
},
{
"type": "po",
"pattern": "localization/i18n/tr/OrcaSlicer_tr.po",
"lang": "tr"
} }
] ]
}, },
"download": { "download": {
"folder": "bbl/i18n", "folder": "localization/i18n",
"includeSourceLang" : "true", "includeSourceLang" : "true",
"files": { "files": {
"output": "${lang}/OrcaSlicer_${lang}.po" "output": "${lang}/OrcaSlicer_${lang}.po"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -130,5 +130,18 @@ src/libslic3r/PrintObject.cpp
src/libslic3r/PrintObjectSlice.cpp src/libslic3r/PrintObjectSlice.cpp
src/libslic3r/PlaceholderParser.cpp src/libslic3r/PlaceholderParser.cpp
src/libslic3r/TreeSupport.cpp src/libslic3r/TreeSupport.cpp
src/libslic3r/Model.cpp
src/libslic3r/Format/OBJ.cpp
src/slic3r/GUI/CalibrationWizardPage.cpp
src/slic3r/GUI/CalibrationPanel.cpp
src/slic3r/GUI/CalibrationWizard.cpp
src/slic3r/GUI/CalibrationWizardStartPage.cpp
src/slic3r/GUI/CalibrationWizardSavePage.cpp
src/slic3r/GUI/CalibrationWizardPresetPage.cpp
src/slic3r/GUI/CalibrationWizardCaliPage.cpp
src/slic3r/GUI/CaliHistoryDialog.cpp
src/slic3r/GUI/BonjourDialog.cpp
src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp
src/slic3r/GUI/PrintHostDialogs.cpp
src/slic3r/GUI/calib_dlg.cpp src/slic3r/GUI/calib_dlg.cpp
src/slic3r/GUI/PhysicalPrinterDialog.cpp src/slic3r/GUI/PhysicalPrinterDialog.cpp

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1,54 +1,83 @@
{ {
"printers": [ "printers": [
{ {
"display_name": "Bambu Lab P1P", "display_name": "Bambu Lab P1P",
"func": { "func": {
"FUNC_CHAMBER_TEMP": false, "FUNC_CHAMBER_TEMP": false,
"FUNC_FIRSTLAYER_INSPECT": false, "FUNC_FIRSTLAYER_INSPECT": false,
"FUNC_AI_MONITORING": false, "FUNC_AI_MONITORING": true,
"FUNC_BUILDPLATE_MARKER_DETECT": false, "FUNC_LIDAR_CALIBRATION": false,
"FUNC_FLOW_CALIBRATION": false, "FUNC_BUILDPLATE_MARKER_DETECT": false,
"FUNC_MONITORING": false, "FUNC_FLOW_CALIBRATION": false,
"FUNC_MEDIA_FILE": false, "FUNC_MONITORING": false,
"FUNC_REMOTE_TUNNEL": false, "FUNC_MEDIA_FILE": false,
"FUNC_LOCAL_TUNNEL": true, "FUNC_VIRTUAL_CAMERA": false,
"FUNC_VIRTUAL_CAMERA" : false, "FUNC_PRINT_WITHOUT_SD": false,
"FUNC_PRINT_WITHOUT_SD": false, "FUNC_ALTER_RESOLUTION": false,
"FUNC_ALTER_RESOLUTION": false,
"FUNC_CHAMBER_FAN" : false, "FUNC_PRINT_ALL": false,
"FUNC_EXTRUSION_CALI": true, "FUNC_EXTRUSION_CALI": true
"FUNC_PRINT_ALL" : false
},
"camera_resolution":["720p"],
"bed_temperature_limit": 100,
"model_id": "C11",
"printer_type": "C11",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_p1p"
}, },
{ "camera_resolution": [ "720p" ],
"display_name": "Bambu Lab X1", "bed_temperature_limit": 100,
"func": { "model_id": "C11",
"FUNC_VIRTUAL_TYAY" : true, "printer_type": "C11",
"FUNC_EXTRUSION_CALI": false, "compatible_machine": [ "BL-P001", "BL-P002", "C12"],
"FUNC_LOCAL_TUNNEL": false "ftp_folder": "sdcard/",
}, "printer_thumbnail_image": "printer_thumbnail_p1p"
"model_id": "BL-P002", },
"camera_resolution":["720p","1080p"], {
"printer_type": "3DPrinter-X1", "display_name": "Bambu Lab P1S",
"printer_thumbnail_image": "printer_thumbnail" "func": {
"FUNC_CHAMBER_TEMP": false,
"FUNC_FIRSTLAYER_INSPECT": false,
"FUNC_AI_MONITORING": true,
"FUNC_LIDAR_CALIBRATION": false,
"FUNC_BUILDPLATE_MARKER_DETECT": false,
"FUNC_FLOW_CALIBRATION": false,
"FUNC_MONITORING": false,
"FUNC_MEDIA_FILE": false,
"FUNC_VIRTUAL_CAMERA": false,
"FUNC_PRINT_WITHOUT_SD": false,
"FUNC_ALTER_RESOLUTION": false,
"FUNC_PRINT_ALL": false,
"FUNC_VIRTUAL_TYAY": true,
"FUNC_EXTRUSION_CALI": true
}, },
{ "camera_resolution": [ "720p" ],
"display_name": "Bambu Lab X1 Carbon", "bed_temperature_limit": 100,
"func": { "model_id": "C12",
"FUNC_VIRTUAL_TYAY" : true, "compatible_machine":["BL-P001", "BL-P002", "C11"],
"FUNC_EXTRUSION_CALI": false, "printer_type": "C12",
"FUNC_LOCAL_TUNNEL": false "ftp_folder" : "sdcard/",
}, "printer_thumbnail_image": "printer_thumbnail_p1p"
"model_id": "BL-P001", },
"camera_resolution":["720p","1080p"], {
"printer_type": "3DPrinter-X1-Carbon",
"printer_thumbnail_image": "printer_thumbnail" "display_name": "Bambu Lab X1",
} "func": {
"FUNC_VIRTUAL_TYAY": true,
"FUNC_EXTRUSION_CALI": false,
"FUNC_LOCAL_TUNNEL": false
},
"model_id": "BL-P002",
"compatible_machine": [ "BL-P001", "C11", "C12"],
"camera_resolution": [ "720p", "1080p" ],
"printer_type": "3DPrinter-X1",
"printer_thumbnail_image": "printer_thumbnail"
},
{
"display_name": "Bambu Lab X1 Carbon",
"func": {
"FUNC_VIRTUAL_TYAY": true,
"FUNC_EXTRUSION_CALI": false,
"FUNC_LOCAL_TUNNEL": false
},
"model_id": "BL-P001",
"compatible_machine": [ "BL-P002", "C11", "C12"],
"camera_resolution": [ "720p", "1080p" ],
"printer_type": "3DPrinter-X1-Carbon",
"printer_thumbnail_image": "printer_thumbnail"
}
] ]
} }

Some files were not shown because too many files have changed in this diff Show more