Guest User

MATLAB color mixing gcode hack

a guest
Sep 15th, 2016
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.32 KB | None | 0 0
  1. %gcode hack
  2. clear
  3. clc
  4.  
  5. codeStart = 1297;
  6. layerDelimiter = 'G92 E0';
  7. fileName = 'vase.gcode';
  8. lineTweak = 0;
  9.  
  10. cyan = 0;
  11. magenta = 1;
  12. yellow = 2;
  13. ocean = 3;
  14. blue = 4;
  15. violet = 5;
  16. raspberry = 6;
  17. red = 7;
  18. orange = 8;
  19. springGreen = 9;
  20. green = 10;
  21. Turquoise = 11;
  22.  
  23. extruderOrder = [
  24.              cyan;          ...
  25.              ocean;          ...
  26.              blue;          ...
  27.              violet;          ...
  28.              magenta;          ...
  29.              raspberry;          ...
  30.              red;          ...
  31.              orange;          ...
  32.              yellow;          ...
  33.              springGreen;          ...
  34.              green;          ...
  35.              Turquoise;          ...
  36.            ];
  37.        
  38. numExtruders = length(extruderOrder);
  39.        
  40. fileID = fopen(fileName);      
  41. data = textscan(fileID,'%s','delimiter','\n');%,'whitespace','');  
  42. data = data{1};
  43. fclose(fileID);
  44. numOriginalLines = length(data);
  45. currentExtruder = 1;
  46. layerNumber = 0;
  47. previousLocation = codeStart;
  48.  
  49. for currentLine = codeStart+3:numOriginalLines
  50.  
  51. locationOfLayerDelimter = findstr(data{currentLine}, layerDelimiter);
  52.  
  53. if ~isempty(locationOfLayerDelimter)
  54.     layerNumber = layerNumber + 1;
  55.     blockStart = previousLocation;
  56.     blockStop = currentLine;
  57.    
  58.     linesPerCurrentLayer = blockStop - blockStart;
  59.     blockData(layerNumber,:) = [blockStart+lineTweak, blockStop+lineTweak, linesPerCurrentLayer];
  60.    
  61.     previousLocation = currentLine;
  62. end
  63. end
  64.  
  65. numberOfLayers = layerNumber;
  66. numberOfToolChanges = numberOfLayers*numExtruders;
  67. newDataNumLines = numOriginalLines + numberOfToolChanges;
  68. toolChangeLineNumber = zeros(1,numberOfToolChanges);
  69.  
  70. for currentLayer = 1:numberOfLayers
  71.     blockData(currentLayer,1) = blockData(currentLayer,1) + (currentLayer-1)*numExtruders;
  72.     blockData(currentLayer,2) = blockData(currentLayer,2) + (currentLayer)*numExtruders;
  73.     blockData(currentLayer,3) = blockData(currentLayer,3) + numExtruders;
  74. end
  75.  
  76. pointer = 1;
  77. for currentLayer = 1:numberOfLayers
  78.     linesPerCurrentLayer = blockData(currentLayer,3);
  79.     blockStart = blockData(currentLayer,1);
  80.     blockStop = blockData(currentLayer,2);
  81.     toolChangeLineNumber(pointer:pointer+numExtruders) = floor(linspace(blockStart,blockStop,numExtruders+1));
  82.     pointer = pointer+numExtruders;
  83. end
  84.  
  85. oldDataPointer = 1;
  86. toolChangePointer = 1;
  87. %allBookmarksUsed = false;
  88. for currentLine = 1:newDataNumLines
  89.     if (currentLine == toolChangeLineNumber(toolChangePointer))% && (allBookmarksUsed == false)
  90.         s = sprintf(['T' int2str(extruderOrder(currentExtruder))]);
  91.         newData{currentLine} = s;%cellstr(s);
  92.        
  93.         currentExtruder = currentExtruder + 1;
  94.         if currentExtruder > numExtruders
  95.             currentExtruder = 1;
  96.         end
  97.        
  98.         toolChangePointer = toolChangePointer + 1; %now look for the next bookmark
  99.         if toolChangePointer >= numberOfToolChanges
  100.             toolChangePointer = numberOfToolChanges;
  101.             allBookmarksUsed = true;
  102.         end
  103.     else
  104.         newData{currentLine} = data{oldDataPointer};
  105.         oldDataPointer = oldDataPointer + 1; % only increment if an old data point is used
  106.     end
  107.    
  108. end
  109.  
  110. fileOUTID = fopen('vaseTest.gcode','w');
  111. for i = 1:newDataNumLines
  112.     fprintf(fileOUTID,[newData{i} '\n']);
  113. end
  114. fclose(fileOUTID);
Add Comment
Please, Sign In to add comment