Files
create/src/Mod/Material/StandardMaterial/Tools/make_FCMats.sh
2017-10-09 19:59:33 +02:00

72 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# That script converts Materials.ods file into FCMat files. The result files are saved in FCMAT_OUTPUT_DIR
FCMAT_OUTPUT_DIR=FCMats
MATERIALS_FILE=Materials
# Check for unoconv
which unoconv 2>&1 > /dev/null || ( echo "unoconv not found. Please install it first!" && exit 1 )
# Convert Materials.ods to Materials.csv
if [ -f "$MATERIALS_FILE.ods" ]
then
echo "Creating "$MATERIALS_FILE.csv
# 124 is field delimiter |
# 34 is text delimiter "
# 76 is encoding UTF-8
unoconv -e FilterOptions=124,34,76 -f csv $MATERIALS_FILE.ods
else
echo "Material.ods not found. Please run make_ods.sh first!"
exit 1
fi
# Helper function to retrieve string from X,Y position in csv file
function get_xy() {
VALUE_XY=$(cat $MATERIALS_FILE.csv | awk -v x=$X -v y=$Y -F\| 'NR==y {print $x}' | sed 's/\"//g')
}
# Determine number of columns and rows in the Materials.csv file
NUMBER_OF_COLUMNS=$(cat $MATERIALS_FILE.csv | awk --field-separator="|" "NR==1 { print NF }")
NUMBER_OF_ROWS=$(cat $MATERIALS_FILE.csv | wc -l)
echo "Setting output directory:" $FCMAT_OUTPUT_DIR
if [ -d "$FCMAT_OUTPUT_DIR" ]
then
rm "$FCMAT_OUTPUT_DIR"/* 2>&1 > /dev/null
else
mkdir $FCMAT_OUTPUT_DIR
fi
for MAT_NO in $(seq 2 $NUMBER_OF_ROWS)
do
X=1
Y=$MAT_NO
get_xy
FCMAT_FILE=$VALUE_XY
echo "Generating material file: " $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat
touch $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat
if [ -f "../$FCMAT_FILE.FCMat" ]
then
head -n 5 ../$FCMAT_FILE.FCMat > $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat
else
cp new_material_header $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat
fi
echo "[FCMat]" >> $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat
for X in $(seq 2 $NUMBER_OF_COLUMNS)
do
Y=1
get_xy
PROPERTY=$VALUE_XY
Y=$MAT_NO
get_xy
VALUE=$VALUE_XY
if [ -n "$VALUE_XY" ]
then
echo $PROPERTY = $VALUE >> $FCMAT_OUTPUT_DIR/$FCMAT_FILE.FCMat;
fi
done
done