diff --git a/sirepo/package_data/static/js/radia.js b/sirepo/package_data/static/js/radia.js index c7e03602d0..1c4d11a367 100644 --- a/sirepo/package_data/static/js/radia.js +++ b/sirepo/package_data/static/js/radia.js @@ -3894,9 +3894,16 @@ SIREPO.viewLogic('geomObjectView', function(appState, panelState, radiaService, panelState.showField('geomObject', 'materialFile', o.material === 'custom'); panelState.enableField('geomObject', 'size', true); + + if (o.type === 'stl') { + panelState.enableField('geomObject', 'size', false); + //TODO(BG): Only disables 'size' field, need to build shape to get sizes to update values (likely will need to send request since python) + } + if (o.type !== 'extrudedPoints') { return; } + for (const dim of [o.widthAxis, o.heightAxis]) { panelState.enableArrayField( 'geomObject', diff --git a/sirepo/package_data/template/radia/geometryReport.py.jinja b/sirepo/package_data/template/radia/geometryReport.py.jinja index fa01722ee8..f7bc6bcf62 100644 --- a/sirepo/package_data/template/radia/geometryReport.py.jinja +++ b/sirepo/package_data/template/radia/geometryReport.py.jinja @@ -89,18 +89,18 @@ def _add_object(o, radia_objs, id_map): if t == _MODEL_STL: g_id = radia_util.build_stl( filename = o.get('file'), - #TODO(BG) Not currently reflective - center=ctr, - #TODO(BG) Not currently reflective + center=o.center, + centroid=o.stlCentroid, size=sz, vertices=o.stlVertices, faces=o.stlFaces, magnetization=m, material=o.material, rem_mag=o.remanentMag, - segments=segs, #TODO: Not implemented + segments=segs, h_m_curve=o.h_m_curve, - #slices=o.stlSlices TODO: Not implemented + #TODO: Not implemented + #slices=o.stlSlices ) if t in _OBJ_MODELS: for b in o.get('bevels', []): diff --git a/sirepo/template/radia.py b/sirepo/template/radia.py index 3675f1cf1b..93dec64a17 100644 --- a/sirepo/template/radia.py +++ b/sirepo/template/radia.py @@ -1660,6 +1660,7 @@ def _poly_area(pts): size=[1.0, 1.0, 1.0], stlVertices=[], stlFaces=[], + stlCentroid=[], # TODO(BG) Not implemented # stlSlices = [], ) @@ -1699,6 +1700,8 @@ def _poly_area(pts): d.stlFaces.append(list(f)) o.stlVertices = d.stlVertices o.stlFaces = d.stlFaces + o.size = list(mesh.bounding_box.primitive.extents) + o.stlCentroid = mesh.centroid.tolist() # TODO(BG) Mesh slicing implementation, option for meshes with 400+ faces although will be approximation """ diff --git a/sirepo/template/radia_util.py b/sirepo/template/radia_util.py index cf09aaed23..b124a5d841 100644 --- a/sirepo/template/radia_util.py +++ b/sirepo/template/radia_util.py @@ -309,6 +309,9 @@ def build_stl(**kwargs): g_id = radia.ObjPolyhdr( d.vertices, (numpy.array(d.faces) + 1).tolist(), d.magnetization ) + center = [x - d.centroid[i] for i, x in enumerate(d.center)] + radia.TrfOrnt(g_id, radia.TrfTrsl([center[0], center[1], center[2]])) + _apply_segments(g_id, d.segments) radia.MatApl(g_id, _radia_material(d.material, d.rem_mag, d.h_m_curve)) return g_id