mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-31 05:51:49 -06:00
Merge branch 'main' of https://github.com/Musicdad12/OrcaSlicer
This commit is contained in:
commit
62036c411a
1724 changed files with 225902 additions and 48182 deletions
144
.clang-format
144
.clang-format
|
@ -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
|
|
||||||
...
|
|
||||||
|
|
||||||
|
|
|
@ -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 =
|
29
.github/ISSUE_TEMPLATE/bug_report.md
vendored
29
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -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
102
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal 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
|
10
.github/ISSUE_TEMPLATE/custom.md
vendored
10
.github/ISSUE_TEMPLATE/custom.md
vendored
|
@ -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: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
3
.github/ISSUE_TEMPLATE/feature_request.md
vendored
3
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -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
127
.github/workflows/build_deps.yml
vendored
Normal 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
|
||||||
|
|
83
.github/workflows/build_linux.yml
vendored
83
.github/workflows/build_linux.yml
vendored
|
@ -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'
|
|
111
.github/workflows/build_mac_arm64.yml
vendored
111
.github/workflows/build_mac_arm64.yml
vendored
|
@ -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
|
|
110
.github/workflows/build_mac_x64.yml
vendored
110
.github/workflows/build_mac_x64.yml
vendored
|
@ -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
287
.github/workflows/build_orca.yml
vendored
Normal 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'
|
79
.github/workflows/build_win.yml
vendored
79
.github/workflows/build_win.yml
vendored
|
@ -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
26
.github/workflows/check_locale.yml
vendored
Normal 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
7
.gitignore
vendored
|
@ -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
8
.idea/.gitignore
generated
vendored
Normal 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
2
.idea/OrcaSlicer.iml
generated
Normal 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
7
.idea/codeStyles/Project.xml
generated
Normal 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
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal 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
4
.idea/misc.xml
generated
Normal 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
8
.idea/modules.xml
generated
Normal 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
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
2
Build.PL
2
Build.PL
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
@ -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
|
|
|
@ -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
|
|
25
DockerRun.sh
25
DockerRun.sh
|
@ -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 $*
|
|
||||||
|
|
94
Dockerfile
94
Dockerfile
|
@ -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"]
|
|
85
README.md
85
README.md
|
@ -1,17 +1,9 @@
|
||||||
|
[](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_orca.yml)
|
||||||
|
|
||||||
[](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_win.yml)
|
# Orca Slicer
|
||||||
[](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_arm64.yml)
|
Orca Slicer is an open source slicer for FDM printers.
|
||||||
[](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/).
|
||||||
[](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_linux.yml)
|
 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
|
||||||

|
softfever@mac:~$ xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app
|
||||||
- Step 2: in `System Settings` -> `Privacy & Security`, click `Open Anyway`:
|
```
|
||||||

|
- Option 3:
|
||||||
|
- Step 1: open the app, a warning window will pop up
|
||||||
|

|
||||||
|
- Step 2: in `System Settings` -> `Privacy & Security`, click `Open Anyway`:
|
||||||
|

|
||||||
|
</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
|
||||||
|
[](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.
|
||||||
|
|
||||||
|
|
BIN
SoftFever_doc/sponsor_logos/peopoly-standard-logo.png
Normal file
BIN
SoftFever_doc/sponsor_logos/peopoly-standard-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
|
@ -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}")
|
|
|
@ -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" )
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -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
|
|
@ -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
26
build_release_vs2022.bat
Normal 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
|
|
@ -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
|
|
495
build_win.bat
495
build_win.bat
|
@ -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
|
|
|
@ -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})
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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>
|
||||||
|
|
4
deps/Blosc/Blosc.cmake
vendored
4
deps/Blosc/Blosc.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/Boost/Boost.cmake
vendored
2
deps/Boost/Boost.cmake
vendored
|
@ -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()
|
||||||
|
|
||||||
|
|
2
deps/CGAL/CGAL.cmake
vendored
2
deps/CGAL/CGAL.cmake
vendored
|
@ -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
6
deps/CMakeLists.txt
vendored
|
@ -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)
|
||||||
|
|
2
deps/CURL/CURL.cmake
vendored
2
deps/CURL/CURL.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/Cereal/Cereal.cmake
vendored
2
deps/Cereal/Cereal.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/EXPAT/EXPAT.cmake
vendored
2
deps/EXPAT/EXPAT.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/FREETYPE/FREETYPE.cmake
vendored
2
deps/FREETYPE/FREETYPE.cmake
vendored
|
@ -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}
|
||||||
|
|
2
deps/GLEW/GLEW.cmake
vendored
2
deps/GLEW/GLEW.cmake
vendored
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
2
deps/GLFW/GLFW.cmake
vendored
2
deps/GLFW/GLFW.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/JPEG/JPEG.cmake
vendored
2
deps/JPEG/JPEG.cmake
vendored
|
@ -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}
|
||||||
|
|
2
deps/NLopt/NLopt.cmake
vendored
2
deps/NLopt/NLopt.cmake
vendored
|
@ -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
|
||||||
|
|
8
deps/OCCT/OCCT.cmake
vendored
8
deps/OCCT/OCCT.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/OpenCSG/OpenCSG.cmake
vendored
2
deps/OpenCSG/OpenCSG.cmake
vendored
|
@ -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
31
deps/OpenEXR/0001-OpenEXR-GCC13.patch
vendored
Normal 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>
|
||||||
|
|
||||||
|
|
14
deps/OpenEXR/OpenEXR.cmake
vendored
14
deps/OpenEXR/OpenEXR.cmake
vendored
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
7
deps/OpenVDB/OpenVDB.cmake
vendored
7
deps/OpenVDB/OpenVDB.cmake
vendored
|
@ -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
4
deps/PNG/PNG.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/Qhull/Qhull.cmake
vendored
2
deps/Qhull/Qhull.cmake
vendored
|
@ -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
11
deps/TBB/0001-TBB-GCC13.patch
vendored
Normal 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
9
deps/TBB/TBB.cmake
vendored
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
4
deps/TIFF/TIFF.cmake
vendored
4
deps/TIFF/TIFF.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/ZLIB/ZLIB.cmake
vendored
2
deps/ZLIB/ZLIB.cmake
vendored
|
@ -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
|
||||||
|
|
2
deps/wxWidgets/wxWidgets.cmake
vendored
2
deps/wxWidgets/wxWidgets.cmake
vendored
|
@ -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}
|
||||||
|
|
|
@ -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
|
||||||

|

|
||||||
|
|
||||||
# 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.*
|
||||||

|

|
||||||
|
|
||||||
### 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:
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
### 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
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
# 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### *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)*
|
||||||
|
|
|
@ -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
|
||||||
|
|
BIN
doc/images/caliper_sample_mvf.jpg
Normal file
BIN
doc/images/caliper_sample_mvf.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 158 KiB |
BIN
doc/images/max_volumetric_flow.jpg
Normal file
BIN
doc/images/max_volumetric_flow.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 285 KiB |
BIN
doc/images/vmf_measurement_point.jpg
Normal file
BIN
doc/images/vmf_measurement_point.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 165 KiB |
|
@ -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
3698
bbl/i18n/cs/OrcaSlicer_cs.po → localization/i18n/cs/OrcaSlicer_cs.po
Executable file → Normal file
3698
bbl/i18n/cs/OrcaSlicer_cs.po → localization/i18n/cs/OrcaSlicer_cs.po
Executable file → Normal file
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
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
11357
localization/i18n/ko/OrcaSlicer_ko.po
Normal file
11357
localization/i18n/ko/OrcaSlicer_ko.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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
10135
localization/i18n/ru/OrcaSlicer_ru.po
Normal file
10135
localization/i18n/ru/OrcaSlicer_ru.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
11577
localization/i18n/tr/OrcaSlicer_tr.po
Normal file
11577
localization/i18n/tr/OrcaSlicer_tr.po
Normal file
File diff suppressed because it is too large
Load diff
11405
localization/i18n/uk/OrcaSlicer_uk.po
Normal file
11405
localization/i18n/uk/OrcaSlicer_uk.po
Normal file
File diff suppressed because it is too large
Load diff
10805
localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
Normal file
10805
localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue