Commit Graph

10 Commits

Author SHA1 Message Date
Momin Al-Ghosien da29408504 Updated to fix the handling of the capacity change, and removed the code I previously added to reserve upfront since it is not really needed 2024-05-06 14:38:59 +08:00
Momin Al-Ghosien 306b09b4f5 Fix use after free bug in LinesBucketQueue::emplace_back_bucket
I found a use after free bug in LinesBucketQueue::emplace_back_bucket. This was found by enabling address sanitizer.
The LinesBucketQueue class has two related members:
std::vector<LinesBucket> line_buckets;
std::priority_queue<LinesBucket *, std::vector<LinesBucket *>, LinesBucketPtrComp> line_bucket_ptr_queue;
line_bucket_ptr_queue holds pointers into line_buckets. However, since items are inserted into line_buckets one at a time, existing pointers that were stored inside line_bucket_ptr_queue become invalid. Specifically:
void LinesBucketQueue::emplace_back_bucket(ExtrusionLayers &&els, const void *objPtr, Point offset)
{
    auto oldSize = line_buckets.capacity();
    line_buckets.emplace_back(std::move(els), objPtr, offset); <--- Causes a reallocation, making previous pointers invalid
    line_bucket_ptr_queue.push(&line_buckets.back()); <-- priority queue compares against old, now invalid pointers
    ...

The proposed fix is to calculate the required number of entries in ConflictChecker::find_inter_of_lines_in_diff_objs, and then calling line_buckets.reserve(count). This ensures that sufficient buffer is allocated up front and the pointers are stable as items are added.
2024-05-06 14:38:59 +08:00
Arthur c5db5551bf FIX: skip gcode path conflict check for adaptive layer height
adaptive layer height won't work with conflict checker because m_fake_wipe_tower's path is generated using fixed layer height.

Jira: STUDIO-4442
Change-Id: I964a69af2fa0be8224ffc11e4c86f8ccf6dbf152
(cherry picked from commit e8c915f9e0b8c8f6cb549259b20d6d850a06d7d3)
2023-11-01 09:33:21 +08:00
manch1n ec7306e3cb FIX: false alarms due to wrong print z of gcode paths
The print z was wrong previously when there is a wipe tower, or there
is an object with floating parts.

Jira: STUDIO-2719
udesk: https://bblcs.s5.udesk.cn/entry/ticket/show/2258732

Change-Id: Ifa070aeb548d692549cf88df0d405ecdf0160c80
(cherry picked from commit be3097d8044ce9e0079ebf7070b15c7aad7aff0e)
2023-07-07 17:25:51 +08:00
manch1n 352f4222b1 ENH: increase conflict threshold to 1mm for both support lines
Little overlap of support lines from two objects are allowed.

Change-Id: I738874ee71fc9787abbef764dbad762c76bc5731
(cherry picked from commit a5f7a53dc818d598523149d675fd0310f5d22f86)
2023-07-07 17:25:51 +08:00
manch1n dcb1f68b89 FIX: check conflict when only have mutilcolor obj and wipetower
STUDIO-2789

Change-Id: Ic2cdd76416fc979b13f9c2fc9a29a5312b832caa
(cherry picked from commit 47319cafa726983f66577209b2c58fd7ead304ee)
2023-07-07 17:25:51 +08:00
manch1n 87eb0f3665 ENH: show the layer and height of conflict position
Change-Id: If80e81b5556f5afc3228a00edc2593bd8cfe63e4
(cherry picked from commit 895e0f2ecf8e259cfdb7c27081b767bfbaa3ffb6)
2023-04-17 15:39:02 +08:00
manch1n b5b7264e99 ENH: add wipe tower into conflict check
Change-Id: I9684ec17ccbfdea39deae6e5089b74ce3124d57b
(cherry picked from commit f6ee82b4ecf8bf9de91d0043b514cdabb7284b7e)
2023-04-17 15:39:02 +08:00
manch1n d72b4c1bfe FIX: Disable print button when gcode has conflict
Also fix a crash bug due to setStarted and setDone.

Change-Id: Ib9b069fe4b7e5d1fc359f48e44b4032dd8249428
(cherry picked from commit 9ef190ed3ecd66d12617ad96e927ff34251395a2)
2023-04-17 15:39:02 +08:00
miaoxin d43c7d5c92 NEW: add gcode conflict checker
1. add gcode conflict checker
2. add a new command line option: --no_check. When it's provided, gcode
   conflict check is skipped.

Change-Id: I6feafca8c5fa6c3c5eae1f0e541ce59d2f03dedf
(cherry picked from commit 5a39afb64e826a960d9673dcada89d02d62b3911)
2023-04-17 15:39:02 +08:00