Skip to content

Commit

Permalink
Merge pull request #11 from jsconan/release-0.4.1
Browse files Browse the repository at this point in the history
Release 0.4.1
  • Loading branch information
jsconan authored Jan 7, 2022
2 parents effef40 + 4a9d61b commit de8339b
Show file tree
Hide file tree
Showing 7 changed files with 196 additions and 143 deletions.
15 changes: 15 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# rc-tracks history

## [Version 0.4.1](https://github.com/jsconan/rc-tracks/releases/tag/0.4.1)

Fixed design of the race track system for 1/24 to 1/32 scale RC cars.

- Fix a computation issue on the number of notches for the straight barrier holders (when the length is a multiple of the normal size)
- Improve the design of the U-turn barrier holders by adding a pocket to prevent round edges on the slot near the tower
- Dispatch the "special" shapes into more appropriate files (arch and connector)

---

Notes:

- Import from the repository [jsconan/things](https://github.com/jsconan/things)
- Extract of the pull request https://github.com/jsconan/things/pull/48

## [Version 0.4.0](https://github.com/jsconan/rc-tracks/releases/tag/0.4.0)

Improved design of the race track system for 1/24 to 1/32 scale RC cars.
Expand Down
2 changes: 1 addition & 1 deletion rcmodels/tracks/config/config.scad
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
* @author jsconan
*/

projectVersion = "0.4.0";
projectVersion = "0.4.1";

// We will render the object using the specifications of this mode
renderMode = MODE_PROD;
Expand Down
3 changes: 2 additions & 1 deletion rcmodels/tracks/config/setup.scad
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ include <../shapes/fragments.scad>
include <../shapes/straight.scad>
include <../shapes/curved.scad>
include <../shapes/uturn.scad>
include <../shapes/special.scad>
include <../shapes/arch.scad>
include <../shapes/connector.scad>
include <../shapes/accessories.scad>

// Validate the config against the constraints
Expand Down
161 changes: 161 additions & 0 deletions rcmodels/tracks/shapes/arch.scad
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/**
* @license
* GPLv3 License
*
* Copyright (c) 2020 Jean-Sebastien CONAN
*
* This file is part of jsconan/things.
*
* jsconan/things is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* jsconan/things is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with jsconan/things. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* A race track system for 1/24 to 1/32 scale RC cars.
*
* Defines arch related track parts.
*
* @author jsconan
*/

/**
* Gets the length of an arch tower.
* @param Number length - The length of a track element.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerLength(length, base, wall) =
getBarrierHolderHeight(base, wall + printTolerance) +
length / 2
;

/**
* Gets the length of an arch tower with a male connector.
* @param Number length - The length of a track element.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerLengthMale(length, base, wall) =
getArchTowerLength(
length = length,
base = base,
wall = wall
) + getBarrierLinkLength(base)
;

/**
* Gets the width of an arch tower.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerWidth(base, wall) =
getBarrierHolderWidth(base, wall + printTolerance)
;

/**
* Draws the shape of an arch tower that will clamp a barrier border.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTower(length, thickness, base, wall) {
thickness = thickness + printTolerance;
holderHeight = getBarrierHolderHeight(base);
clipHeight = getBarrierHolderHeight(base, wall + printTolerance);
indent = getBarrierStripIndent(base) + printResolution;
length = length / 2;

translateX(-clipHeight / 2) {
translateX(length / 2) {
rotateZ(-90) {
difference() {
clip(
wall = wall,
height = holderHeight,
base = base,
thickness = thickness,
distance = printTolerance
);
translate([0, wall / 2, holderHeight - indent]) {
box([thickness, wall * 2, indent * 2]);
}
}
}
}
carveBarrierNotch(length=length, thickness=thickness, base=base, notches=1) {
extrudeStraightProfile(length=length) {
barrierHolderProfile(
base = base,
thickness = thickness
);
}
}
}
}

/**
* Draws the shape of a male arch tower that will clamp a barrier border.
* @param Number length - The length of a track element.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTowerMale(length, thickness, base, wall) {
linkHeight = getBarrierHolderLinkHeight(base);
archTowerLength = getArchTowerLength(
length = length,
base = base,
wall = wall
);

straightLinkMale(length=archTowerLength, linkHeight=linkHeight, base=base) {
archTower(
length = length,
thickness = thickness,
base = base,
wall = wall
);
}
}

/**
* Draws the shape of a female arch tower that will clamp a barrier border.
* @param Number length - The length of a track element.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTowerFemale(length, thickness, base, wall) {
linkHeight = getBarrierHolderLinkHeight(base);
archTowerLength = getArchTowerLength(
length = length,
base = base,
wall = wall
);

rotateZ(180) {
straightLinkFemale(length=archTowerLength, linkHeight=linkHeight, base=base) {
rotateZ(180) {
archTower(
length = length,
thickness = thickness,
base = base,
wall = wall
);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,143 +23,11 @@
/**
* A race track system for 1/24 to 1/32 scale RC cars.
*
* Defines some special track parts.
* Defines connector track parts.
*
* @author jsconan
*/

/**
* Gets the length of an arch tower.
* @param Number length - The length of a track element.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerLength(length, base, wall) =
getBarrierHolderHeight(base, wall + printTolerance) +
length / 2
;

/**
* Gets the length of an arch tower with a male connector.
* @param Number length - The length of a track element.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerLengthMale(length, base, wall) =
getArchTowerLength(
length = length,
base = base,
wall = wall
) + getBarrierLinkLength(base)
;

/**
* Gets the width of an arch tower.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the clip outline.
* @returns Number
*/
function getArchTowerWidth(base, wall) =
getBarrierHolderWidth(base, wall + printTolerance)
;

/**
* Draws the shape of an arch tower that will clamp a barrier border.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTower(length, thickness, base, wall) {
thickness = thickness + printTolerance;
holderHeight = getBarrierHolderHeight(base);
clipHeight = getBarrierHolderHeight(base, wall + printTolerance);
indent = getBarrierStripIndent(base) + printResolution;
length = length / 2;

translateX(-clipHeight / 2) {
translateX(length / 2) {
rotateZ(-90) {
difference() {
clip(
wall = wall,
height = holderHeight,
base = base,
thickness = thickness,
distance = printTolerance
);
translate([0, wall / 2, holderHeight - indent]) {
box([thickness, wall * 2, indent * 2]);
}
}
}
}
carveBarrierNotch(length=length, thickness=thickness, base=base, notches=1) {
extrudeStraightProfile(length=length) {
barrierHolderProfile(
base = base,
thickness = thickness
);
}
}
}
}

/**
* Draws the shape of a male arch tower that will clamp a barrier border.
* @param Number length - The length of a track element.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTowerMale(length, thickness, base, wall) {
linkHeight = getBarrierHolderLinkHeight(base);
archTowerLength = getArchTowerLength(
length = length,
base = base,
wall = wall
);

straightLinkMale(length=archTowerLength, linkHeight=linkHeight, base=base) {
archTower(
length = length,
thickness = thickness,
base = base,
wall = wall
);
}
}

/**
* Draws the shape of a female arch tower that will clamp a barrier border.
* @param Number length - The length of a track element.
* @param Number thickness - The thickness of the barrier body.
* @param Number base - The base unit value used to design the barrier holder.
* @param Number wall - The thickness of the outline.
*/
module archTowerFemale(length, thickness, base, wall) {
linkHeight = getBarrierHolderLinkHeight(base);
archTowerLength = getArchTowerLength(
length = length,
base = base,
wall = wall
);

rotateZ(180) {
straightLinkFemale(length=archTowerLength, linkHeight=linkHeight, base=base) {
rotateZ(180) {
archTower(
length = length,
thickness = thickness,
base = base,
wall = wall
);
}
}
}
}

/**
* Draws the shape of a connector between a barrier holder and a unibody barrier.
* @param Number length - The length of a track element.
Expand Down
2 changes: 1 addition & 1 deletion rcmodels/tracks/shapes/fragments.scad
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ module barrierNotch(thickness, base, distance = 0, interval = 0, count = 1, cent
*/
module barrierNotchNegative(length, thickness, base, notches = 2) {
height = getBarrierHolderHeight(base) * 2;
notches = min(notches, 2);
notches = max(notches, 1);
interval = length / notches;
count = notches + 1;

Expand Down
22 changes: 15 additions & 7 deletions rcmodels/tracks/shapes/uturn.scad
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ module uTurnBarrierHolder(length, height, thickness, base, gap, right = false) {
towerWidth = nozzleAligned(thickness + minWidth);
towerHeight = getBarrierBodyInnerHeight(height, base) / 2;
interval = (getBarrierHolderWidth(base) + gap) / 2;
indent = getBarrierStripIndent(base) + printResolution;
dir = right ? -1 : 1;
length = length / 2;

Expand Down Expand Up @@ -118,13 +119,20 @@ module uTurnBarrierHolder(length, height, thickness, base, gap, right = false) {
}
translateX(length / 2 - interval) {
rotateZ(270) {
extrudeCurvedProfile(radius=interval, angle=180) {
barrierHolderProfile(
base = base,
thickness = thickness
);
translate([-thickness / 2, holderHeight + towerHeight / 2]) {
rectangle([towerWidth, towerHeight]);
difference() {
extrudeCurvedProfile(radius=interval, angle=180) {
barrierHolderProfile(
base = base,
thickness = thickness
);
translate([-thickness / 2, holderHeight + towerHeight / 2]) {
rectangle([towerWidth, towerHeight]);
}
}
repeat(count=2, intervalX=interval * 2, center=true) {
translateZ(holderHeight - indent) {
box([thickness, thickness, indent]);
}
}
}
}
Expand Down

0 comments on commit de8339b

Please sign in to comment.