From fc1ec534add2576ce264bcdebf1e95645eb4c5fd Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 24 Sep 2020 16:49:04 +0200 Subject: [PATCH] fix min/max value for config: now double, not int fix some wrning --- src/libslic3r/Config.hpp | 4 +- src/libslic3r/EdgeGrid.cpp | 24 +++++----- src/libslic3r/ExPolygon.cpp | 4 +- src/libslic3r/ExtrusionEntity.hpp | 4 +- src/libslic3r/Fill/Fill.cpp | 13 +++--- src/libslic3r/Fill/Fill3DHoneycomb.cpp | 4 +- src/libslic3r/Fill/FillBase.cpp | 16 +++---- src/libslic3r/Fill/FillConcentric.cpp | 6 +-- src/libslic3r/Fill/FillGyroid.cpp | 10 ++-- src/libslic3r/Fill/FillHoneycomb.cpp | 10 ++-- src/libslic3r/Fill/FillPlanePath.cpp | 6 +-- src/libslic3r/GCode.cpp | 2 +- src/libslic3r/GCode/PreviewData.cpp | 2 +- src/libslic3r/PerimeterGenerator.cpp | 64 +++++++++++++------------- src/libslic3r/Point.cpp | 12 ++--- src/libslic3r/Print.cpp | 4 +- src/libslic3r/SLA/Contour3D.cpp | 11 +++-- src/libslic3r/SLA/RasterWriter.cpp | 4 +- src/libslic3r/Utils.hpp | 2 +- src/libslic3r/utils.cpp | 2 +- src/qhull/src/libqhull_r/poly2_r.c | 2 +- src/slic3r/GUI/Field.cpp | 14 +++--- src/slic3r/GUI/FreeCADDialog.cpp | 4 +- 23 files changed, 116 insertions(+), 108 deletions(-) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 05fe265c0..f8cac5b7d 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -1502,8 +1502,8 @@ public: // limit of a numeric input. // If not set, the is set to // By setting min=0, only nonnegative input is allowed. - int min = INT_MIN; - int max = INT_MAX; + double min = INT_MIN; + double max = INT_MAX; ConfigOptionMode mode = comSimple; // Legacy names for this configuration option. // Used when parsing legacy configuration file. diff --git a/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp index 587afd372..f4d42c572 100644 --- a/src/libslic3r/EdgeGrid.cpp +++ b/src/libslic3r/EdgeGrid.cpp @@ -714,11 +714,11 @@ void EdgeGrid::Grid::calculate_sdf() // Set the signum depending on whether the vertex is convex or reflex. int64_t det = int64_t(v_seg_prev(0)) * int64_t(v_seg(1)) - int64_t(v_seg_prev(1)) * int64_t(v_seg(0)); assert(det != 0); - d_min = dabs; + d_min = float(dabs); // Fill in an unsigned vector towards the zero iso surface. float *l = &L[(corner_r * ncols + corner_c) << 1]; - l[0] = std::abs(v_pt(0)); - l[1] = std::abs(v_pt(1)); + l[0] = float(std::abs(v_pt(0))); + l[1] = float(std::abs(v_pt(1))); #ifdef _DEBUG double dabs2 = sqrt(l[0]*l[0]+l[1]*l[1]); assert(std::abs(dabs-dabs2) < 1e-4 * std::max(dabs, dabs2)); @@ -737,7 +737,7 @@ void EdgeGrid::Grid::calculate_sdf() double d = double(d_seg) / sqrt(double(l2_seg)); double dabs = std::abs(d); if (dabs < d_min) { - d_min = dabs; + d_min = float(dabs); // Fill in an unsigned vector towards the zero iso surface. float *l = &L[(corner_r * ncols + corner_c) << 1]; float linv = float(d_seg) / float(l2_seg); @@ -861,22 +861,22 @@ void EdgeGrid::Grid::calculate_sdf() for (size_t r = 0; r < nrows; ++ r) { if (r > 0) for (size_t c = 0; c < ncols; ++ c) - danielsson_vstep(r, c, -int(ncols)); + danielsson_vstep(int(r), int(c), -int(ncols)); // PROPAGATE_DANIELSSON_SINGLE_VSTEP3(-int(ncols), c != 0, c + 1 != ncols); for (size_t c = 1; c < ncols; ++ c) - danielsson_hstep(r, c, -1); + danielsson_hstep(int(r), int(c), -1); for (int c = int(ncols) - 2; c >= 0; -- c) - danielsson_hstep(r, c, +1); + danielsson_hstep(int(r), int(c), +1); } // Bottom to top propagation. for (int r = int(nrows) - 2; r >= 0; -- r) { for (size_t c = 0; c < ncols; ++ c) - danielsson_vstep(r, c, +ncols); + danielsson_vstep(int(r), int(c), +int(ncols)); // PROPAGATE_DANIELSSON_SINGLE_VSTEP3(+int(ncols), c != 0, c + 1 != ncols); for (size_t c = 1; c < ncols; ++ c) - danielsson_hstep(r, c, -1); + danielsson_hstep(int(r), int(c), -1); for (int c = int(ncols) - 2; c >= 0; -- c) - danielsson_hstep(r, c, +1); + danielsson_hstep(int(r), int(c), +1); } // Update signed distance field from absolte vectors to the iso-surface. @@ -1076,8 +1076,8 @@ EdgeGrid::Grid::ClosestPointResult EdgeGrid::Grid::closest_point(const Point &pt // Signum of the distance field at pt. int sign_min = 0; double l2_seg_min = 1.; - for (int r = bbox.min(1); r <= bbox.max(1); ++ r) { - for (int c = bbox.min(0); c <= bbox.max(0); ++ c) { + for (size_t r = bbox.min.y(); r <= bbox.max.y(); ++ r) { + for (size_t c = bbox.min.x(); c <= bbox.max.x(); ++ c) { const Cell &cell = m_cells[r * m_cols + c]; for (size_t i = cell.begin; i < cell.end; ++ i) { const size_t contour_idx = m_cell_data[i].first; diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index 8f502dc77..a9c425e91 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -531,7 +531,7 @@ void ExPolygon::triangulate_p2t(Polygons* polygons) const std::vector ContourPoints; for (const Point &pt : ex->contour.points) // We should delete each p2t::Point object - ContourPoints.push_back(new p2t::Point(pt(0), pt(1))); + ContourPoints.push_back(new p2t::Point(double(pt.x()), double(pt.y()))); p2t::CDT cdt(ContourPoints); // holes @@ -539,7 +539,7 @@ void ExPolygon::triangulate_p2t(Polygons* polygons) const std::vector points; for (const Point &pt : hole->points) // will be destructed in SweepContext::~SweepContext - points.push_back(new p2t::Point(pt(0), pt(1))); + points.push_back(new p2t::Point(double(pt.x()), double(pt.y()))); cdt.AddHole(points); } diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index e45caba42..3f8b61d72 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -255,7 +255,7 @@ public: ExtrusionPath3D& operator=(ExtrusionPath3D &&rhs) { m_role = rhs.m_role; this->mm3_per_mm = rhs.mm3_per_mm; this->width = rhs.width; this->height = rhs.height; this->polyline = std::move(rhs.polyline); z_offsets = std::move(rhs.z_offsets); return *this; } - virtual ExtrusionPath3D* clone() const { return new ExtrusionPath3D(*this); } + virtual ExtrusionPath3D* clone() const override { return new ExtrusionPath3D(*this); } virtual ExtrusionPath3D* clone_move() override { return new ExtrusionPath3D(std::move(*this)); } virtual void visit(ExtrusionVisitor &visitor) override { visitor.use(*this); }; virtual void visit(ExtrusionVisitorConst &visitor) const override { visitor.use(*this); }; @@ -407,7 +407,7 @@ public: virtual bool can_reverse() const override { return false; } virtual ExtrusionEntity* clone() const override{ return new ExtrusionLoop (*this); } // Create a new object, initialize it with this object using the move semantics. - ExtrusionEntity* clone_move() override { return new ExtrusionLoop(std::move(*this)); } + virtual ExtrusionEntity* clone_move() override { return new ExtrusionLoop(std::move(*this)); } bool make_clockwise(); bool make_counter_clockwise(); virtual void reverse() override; diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index c12a51dcf..3e1208e4d 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -61,7 +61,7 @@ void make_fill(LayerRegion &layerm, ExtrusionEntityCollection &out) //if internal infill can be dense, place it on his own group if (layerm.region()->config().infill_dense.getBool() && layerm.region()->config().fill_density<40) { SurfacesPtr *denseGroup = NULL; - const uint32_t nbGroups = groups.size(); + const size_t nbGroups = groups.size(); for (uint32_t num_group = 0; num_group < nbGroups; ++num_group) { for (uint32_t num_srf = 0; num_srf < groups[num_group].size(); ++num_srf) { Surface *srf = groups[num_group][num_srf]; @@ -244,11 +244,12 @@ void make_fill(LayerRegion &layerm, ExtrusionEntityCollection &out) params.dont_connect = layerm.region()->config().infill_not_connected.getBool(); //adjust flow (to over-extrude when needed) float flow_percent = 1; - if (surface.has_pos_top()) flow_percent *= layerm.region()->config().fill_top_flow_ratio.get_abs_value(1); + if (surface.has_pos_top()) + flow_percent *= float(layerm.region()->config().fill_top_flow_ratio.get_abs_value(1)); params.flow_mult = flow_percent; //adjust spacing (to over-extrude when needed) if (surface.has_mod_overBridge()) { - params.density = layerm.region()->config().over_bridge_flow_ratio.get_abs_value(1); + params.density = float(layerm.region()->config().over_bridge_flow_ratio.get_abs_value(1)); } params.config = &layerm.region()->config(); @@ -303,7 +304,7 @@ void make_fill(LayerRegion &layerm, ExtrusionEntityCollection &out) f->z = layerm.layer()->print_z; if (is_denser)f->angle = 0; else f->angle = float(Geometry::deg2rad(layerm.region()->config().fill_angle.value)); - f->angle += PI * (layerm.region()->config().fill_angle_increment.value * layerm.layer()->id()) / 180.; + f->angle += float(PI * (layerm.region()->config().fill_angle_increment.value * layerm.layer()->id()) / 180.f); // Maximum length of the perimeter segment linking two infill lines. f->link_max_length = (coord_t)scale_(link_max_length); // Used by the concentric infill pattern to clip the loops to create extrusion paths. @@ -329,13 +330,13 @@ void make_fill(LayerRegion &layerm, ExtrusionEntityCollection &out) // so we can safely ignore the slight variation that might have // been applied to $f->flow_spacing } else { - flow = Flow::new_from_spacing(f->get_spacing(), flow.nozzle_diameter, (float)h, is_bridge); + flow = Flow::new_from_spacing((float)f->get_spacing(), flow.nozzle_diameter, (float)h, is_bridge); } params.flow = &flow; //apply bridge_overlap if needed if (is_bridge && density > 99 && layerm.region()->config().bridge_overlap.get_abs_value(1) != 1) { - params.density *= layerm.region()->config().bridge_overlap.get_abs_value(1); + params.density *= float(layerm.region()->config().bridge_overlap.get_abs_value(1)); } f->fill_surface_extrusion(&surface, params, out.entities); diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp index d2529b208..5a7d36332 100644 --- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp +++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp @@ -154,8 +154,8 @@ void Fill3DHoneycomb::_fill_surface_single( Polylines polylines = makeGrid( scale_(this->z), distance, - ceil(bb.size().x() / distance) + 1, - ceil(bb.size().y() / distance) + 1, + (size_t)ceil(bb.size().x() / distance) + 1, + (size_t)ceil(bb.size().y() / distance) + 1, size_t((this->layer_id / thickness_layers) % 2) + 1); //makeGrid(coord_t z, coord_t gridSize, size_t gridWidth, size_t gridHeight, size_t curveType) diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index eb1714de9..d811a4022 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -264,7 +264,7 @@ bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, c //convert to double to allow ² operation double min_dist_square = (double)width * (double)width * 0.9 - SCALED_EPSILON; Polyline better_polylines(pts_to_check); - Points better_pts = better_polylines.equally_spaced_points(width / 2); + Points better_pts = better_polylines.equally_spaced_points(double(width / 2)); for (const Point &p : better_pts) { for (const Polyline &poly2 : polylines_blocker) { for (const Point &p2 : poly2.points) { @@ -584,7 +584,7 @@ Fill::do_gap_fill(const ExPolygons &gapfill_areas, const FillParams ¶ms, Ext double max = 2. * params.flow->scaled_width(); // collapse //be sure we don't gapfill where the perimeters are already touching each other (negative spacing). - min = std::max(min, double(Flow::new_from_spacing(EPSILON, params.flow->nozzle_diameter, params.flow->height, false).scaled_width())); + min = std::max(min, double(Flow::new_from_spacing((float)EPSILON, (float)params.flow->nozzle_diameter, (float)params.flow->height, false).scaled_width())); //ExPolygons gapfill_areas_collapsed = diff_ex( // offset2_ex(gapfill_areas, double(-min / 2), double(+min / 2)), // offset2_ex(gapfill_areas, double(-max / 2), double(+max / 2)), @@ -813,7 +813,7 @@ void mark_boundary_segments_touching_infill( EdgeGrid::Grid grid; grid.set_bbox(boundary_bbox); // Inflate the bounding box by a thick line width. - grid.create(boundary, clip_distance + scale_(10.)); + grid.create(boundary, coord_t(clip_distance + scale_(10.))); struct Visitor { Visitor(const EdgeGrid::Grid &grid, const std::vector &boundary, std::vector> &boundary_data, const double dist2_max) : @@ -871,7 +871,7 @@ void mark_boundary_segments_touching_infill( } visitor(grid, boundary, boundary_data, distance_colliding * distance_colliding); BoundingBoxf bboxf(boundary_bbox.min.cast(), boundary_bbox.max.cast()); - bboxf.offset(- SCALED_EPSILON); + bboxf.offset(coordf_t(-SCALED_EPSILON)); for (const Polyline &polyline : infill) { // Clip the infill polyline by the Eucledian distance along the polyline. @@ -940,7 +940,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ assert(! boundary_src.contour.points.empty()); BoundingBox bbox = get_extents(boundary_src.contour); - bbox.offset(SCALED_EPSILON); + bbox.offset(coordf_t(SCALED_EPSILON)); // 1) Add the end points of infill_ordered to boundary_src. std::vector boundary; @@ -1019,7 +1019,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ // Connection from end of one infill line to the start of another infill line. //const float length_max = scale_(spacing); // const float length_max = scale_((2. / params.density) * spacing); - const float length_max = scale_((1000. / params.density) * spacing); + const coord_t length_max = scale_((1000. / params.density) * spacing); std::vector merged_with(infill_ordered.size()); for (size_t i = 0; i < merged_with.size(); ++ i) merged_with[i] = i; @@ -1049,10 +1049,10 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_ } assert(param_lo >= 0.f && param_lo <= param_end); assert(param_hi >= 0.f && param_hi <= param_end); - double len = param_hi - param_lo; + coord_t len = coord_t(param_hi - param_lo); if (len < length_max) connections_sorted.emplace_back(idx_chain - 1, len, reversed); - len = param_lo + param_end - param_hi; + len = coord_t(param_lo + param_end - param_hi); if (len < length_max) connections_sorted.emplace_back(idx_chain - 1, len, ! reversed); } diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp index 5099361a5..58a8a834c 100644 --- a/src/libslic3r/Fill/FillConcentric.cpp +++ b/src/libslic3r/Fill/FillConcentric.cpp @@ -38,7 +38,7 @@ FillConcentric::_fill_surface_single( Polygons loops = (Polygons)expolygon; Polygons last = loops; while (! last.empty()) { - last = offset2(last, -(distance + scale_(this->spacing) /2), +scale_(this->spacing) /2); + last = offset2(last, -double(distance + scale_(this->spacing) /2), +double(scale_(this->spacing) /2)); loops.insert(loops.end(), last.begin(), last.end()); } @@ -58,7 +58,7 @@ FillConcentric::_fill_surface_single( // Keep valid paths only. size_t j = iPathFirst; for (size_t i = iPathFirst; i < polylines_out.size(); ++ i) { - polylines_out[i].clip_end(this->loop_clipping); + polylines_out[i].clip_end(double(this->loop_clipping)); if (polylines_out[i].is_valid()) { if (j < i) polylines_out[j] = std::move(polylines_out[i]); @@ -105,7 +105,7 @@ FillConcentricWGapFill::fill_surface_extrusion( Polygons loops = (Polygons)expolygon; Polygons last = loops; while (!last.empty()) { - Polygons next_onion = offset2(last, -(distance + scale_(this->spacing) / 2), +scale_(this->spacing) / 2); + Polygons next_onion = offset2(last, -double(distance + scale_(this->spacing) / 2), +double(scale_(this->spacing) / 2)); loops.insert(loops.end(), next_onion.begin(), next_onion.end()); append(gaps, diff_ex( offset(last, -0.5f * distance), diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp index 4eae6090f..8ca984bab 100644 --- a/src/libslic3r/Fill/FillGyroid.cpp +++ b/src/libslic3r/Fill/FillGyroid.cpp @@ -37,10 +37,10 @@ static inline Polyline make_wave( double period = points.back()(0); if (width != period) // do not extend if already truncated { - points.reserve(one_period.size() * floor(width / period)); + points.reserve(one_period.size() * size_t(floor(width / period))); points.pop_back(); - int n = points.size(); + size_t n = points.size(); do { points.emplace_back(Vec2d(points[points.size()-n](0) + period, points[points.size()-n](1))); } while (points.back()(0) < width - EPSILON); @@ -67,7 +67,7 @@ static std::vector make_one_period(double width, double scaleFactor, doub std::vector points; double dx = M_PI_2; // exact coordinates on main inflexion lobes double limit = std::min(2*M_PI, width); - points.reserve(ceil(limit / tolerance / 3)); + points.reserve(size_t(ceil(limit / tolerance / 3))); for (double x = 0.; x < limit - EPSILON; x += dx) { points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip))); @@ -155,7 +155,7 @@ void FillGyroid::_fill_surface_single( ExPolygon &expolygon, Polylines &polylines_out) const { - float infill_angle = this->angle + (CorrectionAngle * 2*M_PI) / 360.; + float infill_angle = float(this->angle + (CorrectionAngle * 2 * M_PI) / 360.f); if(abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle); @@ -170,7 +170,7 @@ void FillGyroid::_fill_surface_single( // generate pattern Polylines polylines = make_gyroid_waves( - scale_(this->z), + (double)scale_(this->z), density_adjusted, this->spacing, ceil(bb.size()(0) / distance) + 1., diff --git a/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp index d25ac0c3a..ae2ae44e2 100644 --- a/src/libslic3r/Fill/FillHoneycomb.cpp +++ b/src/libslic3r/Fill/FillHoneycomb.cpp @@ -22,14 +22,14 @@ void FillHoneycomb::_fill_surface_single( it_m = FillHoneycomb::cache.insert(it_m, std::pair(cache_id, CacheData())); CacheData &m = it_m->second; coord_t min_spacing = scale_(this->spacing); - m.distance = min_spacing / params.density; - m.hex_side = m.distance / (sqrt(3)/2); + m.distance = coord_t(double(min_spacing) / params.density); + m.hex_side = coord_t(double(m.distance) / (sqrt(3)/2)); m.hex_width = m.distance * 2; // $m->{hex_width} == $m->{hex_side} * sqrt(3); coord_t hex_height = m.hex_side * 2; m.pattern_height = hex_height + m.hex_side; - m.y_short = m.distance * sqrt(3)/3; + m.y_short = coord_t(double(m.distance) * sqrt(3)/3); m.x_offset = min_spacing / 2; - m.y_offset = m.x_offset * sqrt(3)/3; + m.y_offset = coord_t(double(m.x_offset) * sqrt(3)/3); m.hex_center = Point(m.hex_width/2, m.hex_side); } CacheData &m = it_m->second; @@ -113,7 +113,7 @@ void FillHoneycomb::_fill_surface_single( } // clip paths again to prevent connection segments from crossing the expolygon boundaries - paths = intersection_pl(paths, to_polygons(offset_ex(expolygon, SCALED_EPSILON))); + paths = intersection_pl(paths, to_polygons(offset_ex(expolygon, (double)SCALED_EPSILON))); // Move the polylines to the output, avoid a deep copy. size_t j = polylines_out.size(); polylines_out.resize(j + paths.size(), Polyline()); diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp index 76b6b4eaf..5a5299a19 100644 --- a/src/libslic3r/Fill/FillPlanePath.cpp +++ b/src/libslic3r/Fill/FillPlanePath.cpp @@ -23,8 +23,8 @@ void FillPlanePath::_fill_surface_single( Point shift = this->_centered() ? bounding_box.center() : bounding_box.min; - expolygon.translate(-shift(0), -shift(1)); - bounding_box.translate(-shift(0), -shift(1)); + expolygon.translate(-double(shift.x()), -double(shift.y())); + bounding_box.translate(-double(shift.x()), -double(shift.y())); Pointfs pts = _generate( coord_t(ceil(coordf_t(bounding_box.min(0)) / distance_between_lines)), @@ -61,7 +61,7 @@ void FillPlanePath::_fill_surface_single( // paths must be repositioned and rotated back for (Polylines::iterator it = polylines.begin(); it != polylines.end(); ++ it) { - it->translate(shift(0), shift(1)); + it->translate(double(shift.x()), double(shift.y())); it->rotate(direction.first); } } diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index f3e50e2d7..73d81b608 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1330,7 +1330,7 @@ void GCode::_do_export(Print &print, FILE *file) BoundingBoxf3 m_bounding_box = print_instance.model_instance->transform_bounding_box(raw_bbox); _write_format(file, "; object:{\"name\":\"%s\",\"id\":\"%s id:%d copy %d\",\"object_center\":[%f,%f,%f],\"boundingbox_center\":[%f,%f,%f],\"boundingbox_size\":[%f,%f,%f]}\n", object_name.c_str(), print_object->model_object()->name.c_str(), this->m_ordered_objects.size() - 1, copy_id, - m_bounding_box.center().x(), m_bounding_box.center().y(), 0, + m_bounding_box.center().x(), m_bounding_box.center().y(), 0., m_bounding_box.center().x(), m_bounding_box.center().y(), m_bounding_box.center().z(), m_bounding_box.size().x(), m_bounding_box.size().y(), m_bounding_box.size().z() ); diff --git a/src/libslic3r/GCode/PreviewData.cpp b/src/libslic3r/GCode/PreviewData.cpp index cac70b4a1..eedd48c99 100644 --- a/src/libslic3r/GCode/PreviewData.cpp +++ b/src/libslic3r/GCode/PreviewData.cpp @@ -141,7 +141,7 @@ const Color GCodePreviewData::Extrusion::Default_Extrusion_Role_Colors[erCount] Color(0.0f, 0.5f, 0.0f, 1.0f), // erSupportMaterial Color(0.0f, 0.0f, 0.5f, 1.0f), // erSupportMaterialInterface Color(0.7f, 0.89f, 0.67f, 1.0f), // erWipeTower - Color(0.7f, 0.7, 0.7, 1.0f), // erMilling + Color(0.7f, 0.7f, 0.7f, 1.0f), // erMilling Color(1.0f, 1.0f, 0.0f, 1.0f), // erCustom Color(0.0f, 0.0f, 0.0f, 1.0f) // erMixed }; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index dd858250b..f61bd41d2 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -386,7 +386,7 @@ void PerimeterGenerator::process() coord_t offset = scale_(config->overhangs_reverse_threshold.get_abs_value(this->perimeter_flow.width)); //version with °: scale_(std::tan(PI * (0.5f / 90) * config->overhangs_reverse_threshold.value ) * this->layer->height) - if (offset_ex(overhangs_unsupported, -offset / 2).size() > 0) { + if (offset_ex(overhangs_unsupported, -offset / 2.).size() > 0) { //allow this loop to be printed in reverse has_steep_overhang = true; } @@ -433,7 +433,7 @@ void PerimeterGenerator::process() // look for thin walls if (this->config->thin_walls) { // detect edge case where a curve can be split in multiple small chunks. - std::vector divs = {2.2,1.75,1.5}; //don't go too far, it's not possible to print thinw wall after that + std::vector divs = {2.2f,1.75f,1.5f}; //don't go too far, it's not possible to print thinw wall after that size_t idx_div = 0; while (next_onion.size() > last.size() && idx_div < divs.size()) { float div = divs[idx_div]; @@ -460,7 +460,7 @@ void PerimeterGenerator::process() ExPolygons half_thins = offset_ex(thin_zones, double(-min_width / 2)); //simplify them for (ExPolygon &half_thin : half_thins) { - half_thin.remove_point_too_near((float)SCALED_RESOLUTION); + half_thin.remove_point_too_near((coord_t)SCALED_RESOLUTION); } //we push the bits removed and put them into what we will use as our anchor if (half_thins.size() > 0) { @@ -525,7 +525,7 @@ void PerimeterGenerator::process() +(float)(min_spacing / 2 - 1)); ExPolygons no_thin_onion = offset_ex(last, double(-good_spacing)); - std::vector divs { 1.8, 1.6 }; //don't over-extrude, so don't use divider >2 + std::vector divs { 1.8f, 1.6f }; //don't over-extrude, so don't use divider >2 size_t idx_div = 0; while (next_onion.size() > no_thin_onion.size() && idx_div < divs.size()) { float div = divs[idx_div]; @@ -590,13 +590,13 @@ void PerimeterGenerator::process() //split the polygons with top/not_top //get the offset from solid surface anchor coord_t offset_top_surface = scale_(config->external_infill_margin.get_abs_value( - config->perimeters.value == 0 ? 0. : unscaled(ext_perimeter_width + perimeter_spacing * int(int(config->perimeters.value) - int(1))))); + config->perimeters.value == 0 ? 0. : unscaled(double(ext_perimeter_width + perimeter_spacing * int(int(config->perimeters.value) - int(1)))))); // if possible, try to not push the extra perimeters inside the sparse infill if (offset_top_surface > 0.9 * (config->perimeters.value <= 1 ? 0. : (perimeter_spacing * (config->perimeters.value - 1)))) - offset_top_surface -= 0.9 * (config->perimeters.value <= 1 ? 0. : (perimeter_spacing * (config->perimeters.value - 1))); + offset_top_surface -= coord_t(0.9 * (config->perimeters.value <= 1 ? 0. : (perimeter_spacing * (config->perimeters.value - 1)))); else offset_top_surface = 0; //don't takes into account too thin areas - double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), this->config->min_width_top_surface.get_abs_value(perimeter_width)); + double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), this->config->min_width_top_surface.get_abs_value(double(perimeter_width))); ExPolygons grown_upper_slices = offset_ex(*this->upper_slices, min_width_top_surface); //set the clip to a virtual "second perimeter" fill_clip = offset_ex(last, -double(ext_perimeter_spacing)); @@ -604,8 +604,8 @@ void PerimeterGenerator::process() ExPolygons top_polygons = (!have_to_grow_for_miller) ? diff_ex(last, grown_upper_slices, true) :(unmillable.empty()) - ? diff_ex(last, offset_ex(grown_upper_slices, mill_extra_size), true) - : diff_ex(last, diff_ex(offset_ex(grown_upper_slices, mill_extra_size), unmillable, true)); + ? diff_ex(last, offset_ex(grown_upper_slices, (double)mill_extra_size), true) + : diff_ex(last, diff_ex(offset_ex(grown_upper_slices, (double)mill_extra_size), unmillable, true)); //get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the min_width_top_surface we removed a bit before) @@ -792,7 +792,7 @@ void PerimeterGenerator::process() // collapse double min = 0.2 * perimeter_width * (1 - INSET_OVERLAP_TOLERANCE); //be sure we don't gapfill where the perimeters are already touching each other (negative spacing). - min = std::max(min, double(Flow::new_from_spacing(EPSILON, nozzle_diameter, this->layer->height, false).scaled_width())); + min = std::max(min, double(Flow::new_from_spacing(EPSILON, (float)nozzle_diameter, (float)this->layer->height, false).scaled_width())); double max = 2.2 * perimeter_spacing; //remove areas that are too big (shouldn't occur...) ExPolygons gaps_ex_to_test = diff_ex( @@ -800,7 +800,7 @@ void PerimeterGenerator::process() offset2_ex(gaps, double(-max / 2), double(+max / 2)), true); ExPolygons gaps_ex; - const double minarea = scale_(scale_(this->config->gap_fill_min_area.get_abs_value(unscaled(perimeter_width)*unscaled(perimeter_width)))); + const double minarea = scale_(scale_(this->config->gap_fill_min_area.get_abs_value(unscaled((double)perimeter_width)*unscaled((double)perimeter_width)))); // check each gapfill area to see if it's printable. for (const ExPolygon &expoly : gaps_ex_to_test) { //remove too small gaps that are too hard to fill. @@ -900,12 +900,12 @@ void PerimeterGenerator::process() // append infill areas to fill_surfaces //auto it_surf = this->fill_surfaces->surfaces.end(); ExPolygons infill_exp = offset2_ex(not_filled_exp, - -inset - min_perimeter_infill_spacing / 2 + infill_peri_overlap - infill_gap, - (float)min_perimeter_infill_spacing / 2); + double(-inset - min_perimeter_infill_spacing / 2 + infill_peri_overlap - infill_gap), + double(min_perimeter_infill_spacing / 2)); //if any top_fills, grow them by ext_perimeter_spacing/2 to have the real un-anchored fill - ExPolygons top_infill_exp = intersection_ex(fill_clip, offset_ex(top_fills, ext_perimeter_spacing / 2)); + ExPolygons top_infill_exp = intersection_ex(fill_clip, offset_ex(top_fills, double(ext_perimeter_spacing / 2))); if (!top_fills.empty()) { - infill_exp = union_ex(infill_exp, offset_ex(top_infill_exp, infill_peri_overlap)); + infill_exp = union_ex(infill_exp, offset_ex(top_infill_exp, double(infill_peri_overlap))); } this->fill_surfaces->append(infill_exp, stPosInternal | stDensSparse); @@ -914,12 +914,12 @@ void PerimeterGenerator::process() if (min_perimeter_infill_spacing / 2 > infill_peri_overlap) polyWithoutOverlap = offset2_ex( not_filled_exp, - -inset - infill_gap - min_perimeter_infill_spacing / 2 + infill_peri_overlap, - (float)min_perimeter_infill_spacing / 2 - infill_peri_overlap); + double(-inset - infill_gap - min_perimeter_infill_spacing / 2 + infill_peri_overlap), + double(min_perimeter_infill_spacing / 2 - infill_peri_overlap)); else polyWithoutOverlap = offset_ex( not_filled_exp, - -inset - infill_gap); + double(-inset - infill_gap)); if (!top_fills.empty()) { polyWithoutOverlap = union_ex(polyWithoutOverlap, top_infill_exp); } @@ -1176,7 +1176,7 @@ void PerimeterGenerator::_merge_thin_walls(ExtrusionEntityCollection &extrusions int idx = 0; for (ThickPolyline &tw : thin_walls) { searcher.thin_wall = &tw; - searcher.search_result.dist = max_width; + searcher.search_result.dist = double(max_width); searcher.search_result.dist *= searcher.search_result.dist; searcher.search_result.path = nullptr; searcher.use(extrusions); @@ -1218,7 +1218,7 @@ void PerimeterGenerator::_merge_thin_walls(ExtrusionEntityCollection &extrusions //first add the return path ExtrusionEntityCollection tws_second = tws; tws_second.reverse(); - change_flow.percent_extrusion = 0.1; + change_flow.percent_extrusion = 0.1f; change_flow.use(tws_second); for (ExtrusionPath &path : change_flow.paths) path.reverse(); @@ -1226,7 +1226,7 @@ void PerimeterGenerator::_merge_thin_walls(ExtrusionEntityCollection &extrusions searcher.search_result.loop->paths.insert(searcher.search_result.loop->paths.begin() + 1 + searcher.search_result.idx_path, change_flow.paths.begin(), change_flow.paths.end()); //add the real extrusion path - change_flow.percent_extrusion = 0.9; + change_flow.percent_extrusion = 0.9f; change_flow.paths = std::vector(); change_flow.use(tws); searcher.search_result.loop->paths.insert(searcher.search_result.loop->paths.begin() + 1 + searcher.search_result.idx_path, @@ -1540,7 +1540,7 @@ PerimeterGenerator::_traverse_and_join_loops(const PerimeterGeneratorLoop &loop, PerimeterGeneratorLoops childs = children; while (!childs.empty()) { child_idx++; - PerimeterIntersectionPoint nearest = this->_get_nearest_point(childs, my_loop, this->perimeter_flow.scaled_width(), this->perimeter_flow.scaled_width()* 1.42); + PerimeterIntersectionPoint nearest = this->_get_nearest_point(childs, my_loop, coord_t(this->perimeter_flow.scaled_width()), coord_t(this->perimeter_flow.scaled_width()* 1.42)); if (nearest.idx_children == (size_t)-1) { //return ExtrusionEntityCollection(); break; @@ -1622,15 +1622,15 @@ PerimeterGenerator::_traverse_and_join_loops(const PerimeterGeneratorLoop &loop, if (outer_start->polyline.points.size() == 1 && outer_end->polyline.points.size() == 1) { //do nothing } else if (outer_start->polyline.points.size() == 1) { - outer_end->polyline.clip_start(outer_end_spacing); + outer_end->polyline.clip_start(double(outer_end_spacing)); if (inner_end->polyline.length() > inner_child_spacing) - inner_end->polyline.clip_end(inner_child_spacing); + inner_end->polyline.clip_end(double(inner_child_spacing)); else inner_end->polyline.clip_end(inner_end->polyline.length() / 2); } else if (outer_end->polyline.points.size() == 1) { - outer_start->polyline.clip_end(outer_start_spacing); + outer_start->polyline.clip_end(double(outer_start_spacing)); if (inner_start->polyline.length() > inner_child_spacing) - inner_start->polyline.clip_start(inner_child_spacing); + inner_start->polyline.clip_start(double(inner_child_spacing)); else inner_start->polyline.clip_start(inner_start->polyline.length()/2); } else { @@ -1645,18 +1645,18 @@ PerimeterGenerator::_traverse_and_join_loops(const PerimeterGeneratorLoop &loop, length_trim_1 = length_trim_1 + length_trim_2 - length_poly_2; } if (length_poly_1 > length_trim_1) { - outer_start->polyline.clip_end(length_trim_1); + outer_start->polyline.clip_end(double(length_trim_1)); } else { outer_start->polyline.points.erase(outer_start->polyline.points.begin() + 1, outer_start->polyline.points.end()); } if (length_poly_2 > length_trim_2) { - outer_end->polyline.clip_start(length_trim_2); + outer_end->polyline.clip_start(double(length_trim_2)); } else { outer_end->polyline.points.erase(outer_end->polyline.points.begin(), outer_end->polyline.points.end() - 1); } - length_poly_1 = inner_start->polyline.length(); - length_poly_2 = inner_end->polyline.length(); + length_poly_1 = coord_t(inner_start->polyline.length()); + length_poly_2 = coord_t(inner_end->polyline.length()); length_trim_1 = inner_child_spacing / 2; length_trim_2 = inner_child_spacing / 2; if (length_poly_1 < length_trim_1) { @@ -1666,14 +1666,14 @@ PerimeterGenerator::_traverse_and_join_loops(const PerimeterGeneratorLoop &loop, length_trim_1 = length_trim_1 + length_trim_2 - length_poly_2; } if (length_poly_1 > length_trim_1) { - inner_start->polyline.clip_start(length_trim_1); + inner_start->polyline.clip_start(double(length_trim_1)); } else { inner_start->polyline.points.erase( inner_start->polyline.points.begin(), inner_start->polyline.points.end() - 1); } if (length_poly_2 > length_trim_2) { - inner_end->polyline.clip_end(length_trim_2); + inner_end->polyline.clip_end(double(length_trim_2)); } else { inner_end->polyline.points.erase( inner_end->polyline.points.begin() + 1, diff --git a/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp index 81a685c13..7dd9099b4 100644 --- a/src/libslic3r/Point.cpp +++ b/src/libslic3r/Point.cpp @@ -83,12 +83,12 @@ int32_t Point::nearest_point_index(const PointConstPtrs &points) const for (PointConstPtrs::const_iterator it = points.begin(); it != points.end(); ++it) { /* If the X distance of the candidate is > than the total distance of the best previous candidate, we know we don't want it */ - double d = sqr((*this)(0) - (*it)->x()); + double d = sqr(double((*this).x() - (*it)->x())); if (distance != -1 && d > distance) continue; /* If the Y distance of the candidate is > than the total distance of the best previous candidate, we know we don't want it */ - d += sqr((*this)(1) - (*it)->y()); + d += sqr(double((*this).y() - (*it)->y())); if (distance != -1 && d > distance) continue; idx = (int32_t)(it - points.begin()); @@ -103,8 +103,8 @@ int32_t Point::nearest_point_index(const PointConstPtrs &points) const /* distance to the closest point of line */ double Point::distance_to(const Line &line) const { - const double dx = line.b.x() - line.a.x(); - const double dy = line.b.y() - line.a.y(); + const double dx = double(line.b.x() - line.a.x()); + const double dy = double(line.b.y() - line.a.y()); const double l2 = dx*dx + dy*dy; // avoid a sqrt if (l2 == 0.0) return this->distance_to(line.a); // line.a == line.b case @@ -217,8 +217,8 @@ Point Point::projection_onto(const Line &line) const Point Point::interpolate(const double percent, const Point &p2) const { Point p_out; - p_out.x() = this->x()*(1 - percent) + p2.x()*(percent); - p_out.y() = this->y()*(1 - percent) + p2.y()*(percent); + p_out.x() = coord_t(this->x()*(1 - percent) + p2.x()*(percent)); + p_out.y() = coord_t(this->y()*(1 - percent) + p2.y()*(percent)); return p_out; } diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 1a4eb11d2..bdee97bdf 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1267,7 +1267,9 @@ static inline bool sequential_print_horizontal_clearance_valid(const Print &prin // Conver the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset. for(Polygon &poly : convex_hull) poly.translate(instance.shift - print_object->center_offset()); - if (! intersection(convex_hulls_other, offset(convex_hull[0], scale_(print.config().min_object_distance(&instance.print_object->config(),0.)) - SCALED_EPSILON, jtRound, float(scale_(0.1)))).empty()) + if (! intersection( + convex_hulls_other, + offset(convex_hull[0], double(scale_(print.config().min_object_distance(&instance.print_object->config(),0.)) - SCALED_EPSILON), jtRound, scale_(0.1))).empty()) return false; double extra_grow = print.config().min_object_distance(&instance.print_object->config(), 1.); if (extra_grow > 0) diff --git a/src/libslic3r/SLA/Contour3D.cpp b/src/libslic3r/SLA/Contour3D.cpp index 6dcce1676..3915f7fcf 100644 --- a/src/libslic3r/SLA/Contour3D.cpp +++ b/src/libslic3r/SLA/Contour3D.cpp @@ -40,7 +40,7 @@ Contour3D::Contour3D(const EigenMesh3D &emesh) { Contour3D &Contour3D::merge(const Contour3D &ctr) { - auto N = coord_t(points.size()); + int32_t N = int32_t(points.size()); auto N_f3 = faces3.size(); auto N_f4 = faces4.size(); @@ -49,11 +49,16 @@ Contour3D &Contour3D::merge(const Contour3D &ctr) faces4.insert(faces4.end(), ctr.faces4.begin(), ctr.faces4.end()); for(size_t n = N_f3; n < faces3.size(); n++) { - auto& idx = faces3[n]; idx.x() += N; idx.y() += N; idx.z() += N; + Vec3i32& idx = faces3[n]; + idx.x() += N; + idx.y() += N; + idx.z() += N; } for(size_t n = N_f4; n < faces4.size(); n++) { - auto& idx = faces4[n]; for (int k = 0; k < 4; k++) idx(k) += N; + Vec4i& idx = faces4[n]; + for (int k = 0; k < 4; k++) + idx(k) += int(N); } return *this; diff --git a/src/libslic3r/SLA/RasterWriter.cpp b/src/libslic3r/SLA/RasterWriter.cpp index 13aef7d8a..e3f8095bc 100644 --- a/src/libslic3r/SLA/RasterWriter.cpp +++ b/src/libslic3r/SLA/RasterWriter.cpp @@ -101,9 +101,9 @@ std::string get_cfg_value(const DynamicPrintConfig &cfg, const std::string &key) void append_full_config(const DynamicPrintConfig &cfg, std::map &keys) { using namespace std::literals::string_view_literals; - + // Sorted list of config keys, which shall not be stored into the ini. - static constexpr auto banned_keys = { + static const auto banned_keys = { "compatible_printers"sv, "compatible_prints"sv, "print_host"sv, diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 283741a86..3b3ac9b69 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -342,7 +342,7 @@ inline std::string get_time_dhm(float time_in_secs) { char buffer[64]; - int minutes = std::round(time_in_secs / 60.); + int minutes = (int)std::round(time_in_secs / 60.); if (minutes <= 0) { ::sprintf(buffer, "%ds", (int)time_in_secs); } else { diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index ad91e5239..bae51e33e 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -488,7 +488,7 @@ CopyFileResult check_copy(const std::string &origin, const std::string ©) } while (f1.good() && f2.good()); // All data has been read and compared equal. - return (f1.eof() && f2.eof() && fsize == 0) ? SUCCESS : FAIL_FILES_DIFFERENT; + return (f1.eof() && f2.eof() && size_t(fsize) == 0) ? SUCCESS : FAIL_FILES_DIFFERENT; } // Ignore system and hidden files, which may be created by the DropBox synchronisation process. diff --git a/src/qhull/src/libqhull_r/poly2_r.c b/src/qhull/src/libqhull_r/poly2_r.c index b8ae9af9f..c2c798d92 100644 --- a/src/qhull/src/libqhull_r/poly2_r.c +++ b/src/qhull/src/libqhull_r/poly2_r.c @@ -1851,7 +1851,7 @@ void qh_initialhull(qhT *qh, setT *vertices) { } } if (minangle < qh_MAXnarrow && !qh->NOnarrow) { - realT diff= 1.0 + minangle; + realT diff= 1.0f + minangle; qh->NARROWhull= True; qh_option(qh, "_narrow-hull", NULL, &diff); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index ef5be5877..96b20c0bd 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -175,7 +175,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true if (label.Last() == ':') label.RemoveLast(); show_error(m_parent, from_u8((boost::format(_utf8(L("%s doesn't support percentage"))) % label).str())); set_value(double_to_string(m_opt.min), true); - m_value = double(m_opt.min); + m_value = m_opt.min; break; } double val; @@ -643,7 +643,7 @@ void SpinCtrl::BUILD() { break; } - const int min_val = m_opt.min == INT_MIN + const double min_val = m_opt.min == INT_MIN #ifdef __WXOSX__ // We will forcibly set the input value for SpinControl, since the value // inserted from the keyboard is not updated under OSX. @@ -652,8 +652,8 @@ void SpinCtrl::BUILD() { // less then min_val. || m_opt.min > 0 #endif - ? 0 : m_opt.min; - const int max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647; + ? 0. : m_opt.min; + const double max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647.; auto temp = new wxSpinCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, 0|wxTE_PROCESS_ENTER, min_val, max_val, default_value); @@ -1386,9 +1386,9 @@ void SliderCtrl::BUILD() auto temp = new wxBoxSizer(wxHORIZONTAL); - auto def_val = m_opt.get_default_value()->value; - auto min = m_opt.min == INT_MIN ? 0 : m_opt.min; - auto max = m_opt.max == INT_MAX ? 100 : m_opt.max; + int def_val = m_opt.get_default_value()->value; + int min = m_opt.min == INT_MIN ? 0 : int(m_opt.min); + int max = m_opt.max == INT_MAX ? 100 : int(m_opt.max); m_slider = new wxSlider(m_parent, wxID_ANY, def_val * m_scale, min * m_scale, max * m_scale, diff --git a/src/slic3r/GUI/FreeCADDialog.cpp b/src/slic3r/GUI/FreeCADDialog.cpp index 86934ef70..fe881d11f 100644 --- a/src/slic3r/GUI/FreeCADDialog.cpp +++ b/src/slic3r/GUI/FreeCADDialog.cpp @@ -716,9 +716,9 @@ void FreeCADDialog::createSTC() m_text->StyleSetForeground(wxSTC_P_COMMENTLINE, wxColour(128u, 255u, 128u)); // comment, grennsish m_text->StyleSetForeground(wxSTC_P_COMMENTBLOCK, wxColour(128u, 255u, 128u)); // comment, grennsish m_text->StyleSetForeground(wxSTC_P_NUMBER, wxColour(255u, 128u, 0u)); // number red-orange - m_text->StyleSetForeground(wxSTC_P_STRING, wxColour(128u, 256u, 0u)); // string, light green + m_text->StyleSetForeground(wxSTC_P_STRING, wxColour(128u, 255u, 0u)); // string, light green m_text->StyleSetBackground(wxSTC_P_STRINGEOL, wxColour(255u, 0u, 0u)); // End of line where string is not closed - m_text->StyleSetForeground(wxSTC_P_CHARACTER, wxColour(128u, 256u, 0u)); + m_text->StyleSetForeground(wxSTC_P_CHARACTER, wxColour(128u, 255u, 0u)); m_text->StyleSetForeground(wxSTC_P_WORD, wxColour(0u, 0u, 128u)); m_text->StyleSetBold(wxSTC_P_WORD, true), m_text->StyleSetForeground(wxSTC_P_WORD2, wxColour(0u, 0u, 128u));