diff --git a/app/properties.py b/app/properties.py index ef4b936..dd78bd4 100644 --- a/app/properties.py +++ b/app/properties.py @@ -23,6 +23,7 @@ import zlib import xmltodict import os import app.pylddlib as ldd +import pathlib property_blueprint = Blueprint('properties', __name__) @@ -206,16 +207,16 @@ def get(status="all"): return data -@property_blueprint.route('/view_model/', methods=['GET']) +@property_blueprint.route('/view_model//', methods=['GET']) @login_required -def view_model(id): +def view_model(id, lod): property_content_data = PropertyContent.query.filter(PropertyContent.id==id).all() # TODO: Restrict somehow formatted_data = [ { - "obj": url_for('properties.get_model', id=property_content_data[0].id, file_format='obj'), - "mtl": url_for('properties.get_model', id=property_content_data[0].id, file_format='mtl'), + "obj": url_for('properties.get_model', id=property_content_data[0].id, file_format='obj', lod=lod), + "mtl": url_for('properties.get_model', id=property_content_data[0].id, file_format='mtl', lod=lod), "lot": property_content_data[0].lot, "id": property_content_data[0].id, "pos": [{ @@ -232,7 +233,8 @@ def view_model(id): return render_template( 'ldd/ldd.html.j2', - content=formatted_data + content=formatted_data, + lod=lod ) property_center = { @@ -245,9 +247,9 @@ property_center = { } -@property_blueprint.route('/view_models/', methods=['GET']) +@property_blueprint.route('/view_models//', methods=['GET']) @login_required -def view_models(id): +def view_models(id, lod): property_content_data = PropertyContent.query.filter( PropertyContent.property_id==id ).order_by(PropertyContent.lot).all() @@ -273,8 +275,8 @@ def view_models(id): # add new lot consolidated_list.append( { - "obj": url_for('properties.get_model', id=property_content_data[item].id, file_format='obj'), - "mtl": url_for('properties.get_model', id=property_content_data[item].id, file_format='mtl'), + "obj": url_for('properties.get_model', id=property_content_data[item].id, file_format='obj', lod=lod), + "mtl": url_for('properties.get_model', id=property_content_data[item].id, file_format='mtl', lod=lod), "lot": property_content_data[item].lot, "id": property_content_data[item].id, "pos": [{ @@ -293,18 +295,20 @@ def view_models(id): 'ldd/ldd.html.j2', property_data=property_data, content=consolidated_list, - center=property_center[property_data.zone_id] + center=property_center[property_data.zone_id], + lod=lod ) -@property_blueprint.route('/get_model//', methods=['GET']) +@property_blueprint.route('/get_model///', methods=['GET']) @login_required -def get_model(id, file_format): +def get_model(id, file_format, lod): content = PropertyContent.query.filter(PropertyContent.id==id).first() - + if not(0 <= int(lod) <= 2): + abort(404) if content.lot == 14: # ugc model response = ugc(content)[0] else: # prebuild model - response = prebuilt(content, file_format)[0] + response = prebuilt(content, file_format, lod)[0] response.headers.set('Content-Type', 'text/xml') return response @@ -337,7 +341,7 @@ def ugc(content): return response, ugc_data.filename -def prebuilt(content, file_format): +def prebuilt(content, file_format, lod): # translate LOT to component id # we need to get a type of 2 because reasons render_component_id = query_cdclient( @@ -357,7 +361,7 @@ def prebuilt(content, file_format): return f"No filename for LOT {content.lot}" if file_format == "lxfml": - lxfml = f'app/luclient/res/BrickModels/{filename.split(".")[0]}.lxfml' + lxfml = pathilob.Path(f'app/luclient/res/BrickModels/{filename.split(".")[0]}.lxfml') with open(lxfml, 'r') as file: lxfml_data = file.read() # print(lxfml_data) @@ -365,7 +369,7 @@ def prebuilt(content, file_format): elif file_format in ["obj", "mtl"]: - cache = f"app/cache/{filename}.{file_format}" + cache = f"app/cache/BrickModels/{filename}.lod{lod}.{file_format}" if not os.path.exists(cache): lxfml = f'app/luclient/res/BrickModels/{filename.split(".")[0]}.lxfml' diff --git a/app/templates/ldd/ldd.html.j2 b/app/templates/ldd/ldd.html.j2 index 7dd506d..7fde421 100644 --- a/app/templates/ldd/ldd.html.j2 +++ b/app/templates/ldd/ldd.html.j2 @@ -467,16 +467,16 @@ constructor(designID, database){ this.designID = designID this.Parts = [] - this.studsFields2D = [] - let GeometryLocation = `${designID}.g` + let lod = {{ lod }} + let GeometryLocation = `lod${lod}/${designID}.g` let PrimitiveLocation = `${designID}.xml` let GeometryCount = 0 while (GeometryLocation in database.filelist) { this.Parts[GeometryCount] = new GeometryReader(database.filelist[GeometryLocation].read()) GeometryCount = GeometryCount + 1 - GeometryLocation = `${designID}.g${GeometryCount}` + GeometryLocation = `lod${lod}/${designID}.g${GeometryCount}` } let primitive = new Primitive(database.filelist[PrimitiveLocation].read()) this.Partname = primitive.Designname @@ -1019,7 +1019,7 @@ return self.filelist[filename]; } - parse(dburl) { + parse(dburl, folder="") { let self = this; let xhr = new XMLHttpRequest(); xhr.open('GET', dburl, false); @@ -1038,10 +1038,16 @@ let obj = data[i]; if (obj.type == 'directory'){ // parse subdirs - self.parse(dburl + obj.name + '/') + self.parse(dburl + obj.name + '/', obj.name) } else if (obj.type == 'file'){ - self.filelist[obj.name] = new DBURLFile(dburl + obj.name, obj.name) + + if (folder.includes("lod")){ + + self.filelist[`${folder}/${obj.name}`] = new DBURLFile(dburl + obj.name, obj.name) + } else { + self.filelist[obj.name] = new DBURLFile(dburl + obj.name, obj.name) + } } else { console.log('Strange object parsed: ' + obj.type) @@ -1063,7 +1069,7 @@ let lxfml_file_list = [ {% for model in content %} {% if model.lot == 14 %} - "{{url_for('properties.get_model', id=model.id, file_format='lxfml')}}"{{ ", " if not loop.last else "" }} + "{{url_for('properties.get_model', id=model.id, file_format='lxfml', lod=lod)}}"{{ ", " if not loop.last else "" }} {% endif %} {% endfor %} ] diff --git a/app/templates/partials/_property.html.j2 b/app/templates/partials/_property.html.j2 index 3b301ec..7ba689a 100644 --- a/app/templates/partials/_property.html.j2 +++ b/app/templates/partials/_property.html.j2 @@ -84,8 +84,16 @@ diff --git a/app/templates/partials/_property_content.html.j2 b/app/templates/partials/_property_content.html.j2 index 2830d4e..859a189 100644 --- a/app/templates/partials/_property_content.html.j2 +++ b/app/templates/partials/_property_content.html.j2 @@ -44,21 +44,12 @@
- -
+
+
Render
+