irie 0.0.50__py3-none-any.whl → 0.0.51__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of irie might be problematic. Click here for more details.
- irie/apps/inventory/filters.py +11 -29
- irie/apps/inventory/models.py +3 -3
- irie/apps/inventory/views.py +9 -2
- irie/apps/prediction/admin.py +2 -1
- irie/apps/prediction/migrations/0004_sensorassignment.py +31 -0
- irie/apps/prediction/migrations/0005_remove_sensorassignment_offset_x_and_more.py +53 -0
- irie/apps/prediction/migrations/0006_remove_sensorassignment_show_x_and_more.py +25 -0
- irie/apps/prediction/models.py +22 -3
- irie/apps/prediction/runners/__init__.py +11 -2
- irie/apps/prediction/runners/opensees/__init__.py +114 -62
- irie/apps/prediction/runners/ssid.py +9 -10
- irie/apps/prediction/urls.py +12 -7
- irie/apps/prediction/views.py +81 -24
- irie/apps/static/assets/css/brace.css +5 -31
- irie/apps/static/assets/css/brace.css.map +1 -1
- irie/apps/static/assets/css/brace.min.css +2 -2
- irie/apps/templates/components/json-table.html +1 -0
- irie/apps/templates/includes/paginate.js +6 -0
- irie/apps/templates/includes/scripts.html +7 -20
- irie/apps/templates/inventory/asset-on-map.html +5 -5
- irie/apps/templates/inventory/sensor-upload.html +97 -262
- irie/apps/templates/networks/{networks.html → _networks.html} +0 -1
- irie/apps/templates/networks/networks.js +6 -4
- irie/apps/templates/prediction/asset-predictors.html +41 -47
- irie/apps/templates/prediction/{form-submission.html → create-mdof.html} +0 -21
- irie/apps/templates/prediction/new-runner.html +0 -20
- irie/apps/templates/prediction/predictor-profile.html +8 -134
- irie/apps/templates/prediction/viewer/veux-viewer.js +186 -0
- irie/apps/templates/prediction/xara-profile.html +221 -0
- irie/apps/templates/sensors/render-sensors.js +152 -0
- {irie-0.0.50.dist-info → irie-0.0.51.dist-info}/METADATA +2 -3
- {irie-0.0.50.dist-info → irie-0.0.51.dist-info}/RECORD +36 -29
- {irie-0.0.50.dist-info → irie-0.0.51.dist-info}/WHEEL +1 -1
- /irie/apps/templates/prediction/{predictor-upload.html → create-model.html} +0 -0
- {irie-0.0.50.dist-info → irie-0.0.51.dist-info}/entry_points.txt +0 -0
- {irie-0.0.50.dist-info → irie-0.0.51.dist-info}/top_level.txt +0 -0
irie/apps/prediction/views.py
CHANGED
|
@@ -29,15 +29,6 @@ from irie.apps.prediction.predictor import PREDICTOR_TYPES
|
|
|
29
29
|
from irie.apps.prediction.models import PredictorModel
|
|
30
30
|
from .forms import PredictorForm
|
|
31
31
|
|
|
32
|
-
@login_required(login_url="/login/")
|
|
33
|
-
def new_prediction(request):
|
|
34
|
-
context = {}
|
|
35
|
-
|
|
36
|
-
page_template = "form-submission.html"
|
|
37
|
-
context["segment"] = page_template
|
|
38
|
-
html_template = loader.get_template("prediction/" + page_template)
|
|
39
|
-
return HttpResponse(html_template.render(context, request))
|
|
40
|
-
|
|
41
32
|
|
|
42
33
|
@login_required(login_url="/login/")
|
|
43
34
|
def asset_predictors(request, calid):
|
|
@@ -67,11 +58,51 @@ def asset_predictors(request, calid):
|
|
|
67
58
|
return HttpResponse(html_template.render(context, request))
|
|
68
59
|
|
|
69
60
|
|
|
61
|
+
@login_required(login_url="/login/")
|
|
62
|
+
def predictor_profile_detail(request, calid, preid):
|
|
63
|
+
print(preid)
|
|
64
|
+
try:
|
|
65
|
+
predictor = PredictorModel.objects.get(pk=int(preid))
|
|
66
|
+
except ObjectDoesNotExist:
|
|
67
|
+
return raise404(request, {})
|
|
68
|
+
|
|
69
|
+
sname = request.GET.get("section", None)
|
|
70
|
+
|
|
71
|
+
runner = PREDICTOR_TYPES[predictor.protocol](predictor)
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
data, mesh = runner.structural_section(sname)
|
|
75
|
+
except Exception as e:
|
|
76
|
+
raise e
|
|
77
|
+
return HttpResponse(
|
|
78
|
+
json.dumps({"error": "Section not found"}),
|
|
79
|
+
content_type="application/json",
|
|
80
|
+
status=404
|
|
81
|
+
)
|
|
82
|
+
from veux.plane import PlaneModel
|
|
83
|
+
art = veux.create_artist(mesh, ndf=1, canvas="gltf")
|
|
84
|
+
art.draw_surfaces()
|
|
85
|
+
art.draw_outlines()
|
|
86
|
+
|
|
87
|
+
glb = art.canvas.to_glb()
|
|
88
|
+
return HttpResponse(glb, content_type="application/binary")
|
|
89
|
+
glb64 = base64.b64encode(glb).decode("utf-8")
|
|
90
|
+
# rendering = f"data:application/octet-stream;base64,{glb64}"
|
|
91
|
+
# rendering = art._repr_html_()
|
|
92
|
+
r = dict(
|
|
93
|
+
properties = {
|
|
94
|
+
"Area": 1.0,
|
|
95
|
+
"Inertia": 2.0
|
|
96
|
+
},
|
|
97
|
+
rendering = glb64 #rendering
|
|
98
|
+
)
|
|
99
|
+
return HttpResponse(json.dumps(r), content_type="application/json")
|
|
100
|
+
|
|
101
|
+
|
|
70
102
|
@login_required(login_url="/login/")
|
|
71
103
|
def predictor_profile(request, calid, preid):
|
|
72
104
|
|
|
73
105
|
context = {}
|
|
74
|
-
html_template = loader.get_template("prediction/predictor-profile.html")
|
|
75
106
|
context["segment"] = "inventory"
|
|
76
107
|
|
|
77
108
|
try:
|
|
@@ -85,13 +116,19 @@ def predictor_profile(request, calid, preid):
|
|
|
85
116
|
return raise404(request, context)
|
|
86
117
|
|
|
87
118
|
context["asset"] = asset
|
|
88
|
-
context["
|
|
119
|
+
context["runner"] = PREDICTOR_TYPES[predictor.protocol](predictor)
|
|
120
|
+
context["predictor"] = predictor
|
|
121
|
+
context["sensors"] = predictor.sensorassignment_set.all()
|
|
89
122
|
|
|
90
|
-
|
|
91
|
-
|
|
123
|
+
if predictor.protocol == PredictorModel.Protocol.TYPE1:
|
|
124
|
+
html_template = loader.get_template("prediction/xara-profile.html")
|
|
125
|
+
context["members"] = context["runner"].structural_members()
|
|
92
126
|
|
|
93
|
-
|
|
94
|
-
|
|
127
|
+
else:
|
|
128
|
+
html_template = loader.get_template("prediction/predictor-profile.html")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
try:
|
|
95
132
|
return HttpResponse(html_template.render(context, request))
|
|
96
133
|
|
|
97
134
|
except Exception as e:
|
|
@@ -118,13 +155,13 @@ def asset_map(request, calid):
|
|
|
118
155
|
context["render_src"] = asset.rendering
|
|
119
156
|
|
|
120
157
|
elif request.method == "POST":
|
|
121
|
-
from openbim.csi import load, create_model, collect_outlines
|
|
122
158
|
# context["offset"] = json.dumps(list(reversed(list(asset.coordinates))))
|
|
123
159
|
context["rotate"] = "[0, 0, 0]"
|
|
124
160
|
context["scale"] = 1/3.2808 # TODO
|
|
125
161
|
|
|
126
162
|
uploaded_file = request.FILES.get('config_file')
|
|
127
163
|
|
|
164
|
+
from openbim.csi import load, create_model, collect_outlines
|
|
128
165
|
try:
|
|
129
166
|
csi = load((str(line.decode()).replace("\r\n","\n") for line in uploaded_file.readlines()))
|
|
130
167
|
except Exception as e:
|
|
@@ -155,12 +192,22 @@ def asset_map(request, calid):
|
|
|
155
192
|
|
|
156
193
|
|
|
157
194
|
|
|
195
|
+
@login_required(login_url="/login/")
|
|
196
|
+
def create_mdof(request):
|
|
197
|
+
"Create system id"
|
|
198
|
+
context = {}
|
|
199
|
+
|
|
200
|
+
page_template = "create-mdof.html"
|
|
201
|
+
context["segment"] = page_template
|
|
202
|
+
html_template = loader.get_template("prediction/" + page_template)
|
|
203
|
+
return HttpResponse(html_template.render(context, request))
|
|
204
|
+
|
|
158
205
|
|
|
159
206
|
@login_required(login_url="/login/")
|
|
160
|
-
def
|
|
207
|
+
def create_model(request, calid):
|
|
161
208
|
|
|
162
209
|
asset = Asset.objects.get(calid=calid)
|
|
163
|
-
html_template = loader.get_template("prediction/
|
|
210
|
+
html_template = loader.get_template("prediction/create-model.html")
|
|
164
211
|
r400 = loader.get_template("site/page-400.html")
|
|
165
212
|
context = {
|
|
166
213
|
"asset": asset,
|
|
@@ -170,24 +217,33 @@ def predictor_upload(request, calid):
|
|
|
170
217
|
}
|
|
171
218
|
|
|
172
219
|
if request.method == "POST":
|
|
173
|
-
from openbim.csi import load, create_model, collect_outlines
|
|
174
220
|
form = PredictorForm(request.POST, request.FILES)
|
|
175
221
|
|
|
176
222
|
uploaded_file = request.FILES.get('config_file')
|
|
177
223
|
|
|
224
|
+
from openbim.csi import load, create_model, collect_outlines
|
|
225
|
+
# 1) Parse the CSI file
|
|
178
226
|
try:
|
|
179
227
|
csi = load((str(line.decode()).replace("\r\n","\n") for line in uploaded_file.readlines()))
|
|
180
228
|
except Exception as e:
|
|
181
229
|
return HttpResponse(r400.render({"message": json.dumps({"error": str(e)})}), status=400)
|
|
182
230
|
|
|
183
|
-
|
|
231
|
+
# 2) Process CSI data into xara model
|
|
232
|
+
try:
|
|
233
|
+
model = create_model(csi, verbose=True)
|
|
234
|
+
except Exception as e:
|
|
235
|
+
return HttpResponse(r400.render({"message": json.dumps({"error": str(e)})}), status=400)
|
|
184
236
|
|
|
185
|
-
#
|
|
237
|
+
# 3) Render the model
|
|
186
238
|
outlines = collect_outlines(csi, model.frame_tags)
|
|
187
|
-
artist = veux.create_artist(model,
|
|
188
|
-
|
|
239
|
+
artist = veux.create_artist(model,
|
|
240
|
+
canvas="gltf",
|
|
241
|
+
vertical=3,
|
|
242
|
+
model_config={"frame_outlines": outlines}
|
|
189
243
|
)
|
|
190
244
|
artist.draw_surfaces()
|
|
245
|
+
|
|
246
|
+
# Generate the .glb file
|
|
191
247
|
glb = artist.canvas.to_glb()
|
|
192
248
|
|
|
193
249
|
if request.POST.get("action") == "commit":
|
|
@@ -198,7 +254,9 @@ def predictor_upload(request, calid):
|
|
|
198
254
|
predictor.asset = asset
|
|
199
255
|
predictor.name = form.cleaned_data['name']
|
|
200
256
|
predictor.description = "empty"
|
|
257
|
+
predictor.protocol = PredictorModel.Protocol.TYPE1
|
|
201
258
|
|
|
259
|
+
predictor.config_file.save(uploaded_file.name, ContentFile(uploaded_file.read()), save=True)
|
|
202
260
|
predictor.render_file.save(f"{uuid.uuid4()}.glb", ContentFile(glb), save=True)
|
|
203
261
|
predictor.save()
|
|
204
262
|
|
|
@@ -210,7 +268,6 @@ def predictor_upload(request, calid):
|
|
|
210
268
|
|
|
211
269
|
try:
|
|
212
270
|
return HttpResponse(html_template.render(context, request))
|
|
213
|
-
# return render(request, "prediction/predictor-upload.html", {"form": form})
|
|
214
271
|
|
|
215
272
|
except Exception as e:
|
|
216
273
|
if "DEBUG" in os.environ and os.environ["DEBUG"]:
|
|
@@ -4847,12 +4847,12 @@ textarea.form-control-lg {
|
|
|
4847
4847
|
|
|
4848
4848
|
.nav-tabs {
|
|
4849
4849
|
--bs-nav-tabs-border-width: 0.0625rem;
|
|
4850
|
-
--bs-nav-tabs-border-color: #
|
|
4851
|
-
--bs-nav-tabs-border-radius: 0.
|
|
4852
|
-
--bs-nav-tabs-link-hover-border-color: #E5E7EB #E5E7EB #
|
|
4850
|
+
--bs-nav-tabs-border-color: #D1D5DB;
|
|
4851
|
+
--bs-nav-tabs-border-radius: 0.375rem;
|
|
4852
|
+
--bs-nav-tabs-link-hover-border-color: #E5E7EB #E5E7EB #D1D5DB;
|
|
4853
4853
|
--bs-nav-tabs-link-active-color: #374151;
|
|
4854
|
-
--bs-nav-tabs-link-active-bg: #
|
|
4855
|
-
--bs-nav-tabs-link-active-border-color: #
|
|
4854
|
+
--bs-nav-tabs-link-active-bg: #F2F4F6;
|
|
4855
|
+
--bs-nav-tabs-link-active-border-color: #D1D5DB #D1D5DB #F2F4F6;
|
|
4856
4856
|
border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);
|
|
4857
4857
|
}
|
|
4858
4858
|
.nav-tabs .nav-link {
|
|
@@ -24245,28 +24245,6 @@ svg.text-dark .color-background {
|
|
|
24245
24245
|
margin-top: 7.1875rem !important;
|
|
24246
24246
|
}
|
|
24247
24247
|
|
|
24248
|
-
.navbar-vertical .navbar-nav .nav-link[data-bs-toggle=collapse]:after {
|
|
24249
|
-
display: inline-block;
|
|
24250
|
-
font-style: normal;
|
|
24251
|
-
font-variant: normal;
|
|
24252
|
-
text-rendering: auto;
|
|
24253
|
-
-webkit-font-smoothing: antialiased;
|
|
24254
|
-
font-family: "Font Awesome 5 Free";
|
|
24255
|
-
font-weight: 700;
|
|
24256
|
-
content: "\f107";
|
|
24257
|
-
margin-left: auto;
|
|
24258
|
-
color: rgba(206, 212, 218, 0.7);
|
|
24259
|
-
transition: all 0.2s ease;
|
|
24260
|
-
}
|
|
24261
|
-
@media (prefers-reduced-motion: reduce) {
|
|
24262
|
-
.navbar-vertical .navbar-nav .nav-link[data-bs-toggle=collapse]:after {
|
|
24263
|
-
transition: none;
|
|
24264
|
-
}
|
|
24265
|
-
}
|
|
24266
|
-
.navbar-vertical .navbar-nav .nav-link[data-bs-toggle=collapse][aria-expanded=true]:after {
|
|
24267
|
-
color: #CED4DA;
|
|
24268
|
-
transform: rotate(180deg);
|
|
24269
|
-
}
|
|
24270
24248
|
.navbar-vertical .navbar-nav .nav-link[data-bs-toggle=collapse].active:after {
|
|
24271
24249
|
color: #ffffff;
|
|
24272
24250
|
}
|
|
@@ -29952,10 +29930,6 @@ label {
|
|
|
29952
29930
|
padding: 1rem 1rem;
|
|
29953
29931
|
background-color: #ffffff;
|
|
29954
29932
|
}
|
|
29955
|
-
.nav-tabs .nav-link.active {
|
|
29956
|
-
color: #ffffff;
|
|
29957
|
-
background-color: #1F2937;
|
|
29958
|
-
}
|
|
29959
29933
|
.nav-tabs.nav-dark .nav-link.active {
|
|
29960
29934
|
color: #ffffff;
|
|
29961
29935
|
background-color: #12358a;
|