Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+72
@@ -0,0 +1,72 @@
|
||||
# $Id: ahtc_buildings_buildingviewer.spec 48365 2019-09-13 10:58:22Z ehrlicher $
|
||||
# $HeadURL: svn://slssvn/TDS/branches/product/iterations/21_06_mango_loco/specs/external/ahtc_buildings_buildingviewer.spec $
|
||||
#
|
||||
# Von Hand auszufuellen - Version und Release anpassen!
|
||||
# import_ahtc.csv erzeugen (mittels convert_coordinates.py)
|
||||
# "osgconv.sh ahtc"
|
||||
# es wird ~/rpmbuild/SOURCES/ahtc_buildings_buildingviewer-1.0.0.tar.gz erzeugt, inklusive import_ahtc.csv
|
||||
# rpmbuild -bb --target=noarch ahtc_buildings_buildingviewer.spec
|
||||
#
|
||||
|
||||
%define real_name ahtc_buildings_buildingviewer
|
||||
|
||||
Summary: AHTC Buildings for BuildingViewer
|
||||
Name: %{real_name}
|
||||
Version: 1.0.0
|
||||
Release: 8
|
||||
License: proprietary
|
||||
Group: Applications/Resources
|
||||
Source: %{real_name}-%{version}.tar.gz
|
||||
Prefix: /
|
||||
Vendor: Rheinmetall Electronics GmbH
|
||||
URL: http://www.rheinmetall-defence.com
|
||||
Packager: ctc
|
||||
Provides: %{real_name}
|
||||
AutoReqProv: no
|
||||
|
||||
%description
|
||||
3D Models for AHTC Buildings / BuildingViewer
|
||||
|
||||
%changelog
|
||||
#* date +"%a %b %d %Y" text
|
||||
* Thu Sep 12 2019 Christian Ehrlicher
|
||||
- Don't show MountingPoints in 3D Model
|
||||
* Fri Aug 30 2019 Christian Ehrlicher
|
||||
- fix base heights
|
||||
* Tue Aug 27 2019 Christian Ehrlicher
|
||||
- fix rotation for building B6
|
||||
- adjust z values (+30m)
|
||||
* Thu Aug 22 2019 Christian Ehrlicher
|
||||
- added some missing buildings
|
||||
* Mon Jul 01 2019 Christian Ehrlicher
|
||||
- used compressed ive files / textures
|
||||
* Mon May 06 2019 Christian Ehrlicher
|
||||
- added wls ids, svn rev 1405
|
||||
* Thu Apr 04 2019 Christian Ehrlicher
|
||||
- small update in generation script, svn rev 1403
|
||||
* Mon Nov 26 2018 Christian Ehrlicher
|
||||
- initial, svn rev 1401
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
echo "nothing to build"
|
||||
# nothing to do here
|
||||
|
||||
|
||||
%install
|
||||
mkdir -p "%{buildroot}/opt/BuildingModels/"
|
||||
mv %{_builddir}/%{buildsubdir}/* %{buildroot}/opt/BuildingModels/
|
||||
|
||||
%clean
|
||||
%__rm -rf "%{buildroot}"
|
||||
|
||||
%files
|
||||
%defattr(-,ctc,ctc)
|
||||
/opt/BuildingModels/
|
||||
|
||||
%pre
|
||||
%post
|
||||
%preun
|
||||
%postun
|
||||
Vendored
Executable
+74
@@ -0,0 +1,74 @@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
#
|
||||
# Von Hand auszufuellen - Version und Release anpassen!
|
||||
# import_ahtc.csv erzeugen (mittels convert_coordinates.py)
|
||||
# "osgconv.sh ahtc"
|
||||
# es wird ~/rpmbuild/SOURCES/ahtc_buildings_buildingviewer-1.0.0.tar.gz erzeugt, inklusive import_ahtc.csv
|
||||
# rpmbuild -bb --target=noarch ahtc_buildings_buildingviewer.spec
|
||||
#
|
||||
|
||||
%define real_name ahtc_buildings_buildingviewer
|
||||
|
||||
Summary: AHTC Buildings for BuildingViewer
|
||||
Name: %{real_name}
|
||||
Version: @VERSION@
|
||||
Release: 0
|
||||
License: proprietary
|
||||
Group: Applications/Resources
|
||||
Source: %{real_name}-%{version}.tar.gz
|
||||
Prefix: /
|
||||
Vendor: Rheinmetall Electronics GmbH
|
||||
URL: http://www.rheinmetall-defence.com
|
||||
Packager: ctc
|
||||
Provides: %{real_name}
|
||||
AutoReqProv: no
|
||||
|
||||
%description
|
||||
3D Models for AHTC Buildings / BuildingViewer
|
||||
|
||||
%changelog
|
||||
#* date +"%a %b %d %Y" text
|
||||
* Thu Sep 12 2021 Norbert Thdoen
|
||||
- Switch to PostProcessing (apply replace_transition etc)
|
||||
* Thu Sep 12 2019 Christian Ehrlicher
|
||||
- Don't show MountingPoints in 3D Model
|
||||
* Fri Aug 30 2019 Christian Ehrlicher
|
||||
- fix base heights
|
||||
* Tue Aug 27 2019 Christian Ehrlicher
|
||||
- fix rotation for building B6
|
||||
- adjust z values (+30m)
|
||||
* Thu Aug 22 2019 Christian Ehrlicher
|
||||
- added some missing buildings
|
||||
* Mon Jul 01 2019 Christian Ehrlicher
|
||||
- used compressed ive files / textures
|
||||
* Mon May 06 2019 Christian Ehrlicher
|
||||
- added wls ids, svn rev 1405
|
||||
* Thu Apr 04 2019 Christian Ehrlicher
|
||||
- small update in generation script, svn rev 1403
|
||||
* Mon Nov 26 2018 Christian Ehrlicher
|
||||
- initial, svn rev 1401
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
echo "nothing to build"
|
||||
# nothing to do here
|
||||
|
||||
|
||||
%install
|
||||
mkdir -p "%{buildroot}/opt/BuildingModels/"
|
||||
mv %{_builddir}/%{buildsubdir}/* %{buildroot}/opt/BuildingModels/
|
||||
|
||||
%clean
|
||||
%__rm -rf "%{buildroot}"
|
||||
|
||||
%files
|
||||
%defattr(-,ctc,ctc,755)
|
||||
/opt/BuildingModels/
|
||||
|
||||
%pre
|
||||
%post
|
||||
%preun
|
||||
%postun
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
|
||||
#!/bin/sh
|
||||
#
|
||||
# @RDE_HEADER@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
#
|
||||
|
||||
|
||||
me=`basename "$0"`
|
||||
searchPath="."
|
||||
|
||||
if [ $# -ne 2 ]
|
||||
then
|
||||
searchPath=$1
|
||||
fi;
|
||||
|
||||
echo "START '$me' at path= '${searchPath}' ..."
|
||||
|
||||
#REF_MOD_AP_0001
|
||||
|
||||
#BDI_P_1
|
||||
#CAMERA_IN_AP_1 CAMERA_OUT_AP_1
|
||||
#IPS_OUT_AP_1 IPS_IN_AP_1
|
||||
#ZEG_MOD_AP_1
|
||||
|
||||
#undest_room_201
|
||||
#SW_room_201
|
||||
#floor_1
|
||||
#xargs grep -wo 'IPS_IN_AP_[[:digit:]]\{1\}' | sort
|
||||
|
||||
|
||||
REGEXS="${REGEXS} REF_MOD_AP_[0-9]\{4\}"
|
||||
|
||||
REGEXS="${REGEXS} BDI_P_[0-9]\{1\} BDI_P_[0-9]\{2\}"
|
||||
|
||||
REGEXS="${REGEXS} CAMERA_IN_AP_[0-9]\{1\} CAMERA_IN_AP_[0-9]\{2\}"
|
||||
REGEXS="${REGEXS} CAMERA_OUT_AP_[0-9]\{1\} CAMERA_OUT_AP_[0-9]\{2\}"
|
||||
|
||||
REGEXS="${REGEXS} IPS_IN_AP_[0-9]\{1\} IPS_IN_AP_[0-9]\{2\}"
|
||||
REGEXS="${REGEXS} IPS_OUT_AP_[0-9]\{1\} IPS_OUT_AP_[0-9]\{2\}"
|
||||
|
||||
REGEXS="${REGEXS} ZEG_AP_[0-9]\{1\} ZEG_[0-9]\{2\}"
|
||||
|
||||
REGEXS="${REGEXS} floor_[0-9]\{1\} floor_[0-9]\{2\}"
|
||||
REGEXS="${REGEXS} undest_room_[0-9]\{3\}"
|
||||
REGEXS="${REGEXS} SW_room_[0-9]\{3\}"
|
||||
|
||||
|
||||
|
||||
|
||||
cnt=0;
|
||||
|
||||
for REGEX in ${REGEXS}
|
||||
do
|
||||
echo "---------------------------------------"
|
||||
((cnt=cnt+1))
|
||||
echo " check using regex_${cnt}: '${REGEX}' --->"
|
||||
find ${searchPath} -iname "*.flt.xml" | xargs grep -wo ${REGEX} | sort | uniq -cd
|
||||
echo
|
||||
done
|
||||
|
||||
echo "END '$me' ..."
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# @RDE_HEADER@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
#
|
||||
|
||||
|
||||
# 57 Bldgs:
|
||||
# Since 25-01-2022:
|
||||
BLDGS="BN_A2 BN_A3a BN_A3b BN_A3c BN_A4a BN_A4b BN_A4c BN_A4d BN_A5 BN_A6a BN_A6b BN_A6c BN_A7 BN_B1 BN_B2 BN_B3 BN_B4 BN_B5 BN_B6 BN_B7 BN_B8 BN_B9a BN_B9b BN_B9c BN_B9d BN_B9e BN_B9f BN_B9g BN_B9h BN_B9i BN_B9j BN_B9k BN_B9l BN_B9m BN_B9n BN_B9o BN_B9p BN_B9q BN_B9r BN_B10a BN_B10b BN_B10c BN_B10d BN_B10e BN_B10f BN_B10g BN_B10h BN_B10i BN_B10j BN_B10k BN_B10l BN_B10m BN_B10n BN_B11a BN_B11b BN_B11c BN_B11d "
|
||||
|
||||
for BLDG in ${BLDGS}
|
||||
do
|
||||
|
||||
echo "Bldg: '$BLDG':";
|
||||
|
||||
MyFile=`find ../AhtcBuildings/buildings/ -iname "bldg_${BLDG}.flt.VWM_Building.xml"`
|
||||
grep -E "OuterWallProtectiveFactor|ExclusionZoneProtectiveFactor" $MyFile | sort -u | grep -vE "usionZoneProtectiveFactor>20<|usionZoneProtectiveFactor>50|WallProtectiveFactor>125|WallProtectiveFactor>150"
|
||||
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
echo "'$BLDG' okay";
|
||||
else
|
||||
echo " failure on -> '$BLDG' ";
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/python
|
||||
import csv
|
||||
import math
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def convert(src, dst, x, y):
|
||||
cmd = "cs2cs -f %%.13f %s +to %s << EOF\n%s %s\nEOF" % (src, dst, x, y)
|
||||
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
|
||||
ret = p.wait()
|
||||
pos = p.stdout.read().replace('\t', ' ').split()
|
||||
#print pos
|
||||
return pos
|
||||
|
||||
def readBldgId(fn):
|
||||
try:
|
||||
f = open(fn, 'r')
|
||||
content = f.read()
|
||||
return int(content.strip())
|
||||
except:
|
||||
return ''
|
||||
def main():
|
||||
|
||||
subdir = ''
|
||||
|
||||
skipped_buildings_xml = []
|
||||
skipped_buildings_vwm = []
|
||||
skipped_buildings_name = []
|
||||
skipped_buildings_no_files = []
|
||||
script_file_name = 'import_ahtc.csv'
|
||||
script_file = open(script_file_name, 'w')
|
||||
|
||||
# for block in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'cts'):
|
||||
for block in ('b'):
|
||||
csv_file='block_%s.csv' % block
|
||||
|
||||
dir_prefix = 'bldg_BN_'
|
||||
file_prefix = dir_prefix
|
||||
|
||||
proj_from = "+init=epsg:32639"
|
||||
proj_to = "+init=epsg:4326"
|
||||
print 'parsing %s' % csv_file
|
||||
names = []
|
||||
nextLineHasToBeEg = False;
|
||||
buildingNameForEg = None
|
||||
for line in list(csv.reader(open(csv_file, 'rt'), delimiter = ',')):
|
||||
if len(line) < 6:
|
||||
print 'continue 1111'
|
||||
continue
|
||||
print ' line = %s' % line
|
||||
if line[1] != 'EG' and line[1] != 'UG':
|
||||
print 'continue 2222'
|
||||
continue
|
||||
if nextLineHasToBeEg and line[1] != 'EG':
|
||||
print "XXXX Got a 'UG' line, but no following line with 'EG'..."
|
||||
skipped_buildings_name.append(name)
|
||||
continue
|
||||
name = buildingNameForEg if nextLineHasToBeEg else line[0].split(' ')[0]
|
||||
if name in names:
|
||||
print "found duplicate building %s - skipping" % name
|
||||
skipped_buildings_name.append(name)
|
||||
continue
|
||||
# adjust the names
|
||||
name = name.strip()
|
||||
if '(' in name:
|
||||
name = name[:name.index('(') - 1]
|
||||
if len(name) == 0:
|
||||
continue
|
||||
if line[1] == 'UG':
|
||||
nextLineHasToBeEg = True
|
||||
buildingNameForEg = name
|
||||
print 'continue 3333'
|
||||
continue
|
||||
nextLineHasToBeEg = False
|
||||
print 'Converting coordinates for building "%s"' % name
|
||||
names.append(name)
|
||||
x = float(line[2].replace(',', '.'))
|
||||
y = float(line[3].replace(',', '.'))
|
||||
z = float(line[4].replace(',', '.'))
|
||||
r = float(line[5].replace(',', '.'))
|
||||
path = os.path.join('../AhtcBuildings', 'buildings', '%s%s' % (file_prefix, name))
|
||||
if not os.path.exists(path):
|
||||
print "Can not find path " + path
|
||||
skipped_buildings_no_files.append(name)
|
||||
continue
|
||||
xml = os.path.join(path, '%s%s.flt.xml' % (file_prefix, name))
|
||||
vwm = os.path.join(path, '%s%s.flt.VWM_Building.xml' % (file_prefix, name))
|
||||
wls = os.path.join(path, '%s%s_wls_id.txt' % (file_prefix, name))
|
||||
if not os.path.exists(xml):
|
||||
skipped_buildings_xml.append(name)
|
||||
continue
|
||||
if not os.path.exists(vwm):
|
||||
skipped_buildings_vwm.append(name)
|
||||
continue
|
||||
|
||||
bldg_id = readBldgId(wls)
|
||||
|
||||
pos = convert(proj_from, proj_to, x, y)
|
||||
lat = float(pos[0]) / 180. * math.pi
|
||||
lon = float(pos[1]) / 180. * math.pi
|
||||
z = z + 30 # 30m offset
|
||||
#print lon, lat, pos[0], pos[1]
|
||||
|
||||
pos = '%.13f,%.13f,%.4f,%.4f' % (lat, lon, z, r);
|
||||
flt = '%s%s.flt.xml' % (file_prefix, name)
|
||||
vwm = '%s%s.flt.VWM_Building.xml' % (file_prefix, name)
|
||||
|
||||
print " --> write line '%s;%s;%s;%s\n'" % (flt, vwm, pos, bldg_id)
|
||||
|
||||
script_file.write('%s;%s;%s;%s\n' % (flt, vwm, pos, bldg_id));
|
||||
|
||||
|
||||
if len(skipped_buildings_no_files):
|
||||
print "Skipped due to missing files: " + ', '.join(skipped_buildings_no_files)
|
||||
if len(skipped_buildings_xml):
|
||||
print "Skipped due to missing xml: " + ', '.join(skipped_buildings_xml)
|
||||
if len(skipped_buildings_vwm):
|
||||
print "Skipped due to missing vwm: " + ', '.join(skipped_buildings_vwm)
|
||||
if len(skipped_buildings_name):
|
||||
print "Skipped due to duplicate names: " + ', '.join(skipped_buildings_name)
|
||||
|
||||
print "Created csv file " + script_file_name;
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
#xmlFile;vulnerabilityFile;position;externalWlsId
|
||||
bldg_BN_A2.flt.xml;bldg_BN_A2.flt.VWM_Building.xml;0.9147113772096,0.4197101048641,1.6200,21.0755;8010
|
||||
bldg_BN_A3a.flt.xml;bldg_BN_A3a.flt.VWM_Building.xml;0.9147138312044,0.4197109472377,1.7000,21.0755;8011
|
||||
bldg_BN_A3b.flt.xml;bldg_BN_A3b.flt.VWM_Building.xml;0.9147170821770,0.4197120678605,1.7000,21.0755;8012
|
||||
bldg_BN_A3c.flt.xml;bldg_BN_A3c.flt.VWM_Building.xml;0.9147203347195,0.4197131905138,1.8900,21.0755;8013
|
||||
bldg_BN_A4a.flt.xml;bldg_BN_A4a.flt.VWM_Building.xml;0.9147235860466,0.4197143115980,1.9800,21.0755;8014
|
||||
bldg_BN_A4b.flt.xml;bldg_BN_A4b.flt.VWM_Building.xml;0.9147268439186,0.4197154345092,1.9800,21.0755;8015
|
||||
bldg_BN_A4c.flt.xml;bldg_BN_A4c.flt.VWM_Building.xml;0.9147300947318,0.4197165551171,1.9200,21.0755;8016
|
||||
bldg_BN_A4d.flt.xml;bldg_BN_A4d.flt.VWM_Building.xml;0.9147333539517,0.4197176751707,1.8700,21.0763;8017
|
||||
bldg_BN_A5.flt.xml;bldg_BN_A5.flt.VWM_Building.xml;0.9147146173021,0.4197040661503,1.7300,21.0755;8018
|
||||
bldg_BN_A6a.flt.xml;bldg_BN_A6a.flt.VWM_Building.xml;0.9147208133264,0.4197063010666,1.8900,21.0755;8019
|
||||
bldg_BN_A6b.flt.xml;bldg_BN_A6b.flt.VWM_Building.xml;0.9147240923766,0.4197081700705,1.8900,21.0752;8020
|
||||
bldg_BN_A6c.flt.xml;bldg_BN_A6c.flt.VWM_Building.xml;0.9147279005983,0.4197087391137,1.8900,21.0755;8021
|
||||
bldg_BN_A7.flt.xml;bldg_BN_A7.flt.VWM_Building.xml;0.9147316654802,0.4197099438768,1.7200,21.0755;8022
|
||||
bldg_BN_B1.flt.xml;bldg_BN_B1.flt.VWM_Building.xml;0.9147786949309,0.4197143117758,1.7100,-158.9145;8023
|
||||
bldg_BN_B2.flt.xml;bldg_BN_B2.flt.VWM_Building.xml;0.9147734144771,0.4197132711118,1.6800,-143.8257;8024
|
||||
bldg_BN_B3.flt.xml;bldg_BN_B3.flt.VWM_Building.xml;0.9147692248433,0.4197116783518,1.7800,-158.9145;8025
|
||||
bldg_BN_B4.flt.xml;bldg_BN_B4.flt.VWM_Building.xml;0.9147659723726,0.4197086656993,1.5800,-158.9145;8026
|
||||
bldg_BN_B5.flt.xml;bldg_BN_B5.flt.VWM_Building.xml;0.9147499288075,0.4197048597006,1.8200,-158.8845;8027
|
||||
bldg_BN_B6.flt.xml;bldg_BN_B6.flt.VWM_Building.xml;0.9147431972809,0.4197020269302,1.9100,-158.9150;8028
|
||||
bldg_BN_B7.flt.xml;bldg_BN_B7.flt.VWM_Building.xml;0.9147356227225,0.4197001024940,1.8900,-158.9150;8029
|
||||
bldg_BN_B8.flt.xml;bldg_BN_B8.flt.VWM_Building.xml;0.9147295368809,0.4196980086036,1.7500,-158.9150;8030
|
||||
bldg_BN_B9a.flt.xml;bldg_BN_B9a.flt.VWM_Building.xml;0.9147690274209,0.4197043790486,1.7300,-158.6570;8031
|
||||
bldg_BN_B9b.flt.xml;bldg_BN_B9b.flt.VWM_Building.xml;0.9147719028917,0.4197045269901,1.7300,-158.6570;8032
|
||||
bldg_BN_B9c.flt.xml;bldg_BN_B9c.flt.VWM_Building.xml;0.9147738593115,0.4197060235678,1.6800,-159.1210;8033
|
||||
bldg_BN_B9d.flt.xml;bldg_BN_B9d.flt.VWM_Building.xml;0.9147764034840,0.4197060714848,1.6800,-159.1210;8034
|
||||
bldg_BN_B9e.flt.xml;bldg_BN_B9e.flt.VWM_Building.xml;0.9147783523892,0.4197075867263,1.7000,-158.9423;8035
|
||||
bldg_BN_B9f.flt.xml;bldg_BN_B9f.flt.VWM_Building.xml;0.9147812216931,0.4197077353450,1.7000,-158.9423;8036
|
||||
bldg_BN_B9g.flt.xml;bldg_BN_B9g.flt.VWM_Building.xml;0.9147789833193,0.4197095188746,1.7000,21.1400;8037
|
||||
bldg_BN_B9h.flt.xml;bldg_BN_B9h.flt.VWM_Building.xml;0.9147764336964,0.4197094751083,1.7000,21.1400;8038
|
||||
bldg_BN_B9i.flt.xml;bldg_BN_B9i.flt.VWM_Building.xml;0.9147744839982,0.4197079658619,1.6800,21.1400;8039
|
||||
bldg_BN_B9j.flt.xml;bldg_BN_B9j.flt.VWM_Building.xml;0.9147716103038,0.4197078081352,1.6800,21.1400;8040
|
||||
bldg_BN_B9k.flt.xml;bldg_BN_B9k.flt.VWM_Building.xml;0.9147623828596,0.4197038032883,1.8800,21.2000;8041
|
||||
bldg_BN_B9l.flt.xml;bldg_BN_B9l.flt.VWM_Building.xml;0.9147604582101,0.4197031393777,1.8800,21.2000;8042
|
||||
bldg_BN_B9m.flt.xml;bldg_BN_B9m.flt.VWM_Building.xml;0.9147575576783,0.4197021433978,1.9700,21.1400;8043
|
||||
bldg_BN_B9n.flt.xml;bldg_BN_B9n.flt.VWM_Building.xml;0.9147546926977,0.4197019970776,1.9700,21.1400;8044
|
||||
bldg_BN_B9o.flt.xml;bldg_BN_B9o.flt.VWM_Building.xml;0.9147569289142,0.4197002191041,1.9700,-159.1160;8066
|
||||
bldg_BN_B9p.flt.xml;bldg_BN_B9p.flt.VWM_Building.xml;0.9147598019442,0.4197003640868,1.9700,-159.1160;8045
|
||||
bldg_BN_B9q.flt.xml;bldg_BN_B9q.flt.VWM_Building.xml;0.9147620466931,0.4197011399115,1.8800,-159.1160;8046
|
||||
bldg_BN_B9r.flt.xml;bldg_BN_B9r.flt.VWM_Building.xml;0.9147639944270,0.4197026591467,1.8800,-159.1160;8047
|
||||
bldg_BN_B10a.flt.xml;bldg_BN_B10a.flt.VWM_Building.xml;0.9147496027980,0.4197016797716,2.0300,-68.9145;8048
|
||||
bldg_BN_B10b.flt.xml;bldg_BN_B10b.flt.VWM_Building.xml;0.9147487193908,0.4196980321510,2.0300,111.0855;8049
|
||||
bldg_BN_B10c.flt.xml;bldg_BN_B10c.flt.VWM_Building.xml;0.9147444329444,0.4196965593959,1.7900,-68.9145;8050
|
||||
bldg_BN_B10d.flt.xml;bldg_BN_B10d.flt.VWM_Building.xml;0.9147435154820,0.4196988085945,1.8900,-68.9145;8051
|
||||
bldg_BN_B10e.flt.xml;bldg_BN_B10e.flt.VWM_Building.xml;0.9147423586933,0.4196958366437,1.8800,111.0855;8052
|
||||
bldg_BN_B10f.flt.xml;bldg_BN_B10f.flt.VWM_Building.xml;0.9147432732626,0.4196935896786,1.7800,111.0855;8053
|
||||
bldg_BN_B10g.flt.xml;bldg_BN_B10g.flt.VWM_Building.xml;0.9147383789098,0.4196937008235,1.7000,-68.9145;8054
|
||||
bldg_BN_B10h.flt.xml;bldg_BN_B10h.flt.VWM_Building.xml;0.9147369089067,0.4196973094552,1.7000,-68.9468;8055
|
||||
bldg_BN_B10i.flt.xml;bldg_BN_B10i.flt.VWM_Building.xml;0.9147357436229,0.4196943445142,1.7100,111.0730;8056
|
||||
bldg_BN_B10j.flt.xml;bldg_BN_B10j.flt.VWM_Building.xml;0.9147372142971,0.4196907344584,1.7100,110.9640;8057
|
||||
bldg_BN_B10k.flt.xml;bldg_BN_B10k.flt.VWM_Building.xml;0.9147320534288,0.4196915221457,1.7800,-68.9020;8058
|
||||
bldg_BN_B10l.flt.xml;bldg_BN_B10l.flt.VWM_Building.xml;0.9147305787643,0.4196951290835,1.7800,-68.9145;8059
|
||||
bldg_BN_B10m.flt.xml;bldg_BN_B10m.flt.VWM_Building.xml;0.9147294170507,0.4196921601663,1.7800,111.0855;8060
|
||||
bldg_BN_B10n.flt.xml;bldg_BN_B10n.flt.VWM_Building.xml;0.9147308863921,0.4196885529628,1.7800,111.0545;8061
|
||||
bldg_BN_B11a.flt.xml;bldg_BN_B11a.flt.VWM_Building.xml;0.9147675998146,0.4197072782168,1.9700,21.1400;8062
|
||||
bldg_BN_B11b.flt.xml;bldg_BN_B11b.flt.VWM_Building.xml;0.9147665237541,0.4197021347707,1.8300,-68.6570;8063
|
||||
bldg_BN_B11c.flt.xml;bldg_BN_B11c.flt.VWM_Building.xml;0.9147477596189,0.4196963318756,1.9400,111.0855;8064
|
||||
bldg_BN_B11d.flt.xml;bldg_BN_B11d.flt.VWM_Building.xml;0.9147525359761,0.4196979074406,2.1300,21.0855;8065
|
||||
|
+76
@@ -0,0 +1,76 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$#" -ne 3 ]; then
|
||||
echo "Please pass: <VERSION>, <location>, <absPathTo_import_<location>.csv> like '1234.54123 <ba0|ba1|ba2|ba3|ba4|salchau> /shd/...../import_ba0.csv'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
version=$1
|
||||
location=$2
|
||||
import_csv=$3
|
||||
outdir_rel=${location}_buildings_buildingviewer-${version}
|
||||
tmpdir=/tmp
|
||||
outdir=${tmpdir}/${outdir_rel}
|
||||
outdir_ive=${outdir}/StaticMeshes
|
||||
outdir_txt=${outdir}/texture
|
||||
|
||||
rm -rf ${outdir}
|
||||
|
||||
echo "Attn: must be called in directory with building subdirs!"
|
||||
|
||||
if [ ! -e ${outdir_ive} ]; then
|
||||
mkdir -p ${outdir_ive}
|
||||
fi
|
||||
if [ ! -e ${outdir_txt} ]; then
|
||||
mkdir -p ${outdir_txt}
|
||||
fi
|
||||
|
||||
# remove old directory
|
||||
rm -r $outdir_txt
|
||||
# copy texture directory for conversion
|
||||
cp -r texture ${outdir_txt}
|
||||
# copy all files in texture to upper case (windows...)
|
||||
for f in `ls -1 ${outdir_txt}`; do
|
||||
f_upper="${f^^}"
|
||||
f_lower="${f,,}"
|
||||
if [ "${f}x" != "${f_upper}x" ]; then
|
||||
cp ${outdir_txt}/$f ${outdir_txt}/$f_upper
|
||||
fi
|
||||
if [ "${f}x" != "${f_lower}x" ]; then
|
||||
cp ${outdir_txt}/$f ${outdir_txt}/$f_lower
|
||||
fi
|
||||
done
|
||||
|
||||
dirs=`find . -maxdepth 1 -type d | sort -n`
|
||||
pwd=`pwd`
|
||||
cd $outdir_ive
|
||||
infile=${import_csv}
|
||||
if [ ! -e ${infile} ]; then
|
||||
echo "Can not find import file ${infile}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for d in `cat ${infile} | cut -d ';' -f 1 | cut -d '.' -f 1`; do
|
||||
d=`basename $d`
|
||||
srcdir=${pwd}/${d}
|
||||
# nur fertig, wenn .flt und .flt.xml vorhanden sind
|
||||
if [ -e ${srcdir}/${d}.flt ] && [ -e ${srcdir}/${d}.flt.xml ]; then
|
||||
echo "converting $srcdir ..."
|
||||
osgconv --compressed ${srcdir}/${d}.flt ${outdir_ive}/${d}.flt.ive -O "compressed"
|
||||
cp ${srcdir}/$d.*.xml ${outdir_ive}/
|
||||
echo "... finished"
|
||||
fi
|
||||
done
|
||||
rm -r $outdir_txt
|
||||
|
||||
cp ${infile} ${outdir_ive}
|
||||
cd ${tmpdir}
|
||||
tar cvzf ~/rpmbuild/SOURCES/${location}_buildings_buildingviewer-${version}.tar.gz ${outdir_rel}
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 2
|
||||
fi
|
||||
rm -rf ${outdir_rel}
|
||||
cd ${pwd}
|
||||
|
||||
echo "Now you can run rpmbuild -bb --target=noarch ${location}_buildings_buildingviewer.spec"
|
||||
|
||||
+363
@@ -0,0 +1,363 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# @RDE_HEADER@
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
#
|
||||
|
||||
env
|
||||
|
||||
file_location=`pwd`
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
|
||||
###
|
||||
### Presets
|
||||
###
|
||||
PROJECT="AHTC"
|
||||
xlsxfile=AHTC_Transformationspunkte_190114_UTM_fuer_FME
|
||||
SPD_BLDGS=../AhtcBuildings/buildings
|
||||
LOCATIONS_LIST="ahtc"
|
||||
loc="ahtc"
|
||||
|
||||
echo "Comment: remove some temporary files... revert some other..."
|
||||
rm -v block*.csv
|
||||
rm -v ./import_ahtc.csv
|
||||
rm -v ./${xlsxfile}*
|
||||
rm -v vwm_adjustment*.log
|
||||
rm -v checkProtective*.log
|
||||
rm -v checkDuplicateNames*.log
|
||||
|
||||
###
|
||||
### revert *.spec
|
||||
###
|
||||
svn revert *.spec
|
||||
|
||||
###
|
||||
### check-out / revert bldgs
|
||||
###
|
||||
echo "Comment: revert bldgs: $SPD_BLDGS ..."
|
||||
## rm -rfv $SPD_BLDGS/bldg_3145_47
|
||||
svn revert -R $SPD_BLDGS
|
||||
|
||||
###
|
||||
# remove uneeded: bldg_hierarchie.flt, directory bldg_EGCU_test
|
||||
###
|
||||
rm -v $SPD_BLDGS/bldg_hierarchie.flt
|
||||
rm -rfv $SPD_BLDGS/bldg_EGCU_test
|
||||
mv -v $SPD_BLDGS/bldg_3145-47 $SPD_BLDGS/bldg_3145_47
|
||||
find $SPD_BLDGS -iname "*egcu2room*" -delete
|
||||
find $SPD_BLDGS -iname "*.wrl" -delete
|
||||
find $SPD_BLDGS -iname "*.patch" -delete
|
||||
|
||||
###
|
||||
# fix syntax: bldg_3141_26.flt.VWM_Building.xml
|
||||
###
|
||||
BEFORE="<ExclusionZoneProtectiveFactor>20<\/OuterWallProtectiveFactor>"
|
||||
AFTER="<OuterWallProtectiveFactor>20<\/OuterWallProtectiveFactor>"
|
||||
#sed -i "s/${BEFORE}/${AFTER}/g" $SPD_BLDGS/bldg_3141_26/bldg_3141_26.flt.VWM_Building.xml
|
||||
# if [ $? -ne 0 ]; then echo "sed command failed" ; fi
|
||||
|
||||
# Fix bldg_3101 (16.787/16.786 ; remove linear dependencies (GUEZE-605, GUEZE-717 ; CheckAwesOnBldg_3101_verteilt.sh)
|
||||
#sed -i 's/16.787/16.786/g' $SPD_BLDGS/bldg_3101/bldg_3101.flt.xml
|
||||
#sed -i 's/16.787/16.786/g' $SPD_BLDGS/bldg_3101/bldg_3101.flt.VWM_Building.xml
|
||||
|
||||
|
||||
###
|
||||
### Apply some patches: early to be idenpendent from modifications by replace_transistion_factors etc.
|
||||
###
|
||||
# Do it here, because the final xml structure is avaible now (node.js converts to json and back to xml....)
|
||||
#
|
||||
# fix Bbox / placement of 4 roomnames at 3101: 102, 108, 109, 112
|
||||
#
|
||||
# diff -Naur ./bldg_3100/bldg_3100.flt.VWM_Building.xml ./bldg_3100/bldg_3100.flt.VWM_Building.xmlOKAY
|
||||
#
|
||||
|
||||
#cp -v ./patches/* $SPD_BLDGS
|
||||
# if [ $? -ne 0 ]; then echo "copy command (patches) failed" ; fi
|
||||
|
||||
#pushd $SPD_BLDGS
|
||||
# if [ $? -ne 0 ]; then echo "cd command failed" ; fi
|
||||
|
||||
#echo "Comment: cd building ; patching.."
|
||||
#echo "Comment: current wd is: " `pwd`
|
||||
#dos2unix ./bldg_3101/bldg_3101.flt.xml
|
||||
#cp ./bldg_3101/bldg_3101.flt.xml ./bldg_3101/bldg_3101.flt.xml_bak
|
||||
#patch -p1 < patch_bldg_3101.flt.xml.patch
|
||||
# if [ $? -ne 0 ]; then echo "patch (patch_bldg_3101.flt.xml.patch) failed" ; exit ; fi
|
||||
|
||||
# popd
|
||||
|
||||
|
||||
###
|
||||
### check ProtectiveFactor according VEMAG
|
||||
###
|
||||
# Wall -> 200
|
||||
# Ceiling -> 200
|
||||
# ExclusiveDoor -> 20
|
||||
# ExclusiveWindow -> 0
|
||||
#
|
||||
echo "Comment: checkProtectiveFactors ..."
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
./checkProtective.sh > checkProtectiveAhtc.log
|
||||
protectiveErrorCnt=`cat checkProtectiveAhtc.log | grep "failure" | wc -l`
|
||||
echo -e "Comment: Problems regarding wrong protectiveFactors at some files: cnt: $protectiveErrorCnt"
|
||||
|
||||
|
||||
###
|
||||
### xmllint
|
||||
###
|
||||
echo "Comment: verify xml using xmllint on $SPD_BLDGS ..."
|
||||
rm /tmp/xmllintDummyout.xml
|
||||
find $SPD_BLDGS -iname "*.xml" | xargs xmllint > /tmp/xmllintDummyout.xml
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "xmllint failed" ; exit
|
||||
else
|
||||
echo "xmllint successfull"
|
||||
fi
|
||||
|
||||
###
|
||||
### check duplicate names
|
||||
###
|
||||
echo "Comment: check duplicate names on $SPD_BLDGS ..."
|
||||
./checkDuplicateNames.sh $SPD_BLDGS > checkDuplicateNames.log
|
||||
checkDuplicateNamesCnt=`cat checkDuplicateNames.log | grep "flt" | wc -l`
|
||||
echo -e "Comment: Problems regarding duplicate Names at some files: cnt: $checkDuplicateNamesCnt"
|
||||
|
||||
|
||||
###
|
||||
### update _Transformationspunkte
|
||||
###
|
||||
####
|
||||
echo "Comment: update _Transformationspunkte......"
|
||||
cd $SPD_BLDGS/../_Transformationspunkte
|
||||
svn up --username thoden --password SPDsvnTH
|
||||
cd -
|
||||
####
|
||||
|
||||
###
|
||||
### Create VERSION_STR (containing a) rev of SPD and b) of this scripts)
|
||||
###
|
||||
# result will look like '4573.53084'
|
||||
#
|
||||
echo "Comment: create VERSION_STR..."
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
# get last mod rev and remove whitespace
|
||||
VERSION_POST_PROC=`svn info . | grep -E 'Letzte ge|Last Changed Rev' | awk -F ':' '{print $2 }'`
|
||||
VERSION_POST_PROC=`echo $VERSION_POST_PROC | sed -e 's/[[:space:]]*$//'`
|
||||
echo "VERSION_POST_PROC = '$VERSION_POST_PROC'"
|
||||
#####TODO##### if [ -z "$VERSION_POST_PROC" ] ; then echo "VERSION_POST_PROC could not be determined" ; exit; fi
|
||||
|
||||
# get lst mod rev and remove whitespace
|
||||
VERSION1=`svn info $SPD_BLDGS | grep -E 'Letzte ge|Last Changed Rev' | awk -F ':' '{print $2 }'`
|
||||
VERSION1=`echo $VERSION1 | sed -e 's/[[:space:]]*$//'`
|
||||
echo "VERSION1 = '$VERSION1'"
|
||||
if [ -z "$VERSION1" ] ; then echo "VERSION1 could not be determined" ; exit; fi
|
||||
|
||||
VERSION2=`svn info $SPD_BLDGS/../_Transformationspunkte | grep -E 'Letzte ge|Last Changed Rev' | awk -F ':' '{print $2 }'`
|
||||
VERSION2=`echo $VERSION2 | sed -e 's/[[:space:]]*$//'`
|
||||
echo "VERSION2 = '$VERSION2'"
|
||||
if [ -z "$VERSION2" ] ; then echo "VERSION2 could not be determined" ; exit; fi
|
||||
|
||||
if (( $VERSION1 > $VERSION2 )); then
|
||||
VERSION_SPD_BLDGS=$VERSION1;
|
||||
else
|
||||
VERSION_SPD_BLDGS=$VERSION2;
|
||||
fi
|
||||
#####TODO##### if [ -z "$VERSION_POST_PROC" ] ; then echo "VERSION_SPD_BLDGS could not be determined" ; exit; fi
|
||||
|
||||
# Please do not add strings to VERSION_STR. rpm -Uhv will have problem with it....
|
||||
echo "VERSION_SPD_BLDGS = '$VERSION_SPD_BLDGS'"
|
||||
#####TODO##### echo "VERSION_POST_PROC = '$VERSION_POST_PROC'"
|
||||
VERSION_STR="${VERSION_SPD_BLDGS}.${VERSION_POST_PROC}"
|
||||
echo "VERSION_STR = '$VERSION_STR'"
|
||||
|
||||
|
||||
|
||||
###
|
||||
### vwm_adjustment
|
||||
###
|
||||
# NodeJS:
|
||||
# multiple dirs: 1st for jenkins, 2nd for CTCAP15/Norbert
|
||||
export NODE_PATH='/usr/lib/node_modules:../node_modules'
|
||||
echo "Comment: NODE_PATH=" $NODE_PATH
|
||||
echo "Comment: vwm_adjustment at dir $SPD_BLDGS"
|
||||
node ./vwm_adjustment/RECURSIV/pos_dir_guez.js $SPD_BLDGS &> vwm_adjustmentAhtc.log
|
||||
|
||||
if [ $? -ne 0 ];
|
||||
then echo " node vwm_adjustment failed" ; tail -n200 vwm_adjustmentAhtc.log;
|
||||
exit
|
||||
else
|
||||
echo " node vwm_adjustment finished";
|
||||
fi
|
||||
|
||||
# Renoir-repos has xml files without svn:eol-style.
|
||||
# So 'svn co' on unix will create files with CR+LF (Windows EOL)
|
||||
# To ensure usefull 'svn diff' showing only the real differences, convert to CR+LF:
|
||||
# execute unix2dos on all files adjusted (vwm_adjustment)
|
||||
echo "Comment: unix2dos (quiet)"
|
||||
find $FILE -name "*flt.xml" | xargs unix2dos -q
|
||||
find $FILE -name "*VWM_Building.xml" | xargs unix2dos -q
|
||||
|
||||
|
||||
# for debug:
|
||||
# svn st ../GuezBuildings/buildings/bldg_0910/
|
||||
# svn diff ../GuezBuildings/buildings/bldg_0910/
|
||||
# svn diff ../GuezBuildings/buildings/bldg_0910/bldg_0910.flt.xml
|
||||
|
||||
|
||||
### seperate sheets:
|
||||
# xlsx to xls
|
||||
### FILE=$SPD_BLDGS/../_Transformationspunkte/${xlsxfile}.xlsx
|
||||
### if [ ! -f "$FILE" ]; then echo "$FILE does not exist." ; exit; fi
|
||||
### cp -v $FILE .
|
||||
### if [ $? -ne 0 ]; then echo "copy command failed" ; fi
|
||||
|
||||
### FILE=./${xlsxfile}.xlsx
|
||||
### if [ ! -f "$FILE" ]; then echo "$FILE does not exist." ; exit; fi
|
||||
### soffice --headless --convert-to SOFFICE_CONVERTED.xls $FILE
|
||||
#-> GUEZ_BWDLZ_BA-0_BA-IV_Transformationspunkte_201210.SOFFICE_CONVERTED.xls
|
||||
### if [ $? -ne 0 ]; then echo "soffice command failed" ; fi
|
||||
|
||||
|
||||
### # xls to csv
|
||||
### echo "Comment: xlsx to xls..."
|
||||
### xlsfile=${xlsxfile}.SOFFICE_CONVERTED.xls
|
||||
|
||||
|
||||
### echo "Comment: xls to single csv files..."
|
||||
### xls2csv -x ${xlsfile} -n1 -c block_a.csv
|
||||
### xls2csv -x ${xlsfile} -n2 -c block_b.csv
|
||||
### xls2csv -x ${xlsfile} -n3 -c block_c.csv
|
||||
### xls2csv -x ${xlsfile} -n4 -c block_d.csv
|
||||
### xls2csv -x ${xlsfile} -n5 -c block_e.csv
|
||||
### xls2csv -x ${xlsfile} -n6 -c block_f.csv
|
||||
### xls2csv -x ${xlsfile} -n7 -c block_g.csv
|
||||
### xls2csv -x ${xlsfile} -n8 -c block_h.csv
|
||||
### xls2csv -x ${xlsfile} -n9 -c block_i.csv
|
||||
### xls2csv -x ${xlsfile} -n10 -c block_cts.csv
|
||||
|
||||
#####TODO#####
|
||||
|
||||
# sort
|
||||
### for loc in ${LOCATIONS_LIST}
|
||||
### do
|
||||
### cat block_${loc}.csv | sort > temp.txt
|
||||
### mv temp.txt block_${loc}.csv
|
||||
### done
|
||||
### rm temp.txt
|
||||
|
||||
# replace some strings
|
||||
# like BN_Kan -> BN_Kanaele and so on
|
||||
#sed -i 's/BN_Kan/BN_Kanaele/g' GUEZ_BWDLZ_salchau.csv
|
||||
# if [ $? -ne 0 ]; then echo "sed command failed" ; fi
|
||||
|
||||
###
|
||||
### convert_coordinate.py
|
||||
###
|
||||
#echo "Comment: convert_coordinates.py angles"
|
||||
#echo "Comment: current wd is: " `pwd`
|
||||
# FILE=./convert_coordinates.py
|
||||
# if [ ! -f "$FILE" ]; then echo "$FILE does not exist." ; exit; fi
|
||||
|
||||
###
|
||||
### convert_coordinate.py has problem with BN_B4,B5 and some more.
|
||||
### -> Use import_ahtc_instrumented.csv
|
||||
###
|
||||
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
|
||||
cp ./import_ahtc_instrumented.csv ./import_ahtc.csv
|
||||
|
||||
|
||||
|
||||
|
||||
#####TODO#####for loc in ${LOCATIONS_LIST}
|
||||
#####TODO#####do
|
||||
#####TODO##### csv_cnt=`cat import_${loc}.csv | grep -v "^#" | wc -l`
|
||||
#####TODO##### python ./convert_coordinates.py GUEZ_BWDLZ_${loc}.csv ./import_${loc}.csv
|
||||
#####TODO##### cat GUEZ_BWDLZ_${loc}.csv | sort > temp.txt
|
||||
#####TODO##### mv temp.txt GUEZ_BWDLZ_{loc}.csv
|
||||
#####TODO#####done
|
||||
|
||||
### python ./convert_coordinates.py
|
||||
|
||||
|
||||
###
|
||||
### Copy some files to $SPD_BLDGS
|
||||
###
|
||||
echo "Comment: cd building ; osgconv.sh"
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
cp -v ./osgconv.sh $SPD_BLDGS
|
||||
if [ $? -ne 0 ]; then echo "copy command (osgconv.sh) failed" ; fi
|
||||
|
||||
pushd $SPD_BLDGS
|
||||
if [ $? -ne 0 ]; then echo "cd command failed" ; fi
|
||||
|
||||
./osgconv.sh $VERSION_STR ahtc ${file_location}/import_ahtc.csv
|
||||
|
||||
|
||||
# back to location of this file :-)
|
||||
popd
|
||||
|
||||
echo "Comment: rpmbuild..."
|
||||
echo "Comment: current wd is: " `pwd`
|
||||
|
||||
###
|
||||
### Prepare spec files:
|
||||
###
|
||||
echo "Comment: replace some vars at *.spec"
|
||||
|
||||
echo "VERSION_STR = '$VERSION_STR'"
|
||||
sed -i "s/@VERSION@/$VERSION_STR/g" ahtc_buildings_buildingviewer.spec
|
||||
if [ $? -ne 0 ]; then echo "sed command failed" ; fi
|
||||
|
||||
|
||||
|
||||
###
|
||||
### JENKINS:
|
||||
###
|
||||
if [ -z "$BUILD_TAG" ] ; then echo "JENKINS BUILD_TAG not defined, set to '-'" ; BUILD_TAG="NoTag" ; fi
|
||||
if [ -z "$BUILD_NUMBER" ] ; then echo "JENKINS BUILD_NUMBER not defined, set to '0'" ; BUILD_NUMBER=0 ; fi
|
||||
JENKINS_BUILD_TAG="${BUILD_TAG}"
|
||||
echo "JENKINS_BUILD_TAG: ${JENKINS_BUILD_TAG}"
|
||||
sed -i "s/@JENKINS_BUILD_TAG@/${JENKINS_BUILD_TAG}/g" ahtc_buildings_buildingviewer.spec
|
||||
if [ $? -ne 0 ]; then echo "sed command JENKINS_BUILD_TAG failed" ; fi
|
||||
sed -i "s/@RELEASE@/${BUILD_NUMBER}/g" ahtc_buildings_buildingviewer.spec
|
||||
if [ $? -ne 0 ]; then echo "sed command RELEASE failed" ; fi
|
||||
|
||||
|
||||
rpmbuild -bb --target=noarch ahtc_buildings_buildingviewer.spec
|
||||
if [ $? -ne 0 ]; then echo "rpmbuild command failed for spec 'guez_buildings_${loc}_buildingviewer.spec'" ; fi
|
||||
|
||||
echo "rpmbuild... finished"
|
||||
|
||||
|
||||
csv_cnt_sum=0
|
||||
rpm_cnt_sum=0
|
||||
csv_cnt=`cat import_${loc}.csv | grep -v "^#" | wc -l`
|
||||
rpm_cnt=`rpm -ql ~/rpmbuild/RPMS/noarch/ahtc_buildings_buildingviewer-${VERSION_STR}-0.noarch.rpm | grep flt.xml | wc -l`
|
||||
echo -e "Comment: #bldgs: csv: $csv_cnt \t - rpm: $rpm_cnt \t at import_${loc}.csv"
|
||||
csv_cnt_sum=$(($csv_cnt_sum + $csv_cnt))
|
||||
rpm_cnt_sum=$(($rpm_cnt_sum + $rpm_cnt))
|
||||
|
||||
echo -e "Comment: #bldgs: csv: $csv_cnt_sum \t - rpm: $rpm_cnt_sum - Over all"
|
||||
|
||||
### echo "Comment: Problems of EGCU_CONF..."
|
||||
### grep "EGCU pro Etage" vwm_adjustment.log | sort -u
|
||||
### grep "EGCU pro Etage" vwm_adjustment.log | sort -u | wc -l
|
||||
|
||||
echo -e "Comment: Problems regarding wrong protectiveFactors at some files: cnt: $protectiveErrorCnt"
|
||||
echo -e "Comment: Problems regarding duplicate Names at some files: cnt: $checkDuplicateNamesCnt"
|
||||
|
||||
## JENKINS?
|
||||
if [ -z ${WORKSPACE} ]
|
||||
then
|
||||
echo "rpmbuild... move to - skipped"
|
||||
else
|
||||
echo "rpmbuild... move to "
|
||||
echo "VERSION_STR = '$VERSION_STR'"
|
||||
DST_DIR=${WORKSPACE}/rpms/
|
||||
mkdir ${DST_DIR}
|
||||
mv -v ~/rpmbuild/RPMS/noarch/guez_buildings*$VERSION_STR*.rpm ${DST_DIR}
|
||||
fi
|
||||
Vendored
Executable
+160
@@ -0,0 +1,160 @@
|
||||
// $Id$
|
||||
// $HeadURL$
|
||||
// $Author$
|
||||
// Created by Manfred Gronak, , 2021-04
|
||||
|
||||
var fs = require("fs");
|
||||
var path = require("path");
|
||||
var parser = require('xml2json');
|
||||
var util = require("util");
|
||||
|
||||
|
||||
var stableSort = (arr, compare) => arr
|
||||
.map((item, index) => ({
|
||||
item,
|
||||
index
|
||||
}))
|
||||
.sort((a, b) => compare(a.item, b.item) || a.index - b.index)
|
||||
.map(({
|
||||
item
|
||||
}) => item)
|
||||
|
||||
|
||||
|
||||
module.exports = function() {
|
||||
|
||||
this.EGCU_conf = function EGCU_conf(OriginalxmlFile) {
|
||||
|
||||
// console.log("EGCU_CONF: orgFile", OriginalxmlFile);
|
||||
|
||||
//OriginalxmlFile = ../GuezBuildings/buildings/bldg_1235/bldg_1235.flt.xml
|
||||
// dirname = ../GuezBuildings/buildings/bldg_1235
|
||||
// basename = bldg_1235
|
||||
// newname ../GuezBuildings/buildings/bldg_1235/bldg_1235.egcu.xml
|
||||
var dirname = path.dirname(OriginalxmlFile);
|
||||
var basename = path.basename(OriginalxmlFile, '.flt.xml');
|
||||
var newFileName = dirname + '/' + basename + '.egcu2room.xml';
|
||||
|
||||
|
||||
var content = fs.readFileSync(OriginalxmlFile);
|
||||
|
||||
var jsonFileInhalt = parser.toJson(content);
|
||||
var jsonContent = JSON.parse(jsonFileInhalt);
|
||||
|
||||
var numberOfBDI = 0;
|
||||
var BDI_Elements_Raw = [];
|
||||
|
||||
// convert object to array to enable forEach:
|
||||
if (!Array.isArray(jsonContent.STREIF.Header.Group.External_Reference)){
|
||||
jsonContent.STREIF.Header.Group.External_Reference = [jsonContent.STREIF.Header.Group.External_Reference]
|
||||
}
|
||||
|
||||
jsonContent.STREIF.Header.Group.External_Reference.forEach(Element => {
|
||||
|
||||
if (Element.Name.substring(0, 6) == 'BDI_P_') {
|
||||
BDI_Elements_Raw.push(Element);
|
||||
numberOfBDI = numberOfBDI + 1;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var BDI_Elements = stableSort(BDI_Elements_Raw, (a, b) => a.Coord.Z - b.Coord.Z);
|
||||
|
||||
|
||||
var Switch_Elements = [];
|
||||
|
||||
jsonContent.STREIF.Header.Group.Group.forEach(Group => {
|
||||
Switch_Elements.push(Group.Switch);
|
||||
});
|
||||
|
||||
var i;
|
||||
|
||||
var Rooms = [];
|
||||
|
||||
|
||||
for (i = 1; i < Object.keys(Switch_Elements).length; i++) {
|
||||
var j;
|
||||
if (util.isArray(Switch_Elements[i])) {
|
||||
// console.log(Object.keys(Switch_Elements[i]).length);
|
||||
for (j = 0; j < Object.keys(Switch_Elements[i]).length; j++) {
|
||||
Rooms.push(Switch_Elements[i][j]);
|
||||
}
|
||||
} else {
|
||||
Rooms.push(Switch_Elements[i]);
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Test auf mindestens EGCU in einer Etage... ");
|
||||
|
||||
// Test auf mindestens EGCU in einer Etage
|
||||
BDI_Elements.forEach(BDI => {
|
||||
var k = 0;
|
||||
BDI_Elements.forEach(BDI2 => {
|
||||
if (parseInt(BDI.Coord.Z) == parseInt(BDI2.Coord.Z))
|
||||
k = k + 1;
|
||||
});
|
||||
if (k > 1) {
|
||||
console.log("EGCU_CONF: mehr als eine EGCU pro Etage " + OriginalxmlFile + " -> " + k);
|
||||
// process.exit();
|
||||
}
|
||||
});
|
||||
|
||||
var EgcuToRooms = "<EgcusToRooms>\n";
|
||||
var z = 0;
|
||||
|
||||
BDI_Elements.forEach(BDI => {
|
||||
z = z + 1;
|
||||
EgcuToRooms = EgcuToRooms + " <Egcu>\n <Mountpoint>\n";
|
||||
EgcuToRooms = EgcuToRooms + " <Name>" + BDI.Name + "</Name>\n";
|
||||
EgcuToRooms = EgcuToRooms + " <SubId>" + BDI.SubId.ID + "</SubId>\n";
|
||||
EgcuToRooms = EgcuToRooms + " </Mountpoint>\n <Rooms>\n";
|
||||
|
||||
|
||||
Rooms.forEach(Room => {
|
||||
|
||||
console.log("Room === " + util.inspect(Room, { showHidden: false, depth: 3}));
|
||||
|
||||
if (Object.keys(BDI_Elements).length == 1) {
|
||||
if (typeof(Room) !== 'undefined') {
|
||||
EgcuToRooms = EgcuToRooms + " <Name>" + Room.Name + "</Name>\n";
|
||||
EgcuToRooms = EgcuToRooms + " <SubId>" + Room.SubId.ID + "</SubId>\n";
|
||||
}
|
||||
} else {
|
||||
|
||||
if (typeof(Room) !== 'undefined') {
|
||||
console.log("XXXX Room === " + util.inspect(Room, { showHidden: false, depth: 3}));
|
||||
console.log("XXXX BDI === " + util.inspect(BDI, { showHidden: false, depth: 3}));
|
||||
var difference = BDI.Coord.Z - Room.Group.BBox_Min.Z;
|
||||
if (parseInt(difference) == 0) {
|
||||
EgcuToRooms = EgcuToRooms + " <Name>" + Room.Name + "</Name>\n";
|
||||
EgcuToRooms = EgcuToRooms + " <SubId>" + Room.SubId.ID + "</SubId>\n";
|
||||
}
|
||||
if (numberOfBDI == z) {
|
||||
if (parseInt(difference) < 0) {
|
||||
EgcuToRooms = EgcuToRooms + " <Name>" + Room.Name + "</Name>\n";
|
||||
EgcuToRooms = EgcuToRooms + " <SubId>" + Room.SubId.ID + "</SubId>\n";
|
||||
}
|
||||
}
|
||||
} // if
|
||||
} // if
|
||||
});
|
||||
EgcuToRooms = EgcuToRooms + " </Rooms>\n </Egcu>\n"
|
||||
});
|
||||
|
||||
EgcuToRooms = EgcuToRooms + '</EgcusToRooms>\n';
|
||||
|
||||
|
||||
console.log(newFileName);
|
||||
// console.log(EgcuToRooms);
|
||||
|
||||
|
||||
fs.writeFileSync(newFileName, EgcuToRooms, function(err) {
|
||||
// If an error occurred, show it and return
|
||||
console.log("EgcuToRooms.xml geschrieben")
|
||||
if (err) return console.error(err);
|
||||
// Successfully wrote binary contents to the file!
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Vendored
Executable
+102
@@ -0,0 +1,102 @@
|
||||
// $Id$
|
||||
// $HeadURL$
|
||||
// $Author$
|
||||
// Created by Manfred Gronak, , 2021-03
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
// require ('./analyse_vmw_file.js')();
|
||||
require ('./replace_transistion_factors.js')();
|
||||
// require('./BSM_pos.js')();
|
||||
//require('./egcu_conf.js')();
|
||||
require('./vwmXmlToVrmlWrl.js')();
|
||||
|
||||
require('./simplify_polygons.js')();
|
||||
|
||||
var myArgs = process.argv.slice(2);
|
||||
|
||||
console.log('myArgs: ', myArgs);
|
||||
|
||||
|
||||
// const GUEZ_DIR = '/media/tbox/423F-1127/DATENGEBAEUDE_GUEZ';
|
||||
// const GUEZ_DIR = '/shd/CTC/TOOLS/GuezBuildings/buildingsXXXXX';
|
||||
|
||||
const GUEZ_DIR = myArgs[0];
|
||||
console.log('adjust file at directory: ', GUEZ_DIR);
|
||||
|
||||
/*****************************************************************************************/
|
||||
|
||||
|
||||
|
||||
fs.readdir(GUEZ_DIR, (err, files) => {
|
||||
|
||||
if (err) return console.error(err);
|
||||
|
||||
|
||||
|
||||
var DirNames = files.toString();
|
||||
|
||||
var DirNamesArray = DirNames.split(',');
|
||||
|
||||
DirNamesArray.forEach(DirName => {
|
||||
if (DirName.substring(0, 5) == 'bldg_') {
|
||||
console.log("Working at directory: " + DirName);
|
||||
|
||||
if ( (DirName == 'bldg_1141n') ||
|
||||
(DirName == 'bldg_1102_Treppen') )
|
||||
{
|
||||
console.log("Skip subdir '", DirName + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
fs.readdir(GUEZ_DIR + '/' + DirName, (err, subdir_files) => {
|
||||
if (err) return console.error(err);
|
||||
var SubDirNames = subdir_files.toString();
|
||||
var FileNamesArray = SubDirNames.split(',');
|
||||
|
||||
FileNamesArray.forEach(FileName => {
|
||||
|
||||
var FileNamePartArray = FileName.split('.');
|
||||
console.log("process file: ", FileNamePartArray);
|
||||
// if (FileNamePartArray[0] == 'bldg_1199' && FileNamePartArray[2] == 'VWM_Building' && FileNamePartArray[3] == 'xml' && FileNamePartArray.length == 4) {
|
||||
if (FileNamePartArray[2] == 'VWM_Building' && FileNamePartArray[3] == 'xml' && FileNamePartArray.length == 4) {
|
||||
|
||||
var File_Path = GUEZ_DIR + '/' + DirName + '/' + FileName;
|
||||
console.log("XXXXX1 File_Path: " + File_Path );
|
||||
simplify_polygons(File_Path); // Aktiviert wg. blgd_0910_Raum2201_Wall0 (8 vertex -> 4) - GUEZE-1004
|
||||
console.log("XXXXX2 File_Path: " + File_Path );
|
||||
replace_transistion_factors(File_Path);
|
||||
|
||||
// create wrl files (VRML). Usefull to find missing outerwalls:
|
||||
console.log("XXXXX3 File_Path: " + File_Path );
|
||||
VwmXmlToWrl(File_Path)
|
||||
} // end if
|
||||
|
||||
return; // For AHTC, BSM, EGCU do not exist
|
||||
|
||||
if (FileNamePartArray[1] == 'flt' && FileNamePartArray[2] == 'xml' && FileNamePartArray.length == 3) {
|
||||
var File_Path = GUEZ_DIR + '/' + DirName + '/' + FileName;
|
||||
console.log("XXXXX4 File_Path: " + File_Path );
|
||||
BSM_pos(File_Path);
|
||||
}
|
||||
|
||||
if (FileNamePartArray[1] == 'flt' && FileNamePartArray[2] == 'xml' && FileNamePartArray.length == 3) {
|
||||
var File_Path = GUEZ_DIR + '/' + DirName + '/' + FileName;
|
||||
console.log("XXXXX5 File_Path: " + File_Path );
|
||||
EGCU_conf(File_Path);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}); // readdir
|
||||
|
||||
|
||||
|
||||
} // end if
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
Vendored
Executable
+287
@@ -0,0 +1,287 @@
|
||||
// $Id$
|
||||
// $HeadURL$
|
||||
// $Author$
|
||||
// Created by Manfred Gronak, 2021-03
|
||||
const fs = require('fs');
|
||||
|
||||
var parser = require('xml2json');
|
||||
|
||||
var js2xmlparser = require('js2xmlparser');
|
||||
var format = require('xml-formatter');
|
||||
|
||||
var util = require('util');
|
||||
|
||||
/****************** Hier editieren **********************/
|
||||
// Das ist der Transistion Factor, der für alle vertikalen Transitionen eingetragen werden soll
|
||||
// Muss ausgetestet werden.
|
||||
var TransitionFactor_vertical = 0.15;
|
||||
var TransitionFactor_horizontal_min = 0.03; // former MG=0.1
|
||||
|
||||
var TransitionFactor_horizontal_min_limit = 0.03;
|
||||
|
||||
var BelowGroundBldgs = ['U_Bahn', 'xxx'];
|
||||
|
||||
/*****************************************************************************************/
|
||||
|
||||
module.exports = function() {
|
||||
|
||||
this.replace_transistion_factors = function replace_transistion_factors(xmlFile) {
|
||||
|
||||
const OriginalVWMFile = xmlFile;
|
||||
|
||||
var content = fs.readFileSync(OriginalVWMFile);
|
||||
|
||||
var jsonFileInhalt;
|
||||
var jsonContent;
|
||||
try {
|
||||
jsonFileInhalt = parser.toJson(content);
|
||||
jsonContent = JSON.parse(jsonFileInhalt);
|
||||
} catch (e) {
|
||||
console.log("Parsing error bei Datei " + OriginalVWMFile + " -> " + e.message); // Datei geschrieben
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var BuildingName = jsonContent.BuildingVulnerability.BuildingName;
|
||||
BuildingName = BuildingName.substring(5); // bldg_U_Bahn -> U_Bahn
|
||||
|
||||
if (BelowGroundBldgs.includes(BuildingName))
|
||||
{
|
||||
console.log("BuildingName '" + BuildingName + "' -> use special values (like TransistionFactors)");
|
||||
TransitionFactor_vertical = 0.129988;
|
||||
TransitionFactor_horizontal_min = 0.129999; // U-Bahn
|
||||
}
|
||||
|
||||
|
||||
|
||||
// try to save the comment generated by Structure Explorer to be re-inserted later
|
||||
var lines = content + '';
|
||||
lines = lines.split("\n");
|
||||
|
||||
var comment;
|
||||
if (lines[2].includes('HdrLastDate')) {
|
||||
comment = lines[2];
|
||||
|
||||
var idx = comment.lastIndexOf("-->");
|
||||
if (idx > 10)
|
||||
comment = [comment.slice(0, idx), "- PostProcessed by SLTE $Rev$", comment.slice(idx)].join('');
|
||||
}
|
||||
|
||||
|
||||
var i;
|
||||
var RoomId;
|
||||
var NeighborRoomRoomId;
|
||||
var index;
|
||||
|
||||
var RoomArray = jsonContent.BuildingVulnerability.Rooms.Room;
|
||||
if (RoomArray == null) {
|
||||
console.log("Datei " + OriginalVWMFile + ": " + " WARNING, no RoomArray detected");
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("Datei " + OriginalVWMFile + ": " + Object.keys(jsonContent.BuildingVulnerability.Rooms.Room).length + " Rooms detected");
|
||||
|
||||
if (Array.isArray(jsonContent.BuildingVulnerability.Rooms.Room)) {
|
||||
// console.log("1Array: ");
|
||||
} else {
|
||||
// No Array..
|
||||
// wrap obj into an array to ensure 'RoomArray.forEach(...'
|
||||
var dummy = new Array;
|
||||
dummy[0] = jsonContent.BuildingVulnerability.Rooms.Room;
|
||||
jsonContent.BuildingVulnerability.Rooms.Room = dummy;
|
||||
}
|
||||
|
||||
|
||||
// check number of floors:
|
||||
var maxfloor = -1;
|
||||
var roomsPerFloor = new Map;
|
||||
for (i = 0; i < Object.keys(jsonContent.BuildingVulnerability.Rooms.Room).length; i++) {
|
||||
console.log("RaumID " + jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId);
|
||||
|
||||
var floor = ~~(jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId - 2000);
|
||||
floor = ~~(floor / 100);
|
||||
console.log(" floor=" + floor);
|
||||
if (floor > maxfloor)
|
||||
maxfloor = floor;
|
||||
|
||||
var maxRoomNumber = jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId - 2000;
|
||||
maxRoomNumber = maxRoomNumber - (floor*100.0);
|
||||
console.log(" maxRoomNumber " + maxRoomNumber + " (" + jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId + ")");
|
||||
|
||||
|
||||
console.log(" roomsPerFloor " + ", Data:" + util.inspect(roomsPerFloor, {showHidden: false, depth: 2}));
|
||||
|
||||
console.log(" roomsPerFloor " + roomsPerFloor);
|
||||
if (!roomsPerFloor.has(floor))
|
||||
roomsPerFloor.set(floor, 0);
|
||||
|
||||
if (maxRoomNumber > roomsPerFloor.get(floor))
|
||||
{
|
||||
console.log(" update: maxRoomNumber=" + maxRoomNumber + " at floor " + floor);
|
||||
roomsPerFloor.set(floor, maxRoomNumber);
|
||||
}
|
||||
}
|
||||
|
||||
console.log("maxfloor " + maxfloor);
|
||||
|
||||
|
||||
var removeCandidates = new Array;
|
||||
|
||||
for (i = 0; i < Object.keys(jsonContent.BuildingVulnerability.Rooms.Room).length; i++) {
|
||||
// Reduzierung auf die Etage
|
||||
// console.log("RaumID" + jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId);
|
||||
|
||||
if (jsonContent.BuildingVulnerability.Rooms.Room[i] == null) {
|
||||
console.log("Missing RoomId at " + OriginalVWMFile);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
RoomId = ~~(jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId / 100);
|
||||
// console.log(RoomId);
|
||||
var j;
|
||||
// console.log(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms);
|
||||
// Test, ob ein Raum keine Nachbarraeume hat. Wenn dann entfernen
|
||||
if (!jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom) {
|
||||
|
||||
var roomToBeRemove = ~~(jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId - 2000);
|
||||
var roomFloor = ~~(roomToBeRemove / 100);
|
||||
|
||||
// Nur oberste Etage, nur wenn mehr als eine Etage:
|
||||
if (roomFloor == maxfloor && roomsPerFloor.size > 1) {
|
||||
console.log("Element RoomId " + jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId + " muesste entfernt werden at: " + OriginalVWMFile + " (maxfloor=" + maxfloor + ", rooms at previous floor:" + roomsPerFloor.get(maxfloor-1) + "m i=" + i +")");
|
||||
removeCandidates.push({'roomToBeRemovedCandidateIdx' : i, 'roomToBeRemovedCandidateRoomNumber' : jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId});
|
||||
// // delete jsonContent.BuildingVulnerability.Rooms.Room[i];
|
||||
} else
|
||||
console.log("Skip Element RoomId " + jsonContent.BuildingVulnerability.Rooms.Room[i].RoomId + " wird entfernt at: " + OriginalVWMFile + " (maxfloor=" + maxfloor + ")");
|
||||
|
||||
|
||||
} else {
|
||||
//console.log(Object.keys(jsonContent.BuildingVulnerability.Rooms.Room[0].NeighborRooms.NeighborRoom).length);
|
||||
|
||||
for (j = 0; j < Object.keys(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom).length; j++) {
|
||||
|
||||
// console.log(jsonContent.BuildingVulnerability.Rooms.Room[0].NeighborRooms.NeighborRoom.NeighborRoom.RoomId);
|
||||
// Test, ob Raeume in der gleiche Etage liegen. Wenn nicht dann Transistion Faktoren einschreiben
|
||||
// console.log(Object.keys(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom).length);
|
||||
if (Object.keys(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom).length == 1) {
|
||||
NeighborRoomId = ~~(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom.NeighborRoom.RoomId / 100);
|
||||
if (RoomId != NeighborRoomId)
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom.NeighborRoom.TransitionFactor = TransitionFactor_vertical;
|
||||
else {
|
||||
if (jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom.NeighborRoom.TransitionFactor <= TransitionFactor_horizontal_min)
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom.NeighborRoom.TransitionFactor = TransitionFactor_horizontal_min;
|
||||
}
|
||||
} else {
|
||||
|
||||
if (typeof jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j] !== 'undefined') {
|
||||
// console.log(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j].RoomId);
|
||||
NeighborRoomId = ~~(jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j].RoomId / 100);
|
||||
if (RoomId != NeighborRoomId)
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j].TransitionFactor = TransitionFactor_vertical;
|
||||
else {
|
||||
if (jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j].TransitionFactor <= TransitionFactor_horizontal_min)
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom[j].TransitionFactor = TransitionFactor_horizontal_min;
|
||||
}
|
||||
} else { // if undefined
|
||||
// console.log("NeighborRooms.NeighborRoom is undefined at: " + OriginalVWMFile);
|
||||
// relevant for bldg_salchau_tunnel.flt.VWM_Building.xml, bldg_BN_Kanaele and many more (78 files at this moment)
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[i].NeighborRooms.NeighborRoom.TransitionFactor = TransitionFactor_vertical;
|
||||
}
|
||||
} // if
|
||||
} // for
|
||||
}
|
||||
}
|
||||
|
||||
// check
|
||||
|
||||
if (Object.keys(removeCandidates).length > 0) {
|
||||
// how can we process 2 rooms at the roof ??? (like Guez bldg_2101)
|
||||
if (Object.keys(removeCandidates).length > 1) {
|
||||
console.log("ERROR at " + OriginalVWMFile + " : adding neighbor failed, more then one removeCandidates: size=" + Object.keys(removeCandidates).length);
|
||||
} else {
|
||||
|
||||
removeCandidates.forEach(item => {
|
||||
var roomToBeRemovedCandidateIdx = item.roomToBeRemovedCandidateIdx;
|
||||
var roomToBeRemovedCandidateRoomNumber = item.roomToBeRemovedCandidateRoomNumber;
|
||||
|
||||
if (roomToBeRemovedCandidateIdx > 0)
|
||||
{
|
||||
console.log("roomToBeRemovedCandidateIdx=" + roomToBeRemovedCandidateIdx + ", roomToBeRemovedCandidateRoomNumber=" + roomToBeRemovedCandidateRoomNumber);
|
||||
|
||||
// console.log("NeighborRooms " + util.inspect(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1], {showHidden: false, depth: 3}));
|
||||
// console.log("NeighborRooms " + Object.keys(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].NeighborRooms.NeighborRoom).length );
|
||||
|
||||
var lowerRoomId = jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].RoomId;
|
||||
|
||||
// add lower to topmost room:
|
||||
{
|
||||
// console.log("jsonContent11 " + util.inspect(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx], {showHidden: false, depth: 5}));
|
||||
|
||||
if (typeof jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx].NeighborRooms.NeighborRoom == 'undefined') {
|
||||
// expected:
|
||||
console.log(OriginalVWMFile + ", adding neighbor, part 1: lowerRoomId=" + lowerRoomId + " to topmost room=" + roomToBeRemovedCandidateRoomNumber );
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx].NeighborRooms['NeighborRoom'] = [ {"RoomId": lowerRoomId, "TransitionFactor": 0.99999} ];
|
||||
} else {
|
||||
console.log("ERROR at " + OriginalVWMFile + " : adding neighbor part 1");
|
||||
}
|
||||
// console.log("jsonContent22 " + util.inspect(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx], {showHidden: false, depth: 5}));
|
||||
}
|
||||
|
||||
// add topmost to lower:
|
||||
{
|
||||
// console.log("jsonContent33 " + util.inspect(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1], {showHidden: false, depth: 3}));
|
||||
|
||||
if (Array.isArray(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].NeighborRooms.NeighborRoom))
|
||||
{
|
||||
// expected:
|
||||
console.log(OriginalVWMFile + ", adding neighbor, part 2a: to lower room : " + jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].RoomId);
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].NeighborRooms.NeighborRoom.push({"RoomId": roomToBeRemovedCandidateRoomNumber, "TransitionFactor": 0.99999});
|
||||
} else {
|
||||
console.log(OriginalVWMFile + ", adding neighbor, part 2b: to lower room : " + jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].RoomId);
|
||||
jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1].NeighborRooms.NeighborRoom = [{"RoomId": roomToBeRemovedCandidateRoomNumber, "TransitionFactor": 0.99999}];
|
||||
}
|
||||
// console.log("jsonContent44 " + util.inspect(jsonContent.BuildingVulnerability.Rooms.Room[roomToBeRemovedCandidateIdx-1], {showHidden: false, depth: 3}));
|
||||
}
|
||||
|
||||
} // if
|
||||
}) // forEach
|
||||
} // if
|
||||
}// if
|
||||
|
||||
|
||||
|
||||
// delete jsonContent.BuildingVulnerability.Rooms.Room[index].NeighborRooms.NeighborRoom.NeighborRoom;
|
||||
// jsonContent.BuildingVulnerability.Rooms.Room[index].NeighborRooms.NeighborRoom["TransitionFactor"] = TransitionFactor_vertical;
|
||||
// jsonContent.BuildingVulnerability.Rooms.Room[index].NeighborRooms.NeighborRoom["RoomId"] = NeighborRoomRoomId;
|
||||
|
||||
|
||||
var Rooms = jsonContent.BuildingVulnerability;
|
||||
var ausgabe = js2xmlparser.parse("BuildingVulnerability", Rooms);
|
||||
|
||||
if (comment) {
|
||||
var idxOfLine = ausgabe.indexOf("<BuildingName>")
|
||||
// console.log("idxOfLine: " + idxOfLine);
|
||||
var ausgabe2 = [ausgabe.slice(0, idxOfLine), comment, ausgabe.slice(idxOfLine)].join('');
|
||||
ausgabe = ausgabe2;
|
||||
}
|
||||
|
||||
var formattedXml = format(ausgabe, {
|
||||
collapseContent: true,
|
||||
lineSeparator: '\n'
|
||||
});
|
||||
|
||||
|
||||
|
||||
fs.writeFileSync(OriginalVWMFile, formattedXml, function(err) {
|
||||
// If an error occurred, show it
|
||||
if (err) {
|
||||
console.log("Error on writing file: " + OriginalVWMFile);
|
||||
console.err(err);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************************************************/
|
||||
} // end exports
|
||||
Vendored
Executable
+356
@@ -0,0 +1,356 @@
|
||||
// $Id$
|
||||
// $HeadURL$
|
||||
// $Author$
|
||||
// Created by Norbert Thoden, 2021-12-22
|
||||
const fs = require('fs');
|
||||
|
||||
var parser = require('xml2json');
|
||||
|
||||
var js2xmlparser = require('js2xmlparser');
|
||||
var format = require('xml-formatter');
|
||||
|
||||
var util = require('util');
|
||||
|
||||
/****************** Hier editieren **********************/
|
||||
var BelowGroundBldgs = ['U_Bahn', 'xxx'];
|
||||
|
||||
var tolerance = 0.1;
|
||||
var highQuality = true;
|
||||
|
||||
|
||||
/*****************************************************************************************/
|
||||
|
||||
/*****************************************************************************************/
|
||||
/*****************************************************************************************/
|
||||
/*****************************************************************************************/
|
||||
/*
|
||||
* (c) 2013, Vladimir Agafonkin
|
||||
* Simplify.js, a high-performance JS polyline simplification library
|
||||
* mourner.github.io/simplify-js
|
||||
*/
|
||||
|
||||
// to suit your point format, run search/replace for '.x', '.y' and '.z';
|
||||
// (configurability would draw significant performance overhead)
|
||||
|
||||
// square distance between 2 points
|
||||
function getSquareDistance(p1, p2) {
|
||||
|
||||
var dx = p1.X - p2.X,
|
||||
dy = p1.Y - p2.Y,
|
||||
dz = p1.Z - p2.Z;
|
||||
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
|
||||
// square distance from a point to a segment
|
||||
function getSquareSegmentDistance(p, p1, p2) {
|
||||
|
||||
var x = p1.X,
|
||||
y = p1.Y,
|
||||
z = p1.Z,
|
||||
|
||||
dx = p2.X - x,
|
||||
dy = p2.Y - y,
|
||||
dz = p2.Z - z;
|
||||
|
||||
if (dx !== 0 || dy !== 0 || dz !== 0) {
|
||||
|
||||
var t = ((p.X - x) * dx + (p.Y - y) * dy + (p.Z - z) * dz) /
|
||||
(dx * dx + dy * dy + dz * dz);
|
||||
|
||||
if (t > 1) {
|
||||
x = p2.X;
|
||||
y = p2.Y;
|
||||
z = p2.Z;
|
||||
|
||||
} else if (t > 0) {
|
||||
x += dx * t;
|
||||
y += dy * t;
|
||||
z += dz * t;
|
||||
}
|
||||
}
|
||||
|
||||
dx = p.X - x;
|
||||
dy = p.Y - y;
|
||||
dz = p.Z - z;
|
||||
|
||||
return dx * dx + dy * dy + dz * dz;
|
||||
}
|
||||
// the rest of the code doesn't care for the point format
|
||||
|
||||
// basic distance-based simplification
|
||||
function simplifyRadialDistance(points, sqTolerance) {
|
||||
|
||||
var prevPoint = points[0],
|
||||
newPoints = [prevPoint],
|
||||
point;
|
||||
|
||||
for (var i = 1, len = points.length; i < len; i++) {
|
||||
point = points[i];
|
||||
|
||||
if (getSquareDistance(point, prevPoint) > sqTolerance) {
|
||||
newPoints.push(point);
|
||||
prevPoint = point;
|
||||
}
|
||||
}
|
||||
|
||||
if (prevPoint !== point) {
|
||||
newPoints.push(point);
|
||||
}
|
||||
|
||||
return newPoints;
|
||||
}
|
||||
|
||||
// simplification using optimized Douglas-Peucker algorithm with recursion elimination
|
||||
function simplifyDouglasPeucker(points, sqTolerance) {
|
||||
|
||||
var len = points.length,
|
||||
MarkerArray = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,
|
||||
markers = new MarkerArray(len),
|
||||
|
||||
first = 0,
|
||||
last = len - 1,
|
||||
|
||||
stack = [],
|
||||
newPoints = [],
|
||||
|
||||
i, maxSqDist, sqDist, index;
|
||||
|
||||
markers[first] = markers[last] = 1;
|
||||
|
||||
while (last) {
|
||||
|
||||
maxSqDist = 0;
|
||||
|
||||
for (i = first + 1; i < last; i++) {
|
||||
sqDist = getSquareSegmentDistance(points[i], points[first], points[last]);
|
||||
|
||||
if (sqDist > maxSqDist) {
|
||||
index = i;
|
||||
maxSqDist = sqDist;
|
||||
}
|
||||
}
|
||||
|
||||
if (maxSqDist > sqTolerance) {
|
||||
markers[index] = 1;
|
||||
stack.push(first, index, index, last);
|
||||
}
|
||||
|
||||
last = stack.pop();
|
||||
first = stack.pop();
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (markers[i]) {
|
||||
newPoints.push(points[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return newPoints;
|
||||
}
|
||||
|
||||
|
||||
function simplify(points, tolerance, highestQuality) {
|
||||
|
||||
var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;
|
||||
|
||||
points = highestQuality ? points : simplifyRadialDistance(points, sqTolerance);
|
||||
points = simplifyDouglasPeucker(points, sqTolerance);
|
||||
|
||||
return points;
|
||||
}
|
||||
/*****************************************************************************************/
|
||||
/*****************************************************************************************/
|
||||
/*****************************************************************************************/
|
||||
|
||||
|
||||
|
||||
module.exports = function() {
|
||||
|
||||
this.simplify_polygons = function simplify_polygons(xmlFile) {
|
||||
|
||||
const OriginalVWMFile = xmlFile;
|
||||
|
||||
var content = fs.readFileSync(OriginalVWMFile);
|
||||
|
||||
var jsonFileInhalt;
|
||||
var jsonContent;
|
||||
try {
|
||||
jsonFileInhalt = parser.toJson(content);
|
||||
jsonContent = JSON.parse(jsonFileInhalt);
|
||||
} catch (e) {
|
||||
console.log("Parsing error bei Datei " + OriginalVWMFile + " -> " + e.message); // Datei geschrieben
|
||||
return;
|
||||
}
|
||||
|
||||
var BuildingName = jsonContent.BuildingVulnerability.BuildingName;
|
||||
BuildingName = BuildingName.substring(5); // bldg_U_Bahn -> U_Bahn
|
||||
|
||||
var RoomArray = jsonContent.BuildingVulnerability.Rooms.Room;
|
||||
|
||||
if (RoomArray == null) {
|
||||
console.log("Datei " + OriginalVWMFile + ": " + " WARNING, no RoomArray detected");
|
||||
return;
|
||||
}
|
||||
if (!Array.isArray(RoomArray)){
|
||||
RoomArray = [RoomArray]
|
||||
}
|
||||
|
||||
console.log("Datei " + OriginalVWMFile + ": " + Object.keys(jsonContent.BuildingVulnerability.Rooms.Room).length + " Rooms detected");
|
||||
console.log("Datei " + OriginalVWMFile + ": " + RoomArray.length + " Rooms detected");
|
||||
|
||||
RoomArray.forEach(Room => {
|
||||
|
||||
// console.log("Bldg " + BuildingName + " - RoomId: " + Room.RoomId);
|
||||
|
||||
var OuterWallArray = Room.RoomOuterWalls.OuterWall;
|
||||
|
||||
//sometimes there are no walls: OuterWallArray is undefined
|
||||
if (!OuterWallArray)
|
||||
{
|
||||
console.log("Bldg " + BuildingName + " / room " + Room.RoomId + " has no walls") ;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Array.isArray(OuterWallArray)){
|
||||
OuterWallArray = [OuterWallArray]
|
||||
}
|
||||
|
||||
|
||||
if (!OuterWallArray)
|
||||
{
|
||||
console.log("Bldg " + BuildingName + " / room " + Room.RoomId + " has no walls") ;
|
||||
return;
|
||||
}
|
||||
|
||||
var wallIdx =-1;
|
||||
OuterWallArray.forEach(Outerwall => {
|
||||
wallIdx++;
|
||||
// console.log(" Outerwall " + "idx=" + wallIdx + " : " + util.inspect(Outerwall, {showHidden: false, depth: 3}));
|
||||
|
||||
//
|
||||
// Wall itself
|
||||
//
|
||||
|
||||
// console.log(" Outerwall: " + Outerwall.OuterWallAreaElement);
|
||||
var PolygonPoints = Outerwall.OuterWallAreaElement.PolygonPoint;
|
||||
|
||||
var polyLengthOrg = PolygonPoints.length;
|
||||
// console.log(" WALL PolygonPoints-Org= " + polyLengthOrg) ;
|
||||
// console.log(" WALL data=" + util.inspect(PolygonPoints, {showHidden: false, depth: 2}));
|
||||
PolygonPoints.forEach(PolygonPoint => {
|
||||
PolygonPoint.X = parseFloat(PolygonPoint.X);
|
||||
PolygonPoint.Y = parseFloat(PolygonPoint.Y);
|
||||
PolygonPoint.Z = parseFloat(PolygonPoint.Z);
|
||||
//console.log(" WALL Point= " + PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z) ;
|
||||
});
|
||||
|
||||
// There are some walls/rectangles with a very short side (~10cm). Most of them are correct.
|
||||
// Avoid them being modified to a triangle/line:
|
||||
if (PolygonPoints.length > 4)
|
||||
{
|
||||
PolygonPoints = simplify(PolygonPoints, tolerance, highQuality);
|
||||
var polyLengthNew = PolygonPoints.length;
|
||||
// console.log(" PolygonPoints-New= " + polyLengthNew) ;
|
||||
|
||||
if (polyLengthOrg != polyLengthNew)
|
||||
console.log(" WALL Bldg " + BuildingName + " / room " + Room.RoomId + " / wallIdx " + wallIdx + ": " + " Outerwall: length changes from " + polyLengthOrg + " to " + polyLengthNew);
|
||||
|
||||
// console.log(" data=" + util.inspect(PolygonPoints, {showHidden: false, depth: 2}));
|
||||
|
||||
// PolygonPoints.forEach(PolygonPoint => {
|
||||
// console.log(" Point= " + PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z) ;
|
||||
// });
|
||||
|
||||
// write simplified data back:
|
||||
Outerwall.OuterWallAreaElement.PolygonPoint = PolygonPoints;
|
||||
} else {
|
||||
console.log(" WALL Bldg " + BuildingName + " / room " + Room.RoomId + " / wallIdx " + wallIdx + ": Skip due to short length: " + polyLengthOrg);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// ExclusionZones bldg_1199 is complex and therefore good for verification
|
||||
//
|
||||
{
|
||||
// node: Outerwall has ExclusionZones:
|
||||
// console.log(" ---- ExclZone ExclusionZonesArray= " + util.inspect(Outerwall.ExclusionZones, {showHidden: false, depth: 4}));
|
||||
|
||||
var ExclusionZonesArray = Outerwall.ExclusionZones.ExclusionZone;
|
||||
if (!ExclusionZonesArray)
|
||||
return;
|
||||
|
||||
if (!Array.isArray(ExclusionZonesArray)) {
|
||||
ExclusionZonesArray = [ExclusionZonesArray]
|
||||
}
|
||||
|
||||
// console.log(" ExclZone ExclusionZonesArray.length= " + ExclusionZonesArray.length);
|
||||
|
||||
var EzIdx =-1;
|
||||
ExclusionZonesArray.forEach(ExclusionZone => {
|
||||
EzIdx++;
|
||||
|
||||
// console.log(" ExclZone ---- ExclusionZone " + "EzIdx=" + EzIdx + " : " + util.inspect(ExclusionZone, {showHidden: false, depth: 3}));
|
||||
|
||||
var ExclZonePolygonPoints = ExclusionZone.ExclusionZoneElement.PolygonPoint;
|
||||
var polyLengthOrg = ExclZonePolygonPoints.length;
|
||||
|
||||
// console.log(" ExclZone ExclZonePolygonPoints-Org=" + polyLengthOrg + " (Bldg " + BuildingName + " / room " + Room.RoomId + ")") ;
|
||||
// console.log(" ExclZone data=" + util.inspect(ExclZonePolygonPoints, {showHidden: false, depth: 2}));
|
||||
ExclZonePolygonPoints.forEach(PolygonPoint => {
|
||||
PolygonPoint.X = parseFloat(PolygonPoint.X);
|
||||
PolygonPoint.Y = parseFloat(PolygonPoint.Y);
|
||||
PolygonPoint.Z = parseFloat(PolygonPoint.Z);
|
||||
//console.log(" ExclZone Point= " + PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z) ;
|
||||
});
|
||||
|
||||
// Maybe in future there will be some ExclZone/rectangles with a very short side (~10cm)...
|
||||
// Avoid them being modified to a triangle/line:
|
||||
if (ExclZonePolygonPoints.length > 4)
|
||||
{
|
||||
ExclZonePolygonPoints = simplify(ExclZonePolygonPoints, tolerance, highQuality);
|
||||
var polyLengthNew = ExclZonePolygonPoints.length;
|
||||
// console.log(" ExclZone ExclZonePolygonPoints-New= " + polyLengthNew) ;
|
||||
|
||||
if (polyLengthOrg != polyLengthNew)
|
||||
console.log(" ExclZone Bldg " + BuildingName + " / room " + Room.RoomId + " / wallIdx " + wallIdx + " / EzIdx " + EzIdx + ": " + " ExclZone: length changes from " + polyLengthOrg + " to " + polyLengthNew) ;
|
||||
|
||||
// write simplified data back, part 1:
|
||||
ExclusionZone.ExclusionZoneElement.PolygonPoint = ExclZonePolygonPoints; //CHECK (e.g. bldg_1199)
|
||||
} else {
|
||||
console.log(" ExclZone Bldg " + BuildingName + " / room " + Room.RoomId + " / wallIdx " + wallIdx + " / EzIdx " + EzIdx + ": " + " Skip due to short length: " + polyLengthOrg) ;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// write simplified data back, part 2:
|
||||
Outerwall.ExclusionZones.ExclusionZone = ExclusionZonesArray //CHECK (e.g. bldg_1199)
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var Rooms = jsonContent.BuildingVulnerability;
|
||||
var ausgabe = js2xmlparser.parse("BuildingVulnerability", Rooms);
|
||||
|
||||
var formattedXml = format(ausgabe, {
|
||||
collapseContent: true,
|
||||
lineSeparator: '\n'
|
||||
});
|
||||
|
||||
|
||||
|
||||
fs.writeFileSync(OriginalVWMFile, formattedXml, function(err) {
|
||||
// If an error occurred, show it
|
||||
if (err) {
|
||||
console.log("Error on writing file: " + OriginalVWMFile);
|
||||
console.err(err);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************************************************/
|
||||
} // end exports
|
||||
Vendored
Executable
+122
@@ -0,0 +1,122 @@
|
||||
// $Id$
|
||||
// $HeadURL$
|
||||
// $Author$
|
||||
// Created by Manfred Gronak, , 2021-05
|
||||
|
||||
var fs = require("fs");
|
||||
var parser = require('xml2json');
|
||||
|
||||
module.exports = function() {
|
||||
|
||||
this.VwmXmlToWrl = function VwmXmlToWrl(OriginalxmlFile) {
|
||||
console.log(" VwmXmlToWrl: "+ OriginalxmlFile); // Datei geschrieben
|
||||
|
||||
// if (OriginalxmlFile.includes("bldg_1287.flt.VWM_Building.xml")) {
|
||||
// console.log(" Skip VwmXmlToWrl: "+ OriginalxmlFile); // Datei geschrieben
|
||||
// } else {
|
||||
// return;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
var coordIndex = "]\n}\ncoordIndex [ ";
|
||||
var counter = 0;
|
||||
|
||||
var wrl_filename = OriginalxmlFile + ".wrl";
|
||||
|
||||
var content = fs.readFileSync(OriginalxmlFile);
|
||||
var jsonFileInhalt = parser.toJson(content);
|
||||
var jsonContent = JSON.parse(jsonFileInhalt);
|
||||
var i;
|
||||
|
||||
var resultfile = "#VRML V2.0 utf8\nBackground {\nskyColor 0.2 0.3 0.1}\nTransform {\ntranslation -2.5 -2.5 -2.5\n"
|
||||
resultfile = resultfile + "children [\n Shape {\nappearance Appearance {\nmaterial Material {\n";
|
||||
resultfile = resultfile + "diffuseColor 1 0 1\n}\n}\ngeometry IndexedFaceSet {\nsolid FALSE\n";
|
||||
resultfile = resultfile + "coord Coordinate {\npoint [\n";
|
||||
|
||||
var RoomArray = jsonContent.BuildingVulnerability.Rooms.Room;
|
||||
if (RoomArray == null) {
|
||||
console.log("Datei " + OriginalxmlFile + ": " + " WARNING, no RoomArray detected");
|
||||
return;
|
||||
}
|
||||
|
||||
if (Array.isArray(RoomArray)) {
|
||||
// console.log("1Array: ");
|
||||
} else {
|
||||
// No Array..
|
||||
// wrap obj into an array to ensure 'RoomArray.forEach(...'
|
||||
var dummy = new Array;
|
||||
dummy[0] = RoomArray;
|
||||
RoomArray = dummy;
|
||||
}
|
||||
|
||||
|
||||
|
||||
RoomArray.forEach(Room => {
|
||||
|
||||
var OuterWallArray = Room.RoomOuterWalls.OuterWall;
|
||||
|
||||
if (Array.isArray(OuterWallArray)) {
|
||||
|
||||
OuterWallArray.forEach(Outerwall => {
|
||||
// console.log("Array: " + Outerwall.OuterWallAreaElement);
|
||||
var n = 0;
|
||||
var PolygonPoints = Outerwall.OuterWallAreaElement.PolygonPoint;
|
||||
|
||||
PolygonPoints.forEach(PolygonPoint => {
|
||||
// console.log(PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z) ;
|
||||
resultfile = resultfile + PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z + ",\n";
|
||||
|
||||
n = n + 1;
|
||||
counter = counter + 1;
|
||||
})
|
||||
|
||||
for (i = counter - n; i < counter; i++) {
|
||||
coordIndex = coordIndex + " " + i + ",";
|
||||
}
|
||||
coordIndex = coordIndex + " -1\n";
|
||||
});
|
||||
|
||||
} else {
|
||||
// console.log("NoArray: " + OuterWallArray);
|
||||
|
||||
if (OuterWallArray != undefined) {
|
||||
// RoomArray is object:
|
||||
// that means OuterWallArray could be used as (a single) Outerwall
|
||||
// console.log("OBJ" + OuterWallArray);
|
||||
|
||||
var n = 0;
|
||||
var PolygonPoints = OuterWallArray.OuterWallAreaElement.PolygonPoint;
|
||||
|
||||
PolygonPoints.forEach(PolygonPoint => {
|
||||
// console.log(PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z) ;
|
||||
resultfile = resultfile + PolygonPoint.X + " " + PolygonPoint.Y + " " + PolygonPoint.Z + ",\n";
|
||||
|
||||
n = n + 1;
|
||||
counter = counter + 1;
|
||||
})
|
||||
|
||||
for (i = counter - n; i < counter; i++) {
|
||||
coordIndex = coordIndex + " " + i + ",";
|
||||
}
|
||||
coordIndex = coordIndex + " -1\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
resultfile = resultfile + coordIndex;
|
||||
resultfile = resultfile + " ]\n}\n}\n]\n}\n";
|
||||
|
||||
fs.writeFileSync(wrl_filename, resultfile, function(err) {
|
||||
// If an error occurred, show it
|
||||
if(err)
|
||||
{
|
||||
console.log("Error on writing file: " + wrl_filename);
|
||||
console.err(err);
|
||||
}
|
||||
});
|
||||
|
||||
} // end of function
|
||||
} // export
|
||||
Reference in new issue
Block a user