Work on the lamp
This commit is contained in:
parent
333d0aa02a
commit
3461f53eab
|
@ -106,10 +106,16 @@ LampWireY = 20;
|
|||
LampGateX = 11;
|
||||
LampGateZ = 0.5;
|
||||
|
||||
LampRailsSpacingX = 23;
|
||||
LampRailsSpacingX = 32;
|
||||
LampRailsSpacingY = 13;
|
||||
LampRailsOffsetZ = 1 / 2;
|
||||
|
||||
LampGateCarrierThreadedSpacingX = 23;
|
||||
|
||||
LampCarrierX = 40;
|
||||
|
||||
LampSingleX = 70;
|
||||
|
||||
IdleRollerPrintX = 55;
|
||||
IdleRollerPrintY = 0;
|
||||
IdleRollerStockX = 35;
|
||||
|
@ -152,6 +158,12 @@ L298NModulePostsX = 36.5;
|
|||
L298NModulePostsY = 36.5;
|
||||
L298NModulePostsD = 2.8;
|
||||
|
||||
SpringY = 32;
|
||||
SpringD = 8;
|
||||
SpringPostD = 5.3;
|
||||
|
||||
LEDWidthX = 20;
|
||||
|
||||
/**
|
||||
* DEBUG MODULES
|
||||
**/
|
||||
|
@ -324,13 +336,6 @@ module idle_roller_half (pos = [0, 0, 0], rot = [0, 0, 0], flip = false) {
|
|||
}
|
||||
}
|
||||
|
||||
module lamp_bolt_void (pos = [0, 0, 0], H = LampBoltH, Pad = 0) {
|
||||
translate(pos) {
|
||||
cylinder(r = R(4.25 + Pad), h = H, center = true);
|
||||
translate([0, 0, -H/2]) m4_nut();
|
||||
}
|
||||
}
|
||||
|
||||
module idle_roller_bolt_void (pos = [0, 0, 0], H = IdleRollerBoltH) {
|
||||
translate(pos) {
|
||||
cylinder(r = R(4.25), h = H, center = true);
|
||||
|
@ -338,6 +343,13 @@ module idle_roller_bolt_void (pos = [0, 0, 0], H = IdleRollerBoltH) {
|
|||
}
|
||||
}
|
||||
|
||||
module lamp_bolt_void (pos = [0, 0, 0], H = LampBoltH, Pad = 0) {
|
||||
translate(pos) {
|
||||
cylinder(r = R(4.25 + Pad), h = H, center = true);
|
||||
translate([0, 0, -(H / 2) - (3 / 2)]) m4_nut();
|
||||
}
|
||||
}
|
||||
|
||||
module lamp_bolts_voids (pos = [0, 0, 0], H = 10, Pad = 0) {
|
||||
X = LampBoltX/2;
|
||||
Y = LampBoltY/2;
|
||||
|
@ -442,7 +454,7 @@ module gate_blank () {
|
|||
translate([0, (RoundedBevelD / 2) + RoundedBevelY, 0]) cylinder(r = R(RoundedBevelD), h = Z + 1, center = true, $fn = 260);
|
||||
}
|
||||
}
|
||||
gate_blank_void([0, 2.5, LampGateZ - 1.1], [0, 90, -90], [16, 12], [16, 2], 6);
|
||||
gate_blank_void([0, 3, LampGateZ - 1.1], [0, 90, -90], [16, 12], [16, 2], 6);
|
||||
|
||||
translate([0, (-42.39 / 2) + RollerVoidY, 0]) cylinder(r = R(42.39), h = 20 + 1, center = true, $fn = 240);
|
||||
//sprocket shelf
|
||||
|
@ -468,37 +480,43 @@ module gate_blank () {
|
|||
|
||||
module gate_carrier (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
||||
X = 15.4;
|
||||
GateCarrierZ = 22;
|
||||
GateCarrierX = 40;
|
||||
GateCarrierZ = 21.5;
|
||||
SidesX = 2;
|
||||
SidesY = -1.2;
|
||||
SpringRail = 4.5;
|
||||
translate(pos) rotate(rot) {
|
||||
difference () {
|
||||
union () {
|
||||
rotate([90, 0, 0]) translate([0, 1, -1]) rounded_cube([30, GateCarrierZ, 5], d = 4, center = true, $fn = 40);
|
||||
rotate([90, 0, 0]) translate([0, 1, -1]) rounded_cube([GateCarrierX, GateCarrierZ, 5], d = 4, center = true, $fn = 40);
|
||||
translate([-12.5, 2.5, 10]) difference () {
|
||||
rotate([0, 0, 180]) cylinder(r = R(5), h = 3, center = true, $fn = 3);
|
||||
translate([0, 5 / 2, 0]) cube([5, 5, 5 + 1], center = true);
|
||||
}
|
||||
translate([0, -4, 1]) cube([24.5, 5, GateCarrierZ], center = true);
|
||||
}
|
||||
lamp_rails_voids([0, 0, LampRailsOffsetZ], [90, 0, 0], h = 11);
|
||||
translate([0 ,0, 1]) difference () {
|
||||
|
||||
//corners
|
||||
translate([GateCarrierX / 2, 0, -12.9]) cube([(GateCarrierX - LEDWidthX), 20, 10], center = true);
|
||||
translate([-GateCarrierX / 2, 0, -12.9]) cube([(GateCarrierX - LEDWidthX), 20, 10], center = true);
|
||||
|
||||
translate([0 ,-4, 1.651]) difference () {
|
||||
cube([X, 10 + 1, GateCarrierZ], center = true);
|
||||
translate([(X / 2) + SidesX, SidesY, 0]) rotate([0, 0, 45]) cube([5, 5, 20 + 1], center = true);
|
||||
translate([(-X / 2) - SidesX, SidesY, 0]) rotate([0, 0, 45]) cube([5, 5, 20 + 1], center = true);
|
||||
difference () {
|
||||
//notches to guide gate
|
||||
translate([(X / 2) + SidesX, SidesY, 0]) rotate([0, 0, 45]) cube([5, 5, 20 + 2], center = true);
|
||||
translate([(-X / 2) - SidesX, SidesY, 0]) rotate([0, 0, 45]) cube([5, 5, 20 + 2], center = true);
|
||||
difference () {
|
||||
translate([0, 6.7, 0]) cube([X + 1, 10 + 1, GateCarrierZ], center = true);
|
||||
translate([0, 0, 0]) cube([X - 5, 10 + 1, 16], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([LampRailsSpacingX / 2, -2, LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
|
||||
rotate([0, 0, 30]) m4_nut(5);
|
||||
}
|
||||
translate([-LampRailsSpacingX / 2, -3, LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(5), h = GateCarrierZ, center = true, $fn = 40);
|
||||
|
||||
translate([0, 5, 1.01]) difference() {
|
||||
cube([18, 10 + 1, 16], center = true);
|
||||
translate([20 / 2, -3, 0]) rotate([0, 0, -45]) cube([5, 50, 20 + 1], center = true);
|
||||
translate([(-20 / 2), -3, 0]) rotate([0, 0, 45]) cube([5, 50, 20 + 1], center = true);
|
||||
}
|
||||
}
|
||||
filter_carrier([0, 5, 0], [180, 0, 0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -509,7 +527,7 @@ module filter_carrier (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|||
translate(pos) rotate(rot) {
|
||||
difference () {
|
||||
union () {
|
||||
rotate([90, 0, 0]) rounded_cube([30, 20, 5], d = 4, center = true, $fn = 40);
|
||||
rotate([90, 0, 0]) rounded_cube([LampCarrierX, 20, 5], d = 4, center = true, $fn = 40);
|
||||
translate([-12.5, 2.5, 10]) difference () {
|
||||
rotate([0, 0, 180]) cylinder(r = R(5), h = 3, center = true, $fn = 3);
|
||||
translate([0, 5 / 2, 0]) cube([5, 5, 5 + 1], center = true);
|
||||
|
@ -617,40 +635,57 @@ module lamp_single (pos = [0, 0, 0]) {
|
|||
intersection () {
|
||||
difference () {
|
||||
union () {
|
||||
rounded_cube([70, 70, 2], d = 4, center = true);
|
||||
rounded_cube([LampSingleX, 70, 2], d = 4, center = true);
|
||||
translate([0, -15, 20 / 2]) cube([70, 10, 22], center = true);
|
||||
translate([0, 0, 20 / 2]) difference() {
|
||||
rounded_cube([70, 70, 22], d = 4, center = true);
|
||||
rounded_cube([70 - 5, 70 - 10, 22 + 1], d = 4, center = true);
|
||||
}
|
||||
lamp_posts([0, 15, PostsZ]);
|
||||
translate([-18, 1, 20 / 2]) cube([4.75, 32, 21], center = true);
|
||||
}
|
||||
translate([0, 1, 0]) cube([31, 32, 50], center = true);
|
||||
translate([0, -4, 0]) cube([15.4, 32, 50], center = true);
|
||||
translate([0, -48, 0]) cylinder(r = R(60), h = 4 + 1, center = true, $fn = 200);
|
||||
lamp_bolts_voids([0, 15, -2], 50, 0.2);
|
||||
translate([LampRailsSpacingX / 2, 34, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
|
||||
rotate([0, 0, 30]) m4_nut(5);
|
||||
}
|
||||
translate([-LampRailsSpacingX / 2, 34, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
|
||||
rotate([0, 0, 30]) m4_nut(5);
|
||||
}
|
||||
translate([0, -11.5, 9 + LampRailsOffsetZ]) {
|
||||
translate([LampRailsSpacingX / 2, 0, 0]) rotate([90, 0, 0]) cylinder(r = R(5), h = 10, center = true, $fn = 40);
|
||||
translate([-LampRailsSpacingX / 2, 0, 0]) rotate([90, 0, 0]) cylinder(r = R(5), h = 10, center = true, $fn = 40);
|
||||
lamp_posts([0, 14.75, PostsZ]);
|
||||
//translate([-18, 1, 20 / 2]) cube([4.75, 32, 21], center = true);
|
||||
}
|
||||
|
||||
lamp_rails_voids([0, -11.5, 9 + LampRailsOffsetZ], [90, 0, 0], h = 11);
|
||||
lamp_rails_voids([0, 20, 9 + LampRailsOffsetZ], [90, 0, 0], h = 40);
|
||||
translate([LampWireX, LampWireY, 0]) cylinder(r = R(10), h = 10, center = true);
|
||||
translate([-LampWireX, LampWireY, 0]) cylinder(r = R(10), h = 10, center = true);
|
||||
//void for gate carrier, front
|
||||
translate([0, 1, 12]) cube([25, 32, 22], center = true);
|
||||
//void for gate carrier, bottom
|
||||
translate([0, 10, 0]) cube([LEDWidthX + 0.25, 40, 50], center = true);
|
||||
//void for gate
|
||||
translate([0, -4, 0]) cube([LEDWidthX + 0.25, 32, 50], center = true);
|
||||
translate([0, -48, 0]) cylinder(r = R(60), h = 4 + 1, center = true, $fn = 200);
|
||||
|
||||
lamp_bolts_voids([0, 14.75, -2], 50, 0.2);
|
||||
|
||||
//translate([LampGateCarrierThreadedSpacingX / 2, 34, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
//cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
|
||||
//}
|
||||
//translate([-LampGateCarrierThreadedSpacingX / 2, 34, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
//cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
|
||||
//}
|
||||
//translate([0, -11.5, 9 + LampRailsOffsetZ]) {
|
||||
//translate([LampGateCarrierThreadedSpacingX / 2, 0, 0]) rotate([90, 0, 0]) cylinder(r = R(5), h = 10, center = true, $fn = 40);
|
||||
//translate([-LampGateCarrierThreadedSpacingX / 2, 0, 0]) rotate([90, 0, 0]) cylinder(r = R(5), h = 10, center = true, $fn = 40);
|
||||
//}
|
||||
|
||||
//lamp_rails_voids([0, -10, 9 + LampRailsOffsetZ], [90, 0, 0], h = 11);
|
||||
//lamp_rails_voids([0, 20, 9 + LampRailsOffsetZ], [90, 0, 0], h = 40);
|
||||
//translate([LampWireX, LampWireY, 0]) cylinder(r = R(10), h = 10, center = true);
|
||||
//translate([-LampWireX, LampWireY, 0]) cylinder(r = R(10), h = 10, center = true);
|
||||
//guide for assembly
|
||||
|
||||
//void for slide
|
||||
translate([0, 70 / 2, -0.2]) {
|
||||
cube([LEDWidthX + 0.25, 20, 2], center = true);
|
||||
translate([((LEDWidthX + 0.25) / 2) - (3.5 / 2), 0, (5.5 / 2) - (1.5 / 2)]) cube([3.5, 20, 6], center = true);
|
||||
translate([((-LEDWidthX - 0.25) / 2) + (3.5 / 2), 0, (5.5 / 2) - (1.5 / 2)]) cube([3.5, 20, 6], center = true);
|
||||
}
|
||||
}
|
||||
translate([0, 66.5, 0]) cylinder(r = R(170), h = 100, center = true, $fn = 500);
|
||||
}
|
||||
translate([0, 26.5, 3.8]) difference () {
|
||||
translate([0, 1, -1]) cube([LEDWidthX - 6.75, 8, 4], center = true);
|
||||
m4_nut();
|
||||
cylinder(r = R(4), h = 20, $fn = 40, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -663,15 +698,21 @@ module lamp_single_assembly (pos = [0, 0, 0]) {
|
|||
}
|
||||
|
||||
module lamp_cover (pos = [0, 0, 0]) {
|
||||
translate(pos) difference () {
|
||||
union () {
|
||||
rounded_cube([70, 40, 2], d = 4, center = true);
|
||||
translate([5.35, -15-7, 0]) rotate([0, 0, -7]) cube([LampGateX, 15-6, 2], center = true);
|
||||
translate([-5.35, -15-7, 0]) rotate([0, 0, 7]) cube([LampGateX, 15-6, 2], center = true);
|
||||
translate([0, -15-7, 0])cube([4, 4, 2], center = true);
|
||||
|
||||
RollerVoidY = -17.5;
|
||||
RollerShelfD = 44.75;
|
||||
translate(pos) {
|
||||
difference () {
|
||||
union () {
|
||||
intersection () {
|
||||
rounded_cube([LampSingleX, 70, 2], d = 4, center = true);
|
||||
translate([0, 66.5, 0]) cylinder(r = R(170), h = 100, center = true, $fn = 500);
|
||||
}
|
||||
translate([0, -17, -1]) cube([15, 2, 3], center = true);
|
||||
}
|
||||
lamp_bolts_voids([0, 15, 0]);
|
||||
translate([0, -23, 0]) cube([40, 10, 10], center = true);
|
||||
translate([0, (-42.39 / 2) + RollerVoidY, 0]) cylinder(r = R(RollerShelfD), h = 10, center = true, $fn = 240);
|
||||
}
|
||||
lamp_bolts_voids([0, 0, 0]);
|
||||
}
|
||||
}
|
||||
module takeup_mount_bearing_plug (pos = [0, 0, 0]) {
|
||||
|
@ -696,13 +737,13 @@ module panel_bearing_void (pos = [0, 0, 0]) {
|
|||
//BOM: 1, 100RPM DC geared motor with encoder,N/A,Drive the sprocketed_roller
|
||||
//BOM: 4, M4 hex bolt 40mm, N/A, Attach the lamp to the panel
|
||||
module panel (pos = [0, 0, 0]) {
|
||||
BoltX = (PanelX-20)/2;
|
||||
BoltY2 = (PanelY)/2;
|
||||
BoltX = (PanelX - 20) / 2;
|
||||
BoltY2 = (PanelY) / 2;
|
||||
|
||||
BoltY1 = 30;
|
||||
|
||||
LampBoltsZ = (LampBoltH/2) - 1.5;
|
||||
IdleRollerBoltsZ = (IdleRollerBoltH/2) - 1.5;
|
||||
LampBoltsZ = (LampBoltH / 2) - 1.5;
|
||||
IdleRollerBoltsZ = (IdleRollerBoltH / 2) - 1.5;
|
||||
|
||||
SprocketedRollerZ = -3.5 - 1;
|
||||
|
||||
|
@ -736,7 +777,8 @@ module panel (pos = [0, 0, 0]) {
|
|||
idle_roller_bolt_void([-IdleRollerStockX, IdleRollerStockY, IdleRollerBoltsZ]);
|
||||
|
||||
//lamp
|
||||
lamp_bolts_voids([0, LampY + 15, LampBoltsZ]);
|
||||
lamp_bolts_voids([0, LampY + 15, LampBoltsZ], 26.25, 0.15);
|
||||
|
||||
//lamp wire voids
|
||||
translate([0, LampY, 0]) {
|
||||
translate([LampWireX, LampWireY, 0]) cylinder(r = R(10), h = 10, center = true);
|
||||
|
@ -753,6 +795,7 @@ module panel (pos = [0, 0, 0]) {
|
|||
}
|
||||
panel_bearing_void([0, RollerY, 2.5]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1306,8 +1349,9 @@ module sprocketed_roller_invert_solid (pos = [0, 0, 0]) {
|
|||
}
|
||||
}
|
||||
|
||||
module lamp_rails_voids (pos = [0, 0, 0], rot = [0, 0, 0], h = 10) {
|
||||
module lamp_rails_voids (pos = [0, 0, 0], rot = [0, 0, 0], h = 10, Void = true) {
|
||||
$fn = 40;
|
||||
D = 4 + (Void ? 0.25 : 0);
|
||||
translate(pos) rotate(rot) {
|
||||
translate([LampRailsSpacingX / 2, LampRailsSpacingY / 2, 0]) cylinder(r = R(4.25), h = h, center = true);
|
||||
translate([LampRailsSpacingX / 2, -LampRailsSpacingY / 2, 0]) cylinder(r = R(4.25), h = h, center = true);
|
||||
|
@ -1334,24 +1378,14 @@ module lamp_LED_side (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|||
module lamp_LEDs (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
||||
LightChannelY = 24;
|
||||
LEDOffsetY = -2;
|
||||
Length = 40;
|
||||
translate(pos) rotate(rot) {
|
||||
//frame
|
||||
difference () {
|
||||
union () {
|
||||
rotate([90, 0, 0]) rounded_cube([30, 20, 5], d = 4, center = true, $fn = 40);
|
||||
translate([-12.5, -2.5, 10]) difference () {
|
||||
rotate([0, 0, 180]) cylinder(r = R(5), h = 3, center = true, $fn = 3);
|
||||
translate([0, -5 / 2, 0]) cube([5, 5, 5 + 1], center = true);
|
||||
}
|
||||
rotate([90, 0, 0]) rounded_cube([LEDWidthX, 20, 5], d = 4, center = true, $fn = 40);
|
||||
}
|
||||
cube([12.9, 5 + 1, 18], center = true);
|
||||
lamp_rails_voids([0, 0, LampRailsOffsetZ], [90, 0, 0]);
|
||||
translate([LampRailsSpacingX / 2, -2, LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(5), h = 20, center = true, $fn = 40);
|
||||
}
|
||||
translate([-LampRailsSpacingX / 2, -3, LampRailsOffsetZ]) rotate([90, 0, 0]) {
|
||||
cylinder(r = R(5), h = 20, center = true, $fn = 40);
|
||||
}
|
||||
}
|
||||
difference () {
|
||||
union () {
|
||||
|
@ -1362,6 +1396,16 @@ module lamp_LEDs (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|||
}
|
||||
translate([0, -5, 0]) cube([30, 5, 20], center = true);
|
||||
}
|
||||
translate([0, (Length / 2) - (5 / 2), -(20 / 2) + (1.5 / 2)]) difference() {
|
||||
cube([LEDWidthX, Length, 1.5], center = true);
|
||||
translate([0, 2, 0]) {
|
||||
translate([0, (Length - 14) / 2, 0]) cylinder(r = R(4.25), h = 1.5 + 1, center = true, $fn = 50);
|
||||
translate([0, -(Length - 14) / 2, 0]) cylinder(r = R(4.25), h = 1.5 + 1, center = true, $fn = 50);
|
||||
cube([4.25, (Length - 14), 1.5 + 1], center = true);
|
||||
}
|
||||
}
|
||||
translate([(LEDWidthX / 2) - (3 / 2), (Length / 2) - (5 / 2), -(20 / 2) + (5 / 2) +(1.5 / 2)]) cube([3, Length, 5], center = true);
|
||||
translate([(-LEDWidthX / 2) + (3 / 2), (Length / 2) - (5 / 2), -(20 / 2) + (5 / 2) +(1.5 / 2)]) cube([3, Length, 5], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1587,17 +1631,18 @@ module debug () {
|
|||
}
|
||||
|
||||
module debug_lamp () {
|
||||
color("blue") translate([0, -8.5, 10.6]) rotate([0, 90, 90]) 16mm_film(40, true, true);
|
||||
color("red") lamp_bolts_voids([0, LampY + 5, (LampBoltH/2) - 1.5 - 2.5], H = 40);
|
||||
color("red") lamp_rails_voids([0, 20, 11 + LampRailsOffsetZ], [90, 0, 0], h = 50);
|
||||
panel([0, -10, -1.5]);
|
||||
//color("blue") translate([0, -8.5, 10.6]) rotate([0, 90, 90]) 16mm_film(40, true, true);
|
||||
//color("red") lamp_bolts_voids([0, LampY + 5, (LampBoltH / 2) - 2], H = 30);
|
||||
//color("red") lamp_rails_voids([0, 21, 11 + LampRailsOffsetZ], [90, 0, 0], h = 51, Void = false);
|
||||
//panel([0, -10, -1.5]);
|
||||
//
|
||||
lamp_single([0, 10, 2]);
|
||||
translate([0, -30, 3.5]) rotate([0, 0, 10]) sprocketed_roller_invert_solid();
|
||||
lamp_LEDs([0, 19, 11]);
|
||||
//filter_carrier([0, 9, 11]);
|
||||
lamp_single([0, 10.25, 2]);
|
||||
//lamp_cover([0, 10, 24]);
|
||||
//translate([0, -30, 3.5]) rotate([0, 0, 10]) sprocketed_roller_invert_solid();
|
||||
lamp_LEDs([0, 28, 11]);
|
||||
translate([0, 0, 0]) gate_carrier([0, 1.6 + 0.25, 10.75]);
|
||||
|
||||
//picture_gate([0, -6.2, 11], Type = "standard"); //standard
|
||||
gate_carrier([0, -2.5, 11]);
|
||||
}
|
||||
|
||||
//BOM: 840, 2020 Aluminum extrusion mm,N/A,Top and bottom frame 2x 420mm
|
||||
|
@ -1679,9 +1724,12 @@ if (PART == "panel") {
|
|||
rotate([90, 0, 0]) lamp_LEDs();
|
||||
} else if (PART == "electronics_panel") {
|
||||
electronics_panel(rot = [180, 0, 0]);
|
||||
} else if(PART=="blank") {
|
||||
} else if(PART == "blank") {
|
||||
//
|
||||
} else {
|
||||
//debug();
|
||||
debug_lamp();
|
||||
//difference () {
|
||||
debug_lamp();
|
||||
//translate([0, -50, 0]) cube([100, 100, 100], center = true);
|
||||
//}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue