Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Amanda Ghassaei
DMDesign
Commits
00e0a48c
Commit
00e0a48c
authored
Aug 19, 2015
by
Amanda Ghassaei
Browse files
adding in custom gcode functions
parent
63a60e33
Changes
5
Hide whitespace changes
Inline
Side-by-side
js/cam/assemblers/Assembler.js
View file @
00e0a48c
...
...
@@ -2,8 +2,8 @@
* Created by aghassaei on 5/28/15.
*/
define
([
'
underscore
'
,
'
appState
'
,
'
lattice
'
,
'
stlLoader
'
,
'
threeModel
'
,
'
cam
'
,
'
component
'
,
'
stockComponent
'
],
function
(
_
,
appState
,
lattice
,
THREE
,
three
,
cam
,
Component
,
StockComponent
){
define
([
'
underscore
'
,
'
appState
'
,
'
lattice
'
,
'
stlLoader
'
,
'
threeModel
'
,
'
cam
'
,
'
component
'
,
'
stockComponent
'
,
'
assemblerPost
'
],
function
(
_
,
appState
,
lattice
,
THREE
,
three
,
cam
,
Component
,
StockComponent
,
AssemblerPostMethods
){
var
assemblerMaterial
=
new
THREE
.
MeshLambertMaterial
({
color
:
0xaaaaaa
,
shading
:
THREE
.
FlatShading
,
transparent
:
true
,
opacity
:
0.3
});
var
stlLoader
=
new
THREE
.
STLLoader
();
...
...
@@ -19,16 +19,6 @@ define(['underscore', 'appState', 'lattice', 'stlLoader', 'threeModel', 'cam', '
this
.
camProcesses
=
json
.
camProcesses
;
this
.
numMaterials
=
json
.
numMaterials
;
this
.
customHeader
=
json
.
customHeader
||
function
(
settings
){
return
""
;
};
this
.
customFooter
=
json
.
customFooter
||
function
(){};
this
.
customHome
=
json
.
customHome
||
function
(){};
this
.
customPickUpStock
=
json
.
customPickUpStock
||
function
(){};
this
.
customPlacePart
=
json
.
customPlacePart
||
function
(){};
this
.
customFunctionsContext
=
{
clearHeight
:
8
};
this
.
object3D
=
new
THREE
.
Object3D
();
three
.
sceneAdd
(
this
.
object3D
);
...
...
@@ -43,7 +33,10 @@ define(['underscore', 'appState', 'lattice', 'stlLoader', 'threeModel', 'cam', '
this
.
setVisibility
(
cam
.
isVisible
());
three
.
render
();
AssemblerPostMethods
.
call
(
this
,
id
,
json
);
//needed to separate this for now
}
Assembler
.
prototype
=
Object
.
create
(
AssemblerPostMethods
.
prototype
);
Assembler
.
prototype
.
getID
=
function
(){
return
this
.
id
;
...
...
@@ -183,139 +176,7 @@ define(['underscore', 'appState', 'lattice', 'stlLoader', 'threeModel', 'cam', '
return
tree
;
};
//post process
Assembler
.
prototype
.
postProcess
=
function
(
settings
,
exporter
){
_
.
each
(
this
.
components
,
function
(
component
){
component
.
postReset
();
});
var
data
=
""
;
data
+=
exporter
.
makeHeader
(
settings
);
data
+=
this
.
_makeHeader
(
settings
,
exporter
);
data
+=
"
\n\n
"
;
data
+=
exporter
.
addComment
(
"
begin program
"
);
data
+=
"
\n
"
;
data
+=
this
.
_postProcessCells
(
settings
,
exporter
);
data
+=
"
\n\n
"
;
data
+=
exporter
.
addComment
(
"
end program
"
);
data
+=
"
\n
"
;
data
+=
exporter
.
makeFooter
(
settings
);
return
data
;
};
Assembler
.
prototype
.
_makeHeader
=
function
(
settings
,
exporter
){
var
data
=
this
.
customHeader
(
settings
);
data
+=
this
.
home
(
exporter
,
settings
);
return
data
;
};
Assembler
.
prototype
.
home
=
function
(
exporter
,
settings
){
// this.components.zAxis.postMoveTo(settings.rapidHeight*settings*scale);
return
exporter
.
goHome
(
settings
);
};
Assembler
.
prototype
.
_postProcessCells
=
function
(
settings
,
exporter
){
var
data
=
""
;
var
self
=
this
;
var
lastIndex
=
null
;
lattice
.
rasterCells
(
cam
.
_getOrder
(
cam
.
get
(
"
camStrategy
"
)),
function
(
cell
){
if
(
!
cell
)
return
;
var
cellPosition
=
cell
.
getAbsolutePosition
().
multiplyScalar
(
settings
.
scale
);
var
cellIndex
=
cell
.
getAbsoluteIndex
();
if
(
!
self
.
shouldPickUpStock
){
data
+=
self
.
_postGetStock
(
cellIndex
,
lastIndex
,
cellPosition
,
cell
.
materialName
,
settings
,
exporter
);
}
else
{
// var thisStockPosition = _.clone(stockPosition);
// if (multStockPositions) {
// thisStockPosition.x += stockNum % stockArraySize.y * stockSeparation;
// thisStockPosition.y -= Math.floor(stockNum / stockArraySize.y) * stockSeparation;
// stockNum += 1;
// if (stockNum >= stockArraySize.x * stockArraySize.y) stockNum = 0;
// }
// data += self._postMoveXY(exporter, stockPosition.x-wcs.x, stockPosition.y-wcs.y);
// data += self._postMoveToStock(exporter, thisStockPosition, rapidHeight, wcs, safeHeight);
}
data
+=
self
.
_postReleaseStock
(
cellIndex
,
cellPosition
,
cell
.
materialName
,
settings
,
exporter
);
data
+=
"
\n
"
;
lastIndex
=
cellIndex
.
clone
();
});
return
data
;
};
Assembler
.
prototype
.
_postMoveXY
=
function
(
position
,
settings
,
exporter
){
position
=
this
.
components
.
zAxis
.
applyAbsoluteRotation
(
position
);
return
exporter
.
rapidXY
(
position
,
settings
);
};
// Assembler.prototype._postMoveToStock = function(exporter, stockPosition, rapidHeight, wcs, safeHeight){
// var data = "";
// data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight);
// data += exporter.moveZ(stockPosition.z-wcs.z);
// data += this._postGetStock(exporter);
// data += exporter.moveZ(stockPosition.z-wcs.z+safeHeight);
// data += exporter.rapidZ(rapidHeight);
// return data;
// };
Assembler
.
prototype
.
_postGetStock
=
function
(
index
,
lastIndex
,
position
,
material
,
settings
,
exporter
){
var
data
=
""
;
if
(
lastIndex
===
null
||
(
lastIndex
.
z
-
index
.
z
)
%
2
!=
0
){
data
+=
exporter
.
addLine
(
"
G0
"
,
[
"
A
"
+
(
index
.
z
%
2
*
0.3125
).
toFixed
(
4
)],
"
new layer
"
);
data
+=
"
\n
"
;
}
data
+=
exporter
.
addComment
(
"
get stock
"
+
JSON
.
stringify
(
index
));
return
data
;
};
Assembler
.
prototype
.
_postReleaseStock
=
function
(
index
,
position
,
material
,
settings
,
exporter
){
var
data
=
""
;
var
stock
=
_
.
find
(
this
.
stock
,
function
(
thisStock
){
return
thisStock
.
getMaterial
()
==
material
});
if
(
stock
===
undefined
)
{
console
.
warn
(
"
no stock defined of type
"
+
material
+
"
for this assembler
"
);
return
data
;
}
position
.
sub
(
stock
.
getPosition
().
multiplyScalar
(
settings
.
scale
));
position
.
sub
(
settings
.
originPosition
);
data
+=
this
.
_postMoveXY
(
position
.
clone
(),
settings
,
exporter
);
data
+=
exporter
.
rapidZ
(
position
.
z
+
settings
.
safeHeight
,
settings
);
data
+=
exporter
.
moveZ
(
position
.
z
,
settings
);
//place part
data
+=
exporter
.
addComment
(
JSON
.
stringify
(
index
));
if
(
material
==
"
brass
"
)
data
+=
exporter
.
addLine
(
"
M3
"
);
else
if
(
material
==
"
fiberGlass
"
)
data
+=
exporter
.
addLine
(
"
M4
"
);
data
+=
exporter
.
addLine
(
"
G4
"
,
[
"
P
"
+
0.75
]);
data
+=
exporter
.
addLine
(
"
M5
"
);
data
+=
exporter
.
moveZ
(
position
.
z
,
settings
);
data
+=
exporter
.
moveZ
(
position
.
z
+
settings
.
safeHeight
,
settings
);
data
+=
exporter
.
rapidZ
(
settings
.
rapidHeight
,
settings
);
return
data
;
};
//animation methods
...
...
js/cam/assemblers/AssemblerPost.js
0 → 100644
View file @
00e0a48c
/**
* Created by aghassaei on 8/19/15.
*/
define
([
'
underscore
'
,
'
appState
'
,
'
lattice
'
,
'
cam
'
],
function
(
_
,
appState
,
lattice
,
cam
){
function
AssemblerPost
(
id
,
json
){
//settings:
// feedRate: THREE.Vector3
// originPosition: THREE.Vector3
// rapidHeight: 30 - max z height of machine, used when we want to be sure we're clear
// rapidSpeeds: THREE.Vector3
// safeHeight: 4.5 - height above parts where we start to move slowly
// scale: 1.27
// stockPosition: THREE.Vector3
this
.
customFunctionsContext
=
{
zClearHeight
:
8
,
//height above part to clear during assembly
zPreload
:
0.2
,
wait
:
0.75
,
//seconds
blOvershoot
:
1.0
};
this
.
customHeader
=
function
(
exporter
,
settings
,
context
){
var
data
=
""
;
data
+=
exporter
.
setUnits
(
lattice
.
get
(
"
units
"
));
data
+=
this
.
customHome
(
exporter
,
settings
,
context
);
return
data
;
};
this
.
customFooter
=
function
(
exporter
,
settings
,
context
){
var
data
=
""
;
data
+=
this
.
customHome
(
exporter
,
settings
,
context
);
return
data
;
};
this
.
customHome
=
function
(
exporter
,
settings
,
context
){
var
data
=
""
;
data
+=
exporter
.
goHome
(
settings
);
return
data
;
};
this
.
customPickUpStock
=
function
(
exporter
,
settings
,
context
){
//not relevant for your assembler
var
data
=
""
;
return
data
;
};
this
.
customChangeZLayer
=
function
(
currentIndex
,
lastIndex
,
exporter
,
settings
,
context
){
var
data
=
""
;
if
(
lastIndex
===
null
||
(
currentIndex
.
z
-
lastIndex
.
z
)
%
2
!=
0
){
data
+=
exporter
.
addLine
(
"
G0
"
,
[
"
A
"
+
(
currentIndex
.
z
%
2
*
0.3125
).
toFixed
(
4
)],
"
new layer
"
);
data
+=
"
\n
"
;
}
return
data
;
};
this
.
customMoveXY
=
function
(
position
,
index
,
exporter
,
settings
,
context
){
var
data
=
""
;
data
+=
exporter
.
rapidXY
(
position
,
settings
);
return
data
;
};
this
.
customPlacePart
=
function
(
position
,
index
,
material
,
exporter
,
settings
,
context
){
var
data
=
""
;
data
+=
exporter
.
rapidZ
(
position
.
z
+
settings
.
safeHeight
,
settings
);
data
+=
exporter
.
moveZ
(
position
.
z
,
settings
);
if
(
material
==
"
brass
"
)
data
+=
exporter
.
addLine
(
"
M3
"
);
else
if
(
material
==
"
fiberGlass
"
)
data
+=
exporter
.
addLine
(
"
M4
"
);
data
+=
exporter
.
addComment
(
JSON
.
stringify
(
index
));
data
+=
exporter
.
addLine
(
"
G4
"
,
[
"
P
"
+
context
.
wait
]);
data
+=
exporter
.
addLine
(
"
M5
"
);
data
+=
exporter
.
moveZ
(
position
.
z
,
settings
);
data
+=
exporter
.
moveZ
(
position
.
z
+
settings
.
safeHeight
,
settings
);
data
+=
exporter
.
rapidZ
(
position
.
z
+
context
.
zClearHeight
,
settings
);
return
data
;
};
}
//post process
AssemblerPost
.
prototype
.
postProcess
=
function
(
settings
,
exporter
){
//called from outside);
var
data
=
""
;
data
+=
this
.
customHeader
(
exporter
,
settings
,
this
.
customFunctionsContext
);
data
+=
exporter
.
newLine
();
data
+=
exporter
.
newLine
();
data
+=
exporter
.
addComment
(
"
begin program
"
);
data
+=
exporter
.
newLine
();
data
+=
this
.
_postProcessCells
(
exporter
,
settings
,
this
.
customFunctionsContext
);
data
+=
exporter
.
newLine
();
data
+=
exporter
.
newLine
();
data
+=
exporter
.
addComment
(
"
end program
"
);
data
+=
exporter
.
newLine
();
data
+=
this
.
customFooter
(
exporter
,
settings
,
this
.
customFunctionsContext
);
return
data
;
};
AssemblerPost
.
prototype
.
_postProcessCells
=
function
(
exporter
,
settings
,
context
){
var
data
=
""
;
var
self
=
this
;
var
lastIndex
=
null
;
lattice
.
rasterCells
(
cam
.
_getOrder
(
cam
.
get
(
"
camStrategy
"
)),
function
(
cell
){
if
(
!
cell
)
return
;
var
cellPosition
=
cell
.
getAbsolutePosition
().
multiplyScalar
(
settings
.
scale
);
var
cellIndex
=
cell
.
getAbsoluteIndex
();
if
(
!
self
.
shouldPickUpStock
){
data
+=
self
.
_postGetStock
(
cellIndex
,
lastIndex
,
cellPosition
,
cell
.
materialName
,
settings
,
exporter
,
context
);
}
else
{
// var thisStockPosition = _.clone(stockPosition);
// if (multStockPositions) {
// thisStockPosition.x += stockNum % stockArraySize.y * stockSeparation;
// thisStockPosition.y -= Math.floor(stockNum / stockArraySize.y) * stockSeparation;
// stockNum += 1;
// if (stockNum >= stockArraySize.x * stockArraySize.y) stockNum = 0;
// }
// data += self._postMoveXY(exporter, stockPosition.x-wcs.x, stockPosition.y-wcs.y);
// data += self._postMoveToStock(exporter, thisStockPosition, rapidHeight, wcs, safeHeight);
}
data
+=
self
.
_postReleaseStock
(
cellIndex
,
cellPosition
,
cell
.
materialName
,
settings
,
exporter
,
context
);
data
+=
"
\n
"
;
lastIndex
=
cellIndex
.
clone
();
});
return
data
;
};
// Assembler.prototype._postMoveToStock = function(exporter, stockPosition, rapidHeight, wcs, safeHeight){
// var data = "";
// data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight);
// data += exporter.moveZ(stockPosition.z-wcs.z);
// data += this._postGetStock(exporter);
// data += exporter.moveZ(stockPosition.z-wcs.z+safeHeight);
// data += exporter.rapidZ(rapidHeight);
// return data;
// };
AssemblerPost
.
prototype
.
_postGetStock
=
function
(
index
,
lastIndex
,
position
,
material
,
settings
,
exporter
,
context
){
var
data
=
""
;
if
(
lastIndex
===
null
||
lastIndex
.
z
!=
index
.
z
){
data
+=
this
.
customChangeZLayer
(
index
,
lastIndex
,
exporter
,
settings
,
context
)
}
data
+=
exporter
.
addComment
(
"
get stock
"
+
JSON
.
stringify
(
index
));
return
data
;
};
AssemblerPost
.
prototype
.
_postReleaseStock
=
function
(
index
,
position
,
material
,
settings
,
exporter
,
context
){
var
data
=
""
;
var
stock
=
_
.
find
(
this
.
stock
,
function
(
thisStock
){
return
thisStock
.
getMaterial
()
==
material
});
if
(
stock
===
undefined
)
{
console
.
warn
(
"
no stock defined of type
"
+
material
+
"
for this assembler
"
);
return
data
;
}
position
.
sub
(
stock
.
getPosition
().
multiplyScalar
(
settings
.
scale
));
position
.
sub
(
settings
.
originPosition
);
data
+=
this
.
customMoveXY
(
position
.
clone
(),
index
.
clone
(),
exporter
,
settings
,
context
);
data
+=
this
.
customPlacePart
(
position
,
index
,
material
,
exporter
,
settings
,
context
);
return
data
;
};
return
AssemblerPost
;
});
\ No newline at end of file
js/cam/processes/GCodeExporter.js
View file @
00e0a48c
...
...
@@ -10,19 +10,6 @@ define(['underscore', 'cam', 'lattice'], function(_, cam, lattice){
this
.
animationSpeed
=
null
;
}
GCodeExporter
.
prototype
.
makeHeader
=
function
(
settings
){
var
data
=
""
;
if
(
lattice
.
get
(
"
units
"
)
==
"
inches
"
)
data
+=
this
.
addLine
(
"
G20
"
,
[],
"
units inches
"
);
else
data
+=
this
.
addLine
(
"
G21
"
,
[],
"
units mm
"
);
// data += this.addLine("G90", [], "absolute positioning");
// data += this.addLine("G54", [], "work offset");
//// data += this.addLine("G49", [], "cancel tool length comp");
// data += this.addLine("G40", [], "cancel tool radius comp");
//// data += this.addLine("M09", [], "coolant off");
// data += this.goHome(settings);
return
data
;
};
GCodeExporter
.
prototype
.
addLine
=
function
(
command
,
params
,
comment
){
var
data
=
""
;
data
+=
command
+
"
"
;
...
...
@@ -40,9 +27,21 @@ define(['underscore', 'cam', 'lattice'], function(_, cam, lattice){
};
GCodeExporter
.
prototype
.
_setSpeed
=
function
(
speed
){
this
.
postSpeed
=
speed
;
return
"
F
"
+
speed
+
"
\n
"
;
};
GCodeExporter
.
prototype
.
setUnits
=
function
(
units
){
if
(
units
==
"
inches
"
)
return
this
.
addLine
(
"
G20
"
,
[],
"
units inches
"
);
else
if
(
units
==
"
mm
"
)
return
this
.
addLine
(
"
G21
"
,
[],
"
units mm
"
);
console
.
warn
(
"
units
"
+
units
+
"
not recognized
"
);
return
""
;
};
GCodeExporter
.
prototype
.
newLine
=
function
(){
return
"
\n
"
;
};
//GCodeExporter.prototype._rapidXYZ = function(x, y, z){
// return this._goXYZ(x,y,z);
//};
...
...
@@ -59,13 +58,6 @@ define(['underscore', 'cam', 'lattice'], function(_, cam, lattice){
return
data
+
this
.
_goXYZ
(
null
,
null
,
z
);
};
GCodeExporter
.
prototype
.
_goXYZ
=
function
(
x
,
y
,
z
){
if
(
x
!==
null
)
x
=
"
X
"
+
parseFloat
(
x
).
toFixed
(
3
);
if
(
y
!==
null
)
y
=
"
Y
"
+
parseFloat
(
y
).
toFixed
(
3
);
if
(
z
!==
null
)
z
=
"
Z
"
+
parseFloat
(
z
).
toFixed
(
3
);
return
this
.
addLine
(
"
G01
"
,
[
x
,
y
,
z
]);
};
GCodeExporter
.
prototype
.
moveXY
=
function
(
x
,
y
,
settings
){
var
data
=
""
;
if
(
this
.
postSpeed
!=
settings
.
feedRate
.
x
)
data
+=
this
.
_setSpeed
(
settings
.
feedRate
.
x
);
...
...
@@ -78,18 +70,25 @@ define(['underscore', 'cam', 'lattice'], function(_, cam, lattice){
return
data
+
this
.
_goXYZ
(
null
,
null
,
z
);
};
GCodeExporter
.
prototype
.
goHome
=
function
(
settings
){
var
data
=
this
.
_setSpeed
(
settings
.
rapidSpeeds
.
z
);
return
data
+
this
.
_goXYZ
(
0
,
0
,
settings
.
rapidHeight
);
GCodeExporter
.
prototype
.
_goXYZ
=
function
(
x
,
y
,
z
){
if
(
x
!==
null
)
x
=
"
X
"
+
parseFloat
(
x
).
toFixed
(
3
);
if
(
y
!==
null
)
y
=
"
Y
"
+
parseFloat
(
y
).
toFixed
(
3
);
if
(
z
!==
null
)
z
=
"
Z
"
+
parseFloat
(
z
).
toFixed
(
3
);
return
this
.
addLine
(
"
G01
"
,
[
x
,
y
,
z
]);
};
GCodeExporter
.
prototype
.
makeFooter
=
function
(
settings
){
var
data
=
""
;
data
+=
this
.
goHome
(
settings
);
// data += this.addLine("M30", [], "program stop");
return
data
;
GCodeExporter
.
prototype
.
goHome
=
function
(
settings
){
var
data
=
this
.
rapidZ
(
settings
.
rapidHeight
,
settings
);
return
data
+
this
.
rapidXY
({
x
:
0
,
y
:
0
},
settings
);
};
GCodeExporter
.
prototype
.
save
=
function
(
data
){
var
blob
=
new
Blob
([
data
],
{
type
:
"
text/plain;charset=utf-8
"
});
saveAs
(
blob
,
"
GCodeExport
"
+
"
.nc
"
);
...
...
js/main.js
View file @
00e0a48c
...
...
@@ -184,6 +184,7 @@ require.config({
//assemblers
assembler
:
'
cam/assemblers/Assembler
'
,
assemblerPost
:
'
cam/assemblers/AssemblerPost
'
,
component
:
'
cam/assemblers/Component
'
,
stockComponent
:
'
cam/assemblers/StockComponent
'
,
...
...
js/plists/CamPList.js
View file @
00e0a48c
...
...
@@ -126,7 +126,7 @@ define(['three'], function(THREE){
camStrategy
:
"
raster
"
,
placementOrder
:
"
XYZ
"
,
//used for raster strategy entry
camProcess
:
"
gcode
"
,
rapidHeight
:
30
,
rapidHeight
:
30
,
rapidHeightRelative
:
true
,
safeHeight
:
4.5
,
originPosition
:
new
THREE
.
Vector3
(
0
,
0
,
0
),
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment