From e3b96032e51edc0017f8764464334573f32ff608 Mon Sep 17 00:00:00 2001 From: "Mauro I. Dominguez" Date: Sun, 20 Jul 2025 23:13:39 -0300 Subject: [PATCH 1/4] ENH: Add subdivide tool to dynamic modeler --- DynamicModeler/Logic/CMakeLists.txt | 2 + .../vtkSlicerDynamicModelerSubdivideTool.cxx | 211 ++++++++++++++++++ .../vtkSlicerDynamicModelerSubdivideTool.h | 79 +++++++ .../vtkSlicerDynamicModelerToolFactory.cxx | 2 + DynamicModeler/Resources/Icons/Subdivide.png | Bin 0 -> 14581 bytes .../Resources/qSlicerDynamicModelerModule.qrc | 1 + .../Resources/Icons/Subdivide.png | Bin 0 -> 14581 bytes ...rDynamicModelerSubjectHierarchyPlugins.qrc | 1 + ...erSubjectHierarchyDynamicModelerPlugin.cxx | 7 + .../qSlicerDynamicModelerModuleWidget.cxx | 5 + 10 files changed, 308 insertions(+) create mode 100644 DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx create mode 100644 DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h create mode 100755 DynamicModeler/Resources/Icons/Subdivide.png create mode 100755 DynamicModeler/SubjectHierarchyPlugins/Resources/Icons/Subdivide.png diff --git a/DynamicModeler/Logic/CMakeLists.txt b/DynamicModeler/Logic/CMakeLists.txt index af102be..7ef71dc 100644 --- a/DynamicModeler/Logic/CMakeLists.txt +++ b/DynamicModeler/Logic/CMakeLists.txt @@ -47,6 +47,8 @@ set(${KIT}_SRCS vtkSlicer${MODULE_NAME}ROICutTool.h vtkSlicer${MODULE_NAME}SelectByPointsTool.cxx vtkSlicer${MODULE_NAME}SelectByPointsTool.h + vtkSlicer${MODULE_NAME}SubdivideTool.cxx + vtkSlicer${MODULE_NAME}SubdivideTool.h vtkSlicer${MODULE_NAME}Tool.cxx vtkSlicer${MODULE_NAME}Tool.h vtkSlicer${MODULE_NAME}ToolFactory.cxx diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx new file mode 100644 index 0000000..9dbd52b --- /dev/null +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx @@ -0,0 +1,211 @@ +/*============================================================================== + + This dynamic modeler tool was developed by Mauro I. Dominguez, Independent + as Ad-Honorem work. + + Copyright (c) All Rights Reserved. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +==============================================================================*/ + +#include "vtkSlicerDynamicModelerSubdivideTool.h" + +#include "vtkMRMLDynamicModelerNode.h" + +// MRML includes +#include +#include + +// VTK includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +vtkToolNewMacro(vtkSlicerDynamicModelerSubdivideTool); + +const char* SUBDIVIDE_INPUT_MODEL_REFERENCE_ROLE = "Subdivide.InputModel"; +const char* SUBDIVIDE_OUTPUT_MODEL_REFERENCE_ROLE = "Subdivide.OutputModel"; + +//---------------------------------------------------------------------------- +vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() +{ + ///////// + // Inputs + vtkNew inputModelEvents; + inputModelEvents->InsertNextTuple1(vtkCommand::ModifiedEvent); + inputModelEvents->InsertNextTuple1(vtkMRMLModelNode::MeshModifiedEvent); + inputModelEvents->InsertNextTuple1(vtkMRMLTransformableNode::TransformModifiedEvent); + vtkNew inputModelClassNames; + inputModelClassNames->InsertNextValue("vtkMRMLModelNode"); + NodeInfo inputModel( + "Model node", + "Model node to subdivide.", + inputModelClassNames, + SUBDIVIDE_INPUT_MODEL_REFERENCE_ROLE, + true, + false, + inputModelEvents + ); + this->InputNodeInfo.push_back(inputModel); + + ///////// + // Outputs + NodeInfo outputModel( + "Output model (subdivided)", + "Result from using the selected subdivision filter.", + inputModelClassNames, + SUBDIVIDE_OUTPUT_MODEL_REFERENCE_ROLE, + false, + false + ); + this->OutputNodeInfo.push_back(outputModel); + + ///////// + // Parameters + ParameterInfo parameterOperationType( + "Subdivision algorithm", + "Method used to calculate the new cells of the output mesh.", + "SubdivisionAlgorithm", + PARAMETER_STRING_ENUM, + "Butterfly",); + + vtkNew possibleValues; + parameterOperationType.PossibleValues = possibleValues; + parameterOperationType.PossibleValues->InsertNextValue("Butterfly"); + parameterOperationType.PossibleValues->InsertNextValue("Linear"); + parameterOperationType.PossibleValues->InsertNextValue("Loop"); + this->InputParameterInfo.push_back(parameterOperationType); + + ParameterInfo parameterNumberOfIterations( + "Number of iterations", + "Number of times the subdivision algorithm is applied.", + "NumberOfIterations", + PARAMETER_INT, + 1); + + vtkNew numberOfIterationsRange; + numberOfIterationsRange->SetNumberOfComponents(1); + numberOfIterationsRange->SetNumberOfValues(2); + numberOfIterationsRange->SetValue(0, 0); + numberOfIterationsRange->SetValue(1, 20); + parameterNumberOfIterations.NumbersRange = numberOfIterationsRange; + + this->InputParameterInfo.push_back(parameterNumberOfIterations); + + this->InputModelToWorldTransformFilter = vtkSmartPointer::New(); + this->InputModelNodeToWorldTransform = vtkSmartPointer::New(); + this->InputModelToWorldTransformFilter->SetTransform(this->InputModelNodeToWorldTransform); + + this->AuxiliarTriangleFilter = vtkSmartPointer::New(); + this->AuxiliarTriangleFilter->SetInputConnection(this->InputModelToWorldTransformFilter->GetOutputPort()); + + this->ButterflySubdivisionFilter = vtkSmartPointer::New(); + this->LinearSubdivisionFilter = vtkSmartPointer::New(); + this->LoopSubdivisionFilter = vtkSmartPointer::New(); + + this->OutputWorldToModelTransformFilter = vtkSmartPointer::New(); + this->OutputWorldToModelTransform = vtkSmartPointer::New(); + this->OutputWorldToModelTransformFilter->SetTransform(this->OutputWorldToModelTransform); +} + +//---------------------------------------------------------------------------- +vtkSlicerDynamicModelerSubdivideTool::~vtkSlicerDynamicModelerSubdivideTool() += default; + +//---------------------------------------------------------------------------- +const char* vtkSlicerDynamicModelerSubdivideTool::GetName() +{ + return "Subdivide"; +} + +//---------------------------------------------------------------------------- +bool vtkSlicerDynamicModelerSubdivideTool::RunInternal(vtkMRMLDynamicModelerNode* surfaceEditorNode) +{ + if (!this->HasRequiredInputs(surfaceEditorNode)) + { + vtkErrorMacro("Invalid number of inputs"); + return false; + } + + vtkMRMLModelNode* outputModelNode = vtkMRMLModelNode::SafeDownCast(surfaceEditorNode->GetNodeReference(SUBDIVIDE_OUTPUT_MODEL_REFERENCE_ROLE)); + if (!outputModelNode) + { + // Nothing to output. + return true; + } + + int numberOfIterations = this->GetNthInputParameterValue(1, surfaceEditorNode).ToInt(); + if (numberOfIterations >= 1) + { + this->ButterflySubdivisionFilter->SetNumberOfIterations(numberOfIterations); + this->LinearSubdivisionFilter->SetNumberOfIterations(numberOfIterations); + this->LoopSubdivisionFilter->SetNumberOfIterations(numberOfIterations); + + std::string subdivisionAlgorithm = this->GetNthInputParameterValue(0, surfaceEditorNode).ToString(); + if (subdivisionAlgorithm == "Butterfly") + { + this->OutputModelToWorldTransformFilter->SetInputConnection(this->ButterflySubdivisionFilter->GetOutputPort()); + } + else if (subdivisionAlgorithm == "Linear") + { + this->OutputModelToWorldTransformFilter->SetInputConnection(this->LinearSubdivisionFilter->GetOutputPort()); + } + else if (subdivisionAlgorithm == "Loop") + { + this->OutputModelToWorldTransformFilter->SetInputConnection(this->LoopSubdivisionFilter->GetOutputPort()); + } + } + else + { + this->OutputModelToWorldTransformFilter->SetInputConnection(this->AuxiliarTriangleFilter->GetOutputPort()); + } + + vtkMRMLModelNode* inputModelNode = vtkMRMLModelNode::SafeDownCast(surfaceEditorNode->GetNodeReference(SUBDIVIDE_INPUT_MODEL_REFERENCE_ROLE)); + if (!inputModelNode) + { + vtkErrorMacro("Invalid input model node!"); + return false; + } + + if (!inputModelNode->GetMesh() || inputModelNode->GetMesh()->GetNumberOfPoints() == 0) + { + return true; + } + + if (inputModelNode->GetParentTransformNode()) + { + inputModelNode->GetParentTransformNode()->GetTransformToWorld(this->InputModelNodeToWorldTransform); + } + else + { + this->InputModelNodeToWorldTransform->Identity(); + } + if (outputModelNode && outputModelNode->GetParentTransformNode()) + { + outputModelNode->GetParentTransformNode()->GetTransformFromWorld(this->OutputWorldToModelTransform); + } + + this->InputModelToWorldTransformFilter->SetInputConnection(inputModelNode->GetMeshConnection()); + + this->OutputModelToWorldTransformFilter->Update(); + vtkNew outputMesh; + outputMesh->DeepCopy(this->OutputModelToWorldTransformFilter->GetOutput()); + + MRMLNodeModifyBlocker blocker(outputModelNode); + outputModelNode->SetAndObserveMesh(outputMesh); + outputModelNode->InvokeCustomModifiedEvent(vtkMRMLModelNode::MeshModifiedEvent); + + return true; +} diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h new file mode 100644 index 0000000..776aaf4 --- /dev/null +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h @@ -0,0 +1,79 @@ +/*============================================================================== + + This dynamic modeler tool was developed by Mauro I. Dominguez, Independent + as Ad-Honorem work. + + Copyright (c) All Rights Reserved. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +==============================================================================*/ + +#ifndef __vtkSlicerDynamicModelerSubdivideTool_h +#define __vtkSlicerDynamicModelerSubdivideTool_h + +#include "vtkSlicerDynamicModelerModuleLogicExport.h" + +// VTK includes +#include +#include + +// STD includes +#include +#include +#include + +class vtkDataObject; +class vtkGeneralTransform; +class vtkMRMLDynamicModelerNode; +class vtkButterflySubdivisionFilter; +class vtkLinearSubdivisionFilter; +class vtkLoopSubdivisionFilter; +class vtkTriangleFilter; +class vtkPolyData; + +#include "vtkSlicerDynamicModelerTool.h" + +/// \brief Dynamic modeler tool to subdivide cells of a mesh. +/// +/// Has one node inputs (Surface), and one output (The subdivided surface). +class VTK_SLICER_DYNAMICMODELER_MODULE_LOGIC_EXPORT vtkSlicerDynamicModelerSubdivideTool : public vtkSlicerDynamicModelerTool +{ +public: + static vtkSlicerDynamicModelerSubdivideTool* New(); + vtkSlicerDynamicModelerTool* CreateToolInstance() override; + vtkTypeMacro(vtkSlicerDynamicModelerSubdivideTool, vtkSlicerDynamicModelerTool); + + /// Human-readable name of the mesh modification tool + const char* GetName() override; + + /// Run the subdivision algorithm on the input model node + bool RunInternal(vtkMRMLDynamicModelerNode* surfaceEditorNode) override; + +protected: + vtkSlicerDynamicModelerSubdivideTool(); + ~vtkSlicerDynamicModelerSubdivideTool() override; + void operator=(const vtkSlicerDynamicModelerSubdivideTool&); + +protected: + vtkSmartPointer InputModelToWorldTransformFilter; + vtkSmartPointer InputModelNodeToWorldTransform; + + vtkSmartPointer AuxiliarTriangleFilter; + + vtkSmartPointer ButterflySubdivisionFilter; + vtkSmartPointer LinearSubdivisionFilter; + vtkSmartPointer LoopSubdivisionFilter; + + vtkSmartPointer OutputWorldToModelTransformFilter; + vtkSmartPointer OutputWorldToModelTransform; + +private: + vtkSlicerDynamicModelerSubdivideTool(const vtkSlicerDynamicModelerSubdivideTool&) = delete; +}; + +#endif // __vtkSlicerDynamicModelerSubdivideTool_h diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerToolFactory.cxx b/DynamicModeler/Logic/vtkSlicerDynamicModelerToolFactory.cxx index e55e8f6..9ec6512 100644 --- a/DynamicModeler/Logic/vtkSlicerDynamicModelerToolFactory.cxx +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerToolFactory.cxx @@ -30,6 +30,7 @@ limitations under the License. #include "vtkSlicerDynamicModelerPlaneCutTool.h" #include "vtkSlicerDynamicModelerROICutTool.h" #include "vtkSlicerDynamicModelerSelectByPointsTool.h" +#include "vtkSlicerDynamicModelerSubdivideTool.h" #include "vtkSlicerDynamicModelerToolFactory.h" #include "vtkSlicerDynamicModelerTool.h" @@ -127,6 +128,7 @@ void vtkSlicerDynamicModelerToolFactory::classInitialize() vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); + vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); vtkSlicerDynamicModelerToolFactoryInstance->RegisterDynamicModelerTool(vtkSmartPointer::New()); diff --git a/DynamicModeler/Resources/Icons/Subdivide.png b/DynamicModeler/Resources/Icons/Subdivide.png new file mode 100755 index 0000000000000000000000000000000000000000..2b3f6f855ae7d9f17dec9c73676b34de377c7760 GIT binary patch literal 14581 zcmeIYWmFv95-yCphakb-!r-nMoS=gaKENQsb&wDsxJz&dF2RFqa3??@1cF;|cZW;z zzQ@*g|D3hH`|r$J-P66R>e*FKRqyGpo-j2PIc$s<7;tcK*b4H}pr>!i-y0gr)4s&o zX%P;NV985U*A)bTQ9C+2SXkRasa-uCq0~?hYYR9ykJnq~5nbx_oWFQUFLl(G`3v3_x4@AC93powr^WJGQbcG-h_@E-e>I|*!XScoWArS`!sqPb$m*;|FLu0 z7{!YTLoaS~&$BFSPUPVwyhUWB``3)Fne-1gYK`MTT`v7>_xELies?S?#u7?aqwh41Z$|D9 zr*5Y<^|`(d=*4w%4le1Y_NXO{5+*fW_u0-v*AdSNHv`vUH`shz%y;D^l6(G4 z1JA=E+)Gmi*vMG+oy>jn+G{IFkRs!zvNzU)4f}!0+#WBie(3A4Qz;Cq@Ymy-@u{kW zW3*zYkbb*qZ*!~8XK*lgQTx2C?7U|{n!TSyd;0@(r9T#<447d8ZOASp%e@RbiIBM=0Wu2wuz4d6 zn*Z{HX$;!!HV~UDsS;iU6#V`4E?P| zhV=&6;-lTgx{mHq|4?aJ^X$%?U3Tr7ipXL0u6+wtw)=abuG2+9pj~ss~lB$W3$B(pN3vaS2%gF2%DpqE~!1HM6U(h)WX+SpJ%RvPRmM z(XL+MMjVSpvHhcqwY;ylDcsTQ6V`6@qH1eCim#b8cq4?)lbLqZ)Urm1(vb(z9F7d# zSTKJe#upCIL{o%d_uph>SBG5|ZcMni_`jCa{2A7oETf!QUT~4xVmLl&*P!U(?frH@ zsmIZ-a@K~Dl;ts9PyqMa0)`JtQhm(^ogVHxjsYqBKC@k+50$#J9yVk6Ix86I);YB^@h-r6Y^7u=N$=-o z9JdV=MM4*Q2;X10<=FrhfoMel+XMNJq(kVM70>1aM9NAFKKt#H$9+;;El%QXC<=t8 zZ48!KMG^?SCM(DBL!wp?5FjGvT_K;uL)230T#OVMkZ8!z3~|7kV(O8MMz7~c)l@az zIjPtJ!o#eS!-GlBs| zYDye9)ZEYW0}6aB7iao|npJiF(hZ+HUxGY_KRAEwn3U|as$fQIws4}rg1u?jkK|Pq zT2h=mL4J%P7dpQtl7dJ_0x{?u5YGr)HWw8bKOrA#*-qfT93GN^r!#yP@T;n3TO^w{ zqiOmjfK)pyim9%n;iBgan|!HzeWtD_{?{3vYJ@uW!KxCx4Q#`S*th5xFvvMzPwL!v0Y0lK9-r7DxK!uH0WngLHszYJ%!UQPqufS6?1-ZotlS_=Nr}a! zE-=2bN4GGMPkM;^7f>)k3aKxD??9f!r>-CRH zFM)eGwFYlu@Y>-UxrQmPa5zaVGu==xDGkng>T@d9@%|X}U+Lsmvf3u3f~?_wY5sZaSk%Df8? zD1GC)V-R}U%9t0V7d8p|&AIz=KpD^9z>RnAAq`I5T6_r{c1bfqaNUKsZO%vzmy$d` z1rUUUlH);({t$VLFs=6mDBb&i%ikc1I+jTE>PR_v{q1gOn-j;;B@p&q9Q(;o>= zggcxI0y258qW0G4=Iv-OF5D(y6N6R5dlmE$!r2e11EZs5-=a-9vAlHhUqsQIj2 zGZ~Se%Te)#t^8;U494CQ8_)2}U|mFkb){>_p1;^)@$~P8?so059!j2TywS?+M+8ay z!tVUx9REJy^E)9idPKxE?APIwD0WwM&sg3qTLcO)JBSLLBBU?m&?Y%CqP)bOLmSLh zZFF}T82ijZL?oUCE~osSZLdmYux-bDCIwkTrzV(Akj^0G!~`2saSiB{#UgArtF@d5 z&%f!quHi0#2Phj>E2I!WYRq?{15*RJ?3GXp#f^*Q+}1x?yEfNEk7gW%Y8SF{R3SJ7ymDWKeOC(nJgDJyA zrtJrMWO1P!29~YT$L?ndrFi+kkF;3g115!>w(DZ#!L0D8@K;s>=F>8PoCewj+=XPp zx3FW?qLege1{ZYSDiq0_T@B^u<=j3JCuLo#i4XbaKvk5_Hwn2pYeS#0L|r@CoZ5j2ly!%Zn%-d6R6dj8D*L+;fjyk zyeTm)T>!n)ZwH*wWoSVQecxfS!bGT-BIfrSlr)6^c|+7?60>u5xQ$pTK2uF^_vdU8 z$_Wu+c6LY;anmm|Uy`1;!SyxrP7ldoVVU7)$p?hI{!&)7ED|Ccv6e=hfDuJiYR0)L z6PBP)E5F9?gD8+#|0|`+GhOK@_2hoaC#>Z(0 zHv}GGf@j0_cAC#k!rnYrWeK)VKQrZAD+|gOjeR?Y^Rr|wpn>^$1Vz2`-fH!)6EQaG zN)kQcV-><+1$;V#ajQK=H32?4q5SO-MJtuDeRjHKP!CMfx?x!Ge}83GAk=F`mNmk%!Esco<)sPQ=L)xn~Ii4iVDt%xj%5G3m(r6AwOF8eWz0gPS6XZx!i zSKSW#lBO}#K-Z0x@^h+l3++l0xixwO0ujN6*~%G&*iDhVjhSvXR{`8 zXuKZcWSi1_E2d3X!kTcw#Cf?<+`Tz!$w9sN0re8RmTd%OWR|xD$Y6?4&tojUaDGM`yZ0%QHy&)tmVR4PL)WY zhzR>=%1A-p=e+76Z)&_kH|9YM_uPG=Yr7lj&pojS1u#M?a>zw% z{6dBb1{+Z_7V6ShWS+%Bu6)J_>Hq|n@wR@&}ZlYN_C(qGZW`{8iU$89{Q`Gav<#=*_(FAD6kIu^$Uee{FVTXTD zFSzz2Cr{AKaUeChgq)af=YN`8-z)2D-=w&MZctkh2(zTp2mEj$b0-+|t=IyyWWMC5 zkbFg3q@!kmGbY_HSC(~t9~~{e6M7E0U)eRzyo}yr(i9S*?xXCc(VTehbBFTfJx*YS z%d~Y}F5{Wx$-sDa*YUgV#j@RS>_VuoKckKWfN}WZ{s-#h1j9bBl zvL&B2@h|84p%Ti7;?{x`ge!n(ob07?cSiY7$tr^CbXM>LhHnTf|Z{fzIb~mhMJ$&m|@LUFQ@FsV7myk;-6}KW~OnhMMgB3i6Kd zy{SKFkjrD5FGu7kavb|`?Qu*4Y~^vWfCuI?4jC!FAmMio|hy;MT_mb^WRqJ8-V6uIX24|ur&;$_13ifXAxD&_ws|uJ5n}Stm(%! zCqi#R=+o%6J)*~S1wL4Qq_r)g%k{ST{&xMovh&*E z9-gP2q1l!8+o+T3COugt&oiW~&wIy|mv7Z8!c6K!-3YX6iu}D^Xor(Hm&JFB#I}t& z-?&G0MPR^LFz*gW7qRWR#!jkhyqNgz7I|h5?54HVhZZ;xy0OHNU0Gh{%rCUh@n-n| zSDTK*mfKJpBeOXuC&5c}lD*`vo5-&WDCyvRZkt-redPh46fXo&VVSQO-X|dOu`;0U zmXVZ^=>i#jjU%E)CRQ3p4Qv)w5wFZXshnHhR48#sR+c|Fhov!-7)Om7`6iw|{u;k) zK)idDeAGeBozEs2T3-5vP9=fTw>|;~2OnrHC8eeyCH0S1*HeQl!zWHmzFU&K*H}M- zRx89E&u!qFFc|N-(F{kvbydnaU@ zx!vzFNx8VUJy+4H)b>o80>Fc6VMU>N;U(&A61&x1o)I;A#Z^;c*O*eCcF@#aUb)yF z+9YbAU*wCSPaVJv?I^-$*0ZV}S0Uu>@_emeYp9O_OABd1gXjV*32^T@ z>hJLpn_>PI3-#?Wb}gO=NSXd@<@=TVeyOSxyLRkeNLaRr#M5@li--W2Uni3xH@zIj zw=-glj$2Y64IH#3gfBMs4&^=>;&7xptZsbS{*)RPGv_asFk(6morquOGVSn%f?K|oK`{{L)1g~3BV5O3ZeF}v$b~-_7J1} zgDd=W{Ck*#mimv1tBn|~uCf}nl!G&rnis$e;AEHauy*IB6~~|!bvCyU21(2Q4e@j) zMr-Bj>L|>?0fWH+Fdl$|vn2FZ zjQbPF-wyp>EnGC8I=CDlsEdP}vl&#z9cu4N_wNwqX8*KzbaS@-6OOqV2hxc{O3kJ$ex zKWQl|3rjngx&3xeL0XLV_x!@<4rbQo!ha4;`T2SHc_EzaTtXHW?7S9GPId@{pNHK- zK*-G8f}7g{!o~Y1bLxm{|2GzZ2eS~5ZizE>Nk}66BG{*FFy~bpeef~@X2P-#&UTQebXwa%ETJ5Z_LhGHzX=z9rKTW8%MIZC*NB=e z#MR=-K#W$&+TP9MUjj{QJE(>$1BK#E06S0urb@~MG$Koj#VJT-Q#MQxB)4{=3jP|!n)W0qNlsC2LUrCX-c6rk9 z{9W;X*SrSQ>94cDE&*HXKO$=CKV>TnG5c#07l=F5{Le&Bc7KV?tRVK5(5LJB?}GZr zxb^=fS)344K?`$!ZgwGvxj8#8mw+idM2Op*9U|~Mi9*~we9*rb{wKPNgM}*$;tYLd z`4s6>G*1QeCmL$zKUA{(r!O!o=x?4lx%t>R`PjJyG`R$XxwxNdgq@Q|n3I#1nW4e=b*lbM~9Y|A(KybMgOhh9~I%P4Zvy z`#-w=N7sMFz<;Iuzv}uQUH=sW|CRFps_XwZx-kCrzyq~^x(k9mJln1-O!R-nD-r$|shMo@KP+b+2Wl*<~$q2E?@$ZUu;oyi? z6r^8iKK+Ly9UNJ%<38={eG|+x>57UwZO>#sC%B`YL-Vmuiq7gq8d^eh4`vUVzhpR) zC^dZ`96r5~M>rnt5uPMkm^?ZoGf0ved7hDxzG{up71q3fV~;xxD=E>iyebqs{(M>N zZBU_K;k}?7kf1v2w)1u~3fJD5ZY4~Yejn>L^N zN}isUUY(R{u8H@0D&S!?s?=frq{!oaBN?7JAzYT{O^7)k3#_!+!%LLiH#akdsiZk} zPDDegcw7;Jp$sNU0nrrz@vg6msCKdc;2rjZu_$KttJQI9k!nKDXWSyYB)7e&-1`h-F}r@cZIczES6-lW1JdjZ5IuP z%@fROXa*0uD#ckEkp)d*_;(16U5wVZzP%QIAM-UPDYED};ODIy4F@I-4;og84B%0&%-L1HZuqj zit`hIXbRFe0g0#A2BSo%&W=&!W$b$sB%Yf)y!N$vS|Jd@VTaxz83^Yi@~xiYv=_hT8a}`QjSGrwL*ecSWP$oEkTiWts8!r0^O4~7 z5$S0;4s=008jlfs$)tZCAFPMGF7JJOk)!gw-zx5O-Z*3ad!sYx*-nvd( zpxNFkcq;hxy(56&?Nt@3xfU_8l6B^U?0x>k4k^nz00G}jx+ioB1E~j%MmixjCAWtp z056V&Ks`d_t4t(b9(7>CN%#;a`m?*P3GC7}3`N$kiTJh}!U95Ic-7R-2QBNKsZr^9 z-}P1Bqp9|Vm%=Sh*N#l4cape`hjhg2R-i+zypz;wKqedOsjYg7m|23FB871|rA~jb z3VL_#;zrj2ay_h`GpNry3)p3q5Px{;hlgl5SEE<%XrImeTt=NX*L;h;n-lMSe~90{ zn3Th~-ii;NIMTDX^VnQQPw&fV*6Z4KlSgl^awbf~UZ9(Ot)JLoDV}rz4HXsOwWJ>q zO3~BrFnak)K%O?X}Q^i4kVWx{kl)ZcQ=Evx$%M}r6t_2P$2@jwKKuJtm!@6`>NmazQWsI2Bt zV!9IsSpsm;;Pq?@zq3fgt2^&5GfKymf!FZ-Nn|3O2s0i%jyhQj?BC?Q8yBHcokTsJ zhts6XOH}s;4a(&c>MtUX^NBs>kD#0ZK@F%ekhVWasjn}Rk}GepO!o>Y5KkTngaJh3 z9SP5A=)nWCzre!}l(UBC@+Wvp+eShQlHX~zfNdfy%B1y5<})l{VtvW8K?zy4RE)T?%5XSR_Erm;7}M z7nC)?x8oyTB1f{X9Cm1S9rYt)tG38Qjei zzg$3(mf^#|)WNTQ7>5ew!YoDUw)ThzNc{(Lp(YYBcoapm>}Sj8Uh@_pYZxK5j5MqN zII`k)#>NEFmDP4y^p9$&jrY*S1;5+J=H3*;Iq&{uVXrv?Aa$_hSzKrICq|TF(FPoP zed4}A5>nyhosb{Y+NJL%UfzzeZ|+Yv9kKoRl+n~Fz$NRXf};jx17pxo#VU%cPxT&{ zmlEl>m@(?}oqy^fkvWRn)-*L8SzKqYcV{Go#;qEm)v|sXK`O_h4&_=cGZQz?P25;5 zNVo{k&E`agYSEgnvQm+MOx&U&FryFlbD>Q0KhFO(aqlfS4pRMa`EzlcUu?)Kw)zMl z+NkGBKx4!ao=cFc#U<;j0tZY}V35I5_aNqWGiRrh%{Y~(Nwtq+nM@g+B4J>V$zj0= zz_Y%v;SomZ0QXOT!>diaEyFMUe^hr`DKFttXTO}LMw{|o6V^B*648wuk7RsqQHT!a z_}SQU_Kr&W$cUApAOX0ja32pN&<&J-AFRoZlJ!lsjLb=V86^aSVa6+yQ@lffSFtEVZQHx0W{U5jcTiH({BWRQn`LB3VO$I*=?etqqrSSjj*@4coRmEK{U3 zg}2WY*>dU-a+R!q-P1FVP1FV|QBxz0dYLLYZIz))v%XD`ln>(%uV#hYN&|dhT8g`j zuD7#p$t(f5D7=i}<1FXX(#lQ9wG+v3X&Ax97inDUDk=+~f9*F(U`EK5|1F%xf8B+l zEDDH51C;JFFBKJl^CZ9n<#P+X-?uyXE~Yr_Dn6F@H8?>F9$~h=TQB5PoOH=uQ)^Ig z?C#c7-9|Q#fCYJ^q!TQMhHt|zC6JwvUxtw%f0#;N9KX0+?Y^ARf9=QRrQE!#QsdiZ zM6KfqM86T|+BetJNDv-Ti?k}xsKtnGZ#?wUE)6ze=q&n486#&^et5)(-qBoPrOiIv z8&3VwM}#_GzVEdR+Tp%SpwfCB;d`wTWDx7uL<`pW=$Aef$`2iUloaG|+gDTMdZCrzRw7)0=W3T#Gd4Jeytj-8%qRH54cFM| zBM&#VNDMLrNGp2JT4|1cdFLZFW7kqqWG5V{J?R#tjluBrTcVcKi-PtL2rG{|R994w znd0Jb-r>QcGn`wQ&U%h#8b6S6N|N_Xz&dE6m`VZJpcRH2O4H;T$+fPTTK!7VmsUZ8 zW>t!SCrvA2B3yX$+HI1B!69JT2Pecpw>Q)!x?&d}s1~y`2VNKJ(Iqfrt$q8jr^lZR z%8nWm3zcLEQsbTm92+6w$3NVF7BPh9*5fu=o4=STYj`wg+)Qb5mL0rIPkptlx^c5epD@E39V5!M$m6@SU8b(EWH8dkb&~jZc?=! z_arnL?w|hk*5GpCn+jC?R3+InL%C_o#jxnn`ZFo1$l@+cfJun|^?3ZfKI%&g?DJYl z>qI{P%nFJr=a$a_AL~mmUWo|SRC%3s!UdWfrZ1#DGKgSFR79nv4B^pLfzNX(%TK~% zdT^rc*LA;&0E`x)RR-D4D%y&swK<&6Wvv4V2J*AkTGzH5J4b9n!ahq&eUGWmPD@Ll z#KFaq%1Ry(?UV~%`?nLny>hPEk`3uyl}wgdGi-ElnoO&nAS}pX=2Lua8am(j4w2Z4NLhwY zC4wesJOv2B2pCk3nNYYrNcX>=!M{DF3soCKREdt&qv)@5dG`gyZ#c&1&?<@I6x_XP z732ay2LzaHeg7N~;bR$NfqDwFZ)@@OZQ0}SqI#fpq&mX&ugok!6NA5_TORgfJh3@% zyqWRRjIPs;k!Pp_5!ms{pwO~#$K_5?OIrK0XdOJKSF}v*L&J-!w@w`+s#R7!qTGBL zc1qhEE6*O9-^YfOB}ThkmS^YPY~O)HWJ#fANSm)z{Ecxrc(J#F;-W?C@esFS?A>UK zqr?&Ck@>r~q(3FF{cd@H#-mjy5x~&)I&bS+8yThitPUqnP$YfGmgaLnkpn6)v_B~B z(m$u>3`{;a3?0XQw+Opf|IvCKbZ-;FL9w7WY8nY}=$J)q!+DE!#e5XEhphA5aeynufP-fU9Wh9N&*KDE}LRwumhn|uL@*YJ}IZ|l3j z4M{Vx+;yYkh-wMJBsG&3Vk5a`d=5wA*_csW)*BzVpI7H+nu}~o)dpn2_K(tsJx}k> zOK&+ATD?3-fR14J3(t8t9DfNc(Uix>a1;Q1*4WCCO^2^o9EaJ`&!dBM0pi(DI?C44 z>MvGGk9y@>jV*$@E&zN>P1{)FpHl?pTfOAb{P#biD>9ghmXcNnm~rWk^COB77aDk( zgj54Mm2<$N=kQ zMfb3CG8~mTm+$2$j~8Uq#IsvE5x|J*iNJ|FCyWC+S|1`-pwTDYuiEp??$R||C(pHe z(7rF=uPewf1CIt5Hfx>_KfV9A*i<}&f^a)={lE> zw?72z_q>VuqZY|&Lb@O=(!); zDeQj1sGz3M3&MH@2wwbBE&3+2{ohzB*1Bw);K>YTCvu`uPa-*NE?KSxN`{Z)UU#`` zR=%&MXGqLuNr`+E9SnI)LP(`7XBN{}eL}lUh!=x&h(d<5d^bg&+8(1eI=HrncVQ`) zOp(Shm2eVq`%NW0q-B1?GweO2MtJ_8Gu+8;ELxb8667 zkQDR3z=M+_@%NSmg$;;&L=qI)(xA!2N^dy=$w9533JVCb9We+JDK-H*+!7hym#|1KFJjZ9emYyML&GES z^fXZAB5t3_W|5v++QsT3JYsqvUHOm(szTuw zM{}GhRR!%bkd})z;I15mWIkHtqrCIoDE@NSJW}^saLv1k3~pfWQNPLOEv*2~*soX* z0iCdw4DX9I3JZFRwJag{4ouH0jYS84naq?dgv_V%B>y?+-gqbOE6~!bI!9ZRwYv_u z{Duqfi{~NiJ454`(7sjMoA1%LcJpYd0>8}WId3gXw%kyYEROLO{|e!VVOe$k(U-)7 z`gDeN&T&lcBgez=wJH9V3+Xk_H6}+ELarcmAS%Z{YvaD1^k(}mP1LNc62@giY%Bq< zJ0R=JS9Iom;&;AM&3I(&9P>FHyA9z^-kv#gFhkw8arqV|*9v2lxhVV&Tz-kGYiyI@ zX_CP+l}F}YR(UCU{b=`;i^WhHTft4;8rr*fr;d=TNFmtf~ROri! zkn%=&dPkjTg{5S4b^0teB^Z+jx{>-C{82Av`1;POd)a<%Hfw;A3-JNvh+~X;7Z zko5#)u`y5 zc%>fhI0PH0L>+GYEI(BiO)xt>zVq-^Dg7=QAoH*|Vu(f4zbo8OSzR>$b!672NzEIv zG0oD8Vkv9L&lmHG31)T|@-RLb)@G8}53BynT2rOvK6d`;lv!YY#xh`*TzptGEy^(r z*7z8+Id}zL7C7jQYS-x(W^nWD4W}TZ LB3%JAdH;U^d!-Q3 literal 0 HcmV?d00001 diff --git a/DynamicModeler/Resources/qSlicerDynamicModelerModule.qrc b/DynamicModeler/Resources/qSlicerDynamicModelerModule.qrc index 10e91cb..63d791c 100644 --- a/DynamicModeler/Resources/qSlicerDynamicModelerModule.qrc +++ b/DynamicModeler/Resources/qSlicerDynamicModelerModule.qrc @@ -6,6 +6,7 @@ Icons/DynamicModeler.png Icons/Extrude.png Icons/Revolve.png + Icons/Subdivide.png Icons/Hollow.png Icons/Margin.png Icons/PlaneCut.png diff --git a/DynamicModeler/SubjectHierarchyPlugins/Resources/Icons/Subdivide.png b/DynamicModeler/SubjectHierarchyPlugins/Resources/Icons/Subdivide.png new file mode 100755 index 0000000000000000000000000000000000000000..2b3f6f855ae7d9f17dec9c73676b34de377c7760 GIT binary patch literal 14581 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 LB3%JAdH;U^d!-Q3 literal 0 HcmV?d00001 diff --git a/DynamicModeler/SubjectHierarchyPlugins/Resources/qSlicerDynamicModelerSubjectHierarchyPlugins.qrc b/DynamicModeler/SubjectHierarchyPlugins/Resources/qSlicerDynamicModelerSubjectHierarchyPlugins.qrc index e4c40be..08f0652 100644 --- a/DynamicModeler/SubjectHierarchyPlugins/Resources/qSlicerDynamicModelerSubjectHierarchyPlugins.qrc +++ b/DynamicModeler/SubjectHierarchyPlugins/Resources/qSlicerDynamicModelerSubjectHierarchyPlugins.qrc @@ -11,5 +11,6 @@ Icons/Mirror.png Icons/ROICut.png Icons/SelectByPoints.png + Icons/Subdivide.png diff --git a/DynamicModeler/SubjectHierarchyPlugins/qSlicerSubjectHierarchyDynamicModelerPlugin.cxx b/DynamicModeler/SubjectHierarchyPlugins/qSlicerSubjectHierarchyDynamicModelerPlugin.cxx index 23c4211..3f4a47d 100644 --- a/DynamicModeler/SubjectHierarchyPlugins/qSlicerSubjectHierarchyDynamicModelerPlugin.cxx +++ b/DynamicModeler/SubjectHierarchyPlugins/qSlicerSubjectHierarchyDynamicModelerPlugin.cxx @@ -41,6 +41,7 @@ #include "vtkSlicerDynamicModelerPlaneCutTool.h" #include "vtkSlicerDynamicModelerROICutTool.h" #include "vtkSlicerDynamicModelerSelectByPointsTool.h" +#include "vtkSlicerDynamicModelerSubdivideTool.h" // DynamicModeler MRML includes #include @@ -248,6 +249,12 @@ QIcon qSlicerSubjectHierarchyDynamicModelerPlugin::icon(vtkIdType itemID) return QIcon(":Icons/Revolve.png"); } + vtkNew subdivideTool; + if (strcmp(associatedNode->GetToolName(), subdivideTool->GetName()) == 0) + { + return QIcon(":Icons/Subdivide.png"); + } + vtkNew hollowTool; if (strcmp(associatedNode->GetToolName(), hollowTool->GetName()) == 0) { diff --git a/DynamicModeler/qSlicerDynamicModelerModuleWidget.cxx b/DynamicModeler/qSlicerDynamicModelerModuleWidget.cxx index 3243902..b2060ac 100644 --- a/DynamicModeler/qSlicerDynamicModelerModuleWidget.cxx +++ b/DynamicModeler/qSlicerDynamicModelerModuleWidget.cxx @@ -57,6 +57,7 @@ #include #include #include +#include #include // DynamicModeler MRML includes @@ -133,6 +134,10 @@ void qSlicerDynamicModelerModuleWidget::setup() this->addToolButton(QIcon(":/Icons/Revolve.png"), revolveTool, buttonPosition / columns, buttonPosition % columns); buttonPosition++; + vtkNew subdivideTool; + this->addToolButton(QIcon(":/Icons/Subdivide.png"), subdivideTool, buttonPosition / columns, buttonPosition % columns); + buttonPosition++; + vtkNew hollowTool; this->addToolButton(QIcon(":/Icons/Hollow.png"), hollowTool, buttonPosition / columns, buttonPosition % columns); buttonPosition++; From cd072a66bd2e2d3c5811708699b7cef10996d03e Mon Sep 17 00:00:00 2001 From: "Mauro I. Dominguez" Date: Mon, 21 Jul 2025 09:01:18 -0300 Subject: [PATCH 2/4] COMP: fixes so dynamic modeler subdivision tool compiles --- .../vtkSlicerDynamicModelerSubdivideTool.cxx | 23 +++++++++++-------- .../vtkSlicerDynamicModelerSubdivideTool.h | 5 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx index 9dbd52b..29e00f6 100644 --- a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx @@ -31,6 +31,7 @@ #include #include #include +#include //---------------------------------------------------------------------------- vtkToolNewMacro(vtkSlicerDynamicModelerSubdivideTool); @@ -69,7 +70,7 @@ vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() SUBDIVIDE_OUTPUT_MODEL_REFERENCE_ROLE, false, false - ); + ); this->OutputNodeInfo.push_back(outputModel); ///////// @@ -79,7 +80,8 @@ vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() "Method used to calculate the new cells of the output mesh.", "SubdivisionAlgorithm", PARAMETER_STRING_ENUM, - "Butterfly",); + "Butterfly" + ); vtkNew possibleValues; parameterOperationType.PossibleValues = possibleValues; @@ -90,10 +92,11 @@ vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() ParameterInfo parameterNumberOfIterations( "Number of iterations", - "Number of times the subdivision algorithm is applied.", + "Number of times the subdivision algorithm is applied. If 0, the input mesh is only triangulated.", "NumberOfIterations", PARAMETER_INT, - 1); + 1 + ); vtkNew numberOfIterationsRange; numberOfIterationsRange->SetNumberOfComponents(1); @@ -115,9 +118,9 @@ vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() this->LinearSubdivisionFilter = vtkSmartPointer::New(); this->LoopSubdivisionFilter = vtkSmartPointer::New(); - this->OutputWorldToModelTransformFilter = vtkSmartPointer::New(); + this->OutputModelToWorldTransformFilter = vtkSmartPointer::New(); this->OutputWorldToModelTransform = vtkSmartPointer::New(); - this->OutputWorldToModelTransformFilter->SetTransform(this->OutputWorldToModelTransform); + this->OutputModelToWorldTransformFilter->SetTransform(this->OutputWorldToModelTransform); } //---------------------------------------------------------------------------- @@ -149,10 +152,10 @@ bool vtkSlicerDynamicModelerSubdivideTool::RunInternal(vtkMRMLDynamicModelerNode int numberOfIterations = this->GetNthInputParameterValue(1, surfaceEditorNode).ToInt(); if (numberOfIterations >= 1) { - this->ButterflySubdivisionFilter->SetNumberOfIterations(numberOfIterations); - this->LinearSubdivisionFilter->SetNumberOfIterations(numberOfIterations); - this->LoopSubdivisionFilter->SetNumberOfIterations(numberOfIterations); - + this->ButterflySubdivisionFilter->SetNumberOfSubdivisions(numberOfIterations); + this->LinearSubdivisionFilter->SetNumberOfSubdivisions(numberOfIterations); + this->LoopSubdivisionFilter->SetNumberOfSubdivisions(numberOfIterations); + std::string subdivisionAlgorithm = this->GetNthInputParameterValue(0, surfaceEditorNode).ToString(); if (subdivisionAlgorithm == "Butterfly") { diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h index 776aaf4..75aff75 100644 --- a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.h @@ -35,6 +35,7 @@ class vtkLinearSubdivisionFilter; class vtkLoopSubdivisionFilter; class vtkTriangleFilter; class vtkPolyData; +class vtkTransformPolyDataFilter; #include "vtkSlicerDynamicModelerTool.h" @@ -69,8 +70,8 @@ class VTK_SLICER_DYNAMICMODELER_MODULE_LOGIC_EXPORT vtkSlicerDynamicModelerSubdi vtkSmartPointer LinearSubdivisionFilter; vtkSmartPointer LoopSubdivisionFilter; - vtkSmartPointer OutputWorldToModelTransformFilter; - vtkSmartPointer OutputWorldToModelTransform; + vtkSmartPointer OutputModelToWorldTransformFilter; + vtkSmartPointer OutputWorldToModelTransform; private: vtkSlicerDynamicModelerSubdivideTool(const vtkSlicerDynamicModelerSubdivideTool&) = delete; From abed2d06343a13f8551db908b29de8c37d6128a1 Mon Sep 17 00:00:00 2001 From: "Mauro I. Dominguez" Date: Mon, 21 Jul 2025 16:15:55 -0300 Subject: [PATCH 3/4] BUG: Fix some input connections missing for the subdivision tool of the dynamic modeler --- .../Logic/vtkSlicerDynamicModelerSubdivideTool.cxx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx index 29e00f6..1d85fae 100644 --- a/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx +++ b/DynamicModeler/Logic/vtkSlicerDynamicModelerSubdivideTool.cxx @@ -117,6 +117,9 @@ vtkSlicerDynamicModelerSubdivideTool::vtkSlicerDynamicModelerSubdivideTool() this->ButterflySubdivisionFilter = vtkSmartPointer::New(); this->LinearSubdivisionFilter = vtkSmartPointer::New(); this->LoopSubdivisionFilter = vtkSmartPointer::New(); + this->ButterflySubdivisionFilter->SetInputConnection(this->AuxiliarTriangleFilter->GetOutputPort()); + this->LinearSubdivisionFilter->SetInputConnection(this->AuxiliarTriangleFilter->GetOutputPort()); + this->LoopSubdivisionFilter->SetInputConnection(this->AuxiliarTriangleFilter->GetOutputPort()); this->OutputModelToWorldTransformFilter = vtkSmartPointer::New(); this->OutputWorldToModelTransform = vtkSmartPointer::New(); @@ -199,6 +202,10 @@ bool vtkSlicerDynamicModelerSubdivideTool::RunInternal(vtkMRMLDynamicModelerNode { outputModelNode->GetParentTransformNode()->GetTransformFromWorld(this->OutputWorldToModelTransform); } + else + { + this->OutputWorldToModelTransform->Identity(); + } this->InputModelToWorldTransformFilter->SetInputConnection(inputModelNode->GetMeshConnection()); From 9b89e70a755fe704202eb7c6048cecd502d4e23f Mon Sep 17 00:00:00 2001 From: "Mauro I. Dominguez" Date: Wed, 23 Jul 2025 15:57:49 -0300 Subject: [PATCH 4/4] ENH: add icon for subdivide tool of dynamic modeler --- DynamicModeler/Resources/Icons/Subdivide.png | Bin 14581 -> 13261 bytes .../Resources/Icons/Subdivide.png | Bin 14581 -> 13261 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/DynamicModeler/Resources/Icons/Subdivide.png b/DynamicModeler/Resources/Icons/Subdivide.png index 2b3f6f855ae7d9f17dec9c73676b34de377c7760..ff6340ecac01bd014d6722e499da8337aa22c570 100755 GIT binary patch literal 13261 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 {9+ z!eDuKj0@HtZ?mz|#u$C1r4R&{WK@2ziYnrd-jvt}Z$J3*ogXazzV|*IAv8M;@x$Wi zaqK_ZXS*lp53@n4y}TpuZ(>vmf0G%|SwMk$3>QrzdBpjLToU_>BR8Yc!ITj{w? zm8P*)c;|7>=M51qFN8Ylu*G+!%(1XzjAVHL=T@RWXKCwq3*y}&=I&VHhrtj}3&Q_O z+x&a)A0niHncd>i=buFX{5S2&M$sRxWY{I1e=fSkk#iWis&9NzDE&I1W|r)q+lLRn z{5>C~-WN@_`<>#Rk&f}dEv@Rca^p7B@^!LQ5ydM@u%T{Q7#w*!Q+ST@3eqQRhg+m_9olW#*{)RN~sZX67VHa!yx6@ zV@8J!pk6GbAA7fYh>t%>^pV7$sxowlm*@eXc(?9hWk^>^sq?>V>TV+1N++&aNmM2x zqh`RDm9`_1+M(w!>Ppto=De`iU$x$`+3I9;cN(^Ts?yjY9%3FWIX3_v?#baHgTT;Sw(a<#sPw_DU+Q9z|V(GR}%fnqTS7V{Jr~0Z*$^VPeuG`Mc`182=iTB zDIO$(T)0)9@^rBr)2H81fl_&+?a;jWrZy*vz+b2|OG>yoRLb7-leILC3!;zmT{w>T zX9WPj@7UDMnbPoONh5IXYFJb3ztD7O#kr*eFXJy*`i2gMyLSu#tto}vDCSE%yuFe| z=^@1WBgFREs>4Sef9uKH*5_}F4tMUtj0x+9D55ck_rCbcTf=L7GR%;@-JnN`5kXRXqWKm#Zxl^5TfdE@s~E96_|_ zDT43k1z?N)S7t+j3wN%($}zk0OvkJ#Y2bxoy&iZ}Q#$)Np7Z|z@u7F;A!_2z00000 LNkvXXu0mjf$I`yu literal 14581 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 LB3%JAdH;U^d!-Q3 diff --git a/DynamicModeler/SubjectHierarchyPlugins/Resources/Icons/Subdivide.png b/DynamicModeler/SubjectHierarchyPlugins/Resources/Icons/Subdivide.png index 2b3f6f855ae7d9f17dec9c73676b34de377c7760..ff6340ecac01bd014d6722e499da8337aa22c570 100755 GIT binary patch literal 13261 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 {9+ z!eDuKj0@HtZ?mz|#u$C1r4R&{WK@2ziYnrd-jvt}Z$J3*ogXazzV|*IAv8M;@x$Wi zaqK_ZXS*lp53@n4y}TpuZ(>vmf0G%|SwMk$3>QrzdBpjLToU_>BR8Yc!ITj{w? zm8P*)c;|7>=M51qFN8Ylu*G+!%(1XzjAVHL=T@RWXKCwq3*y}&=I&VHhrtj}3&Q_O z+x&a)A0niHncd>i=buFX{5S2&M$sRxWY{I1e=fSkk#iWis&9NzDE&I1W|r)q+lLRn z{5>C~-WN@_`<>#Rk&f}dEv@Rca^p7B@^!LQ5ydM@u%T{Q7#w*!Q+ST@3eqQRhg+m_9olW#*{)RN~sZX67VHa!yx6@ zV@8J!pk6GbAA7fYh>t%>^pV7$sxowlm*@eXc(?9hWk^>^sq?>V>TV+1N++&aNmM2x zqh`RDm9`_1+M(w!>Ppto=De`iU$x$`+3I9;cN(^Ts?yjY9%3FWIX3_v?#baHgTT;Sw(a<#sPw_DU+Q9z|V(GR}%fnqTS7V{Jr~0Z*$^VPeuG`Mc`182=iTB zDIO$(T)0)9@^rBr)2H81fl_&+?a;jWrZy*vz+b2|OG>yoRLb7-leILC3!;zmT{w>T zX9WPj@7UDMnbPoONh5IXYFJb3ztD7O#kr*eFXJy*`i2gMyLSu#tto}vDCSE%yuFe| z=^@1WBgFREs>4Sef9uKH*5_}F4tMUtj0x+9D55ck_rCbcTf=L7GR%;@-JnN`5kXRXqWKm#Zxl^5TfdE@s~E96_|_ zDT43k1z?N)S7t+j3wN%($}zk0OvkJ#Y2bxoy&iZ}Q#$)Np7Z|z@u7F;A!_2z00000 LNkvXXu0mjf$I`yu literal 14581 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 LB3%JAdH;U^d!-Q3