diff --git a/scripts/cpu.sh b/scripts/cpu.sh index 5fb9b3d..0ed51e4 100644 --- a/scripts/cpu.sh +++ b/scripts/cpu.sh @@ -8,5 +8,4 @@ else CPU=-1 fi - echo $CPU \ No newline at end of file diff --git a/scripts/v3.sh b/scripts/v3.sh index e09c100..cc1fa58 100644 --- a/scripts/v3.sh +++ b/scripts/v3.sh @@ -3,89 +3,153 @@ V="v3" echo "Rendering GNAL ${V}" -sh ./scripts/license.sh +bash ./scripts/deps.sh +bash ./scripts/license.sh VERSION=`bash ./scripts/version.sh` CPU=`bash ./scripts/cpu.sh` DIST=./stl +CSG=./csg IMG=./img NOTES=./notes/${V}.csv +STEP=true +LOGGING=true #"quarter_a" "quarter_b" "quarter_c" "quarter_d" #quarter pieces not rendering properly -FILES=( "spindle_bottom" "spindle_top" "spindle_single" "spacer" "top" "spiral" "insert_s8" "insert_16" "spacer_16" "insert_single" ) +FILES=( + "spindle_bottom" + "spindle_top" + "spindle_single" + "insert_s8" + "insert_16" + "spacer_16" + "insert_single" + "top" + "spiral" +) SIZES=( "50ft" "100ft" ) mkdir -p $DIST - -echo "version,cpu,file,file_hash,file_size,source_hash,source_size,facets,volume,render_time" > $NOTES - -for SIZE in "${SIZES[@]}" -do - : - mkdir -p "${DIST}/${SIZE}_${V}" - scad="./scad/${SIZE}_${V}/gnal_${SIZE}.scad" - srchash=`sha256sum "${scad}" | awk '{ print $1 }'` - srcsize=`wc -c < "${scad}"` - srcsize=`echo $srcsize | xargs` - - for FILE in "${FILES[@]}" - do - : - stl="${DIST}/${SIZE}_${V}/gnal_${SIZE}_${FILE}.stl" - png="${IMG}/gnal_${SIZE}_${V}_${FILE}.png" - echo "${scad} - ${FILE}" - start=`date +%s` - if [[ "${SIZE}" == "100ft" ]]; then - openscad -o "$stl" -D "PART=\"${FILE}\"" -D "FN=800" "${scad}" - else - openscad -o "$stl" -D "PART=\"${FILE}\"" -D "FN=600" "${scad}" - fi - - end=`date +%s` - runtime=$((end-start)) - - fileSize=`wc -c < "$stl"` - fileSize=`echo $fileSize | xargs` - - if ! [ -x "$(command -v admesh)" ]; then - facets="N/A" - volume="N/A" - else - firstline=`head -n 1 "$stl"` - if [[ $firstline == solid* ]]; then - #convert from ascii to binary - admesh -c -b "$stl" "$stl" - newSize=`wc -c < "$stl"` - newSize=`echo $newSize | xargs` +if [ $STEP = true ]; then + mkdir -p $CSG +fi + +render_part () { + scad="${1}" + SIZE="${2}" + FILE="${3}" + stl="${DIST}/${SIZE}_${V}/gnal_${SIZE}_${FILE}.stl" + csg="${CSG}/${SIZE}_${V}/gnal_${SIZE}_${FILE}.csg" + png="${IMG}/gnal_${SIZE}_${V}_${FILE}.png" + + echo "${scad} - ${FILE}" + + start=`date +%s` + if [[ "${SIZE}" == "100ft" ]]; then + openscad --csglimit=2000000 -o "$stl" -D "PART=\"${FILE}\"" -D "FN=800" "${scad}" + else + openscad --csglimit=1000000 -o "$stl" -D "PART=\"${FILE}\"" -D "FN=600" "${scad}" + fi + + end=`date +%s` + runtime=$((end-start)) + + fileSize=`wc -c < "$stl"` + fileSize=`echo $fileSize | xargs` + + if ! [ -x "$(command -v admesh)" ]; then + facets="N/A" + volume="N/A" + else + firstline=`head -n 1 "$stl"` + if [[ $firstline == solid* ]]; then + #convert from ascii to binary + tmpBinary=`mktemp` + admesh -c -b "$stl" "$tmpBinary" + newSize=`wc -c < "$tmpBinary"` + newSize=`echo $newSize | xargs` + + if [ $newSize -lt $fileSize ]; then + cp "$tmpBinary" "$stl" percent=`echo "scale=1;($newSize/$fileSize)*100" | bc` fileSize="${newSize}" echo "Binary conversion created STL file ${percent}% of original" + else + echo "Binary STL is larger than ASCII original, skipping conversion..." fi - ao=`admesh -c "$stl"` - facets=`echo "$ao" | grep "Number of facets" | awk '{print $5}'` - volume=`echo "$ao" | grep "Number of parts" | awk '{print $8}'` + rm "$tmpBinary" fi + ao=`admesh -c "$stl"` + facets=`echo "$ao" | grep "Number of facets" | awk '{print $5}'` + volume=`echo "$ao" | grep "Number of parts" | awk '{print $8}'` + fi - hash=`sha256sum "$stl" | awk '{ print $1 }'` + hash=`sha256sum "$stl" | awk '{ print $1 }'` + if [ ${LOGGING} = true ]; then line="${VERSION},${CPU},$stl,$hash,$fileSize,$srchash,$srcsize,$facets,$volume,$runtime" echo "$line" >> $NOTES echo "$line" + fi + + start=`date +%s` + if [[ "${SIZE}" == "100ft" ]]; then + openscad --csglimit=20000000 -o "$csg" -D "PART=\"${FILE}\"" -D "FN=800" "${scad}" + else + openscad --csglimit=10000000 -o "$csg" -D "PART=\"${FILE}\"" -D "FN=600" "${scad}" + fi + + end=`date +%s` + runtime=$((end-start)) + + echo "Rendering image of ${stl}..." + + if [[ "${FILE}" == "spiral" ]]; then + tmp=`mktemp` + fullPath=`realpath "${stl}"` + data="import(\"${fullPath}\");" + echo data > "${tmp}.scad" + openscad -o "$png" --imgsize=2048,2048 --colorscheme=DeepOcean "${tmp}.scad" + else + openscad -o "$png" --imgsize=2048,2048 --colorscheme=DeepOcean -D "PART=\"${FILE}\"" "${scad}" + fi +} + +if [[ "${1}" != "" ]]; then + LOGGING=false + SIZE="${1}" + scad="./scad/${SIZE}_${V}/gnal_${SIZE}.scad" - echo "Rendering image of ${stl}..." + mkdir -p "${DIST}/${SIZE}_${V}" + if [[ "${2}" != "" ]]; then + FILE="${2}" + render_part "${scad}" "${SIZE}" "${FILE}" + else + for FILE in "${FILES[@]}"; do + render_part "${scad}" "${SIZE}" "${FILE}" + done + fi + exit 0 +fi - if [[ "${FILE}" == "spiral" ]]; then - tmp=`mktemp` - fullPath=`realpath "${stl}"` - data="import(\"${fullPath}\");" - echo data > "${tmp}.scad" - openscad -o "$png" --imgsize=1920,1080 --colorscheme=DeepOcean "${tmp}.scad" - else - openscad -o "$png" --imgsize=1920,1080 --colorscheme=DeepOcean -D "PART=\"${FILE}\"" "${scad}" - fi +echo "version,cpu,file,file_hash,file_size,source_hash,source_size,facets,volume,render_time" > $NOTES + +for SIZE in "${SIZES[@]}" +do + : + scad="./scad/${SIZE}_${V}/gnal_${SIZE}.scad" + srchash=`sha256sum "${scad}" | awk '{ print $1 }'` + srcsize=`wc -c < "${scad}"` + srcsize=`echo $srcsize | xargs` + + mkdir -p "${DIST}/${SIZE}_${V}" + + for FILE in "${FILES[@]}"; do + render_part "${scad}" "${SIZE}" "${FILE}" done + # add license to directories for zip cp ./LICENSE.txt "./stl/${SIZE}_v3/" # zip all