Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %gcode hack
- clear
- clc
- codeStart = 1297;
- layerDelimiter = 'G92 E0';
- fileName = 'vase.gcode';
- lineTweak = 0;
- cyan = 0;
- magenta = 1;
- yellow = 2;
- ocean = 3;
- blue = 4;
- violet = 5;
- raspberry = 6;
- red = 7;
- orange = 8;
- springGreen = 9;
- green = 10;
- Turquoise = 11;
- extruderOrder = [
- cyan; ...
- ocean; ...
- blue; ...
- violet; ...
- magenta; ...
- raspberry; ...
- red; ...
- orange; ...
- yellow; ...
- springGreen; ...
- green; ...
- Turquoise; ...
- ];
- numExtruders = length(extruderOrder);
- fileID = fopen(fileName);
- data = textscan(fileID,'%s','delimiter','\n');%,'whitespace','');
- data = data{1};
- fclose(fileID);
- numOriginalLines = length(data);
- currentExtruder = 1;
- layerNumber = 0;
- previousLocation = codeStart;
- for currentLine = codeStart+3:numOriginalLines
- locationOfLayerDelimter = findstr(data{currentLine}, layerDelimiter);
- if ~isempty(locationOfLayerDelimter)
- layerNumber = layerNumber + 1;
- blockStart = previousLocation;
- blockStop = currentLine;
- linesPerCurrentLayer = blockStop - blockStart;
- blockData(layerNumber,:) = [blockStart+lineTweak, blockStop+lineTweak, linesPerCurrentLayer];
- previousLocation = currentLine;
- end
- end
- numberOfLayers = layerNumber;
- numberOfToolChanges = numberOfLayers*numExtruders;
- newDataNumLines = numOriginalLines + numberOfToolChanges;
- toolChangeLineNumber = zeros(1,numberOfToolChanges);
- for currentLayer = 1:numberOfLayers
- blockData(currentLayer,1) = blockData(currentLayer,1) + (currentLayer-1)*numExtruders;
- blockData(currentLayer,2) = blockData(currentLayer,2) + (currentLayer)*numExtruders;
- blockData(currentLayer,3) = blockData(currentLayer,3) + numExtruders;
- end
- pointer = 1;
- for currentLayer = 1:numberOfLayers
- linesPerCurrentLayer = blockData(currentLayer,3);
- blockStart = blockData(currentLayer,1);
- blockStop = blockData(currentLayer,2);
- toolChangeLineNumber(pointer:pointer+numExtruders) = floor(linspace(blockStart,blockStop,numExtruders+1));
- pointer = pointer+numExtruders;
- end
- oldDataPointer = 1;
- toolChangePointer = 1;
- %allBookmarksUsed = false;
- for currentLine = 1:newDataNumLines
- if (currentLine == toolChangeLineNumber(toolChangePointer))% && (allBookmarksUsed == false)
- s = sprintf(['T' int2str(extruderOrder(currentExtruder))]);
- newData{currentLine} = s;%cellstr(s);
- currentExtruder = currentExtruder + 1;
- if currentExtruder > numExtruders
- currentExtruder = 1;
- end
- toolChangePointer = toolChangePointer + 1; %now look for the next bookmark
- if toolChangePointer >= numberOfToolChanges
- toolChangePointer = numberOfToolChanges;
- allBookmarksUsed = true;
- end
- else
- newData{currentLine} = data{oldDataPointer};
- oldDataPointer = oldDataPointer + 1; % only increment if an old data point is used
- end
- end
- fileOUTID = fopen('vaseTest.gcode','w');
- for i = 1:newDataNumLines
- fprintf(fileOUTID,[newData{i} '\n']);
- end
- fclose(fileOUTID);
Add Comment
Please, Sign In to add comment