FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
ORNLSlicer/tests/common_parser_tests.cpp at develop · ORNLSlicer/ORNLSlicer · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
ORNLSlicer
/
ORNLSlicer
Public
Notifications
You must be signed in to change notification settings
Fork
20
Star
90
Code
Issues
18
Pull requests
5
Discussions
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
ORNLSlicer
/
tests
/
common_parser_tests.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
167 lines (142 loc) · 6.98 KB
Breadcrumbs
ORNLSlicer
/
tests
/
common_parser_tests.cpp
Copy path
File metadata and controls
167 lines (142 loc) · 6.98 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#
include
<
QCoreApplication
>
#
include
<
QRegularExpression
>
#
include
<
QStringList
>
#
include
<
cmath
>
#
include
<
cstdlib
>
#
include
<
exception
>
#
include
<
iostream
>
#
include
"
gcode/gcode_meta.h
"
#
include
"
gcode/parsers/common_parser.h
"
#
include
"
managers/settings/settings_manager.h
"
#
include
"
units/unit.h
"
#
include
"
utilities/constants.h
"
namespace
{
bool
expect
(
bool
condition,
const
char
* message) {
if
(!condition) std::cerr << message <<
'
\n
'
;
return
condition;
}
QStringList
upperLines
(
const
QStringList& lines) {
QStringList upper_lines;
for
(
const
QString& line : lines) { upper_lines.
append
(line.
toUpper
()); }
return
upper_lines;
}
bool
lineFeedrate
(
const
QString& line,
double
& feedrate) {
static
const
QRegularExpression
feedrate_token
(
"
(^|
\\
s)F([-+]?
\\
d*
\\
.?
\\
d+(?:[Ee][-+]?
\\
d+)?)
"
,
QRegularExpression::CaseInsensitiveOption);
const
QRegularExpressionMatch match = feedrate_token.
match
(line);
if
(!match.
hasMatch
())
return
false
;
bool
converted =
false
;
feedrate = match.
captured
(
2
).
toDouble
(&converted);
return
converted;
}
void
configureLayerTimeSettings
() {
auto
global_settings =
ORNL
::
GSM
->
getGlobal
();
global_settings->
setSetting
(
ORNL
::
MS
::Cooling::
kForceMinLayerTime
,
true
);
global_settings->
setSetting
(
ORNL
::
MS
::Cooling::
kForceMinLayerTimeMethod
,
static_cast
<
int
>(
ORNL
::ForceMinimumLayerTime::
kSlow_Feedrate
));
global_settings->
setSetting
(
ORNL
::
MS
::Cooling::
kMinLayerTime
,
5.0
);
global_settings->
setSetting
(
ORNL
::
MS
::Cooling::
kMaxLayerTime
,
0.0
);
global_settings->
setSetting
(
ORNL
::
MS
::Cooling::
kExtruderScaleFactor
,
1.0
);
global_settings->
setSetting
(
ORNL
::
MS
::Filament::
kFilamentBAxis
,
false
);
global_settings->
setSetting
(
ORNL
::
MS
::Startup::
kDisableFeedrateScaling
,
false
);
global_settings->
setSetting
(
ORNL
::
MS
::Slowdown::
kDisableFeedrateScaling
,
false
);
global_settings->
setSetting
(
ORNL
::
MS
::TipWipe::
kDisableFeedrateScaling
,
false
);
global_settings->
setSetting
(
ORNL
::
MS
::SpiralLift::
kDisableFeedrateScaling
,
false
);
global_settings->
setSetting
(
ORNL
::
PS
::Travel::
kDisableFeedrateScaling
,
false
);
global_settings->
setSetting
(
ORNL
::
PRS
::MachineSpeed::
kMinXYSpeed
,
0.0
);
global_settings->
setSetting
(
ORNL
::
PRS
::MachineSpeed::
kMaxXYSpeed
,
1000000.0
);
global_settings->
setSetting
(
ORNL
::
PS
::Layer::
kBeadWidth
,
0.4
);
global_settings->
setSetting
(
ORNL
::
PS
::Layer::
kLayerHeight
,
0.2
);
}
bool
accumulatesTravelTimeForNonDepositionMove
() {
QStringList original_lines {
"
G1 F60 X1 ;TRAVEL
"
};
QStringList upper_lines =
upperLines
(original_lines);
ORNL
::CommonParser
parser
(
ORNL
::GcodeMetaList::MarlinMeta,
false
, original_lines, upper_lines);
try
{
parser.
parseLines
();
return
parser.
getTravelDistance
() >
0.0
*
ORNL
::mm && parser.
getTravelTime
() >
0.0
*
ORNL
::s;
}
catch
(
const
std::exception& ex) {
std::cerr << ex.
what
() <<
'
\n
'
;
return
false
;
}
}
bool
accumulatesTravelTimeForTravelCommentAfterDepositionMove
() {
QStringList original_lines {
"
G1 F60 X1 E1 ;PERIMETER
"
,
"
G1 F60 X2 ;TRAVEL
"
};
QStringList upper_lines =
upperLines
(original_lines);
ORNL
::CommonParser
parser
(
ORNL
::GcodeMetaList::MarlinMeta,
false
, original_lines, upper_lines);
try
{
const
QList<QList<
ORNL
::GcodeCommand>> commands = parser.
parseLines
();
return
commands.
size
() ==
1
&& commands.
first
().
size
() ==
2
&& commands.
first
().
first
().
getDepositionActive
() &&
!commands.
first
().
last
().
getDepositionActive
() && parser.
getPrintingDistance
() >
0.0
*
ORNL
::mm &&
parser.
getTravelDistance
() >
0.0
*
ORNL
::mm && parser.
getTravelTime
() >
0.0
*
ORNL
::s;
}
catch
(
const
std::exception& ex) {
std::cerr << ex.
what
() <<
'
\n
'
;
return
false
;
}
}
bool
keepsTravelFeedrateWhenTravelScalingDisabled
() {
configureLayerTimeSettings
();
QStringList original_lines {
"
;BEGINNING LAYER: 1
"
,
"
G1 F60 X1 ;TRAVEL
"
,
"
G1 F60 X2 E1 ;PERIMETER
"
,
"
;Settings Footer
"
,
"
;disable_travel_feedrate_scaling true
"
,
};
QStringList upper_lines =
upperLines
(original_lines);
ORNL
::CommonParser
parser
(
ORNL
::GcodeMetaList::MarlinMeta,
true
, original_lines, upper_lines);
try
{
parser.
parseFooter
();
parser.
parseLines
();
double
travel_feedrate =
0.0
;
double
print_feedrate =
0.0
;
const
QList<
double
> modifiers = parser.
getLayerFeedRateModifiers
();
const
double
travel_time = parser.
getTravelTime
()();
const
double
adjusted_travel_time = parser.
getAdjustedTravelTime
()();
return
parser.
getWasModified
() && modifiers.
size
() >
1
&& modifiers[
1
] >
0.0
&& modifiers[
1
] <
1.0
&&
lineFeedrate
(original_lines[
1
], travel_feedrate) &&
lineFeedrate
(original_lines[
2
], print_feedrate) &&
std::abs
(travel_feedrate -
60.0
) <
1.0e-6
&& print_feedrate >
0.0
&& print_feedrate <
60.0
&&
std::abs
(adjusted_travel_time - travel_time) <
1.0e-6
;
}
catch
(
const
std::exception& ex) {
std::cerr << ex.
what
() <<
'
\n
'
;
return
false
;
}
}
bool
adjustsTravelTimeWhenTravelFeedrateIsScaled
() {
configureLayerTimeSettings
();
QStringList original_lines {
"
;BEGINNING LAYER: 1
"
,
"
G1 F60 X1 ;TRAVEL
"
,
"
G1 F60 X2 E1 ;PERIMETER
"
,
"
;Settings Footer
"
,
"
;disable_travel_feedrate_scaling false
"
,
};
QStringList upper_lines =
upperLines
(original_lines);
ORNL
::CommonParser
parser
(
ORNL
::GcodeMetaList::MarlinMeta,
true
, original_lines, upper_lines);
try
{
parser.
parseFooter
();
parser.
parseLines
();
double
travel_feedrate =
0.0
;
const
QList<
double
> modifiers = parser.
getLayerFeedRateModifiers
();
return
parser.
getWasModified
() && modifiers.
size
() >
1
&& modifiers[
1
] >
0.0
&& modifiers[
1
] <
1.0
&&
lineFeedrate
(original_lines[
1
], travel_feedrate) && travel_feedrate >
0.0
&& travel_feedrate <
60.0
&&
parser.
getAdjustedTravelTime
()() > parser.
getTravelTime
()();
}
catch
(
const
std::exception& ex) {
std::cerr << ex.
what
() <<
'
\n
'
;
return
false
;
}
}
}
//
namespace
int
main
(
int
argc,
char
* argv[]) {
QCoreApplication
app
(argc, argv);
bool
passed =
true
;
passed &=
expect
(
accumulatesTravelTimeForNonDepositionMove
(),
"
Common parser did not accumulate travel time for a travel move.
"
);
passed &=
expect
(
accumulatesTravelTimeForTravelCommentAfterDepositionMove
(),
"
Common parser did not accumulate travel time for a travel comment after deposition.
"
);
passed &=
expect
(
keepsTravelFeedrateWhenTravelScalingDisabled
(),
"
Common parser scaled a travel move when travel feedrate scaling was disabled.
"
);
passed &=
expect
(
adjustsTravelTimeWhenTravelFeedrateIsScaled
(),
"
Common parser did not adjust travel time when travel feedrate was scaled.
"
);
return
passed ?
EXIT_SUCCESS
:
EXIT_FAILURE
;
}
Back
|
FazBrowse Home
|
New Git URL