Skip to content

Commit 6f6d6c6

Browse files
authored
Merge pull request #3 from Geode-solutions/next
Next
2 parents fb00bc3 + dc1c26d commit 6f6d6c6

File tree

12 files changed

+151
-92
lines changed

12 files changed

+151
-92
lines changed

.dockerignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
requirements.in
2+
.github
3+
README.md
4+
.gitignore

.github/workflows/CD.yml

Lines changed: 0 additions & 20 deletions
This file was deleted.

.github/workflows/docker-images.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Docker Image CD
2+
3+
on:
4+
push:
5+
branches: [ master, next ]
6+
jobs:
7+
docker-build-squash-push:
8+
uses: Geode-solutions/actions/.github/workflows/docker-build-squash-push.yml@master
9+
with:
10+
image_name: 'opengeodeweb_viewer'
11+
tag: ${{ github.ref_name }}
12+
secrets:
13+
TOKEN: ${{secrets.GITHUB_TOKEN}}

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
11
.pytest_cache
2-
dist
2+
dist
3+
env/
4+
venv/
5+
.vscode/
6+
__pycache__/
7+
data/

.pypirc

Lines changed: 0 additions & 6 deletions
This file was deleted.

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM ghcr.io/geode-solutions/vtk:3.9-cpu
2+
3+
WORKDIR /app
4+
5+
COPY . .
6+
RUN pip3 install --user -r requirements.txt && pip3 cache purge
7+
ENV PYTHONPATH="/usr/local:$PYTHONPATH"
8+
9+
CMD python vtkw-server.py --port 1234 --host 0.0.0.0
10+
11+
EXPOSE 1234

pyproject.toml

Lines changed: 0 additions & 45 deletions
This file was deleted.

requirements.in

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
1-
OpenGeode-core
2-
OpenGeode-IO
3-
OpenGeode-Inspector
4-
OpenGeode-Geosciences
5-
OpenGeode-GeosciencesIO
6-
Geode-Viewables
1+
wslink
2+
numpy

requirements.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.10
3+
# by the following command:
4+
#
5+
# pip-compile requirements.in
6+
#
7+
aiohttp==3.8.5
8+
# via wslink
9+
aiosignal==1.3.1
10+
# via aiohttp
11+
async-timeout==4.0.3
12+
# via aiohttp
13+
attrs==23.1.0
14+
# via aiohttp
15+
charset-normalizer==3.2.0
16+
# via aiohttp
17+
frozenlist==1.4.0
18+
# via
19+
# aiohttp
20+
# aiosignal
21+
idna==3.4
22+
# via yarl
23+
multidict==6.0.4
24+
# via
25+
# aiohttp
26+
# yarl
27+
numpy==1.25.2
28+
# via -r requirements.in
29+
wslink==1.11.1
30+
# via -r requirements.in
31+
yarl==1.9.2
32+
# via aiohttp

src/opengeodeback_viewer/vtk_protocol.py renamed to vtk_protocol.py

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,22 @@ def create_object_pipeline(self, params):
3636
file_name = params["file_name"]
3737

3838
actor = vtk.vtkActor()
39-
mapper = vtk.vtkDataSetMapper()
40-
actor.SetMapper(mapper)
4139
if ".vtm" in file_name:
4240
reader = vtk.vtkXMLMultiBlockDataReader()
43-
filter = vtk.vtkCompositeDataGeometryFilter()
41+
filter = vtk.vtkGeometryFilter()
4442
filter.SetInputConnection(reader.GetOutputPort())
43+
mapper = vtk.vtkCompositePolyDataMapper()
4544
mapper.SetInputConnection(filter.GetOutputPort())
4645
self.register_object(id, reader, filter, actor, mapper, {})
4746
else:
4847
reader = vtk.vtkXMLGenericDataObjectReader()
48+
mapper = vtk.vtkDataSetMapper()
4949
mapper.SetInputConnection(reader.GetOutputPort())
5050
self.register_object(id, reader, {}, actor, mapper, {})
5151

5252
reader.SetFileName(f"/data/{file_name}")
5353

54+
actor.SetMapper(mapper)
5455
mapper.SetColorModeToMapScalars()
5556
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
5657
mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(2, 0)
@@ -133,8 +134,18 @@ def update_data(self, params):
133134

134135
data = self.get_object(id)
135136
reader = data["reader"]
136-
reader.Modified()
137-
137+
reader.Update()
138+
mapper = data["mapper"]
139+
tag = vtk.reference(0)
140+
scalars = vtk.vtkAbstractMapper.GetAbstractScalars(
141+
reader.GetOutput(),
142+
mapper.GetScalarMode(),
143+
mapper.GetArrayAccessMode(),
144+
mapper.GetArrayId(),
145+
mapper.GetArrayName(),
146+
tag,
147+
)
148+
mapper.SetScalarRange(scalars.GetRange())
138149
self.render()
139150

140151
@exportRpc("get_point_position")
@@ -155,6 +166,53 @@ def reset(self):
155166
renderWindow.GetRenderers().GetFirstRenderer().RemoveAllViewProps()
156167
print("reset")
157168

