From 7dfbd0a23a8cab8853e7e28e67f374c09217f0d0 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Fri, 13 Jun 2025 15:36:53 +0200 Subject: [PATCH 1/9] new data pointSet & edgedCurve --- src/tests/data/edged_curve.vtp | 20 ++++++++++++++++++++ src/tests/data/points.vtp | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/tests/data/edged_curve.vtp create mode 100644 src/tests/data/points.vtp diff --git a/src/tests/data/edged_curve.vtp b/src/tests/data/edged_curve.vtp new file mode 100644 index 0000000..3a04efb --- /dev/null +++ b/src/tests/data/edged_curve.vtp @@ -0,0 +1,20 @@ + + + + + + 0.1 0.2 0.3 2.1 9.4 6.7 7.5 5.2 6.3 8.7 1.4 4.7 + + + 0.1 0.2 0.3 2.1 9.4 6.7 7.5 5.2 6.3 8.7 1.4 4.7 + + + 0 1 0 2 3 2 1 2 + + + 0 1 0 2 3 2 1 2 + 2 4 6 8 + + + + diff --git a/src/tests/data/points.vtp b/src/tests/data/points.vtp new file mode 100644 index 0000000..8962e6a --- /dev/null +++ b/src/tests/data/points.vtp @@ -0,0 +1,19 @@ + + + + + + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0.5 1 2 20 2 12 1.5 19 12.3 39.1 1.5 7 1.5 39.1 8.5 37.5 38.2 11.1 17.8 35.5 15 13.9 15.1 17 25.9 14 17.5 22 25 25 15 29 20 27 28 22 1 0.5 21 19 1.5 27 1.3 17 29.5 38.7 2.1 25 1.2 37.8 30 38.1 37.7 26.8 17.5 36.2 31 14.2 14.9 29.5 26.5 15 29.5 21.2 23.4 35.5 14.5 28.7 33 26.3 25.7 34 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + + + 0.5 1 2 20 2 12 1.5 19 12.3 39.1 1.5 7 1.5 39.1 8.5 37.5 38.2 11.1 17.8 35.5 15 13.9 15.1 17 25.9 14 17.5 22 25 25 15 29 20 27 28 22 1 0.5 21 19 1.5 27 1.3 17 29.5 38.7 2.1 25 1.2 37.8 30 38.1 37.7 26.8 17.5 36.2 31 14.2 14.9 29.5 26.5 15 29.5 21.2 23.4 35.5 14.5 28.7 33 26.3 25.7 34 + + + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 + 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + + + + From 090819579452b2c79512b726e634e35f7ebcf470 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Fri, 13 Jun 2025 15:37:16 +0200 Subject: [PATCH 2/9] test points --- .../object/object_methods.py | 26 +++++++++++-- .../rpc/mesh/edges/mesh_edges_protocols.py | 10 ++--- .../rpc/mesh/edges/schemas/width.json | 18 +++++++++ .../rpc/mesh/mesh_protocols.py | 35 ++++++++++++++---- .../images/mesh/points/point_set_color.jpeg | Bin 0 -> 9588 bytes .../images/mesh/points/point_set_size.jpeg | Bin 0 -> 6280 bytes .../mesh/points/point_set_visibility.jpeg | Bin 0 -> 1072 bytes .../mesh/points/register_point_set.jpeg | Bin 0 -> 2582 bytes .../mesh/points/test_mesh_points_protocols.py | 32 ++++++++++++++++ 9 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json create mode 100644 src/tests/data/images/mesh/points/point_set_color.jpeg create mode 100644 src/tests/data/images/mesh/points/point_set_size.jpeg create mode 100644 src/tests/data/images/mesh/points/point_set_visibility.jpeg create mode 100644 src/tests/data/images/mesh/points/register_point_set.jpeg diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 2bc9c7c..4ccf96b 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -108,21 +108,35 @@ def SetColor(self, id, red, green, blue): def SetEdgesVisibility(self, id, visibility): actor = self.get_object(id)["actor"] - actor.GetProperty().SetEdgeVisibility(visibility) + max_dimension = self.get_object(id)["max_dimension"] + if max_dimension == "edges": + self.SetVisibility(id, visibility) + else: + + actor.GetProperty().SetEdgeVisibility(visibility) self.render() - def SetEdgesSize(self, id, size): + def SetEdgesWidth(self, id, width): actor = self.get_object(id)["actor"] - actor.GetProperty().SetEdgeWidth(size) + actor.GetProperty().UseLineWidthForEdgeThicknessOn() + actor.GetProperty().SetEdgeWidth(width) self.render() def SetEdgesColor(self, id, red, green, blue): actor = self.get_object(id)["actor"] - actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255]) + max_dimension = self.get_object(id)["max_dimension"] + if max_dimension == "edges": + self.SetColor(id, red, green, blue) + else: + # actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255]) self.render() def SetPointsVisibility(self, id, visibility): actor = self.get_object(id)["actor"] + # max_dimension = self.get_object(id)["max_dimension"] + # if max_dimension == "points": + # self.SetVisibility(id, visibility) + # else: actor.GetProperty().SetVertexVisibility(visibility) actor.GetProperty().SetEdgeVisibility(visibility) self.render() @@ -134,6 +148,10 @@ def SetPointsSize(self, id, size): def SetPointsColor(self, id, red, green, blue): actor = self.get_object(id)["actor"] + # max_dimension = self.get_object(id)["max_dimension"] + # if max_dimension == "points": + # self.SetColor(id, red, green, blue) + # else: actor.GetProperty().SetVertexColor([red / 255, green / 255, blue / 255]) self.render() diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py index fdeea46..a2db0f5 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/mesh_edges_protocols.py @@ -39,10 +39,10 @@ def setMeshEdgesColor(self, params): ) self.SetEdgesColor(id, red, green, blue) - @exportRpc(mesh_edges_prefix + mesh_edges_schemas_dict["size"]["rpc"]) - def setMeshEdgesSize(self, params): + @exportRpc(mesh_edges_prefix + mesh_edges_schemas_dict["width"]["rpc"]) + def setMeshEdgesWidth(self, params): validate_schema( - params, self.mesh_edges_schemas_dict["size"], self.mesh_edges_prefix + params, self.mesh_edges_schemas_dict["width"], self.mesh_edges_prefix ) - id, size = params["id"], params["size"] - self.SetEdgesSize(id, size) + id, size = params["id"], params["width"] + self.SetEdgesWidth(id, width) diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json new file mode 100644 index 0000000..21eab3a --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json @@ -0,0 +1,18 @@ +{ + "rpc": "size", + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "width": { + "type": "integer" + } + }, + "required": [ + "id", + "width" + ], + "additionalProperties": false +} \ No newline at end of file diff --git a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py index 30fb3a5..cf26d9c 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py @@ -23,14 +23,33 @@ def __init__(self): def registerMesh(self, params): validate_schema(params, self.mesh_schemas_dict["register"], self.mesh_prefix) id, file_name = params["id"], params["file_name"] - try: - reader = vtk.vtkXMLGenericDataObjectReader() - filter = {} - mapper = vtk.vtkDataSetMapper() - mapper.SetInputConnection(reader.GetOutputPort()) - self.registerObject(id, file_name, reader, filter, mapper) - except Exception as e: - print("error : ", str(e), flush=True) + # try: + reader = vtk.vtkXMLGenericDataObjectReader() + filter = {} + mapper = vtk.vtkDataSetMapper() + mapper.SetInputConnection(reader.GetOutputPort()) + self.registerObject(id, file_name, reader, filter, mapper) + + data_object = reader.GetOutput() + data_set = vtk.vtkDataSet.SafeDownCast(data_object) + cell_types = vtk.vtkCellTypes() + data_set.GetCellTypes(cell_types) + cell_data = cell_types.GetCellTypesArray() + max_id = -1 + for t in range(cell_data.GetSize()): + t_id = cell_data.GetValue(t) + max_id = max(max_id, t_id) + print(f"{max_id=}", flush=True) + max_dimension = "" + if max_id < 3: + max_dimension = "points" + elif max_id < 5: + max_dimension = "edges" + elif max_id < 7: + max_dimension = "polygons" + elif max_id >= 7: + max_dimension = "polyhedra" + self.get_data_base()[id]["max_dimension"] = max_dimension @exportRpc(mesh_prefix + mesh_schemas_dict["deregister"]["rpc"]) def deregisterMesh(self, params): diff --git a/src/tests/data/images/mesh/points/point_set_color.jpeg b/src/tests/data/images/mesh/points/point_set_color.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a9f37c29652aefcf41a37de1e2421b67518a1c1e GIT binary patch literal 9588 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 I+3(f=2d`C!<^TWy literal 0 HcmV?d00001 diff --git a/src/tests/data/images/mesh/points/point_set_size.jpeg b/src/tests/data/images/mesh/points/point_set_size.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..93123a19290f648a3fe372aba15fd3e04865f6ec GIT binary patch literal 6280 zcmbtYcQ{;I*FQ5Dozc4>dhdi_^d5#8B6^E9qD2>?MXxc@dkcv+N)QqxdWqg8YJx~a z4HEHj-4<`>@#cDbN0HJy;ugIT56hV00;yCpvw!mSOAnS zXa7IBTIBz?!lm~`7eIyw;s^0#f!F{r83>CEbnzBoxO_;gtF?i@1P`A87lMOzX{7vj z^}p;F^8gVR2mnK|pqD#*ck-9l{{fI{9)Fde8FIR$%JsUiEnkk1RHB9FAL|}oLSXCH zz6@byQ(Mz_C2RoTzX0@_O~>$a?2-~MjrGp`wV3Wx(($6yfR2JI`jyac^o?eHEBFKd z*|86gOj6hBIC*|i+vo$p-&#xzSpKquCj67PZ#F}UbY4p6p~H>az#Io*HGi2efmCL= zLV=mL@UQ%g-)iPJ6{$ba3pZ_f7=Np-M(W(s9oa*%_{+`MO>DL{3k&U^g$M)GFryz% zjnev0|K_IDR~L2w{9!M8Qh4Us{?`8kas7PE({TApt!@UzbpQb2qtFP{9|U4zGI?h; z8S_hOIS01T+q%*g-_U!nJs+9qaHS7>;7B-0NBrB!?r6BfB614-PI4y z0|mff5Eusw8|zP32rdpDHkL4$MGB@5&`5$PCERJP9$rQP-eqinaKPtNOr%00-D#YL z;Ylmp7r>_-1=VBRp7PjrPjc7iy2OpDC?s_?YPC(%TDDcx*@*6$;No4qp7AzD{#D<% z?1Et-S%pW*^{WdKg}1n;(5};}88#c6(aBJJ zz*F1oh*`@(E7v;991r|0PVX9O8LY3xJNr_~;4T_cM)8p1@=g&tuCs=C+bAtZ#z{Ad z&Z4107~Nox{u_DDPlv^5QZv|G+z-ZB5`(VqwU2s~Z%?R0N-}a9NsE00SKmV_1^Tcd z0!AEf8xBbq4J?)ZN|Pd-T-^8RnhAvZgY~<FFEOraTrwuh=*vo#K*x*u=gG*(FDfuiC7`A`TA^Q(IIecSrL=88-|{wgC` zQcLZu!d@$l7jg_gCsJF=d$Px^`&E}wIKvFgVF|lbLlyRL{;6*1oT!cJd!SOHOo0i~ zwXnObLku$4o~7_GaY;Utf9fb0>VxHC$iC_Hq)-syj8ZZT+v+na8rL+?n??F0E4?#c zvqD0ghhtX}Ld@x{Uit@gvLKRDH9XT$Q^^ZJ*p@YkYBYOliM~qa_I#x1xf@xXu`+}t zBMN;gM@igxt1oJm+Ltmq*xaG5q`_i3vhCXY{bdwamdv(jsy3QkMeY~VRk|Siw=D8U z{QN6WF7t~5Nc;l$4;1j<6eTDC!Ukc1v9NKm@CdJ#0fVrxamXO#6qKw0l?XMPup%yt zC`{j{Q3>u1y)I^8?Oxx&E-q(}anlWiP70enTmfh1L+4h= z$k5(l=uf7aN$ViWiV3u#ASx!^j)+@ezmL8wCbFO@$>d zu&a$qR~$#+^{XlboTTe{Rn_b~2T>O{RQ$myPp(US-4$-F{* zpJvq5ow&VIYP-9}=;~yt#9r;D_1(z5vcsGNItRIJ-j%TR9#@-&$w*vAc^GPy49rU( zSg9R(S`$mijY!=h&ui78p-1y%I`6;cxTX%wJ5@c+?N(L);q~K{T*NttAioK4hx|B~7MdKn*{pu&ujlA8E3*Fq0?>J{s`VyxiIA#xEkLK*)aMfVT zm!C^o=O*|z@RH**L@i=iR3;$Y2attm&fFMit>#>i@ZP!Hwt4Dm(+UPDnMg7-uf!QA zvjpwMY4qfd$glsv%zxiE+y7H~Z*|B}0I9&n=jD1aH_hpHbKS$ec_rV!e0VrAc|xD+ z+Ng`JHSY|iO0Jgf&`DGOa6e|Gv}a5uWm0hgJ>a`naX(E!B!mFDNESO(achRsN5fwD z*C%*+e>bCO#n+;0r2KcBbnjO)bWwEWxN}t&FLj$>x}xF)d||3OMU_JRLFUeKLe?Me zkFQKfFgs{V(y+d*jH5f;+PSWhCd-U^!`V@2>&`<^RP!TAx48V)V^jLEXUaEHK;;%r zR!E&XrmFU@Z=N$v!}3Z!Wg+h#7AG~Kv*RS`+qMQzNtfWH((bgo={q)J2) zbRB!4O2O3_y53A8P1d8b8851r?J8q6&b$xFVP^!{ev?zE^v2h`SJwV4In{&KM2KLx zq&A{wS|uWZTIEqh-7(xZfbAsHyVNXehgOoy=u|gae{s7@+{un@E`91g+}OM zUh!T4vXj9{PlFp=;ZHfYZyyWJ&2_O<*48A^#4;2K&@g6YCVKMHylPu8#t*%9I^iR8 z_ijP*QDaH7f!eAao$hs=ZuO2VjmBgRv!yvie79=wNZ|QtUx1g=2w!1mHFqX-(FoYEZ$5X79&`y@kEP%Pe|3I43{U`5Nl*K={_`z^ezw2yd_c6K#w9 zktA)lJGH!J@@tFg`LjFCS!>WD;ZOPSvSVA!+=`_aPcw*y@L>06yp!hH-T854BO?kU zGfnq7do`CZ8wO_GAK`A^hnDHF1oQKRyk6y)$2WSpG~-X&gnHDVAX=S5wjTqf3)e#7 z7Xa?_3xNGyoMkaO=N-nHIc&)45Pl=oQcG0osLkBsy&>Cd^_SgvTl^EDv!SH3k&rJd z8h!EUlQ9T%u=!Nrna__&VoO{EVp=Wl=SK)*vlo+pW4OqsT?wkXTbUEl%N*To@r&DT z&SJ)_^x$CD(W)o4tF{)*lhrcvYX8O*0m%p5XZamJU+5uB%xB$m5@RbF4ocm{ixOo! z85uoH-TZb1nwk3ZNe3Pu`ahpdpi5`hc(5deA{KqaQZ4iO5!{`)39M$<9sx%N!N;8i zEa8SO%&rSboln+^4y@VcO?OgQ8Z@KmMMQQtUx_Q<(Sy%ew3tio^%r9gJrUNhslCl5 z)x?xzl%v=a-1Q5h@I>$eI0#=e4!-^RoY!)uy09c}dcjod9wT1c*xEtAZ@ufmpm+4} zyBzOoGxW6=s`EPD~2V_?&&Bmd#LiYs$3EGqD>)$Kkq z5}MsyZ;mST&2`kgCfcxMW?c5Q-l1`j&J*ZjQN!`BuXc= z(uydvtA0;EmGJ!-cmYh=pPTCu8r*7+nBpfmg=;11;Egb(u4_2Gec&){f)6HCu4AA^ z)7)UY)lZ{WuV@*xsLtLjc_*(raeV20rE)6bT80E%Wx+AWXqM8>M?6gaShN*;i`&U* zMCA)il%%qn*k7KdTkByPoYu(hH9MT2gb5^@MVCc(TWkG}n~;kQsx*@B8rCZC8F`<5@yQX^cBRX=JO- zGuZfol$pd%gbj>n+{x`XGc(Ir0SoG8>bC5`uOS+>Kw5_{3ab!2WQ6xet(etY$_A7f z)!ptv5yo;e3QNIduEQE1^N#&n!&M0i8@7LrK97X!KWB0Oc8GuA8zQu`^S!1q!zH~c z7TwH=-Y8ch*Z3^JYHV%Ku~_Poz_EV;z&?J-mc6%_53Wa!aS%+IVu!~}%`^Jb#)+!X z_|t8X+8p%wGM}xxTPjd~*=~5Q+J@hYJ6QJoZFj(1O~w}cJc$cH*TJEBH}LE=q-ZO_ zw4CnlYBf%=fJ}EjpYCl{XH(Y}j7$;>;Zv?ggfH6)@+Kssp)TBkeS3ADJp+7F*DWw7 zK!Nb7tcE*}Wx&PfSb;K4qG4nq|ifuOkj3 z9#oxYl4`n#CB3rNoz&%SM*A&bnFoYlwxScm%4M&2OC`vAvK5PmDSmlVb(+1mGJ0aCS^B$~QwNL4DLJp7 zfXkt+Ynhw)A#b0I$7!BhZ`^IOiFMIvkz5^Ym)rKaeJv8Y?U*{ZBPGKUe4pnN^&7_= z0$(vIniHmr^F0p4?lXP;U(KlB_O_>;OtnTKokGN$g9nzP>`&hpMYcSx*Db>>uWpK= zl9Y_TL9HJ*Ihp=C;X0q1zQ5S<6C>0u1&P+WPtG?TM?_^^Q4Uyv#Ba}r1cJJFO`{Y1<{O=T~4N9J(rQE(`h0p`>t zZF7%RT$}M$Ij1;>;GTT3(o@C_$DUZ`M)D}*xvs2l7;*X>{BdWo5!wdMHLGe~S0#5G zWA@CG(Zi_P_krU&`9ec-W&6YD_rp@^OOAuzxKV$3*_!&{bHjt1`ijSTbMLNaN?Ho# zo%SN9FoUv^{t}j?*QmcN8;T(1H`-^M`nV45+A+1EMy2?-s$>=)+;2v|BC228B36h(>Zu z3QcF7nV%2IeHKC;v(UkW*|WEBevi>ihBOP5?VC9}Ln5`7JlkE5thvyUt!lg1RQ^4+ zE9Bx5V&H<*Sd#?lL{^ouj%^>jFk_;<>4g%*&^BN3WmXsubt+Rww30%XI-HJJo(ms$kHC4K zMWv8YIvvVKlB#b&+>I^)sBy*~Ih62EkiS6yyiI20J|xYm1$?d6`}(=Owh#uLb+&Jd zWFs;0&QJ>6cHP!VO>^UEeqdl6AOvqJQ%vTSZlpy@AJFFInZ(xKKu~-UDgLx6HI*?4 z$Cm5`ZA>GBrTWCBHb>jmZ*e>pa;)!)Dz%o6EM}pq1dL&fOrz)BL-1xrh$OY_ z_{XR~NBmiV!uPuShU}2L;&o6gp{_FOXEJGxk&wMkQ{+#zKj;LhM0jl3ekZqg2$8-x zi^ZNI6$)_|z(7krKpHWJ&qa;dSbQ4FV;w%`R5Xqvhly_M z#b*}Xqli5*lRv5;FYsjXXdQfP9=?q=d`DI}vdrv>xK^~6F>NGvI~_?`rhbo;k^p!c{w2Z%0HFWy^0fS0@y`)F0013- ztCT=^1%J-~0PpwYpZ-`d00{fXV|Dyv_S@@fyt?t#20AVq01#X@?my5~2m1^CH{g$| z<9{e4K>znL!k-il=v6+#0z-aRvMvjqWURt4eHIa@BHYS7)Y{{(GL{1L^eK`q!H~-1 z5tLQ<4aZ$9e$mXe=oPE41nZXJ;TpX{J5gV{yLc#N?nz*~HSlmsYWfUt&NQ`*%Q@ZY zY&(_*aSx{zhN=ixP>l*nQWhaU-oH^gW8bk6-TOTUTP)cJrn}yC&oG}7P4E#yN;X{# z^z_hFGT|h4>a1+3Ntn?jINNHyjJ?(4}9h~}|+@appn+-ZQ9{IYpVHAd8%#wM1JO_ub9avGcWEHFE zd@n}at>cOTmO-#`SK-qxQd(9|1)F8#11qJnW&oysJzgbXW?)pWsM8>eFrb%(iTvgH zdBVIKhDU*b^#KoVpNa&n;u^M~`q@Fi$8c*qtgn<2+;MzPPXIh9n3)hhCq9HXfD4Mw z0Cs`Ouvlpc#wjv}Ev-j~dc+SefF~KX80xMR7(>biZ{RDR%K0Lrw_!+&k4R%_xlAOl zW(%X3W6IqAfJgISvT#}&&z(^w!U)AA_HzvN16}}UwS95-?K|0&Ea3-Xx%=-ozo$JU z>~i#bC=_ppz2921t+Z%gmu=_G;yZ||@qV5+QqVh7E%m4CPKgNp7*5whb?SX1juPh= zi1y8SECuq^{7(k=Bz7`uDYz3~PTSLK@4djJ^y9N|Q$hu#P)w`nfI-3_LfqBwCl44# z{dEE{k=-MdgP&V@lO{?s8}*fy@LQH%*$iXFyN`*xX#`!TBg{1zavrzh>5Sb8!5mS@ zFzL#1j|(k1IWo8}NJ~1oT7NY#P)Ypptfr_RW^g8Cf^fG>PeF0#Z2Iw?(-{=nx1$~+ zQ`k7|jy}91ba^Ju#MUbOT*bwajd(J9b&!SI@TNHOw)KpBaXPKW;#Zngtk+hZEsH{L naf3Sx2m>S9EV_&j^0l-+H#XnV9@<)>OUrpiMG`_9axwQm9D^$# literal 0 HcmV?d00001 diff --git a/src/tests/data/images/mesh/points/point_set_visibility.jpeg b/src/tests/data/images/mesh/points/point_set_visibility.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..35b6a3d48a33a5b247cedb58137770255ba7d5f3 GIT binary patch literal 1072 zcmeH^I}XAy5JYFZ0!4_zmf!$Tr%ay$DH2=?ZW7LdI0T=DBXEOd9R-m@N+?pox>|d@ zpLu%G2mG$s79auIf!?vPY+S@5<0{y1Js~7anF`l%ffA@^EUQt`jG0|8;sWi^8|Fed zFWz=5pY7LQ&-T$Y-!<)MrX^-2CoU_aB6JmpN+D#kGx3MEd{$ literal 0 HcmV?d00001 diff --git a/src/tests/data/images/mesh/points/register_point_set.jpeg b/src/tests/data/images/mesh/points/register_point_set.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cb0d888308922f6f086c73feb3cdfd0e32869d99 GIT binary patch literal 2582 zcmeHIdpwkR7k{34jJs{dOeB{mLM}^V(vVE!l87C{xJ`sIlucAFHCm%kVZE3cCi$32 zi`|JZ-u^ZfJsoy+%g&i6Uzcldq$Q2=3W zdB_p~K>z>+AHe?^FcaMVnXH2RGXz02zZO7>g4&=q1a1dlNDxAT{CYs{b8^7Cz=dGK z;sO(TwTLf;KLAKVAOJ%^2tj>3{+HIjyJ?^veRkn~vv#<-4*`Xw?BACazmowfc0vZ#ghRLLJayp*P21BwX(z7OmgL^9x`%(-TMSy*y){1Q^2D;e7^ZoeB>OUA z^|vF}lUmE4{wW&>1WiE$KJXVVuyvQO5rCjkKo|rU7Fk1q2`WS(rO_%xxU$}EJg|L- zswZ8aU{4ARiu_!zuqkZ$>WVEByALD7(l|0JoBn!NS6`kc>hRKZ64qqeSluoEcw%V- znh#hXN)9EpXH;MFbJc6~Qwx6HkttVmEg3gLmgG4`mF83e6b?Z-jo~@-#?Xz<1?0_h zY2$;rn6flk{Uo9{+<2R@oP2H~!{#DycW}Fu+!I}OlT(zuMaRV5c(G20Z<5d_RB^15 zJhH(!EN`>+h(t`)h*o9d$}aQ?Unwhh2gA}!Y7ORXWKmzcUX}cl?^3)eQx9o17f3RxUt$I$HTP{+{I<)aEcJ(TVL zvO;8#{F+m1($c@z-mg0CVmXF*DPv6QpR7LW8y0Yc!%E+>tQewR6INBOXGZDoVwmZj ztA0P>dp|eZ!7nqWP?R8Jdv>t%5sAsI-GhyBk#M0VrHm#7%-^ywywl^Z)R|e;G4l>z zv1f9y7qGg`+K=j|DA|ZTkMET)ho8@>nqp>Oa6XALW5zjFXp(ckRdLrMYuQRr>h!tQ z=o}zL!bv0zH^q|3*;#rGOv;>fj{c6w*vSr2B9*cII9Gz*w9njbTmjYiKrVw6bJlx{ zHkfxP;D%L1jFBYgwFZ)hZ_!^KCAyL zAD}rm{n8<#FmA>x*v0T`_mE3NWvjP5_+>My+HKH#j)^1NwSt^zChc)T%Gdn^olgG6 zvbmbFqG@S!26t;25LAcG2x6DL`Z)Z3%!Gbc9I1qT+$WY0De7?|U`|KVt&_`h;=*G* z6Q~ia*w{3?An|&(yV0B)o;C5VmFHBljW;>DU{R1lgW#9TdY;vW$6_Z^T6mnO2fE~` zy+#I5O{FpYp%e_ng?NanM~MSCovRk%!INRrK_g@dt>Wfpp;aC&pCegZbzyA#74p zNJr{3x}=YWi13p-kwN@}U+pBHf^P$s6w3-+ppe$~-Dhc>v9EH`qh+?Z*ip`vz`NkO4xYb6RKj@7x4 z#DfX~Z@#sY+QwiMVFs)TfsN5Q)`MFu5#hs1_EW)k(}U~eEMgHRVSRfGr#H}ljyfkJiA0IB&aLoEv)54`*qk(mGGZ!Wo*^tP*rDfY;NI) zm+bn~ismhEbTXwDqY7ck(qpXsqX%T0HvK3l{?j4@AOSamUG{%jX8`((7k+gKApU*{ ze0EV3bRZ1eu;c&`Nd#2%1np=4NBbcbjj+w;Kc5o8{q(L$iMkNLT8e&&_S*WG(NbgR zbAX&9`dx!Y{3S0LMJ!h>7C-thPf~lcTn7af$Orc5Ls@$c>^n&94aF%FFfs9$I8L}C zA$qeG9@8aduhyWDgb{XanbDfR_hP=P{*1nJ0TQ^+L78p08LP7 Date: Fri, 13 Jun 2025 17:04:58 +0200 Subject: [PATCH 3/9] fix(edges & points): color & visibility on actor --- .../object/object_methods.py | 27 ++++----- ...protocols.py => model_blocks_protocols.py} | 0 ...rotocols.py => model_corners_protocols.py} | 0 ..._protocols.py => model_edges_protocols.py} | 0 ..._protocols.py => model_lines_protocols.py} | 0 .../rpc/model/model_protocols.py | 1 + ...protocols.py => model_points_protocols.py} | 0 ...otocols.py => model_surfaces_protocols.py} | 0 src/opengeodeweb_viewer/vtkw_server.py | 12 ++-- .../images/mesh/edges/edged_curve_color.jpeg | Bin 0 -> 10102 bytes .../mesh/edges/edged_curve_visibility.jpeg | Bin 0 -> 1072 bytes .../mesh/edges/register_edged_curve.jpeg | Bin 0 -> 7673 bytes src/tests/mesh/edges/test_edges_protocols.py | 31 ---------- .../mesh/edges/test_mesh_edges_protocols.py | 56 ++++++++++++++++++ .../mesh/points/test_mesh_points_protocols.py | 4 +- ...ols.py => test_mesh_polygons_protocols.py} | 0 ...ls.py => test_mesh_polyhedra_protocols.py} | 0 .../blocks/test_model_blocks_protocols.py | 2 +- .../corners/test_model_corners_protocols.py | 2 +- .../model/edges/test_model_edges_protocols.py | 2 +- .../model/lines/test_model_lines_protocols.py | 2 +- .../points/test_model_points_protocols.py | 2 +- .../surfaces/test_model_surfaces_protocols.py | 2 +- 23 files changed, 84 insertions(+), 59 deletions(-) rename src/opengeodeweb_viewer/rpc/model/blocks/{blocks_protocols.py => model_blocks_protocols.py} (100%) rename src/opengeodeweb_viewer/rpc/model/corners/{corners_protocols.py => model_corners_protocols.py} (100%) rename src/opengeodeweb_viewer/rpc/model/edges/{edges_protocols.py => model_edges_protocols.py} (100%) rename src/opengeodeweb_viewer/rpc/model/lines/{lines_protocols.py => model_lines_protocols.py} (100%) rename src/opengeodeweb_viewer/rpc/model/points/{points_protocols.py => model_points_protocols.py} (100%) rename src/opengeodeweb_viewer/rpc/model/surfaces/{surfaces_protocols.py => model_surfaces_protocols.py} (100%) create mode 100644 src/tests/data/images/mesh/edges/edged_curve_color.jpeg create mode 100644 src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg create mode 100644 src/tests/data/images/mesh/edges/register_edged_curve.jpeg delete mode 100644 src/tests/mesh/edges/test_edges_protocols.py create mode 100644 src/tests/mesh/edges/test_mesh_edges_protocols.py rename src/tests/mesh/polygons/{test_polygons_protocols.py => test_mesh_polygons_protocols.py} (100%) rename src/tests/mesh/polyhedra/{test_polyhedra_protocols.py => test_mesh_polyhedra_protocols.py} (100%) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 4ccf96b..c460e50 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -111,8 +111,7 @@ def SetEdgesVisibility(self, id, visibility): max_dimension = self.get_object(id)["max_dimension"] if max_dimension == "edges": self.SetVisibility(id, visibility) - else: - + else: actor.GetProperty().SetEdgeVisibility(visibility) self.render() @@ -128,17 +127,17 @@ def SetEdgesColor(self, id, red, green, blue): if max_dimension == "edges": self.SetColor(id, red, green, blue) else: - # actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255]) + actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255]) self.render() def SetPointsVisibility(self, id, visibility): actor = self.get_object(id)["actor"] - # max_dimension = self.get_object(id)["max_dimension"] - # if max_dimension == "points": - # self.SetVisibility(id, visibility) - # else: - actor.GetProperty().SetVertexVisibility(visibility) - actor.GetProperty().SetEdgeVisibility(visibility) + max_dimension = self.get_object(id)["max_dimension"] + if max_dimension == "points": + self.SetVisibility(id, visibility) + else: + actor.GetProperty().SetVertexVisibility(visibility) + actor.GetProperty().SetEdgeVisibility(visibility) self.render() def SetPointsSize(self, id, size): @@ -148,11 +147,11 @@ def SetPointsSize(self, id, size): def SetPointsColor(self, id, red, green, blue): actor = self.get_object(id)["actor"] - # max_dimension = self.get_object(id)["max_dimension"] - # if max_dimension == "points": - # self.SetColor(id, red, green, blue) - # else: - actor.GetProperty().SetVertexColor([red / 255, green / 255, blue / 255]) + max_dimension = self.get_object(id)["max_dimension"] + if max_dimension == "points": + self.SetColor(id, red, green, blue) + else: + actor.GetProperty().SetVertexColor([red / 255, green / 255, blue / 255]) self.render() def SetBlocksVisibility(self, id, block_ids, visibility): diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/blocks_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/blocks/blocks_protocols.py rename to src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/corners/corners_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/corners/corners_protocols.py rename to src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/edges/edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/edges/edges_protocols.py rename to src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/lines/lines_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/lines/lines_protocols.py rename to src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/model_protocols.py b/src/opengeodeweb_viewer/rpc/model/model_protocols.py index a9d46a8..a15a5ad 100644 --- a/src/opengeodeweb_viewer/rpc/model/model_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/model_protocols.py @@ -33,6 +33,7 @@ def registerModel(self, params): attributes = vtkCompositeDataDisplayAttributes() mapper.SetCompositeDataDisplayAttributes(attributes) self.registerObject(id, file_name, reader, filter, mapper) + self.get_object(id)["max_dimension"] = "dummy" except Exception as e: print("error : ", str(e), flush=True) diff --git a/src/opengeodeweb_viewer/rpc/model/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/points/points_protocols.py rename to src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/surfaces_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py similarity index 100% rename from src/opengeodeweb_viewer/rpc/model/surfaces/surfaces_protocols.py rename to src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py diff --git a/src/opengeodeweb_viewer/vtkw_server.py b/src/opengeodeweb_viewer/vtkw_server.py index 45dd29f..35135a9 100644 --- a/src/opengeodeweb_viewer/vtkw_server.py +++ b/src/opengeodeweb_viewer/vtkw_server.py @@ -18,22 +18,22 @@ from .rpc.mesh.polygons.polygons_protocols import VtkMeshPolygonsView from .rpc.mesh.polyhedra.polyhedra_protocols import VtkMeshPolyhedraView from .rpc.model.model_protocols import VtkModelView -from .rpc.model.edges.edges_protocols import ( +from .rpc.model.edges.model_edges_protocols import ( VtkModelEdgesView, ) -from .rpc.model.points.points_protocols import ( +from .rpc.model.points.model_points_protocols import ( VtkModelPointsView, ) -from .rpc.model.corners.corners_protocols import ( +from .rpc.model.corners.model_corners_protocols import ( VtkModelCornersView, ) -from .rpc.model.lines.lines_protocols import ( +from .rpc.model.lines.model_lines_protocols import ( VtkModelLinesView, ) -from .rpc.model.surfaces.surfaces_protocols import ( +from .rpc.model.surfaces.model_surfaces_protocols import ( VtkModelSurfacesView, ) -from .rpc.model.blocks.blocks_protocols import ( +from .rpc.model.blocks.model_blocks_protocols import ( VtkModelBlocksView, ) from .rpc.generic.generic_protocols import VtkGenericView diff --git a/src/tests/data/images/mesh/edges/edged_curve_color.jpeg b/src/tests/data/images/mesh/edges/edged_curve_color.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d190d02cdb01b35aa15e6c479e5d701937353356 GIT binary patch literal 10102 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 literal 0 HcmV?d00001 diff --git a/src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg b/src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..35b6a3d48a33a5b247cedb58137770255ba7d5f3 GIT binary patch literal 1072 zcmeH^I}XAy5JYFZ0!4_zmf!$Tr%ay$DH2=?ZW7LdI0T=DBXEOd9R-m@N+?pox>|d@ zpLu%G2mG$s79auIf!?vPY+S@5<0{y1Js~7anF`l%ffA@^EUQt`jG0|8;sWi^8|Fed zFWz=5pY7LQ&-T$Y-!<)MrX^-2CoU_aB6JmpN+D#kGx3MEd{$ literal 0 HcmV?d00001 diff --git a/src/tests/data/images/mesh/edges/register_edged_curve.jpeg b/src/tests/data/images/mesh/edges/register_edged_curve.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ab8130643b3ee752260b8ea86fd918ed73899f25 GIT binary patch literal 7673 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 literal 0 HcmV?d00001 diff --git a/src/tests/mesh/edges/test_edges_protocols.py b/src/tests/mesh/edges/test_edges_protocols.py deleted file mode 100644 index 1c62008..0000000 --- a/src/tests/mesh/edges/test_edges_protocols.py +++ /dev/null @@ -1,31 +0,0 @@ -# Standard library imports - -# Third party imports -from src.opengeodeweb_viewer.rpc.mesh.edges.mesh_edges_protocols import VtkMeshEdgesView - -# Local application imports -from src.tests.mesh.test_mesh_protocols import test_register_mesh - - -def test_edges_visibility(server): - - test_register_mesh(server) - - server.call( - VtkMeshEdgesView.mesh_edges_prefix - + VtkMeshEdgesView.mesh_edges_schemas_dict["visibility"]["rpc"], - [{"id": "123456789", "visibility": True}], - ) - assert server.compare_image(3, "mesh/edges/visibility.jpeg") == True - - -def test_edges_color(server): - - test_edges_visibility(server) - - server.call( - VtkMeshEdgesView.mesh_edges_prefix - + VtkMeshEdgesView.mesh_edges_schemas_dict["color"]["rpc"], - [{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}], - ) - assert server.compare_image(3, "mesh/edges/color.jpeg") == True diff --git a/src/tests/mesh/edges/test_mesh_edges_protocols.py b/src/tests/mesh/edges/test_mesh_edges_protocols.py new file mode 100644 index 0000000..ebaf563 --- /dev/null +++ b/src/tests/mesh/edges/test_mesh_edges_protocols.py @@ -0,0 +1,56 @@ +# Standard library imports + +# Third party imports +from src.opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView +from src.opengeodeweb_viewer.rpc.mesh.edges.mesh_edges_protocols import VtkMeshEdgesView + +# Local application imports +from src.tests.mesh.test_mesh_protocols import test_register_mesh + + +def test_edges_visibility(server): + + test_register_mesh(server) + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": True}], + ) + assert server.compare_image(3, "mesh/edges/visibility.jpeg") == True + + +def test_edges_color(server): + + test_edges_visibility(server) + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["color"]["rpc"], + [{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}], + ) + assert server.compare_image(3, "mesh/edges/color.jpeg") == True + +def test_edges_with_edged_curve(server): + + server.call( + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], + [{"id": "123456789", "file_name": "edged_curve.vtp"}], + ) + assert server.compare_image(3, "mesh/edges/register_edged_curve.jpeg") == True + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["color"]["rpc"], + [{"id": "123456789", "color": {"r": 255, "g": 0, "b": 0}}], + ) + assert server.compare_image(3, "mesh/edges/edged_curve_color.jpeg") == True + + server.call( + VtkMeshEdgesView.mesh_edges_prefix + + VtkMeshEdgesView.mesh_edges_schemas_dict["visibility"]["rpc"], + [{"id": "123456789", "visibility": False}], + ) + assert server.compare_image(3, "mesh/edges/edged_curve_visibility.jpeg") == True + + diff --git a/src/tests/mesh/points/test_mesh_points_protocols.py b/src/tests/mesh/points/test_mesh_points_protocols.py index f80e288..66359ad 100644 --- a/src/tests/mesh/points/test_mesh_points_protocols.py +++ b/src/tests/mesh/points/test_mesh_points_protocols.py @@ -1,8 +1,8 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.mesh.points.mesh_points_protocols import VtkMeshPointsView from opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView +from opengeodeweb_viewer.rpc.mesh.points.mesh_points_protocols import VtkMeshPointsView # Local application imports from src.tests.mesh.test_mesh_protocols import test_register_mesh @@ -44,7 +44,7 @@ def test_points_color(server): assert server.compare_image(3, "mesh/points/color.jpeg") == True -def test_points_visibility_with_point_set(server): +def test_points_with_point_set(server): server.call( VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], diff --git a/src/tests/mesh/polygons/test_polygons_protocols.py b/src/tests/mesh/polygons/test_mesh_polygons_protocols.py similarity index 100% rename from src/tests/mesh/polygons/test_polygons_protocols.py rename to src/tests/mesh/polygons/test_mesh_polygons_protocols.py diff --git a/src/tests/mesh/polyhedra/test_polyhedra_protocols.py b/src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py similarity index 100% rename from src/tests/mesh/polyhedra/test_polyhedra_protocols.py rename to src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py diff --git a/src/tests/model/blocks/test_model_blocks_protocols.py b/src/tests/model/blocks/test_model_blocks_protocols.py index 457a215..f3682c1 100644 --- a/src/tests/model/blocks/test_model_blocks_protocols.py +++ b/src/tests/model/blocks/test_model_blocks_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.blocks.blocks_protocols import ( +from opengeodeweb_viewer.rpc.model.blocks.model_blocks_protocols import ( VtkModelBlocksView, ) diff --git a/src/tests/model/corners/test_model_corners_protocols.py b/src/tests/model/corners/test_model_corners_protocols.py index 14f27aa..5ced01f 100644 --- a/src/tests/model/corners/test_model_corners_protocols.py +++ b/src/tests/model/corners/test_model_corners_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.corners.corners_protocols import ( +from opengeodeweb_viewer.rpc.model.corners.model_corners_protocols import ( VtkModelCornersView, ) diff --git a/src/tests/model/edges/test_model_edges_protocols.py b/src/tests/model/edges/test_model_edges_protocols.py index a14ce1e..ea7876a 100644 --- a/src/tests/model/edges/test_model_edges_protocols.py +++ b/src/tests/model/edges/test_model_edges_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.edges.edges_protocols import ( +from opengeodeweb_viewer.rpc.model.edges.model_edges_protocols import ( VtkModelEdgesView, ) diff --git a/src/tests/model/lines/test_model_lines_protocols.py b/src/tests/model/lines/test_model_lines_protocols.py index 8f63830..39a26b9 100644 --- a/src/tests/model/lines/test_model_lines_protocols.py +++ b/src/tests/model/lines/test_model_lines_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.lines.lines_protocols import ( +from opengeodeweb_viewer.rpc.model.lines.model_lines_protocols import ( VtkModelLinesView, ) diff --git a/src/tests/model/points/test_model_points_protocols.py b/src/tests/model/points/test_model_points_protocols.py index 15ca7b5..231ab61 100644 --- a/src/tests/model/points/test_model_points_protocols.py +++ b/src/tests/model/points/test_model_points_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.points.points_protocols import ( +from opengeodeweb_viewer.rpc.model.points.model_points_protocols import ( VtkModelPointsView, ) diff --git a/src/tests/model/surfaces/test_model_surfaces_protocols.py b/src/tests/model/surfaces/test_model_surfaces_protocols.py index 309daa0..c8323c5 100644 --- a/src/tests/model/surfaces/test_model_surfaces_protocols.py +++ b/src/tests/model/surfaces/test_model_surfaces_protocols.py @@ -1,7 +1,7 @@ # Standard library imports # Third party imports -from opengeodeweb_viewer.rpc.model.surfaces.surfaces_protocols import ( +from opengeodeweb_viewer.rpc.model.surfaces.model_surfaces_protocols import ( VtkModelSurfacesView, ) From e2fe4e5b73bd378c11059930996fef51c58ab6b8 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Fri, 13 Jun 2025 15:05:32 +0000 Subject: [PATCH 4/9] Apply prepare changes --- src/opengeodeweb_viewer/object/object_methods.py | 4 ++-- src/tests/mesh/edges/test_mesh_edges_protocols.py | 3 +-- src/tests/mesh/points/test_mesh_points_protocols.py | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index c460e50..d17fb4f 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -126,7 +126,7 @@ def SetEdgesColor(self, id, red, green, blue): max_dimension = self.get_object(id)["max_dimension"] if max_dimension == "edges": self.SetColor(id, red, green, blue) - else: + else: actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255]) self.render() @@ -135,7 +135,7 @@ def SetPointsVisibility(self, id, visibility): max_dimension = self.get_object(id)["max_dimension"] if max_dimension == "points": self.SetVisibility(id, visibility) - else: + else: actor.GetProperty().SetVertexVisibility(visibility) actor.GetProperty().SetEdgeVisibility(visibility) self.render() diff --git a/src/tests/mesh/edges/test_mesh_edges_protocols.py b/src/tests/mesh/edges/test_mesh_edges_protocols.py index ebaf563..214f745 100644 --- a/src/tests/mesh/edges/test_mesh_edges_protocols.py +++ b/src/tests/mesh/edges/test_mesh_edges_protocols.py @@ -31,6 +31,7 @@ def test_edges_color(server): ) assert server.compare_image(3, "mesh/edges/color.jpeg") == True + def test_edges_with_edged_curve(server): server.call( @@ -52,5 +53,3 @@ def test_edges_with_edged_curve(server): [{"id": "123456789", "visibility": False}], ) assert server.compare_image(3, "mesh/edges/edged_curve_visibility.jpeg") == True - - diff --git a/src/tests/mesh/points/test_mesh_points_protocols.py b/src/tests/mesh/points/test_mesh_points_protocols.py index 66359ad..609f891 100644 --- a/src/tests/mesh/points/test_mesh_points_protocols.py +++ b/src/tests/mesh/points/test_mesh_points_protocols.py @@ -72,4 +72,3 @@ def test_points_with_point_set(server): [{"id": "123456789", "visibility": False}], ) assert server.compare_image(3, "mesh/points/point_set_visibility.jpeg") == True - From ea0e0ee41d7e3ae7234734f48ed99d264fc27328 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Fri, 13 Jun 2025 17:09:00 +0200 Subject: [PATCH 5/9] revert try catch --- .../rpc/mesh/mesh_protocols.py | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py index cf26d9c..5d61136 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py @@ -23,33 +23,35 @@ def __init__(self): def registerMesh(self, params): validate_schema(params, self.mesh_schemas_dict["register"], self.mesh_prefix) id, file_name = params["id"], params["file_name"] - # try: - reader = vtk.vtkXMLGenericDataObjectReader() - filter = {} - mapper = vtk.vtkDataSetMapper() - mapper.SetInputConnection(reader.GetOutputPort()) - self.registerObject(id, file_name, reader, filter, mapper) + try: + reader = vtk.vtkXMLGenericDataObjectReader() + filter = {} + mapper = vtk.vtkDataSetMapper() + mapper.SetInputConnection(reader.GetOutputPort()) + self.registerObject(id, file_name, reader, filter, mapper) - data_object = reader.GetOutput() - data_set = vtk.vtkDataSet.SafeDownCast(data_object) - cell_types = vtk.vtkCellTypes() - data_set.GetCellTypes(cell_types) - cell_data = cell_types.GetCellTypesArray() - max_id = -1 - for t in range(cell_data.GetSize()): - t_id = cell_data.GetValue(t) - max_id = max(max_id, t_id) - print(f"{max_id=}", flush=True) - max_dimension = "" - if max_id < 3: - max_dimension = "points" - elif max_id < 5: - max_dimension = "edges" - elif max_id < 7: - max_dimension = "polygons" - elif max_id >= 7: - max_dimension = "polyhedra" - self.get_data_base()[id]["max_dimension"] = max_dimension + data_object = reader.GetOutput() + data_set = vtk.vtkDataSet.SafeDownCast(data_object) + cell_types = vtk.vtkCellTypes() + data_set.GetCellTypes(cell_types) + cell_data = cell_types.GetCellTypesArray() + max_id = -1 + for t in range(cell_data.GetSize()): + t_id = cell_data.GetValue(t) + max_id = max(max_id, t_id) + print(f"{max_id=}", flush=True) + max_dimension = "" + if max_id < 3: + max_dimension = "points" + elif max_id < 5: + max_dimension = "edges" + elif max_id < 7: + max_dimension = "polygons" + elif max_id >= 7: + max_dimension = "polyhedra" + self.get_data_base()[id]["max_dimension"] = max_dimension + except Exception as e: + print("error : ", str(e), flush=True) @exportRpc(mesh_prefix + mesh_schemas_dict["deregister"]["rpc"]) def deregisterMesh(self, params): From eaac12fce2def8a0185c07e7c7677c105f0b4fc1 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Fri, 13 Jun 2025 17:09:06 +0200 Subject: [PATCH 6/9] revert try catch --- src/opengeodeweb_viewer/object/object_methods.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index c460e50..3da26f2 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -117,7 +117,6 @@ def SetEdgesVisibility(self, id, visibility): def SetEdgesWidth(self, id, width): actor = self.get_object(id)["actor"] - actor.GetProperty().UseLineWidthForEdgeThicknessOn() actor.GetProperty().SetEdgeWidth(width) self.render() From 87e735a41cb30c2cdb1811cb3d0e2fe820a8abc0 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 16 Jun 2025 11:07:18 +0200 Subject: [PATCH 7/9] pr comments --- src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json | 2 +- src/opengeodeweb_viewer/rpc/model/model_protocols.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json index 21eab3a..9495dd5 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json +++ b/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json @@ -7,7 +7,7 @@ "minLength": 1 }, "width": { - "type": "integer" + "type": "number" } }, "required": [ diff --git a/src/opengeodeweb_viewer/rpc/model/model_protocols.py b/src/opengeodeweb_viewer/rpc/model/model_protocols.py index a15a5ad..9b4e579 100644 --- a/src/opengeodeweb_viewer/rpc/model/model_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/model_protocols.py @@ -33,7 +33,7 @@ def registerModel(self, params): attributes = vtkCompositeDataDisplayAttributes() mapper.SetCompositeDataDisplayAttributes(attributes) self.registerObject(id, file_name, reader, filter, mapper) - self.get_object(id)["max_dimension"] = "dummy" + self.get_object(id)["max_dimension"] = "default" except Exception as e: print("error : ", str(e), flush=True) From 991096a287b3cdb3bf0cdd70c6f3f7f5d5a071e4 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 16 Jun 2025 11:45:36 +0200 Subject: [PATCH 8/9] fix(CICD): python 3.12 --- .github/workflows/CICD.yml | 4 ++-- .../data/take_screenshot_with_background.jpg | Bin 6339 -> 6536 bytes .../data/take_screenshot_with_background.png | Bin 8873 -> 7982 bytes .../take_screenshot_without_background.png | Bin 10335 -> 9187 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 9851137..1cc5397 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CICD.yml @@ -10,11 +10,11 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.12" - name: Test run: | pip install pytest pytest-xprocess - pip install https://www.vtk.org/files/release/9.3/vtk_osmesa-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + pip install https://www.vtk.org/files/release/9.3/vtk_osmesa-9.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl pip install -e . pytest diff --git a/src/tests/data/take_screenshot_with_background.jpg b/src/tests/data/take_screenshot_with_background.jpg index b490cfc531dea2276a37cc744dc653f6eae4dafe..7edd297bf71ea6c863b76c1b9e0a32f06be49533 100644 GIT binary patch delta 5932 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 delta 5755 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 yF!bBG1Dn8J literal 8873 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 Z_%9yax{W>=r2DrzsFJ2)oxD}#{{XrNA&&q6 diff --git a/src/tests/data/take_screenshot_without_background.png b/src/tests/data/take_screenshot_without_background.png index d67f309cd8e9302deeafa8c155c0d6f007241895..6dda998410696ff889d1af15f73d973413292a72 100644 GIT binary patch literal 9187 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 Q=N*WW0$jdW*7V)~015P5yZ`_I literal 10335 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 From 254730b71c3bbfe0c28cf9198ec02001f869d4da Mon Sep 17 00:00:00 2001 From: semantic-release Date: Mon, 16 Jun 2025 09:56:51 +0000 Subject: [PATCH 9/9] 1.9.1-rc.1 Automatically generated by python-semantic-release --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bbd1f05..4b93ab1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "OpenGeodeWeb-Viewer" -version = "1.9.0" +version = "1.9.1-rc.1" dynamic = ["dependencies"] authors = [ { name="Geode-solutions", email="team-web@geode-solutions.com" },