169+
@exportRpc("toggle_edge_visibility")
170+
def setEdgeVisibility(self, params):
171+
print(f"{params=}", flush=True)
172+
id = params["id"]
173+
visibility = bool(params["visibility"])
174+
actor = self.get_object(id)["actor"]
175+
actor.GetProperty().SetEdgeVisibility(visibility)
176+
self.render()
177+
178+
@exportRpc("toggle_point_visibility")
179+
def setPointVisibility(self, params):
180+
id = params["id"]
181+
visibility = bool(params["visibility"])
182+
actor = self.get_object(id)["actor"]
183+
actor.GetProperty().SetVertexVisibility(visibility)
184+
self.render()
185+
186+
@exportRpc("point_size")
187+
def setPointSize(self, params):
188+
id = params["id"]
189+
size = float(params["size"])
190+
actor = self.get_object(id)["actor"]
191+
actor.GetProperty().SetPointSize(size)
192+
self.render()
193+
194+
@exportRpc("set_color")
195+
def setColor(self, params):
196+
id = params["id"]
197+
red = params["red"]
198+
green = params["green"]
199+
blue = params["blue"]
200+
self.get_object(id)["mapper"].ScalarVisibilityOff()
201+
actor = self.get_object(id)["actor"]
202+
actor.GetProperty().SetColor(red, green, blue)
203+
self.render()
204+
205+
@exportRpc("set_vertex_attribute")
206+
def setVertexAttribute(self, params):
207+
print(f"{params=}", flush=True)
208+
id = params["id"]
209+
name = params["name"]
210+
mapper = self.get_object(id)["mapper"]
211+
mapper.SelectColorArray(name)
212+
mapper.ScalarVisibilityOn()
213+
mapper.SetScalarModeToUsePointFieldData()
214+
self.render()
215+
158216
def getProtocol(self, name):
159217
for p in self.coreServer.getLinkProtocols():
160218
if type(p).__name__ == name:

src/opengeodeback_viewer/vtkw-server.py renamed to vtkw-server.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
import argparse
2626

2727
# Try handle virtual env if provided
28-
if '--virtual-env' in sys.argv:
29-
virtualEnvPath = sys.argv[sys.argv.index('--virtual-env') + 1]
30-
virtualEnv = virtualEnvPath + '/bin/activate_this.py'
28+
if "--virtual-env" in sys.argv:
29+
virtualEnvPath = sys.argv[sys.argv.index("--virtual-env") + 1]
30+
virtualEnv = virtualEnvPath + "/bin/activate_this.py"
3131
with open(virtualEnv) as venv:
3232
exec(venv.read(), dict(__file__=virtualEnv))
3333

@@ -53,8 +53,9 @@ class _Server(vtk_wslink.ServerProtocol):
5353

5454
@staticmethod
5555
def add_arguments(parser):
56-
parser.add_argument("--virtual-env", default=None,
57-
help="Path to virtual environment to use")
56+
parser.add_argument(
57+
"--virtual-env", default=None, help="Path to virtual environment to use"
58+
)
5859

5960
@staticmethod
6061
def configure(args):
@@ -66,7 +67,8 @@ def initialize(self):
6667
self.registerVtkWebProtocol(vtk_protocols.vtkWebMouseHandler())
6768
self.registerVtkWebProtocol(vtk_protocols.vtkWebViewPort())
6869
self.registerVtkWebProtocol(
69-
vtk_protocols.vtkWebPublishImageDelivery(decode=False))
70+
vtk_protocols.vtkWebPublishImageDelivery(decode=False)
71+
)
7072
self.setSharedObject("db", dict())
7173

7274
# Custom API
@@ -85,13 +87,22 @@ def initialize(self):
8587
renderWindow.AddRenderer(renderer)
8688
self.setSharedObject("renderer", renderer)
8789

88-
8990
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
9091
renderWindowInteractor.SetRenderWindow(renderWindow)
9192
renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()
9293
renderWindowInteractor.EnableRenderOff()
9394
self.getApplication().GetObjectIdMap().SetActiveObject("VIEW", renderWindow)
9495

96+
widget = vtk.vtkOrientationMarkerWidget()
97+
widget.SetInteractor(renderWindowInteractor)
98+
widget.SetViewport(0.0, 0.0, 0.2, 0.2)
99+
axes = vtk.vtkAxesActor()
100+
widget.SetOrientationMarker(axes)
101+
widget.EnabledOn()
102+
widget.InteractiveOff()
103+
self.setSharedObject("marker", widget)
104+
105+
95106
# =============================================================================
96107
# Main: Parse args and start serverviewId
97108
# =============================================================================
@@ -105,9 +116,9 @@ def initialize(self):
105116
server.add_arguments(parser)
106117
_Server.add_arguments(parser)
107118
args = parser.parse_args()
108-
print('args :', args)
119+
print("args :", args)
109120
_Server.configure(args)
110121

111-
print('start')
122+
print("start")
112123
# Start server
113124
server.start_webserver(options=args, protocol=_Server)

0 commit comments

Comments
 (0)