Search Unity

Dynamic Mesh Cutter - A flexible run time mesh cutting solution [Discussion Thread]

Discussion in 'Assets and Asset Store' started by PBTools, Mar 7, 2022.

  1. hellothxsorrinio

    hellothxsorrinio

    Joined:
    Apr 6, 2019
    Posts:
    4
    Hi, could you please provide some example of this (triggering particles at OnCreated method)?
     
    Refentse likes this.
  2. PRfsJay

    PRfsJay

    Joined:
    Apr 22, 2021
    Posts:
    15
    Good Evening. Is there anyone that knows how to set this up in VR? I have I am not sure how to get this working. I have the mesh target on an npc and the plane behavior on a knife but nothing happens. I assume the cut() has to be called on the knife?
     
  3. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Sorry for my late response!

    You're right about the weapon, you'll need to unparent it before the new game objects are being created (or before you call the algorithm).

    For an example of how to use the "OnCreated" callback, you can check out the two scripts MouseBehaviour.cs and PlaneBehaviour.cs . Here is a code snippet of it:

    Code (CSharp):
    1.   void OnCreated(Info info, MeshCreationData cData)
    2.         {
    3.             MeshCreation.TranslateCreatedObjects(info, cData.CreatedObjects, cData.CreatedTargets, Separation);
    4.         }
    As you can see, I call a function called "TranslateCreatedObjects" which translates (moves) the created object slightly in opposing directions so that the "cut" is more visible. If I didn't do this, you wouldn't even spot the cut since the new objects are being instantiated exactly where the original object was. You could add all kinds of effects here or manipulate the created objects, i.e. add ragdoll explosion effects, or blood particle effects etc.

    The OnCut callback is similar but is being invoked directly after the cutting algorithm finished, before the new objects are being created. Therefore you don't have access to the new gameobjects yet, but it might be useful to you in some other way.
    Perhaps this is a bit more niche and advanced, but you could for example inherit my CutterBehaviour.cs script and and use the OnCut callback to take care of the object creation yourself in your own unique way (by not calling the
    CreateGameObjects function in CutterBehaviour.cs).
    Everyone has different needs, and the object instantiation (see the MeshCreation.cs class) is pretty complex itself. If you'd like to simply get the "data" of the cut without creating new objects (or destroying the old one), that would be one possible usage of the OnCut callback.
     
  4. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This goes beyond the scope of this tool, but if you'd like to know how to trigger events etc I suggest to start to learn about UnityEvents and Particle systems . Unity is an open canvas, what you do with it is up to you. Have fun painting!
     
  5. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This tool can of course be used in VR. You just have to call the cut function of the CutterBehaviour.cs script

    Code (CSharp):
    1. public void Cut(MeshTarget target, Vector3 worldPosition, Vector3 worldNormal, OnCut onCut = null, OnCreated onCreated = null, object boxedUserData = null)
    by giving it the correct parameters. I suggest using the blades center point as the "worldPosition" and the blades normal as "worldNormal". If you don't know what I'm talking about maybe start by reading up a bit about video game geometry, vectors, eulers, quaternions etc, its a tough and fun topic.

    By the way, I have used this tool exactly for the purpose of cutting in VR with a sword as well. Tip: Try averaging the cutting direction/normal of the last couple frames before the cut to smooth/predict the cutting direction better, otherwise the cuts feel to inaccurate.
     
  6. Refentse

    Refentse

    Joined:
    Apr 1, 2020
    Posts:
    6
    I bought the dynamic mesh cutter from asset store. It is having two issues. One: when cutting a mesh renderer (not a skinned mesh renderer) the resultant models after cutting do not keep the same scale as the original model. Two: with some mesh renderers, cutting works in the editor but does not work at all once the build is exported to mobile (Android). Can you help with these issues
     
  7. Landcaster

    Landcaster

    Joined:
    Nov 11, 2015
    Posts:
    12
    Hello, why not working in webGL build? no errors. Unity 2022.2.1f1
     
  8. Refentse

    Refentse

    Joined:
    Apr 1, 2020
    Posts:
    6
    I am building for mobile. So I have to deploy to Android and iOS
     
  9. NexonVision

    NexonVision

    Joined:
    Aug 30, 2018
    Posts:
    8
    First off I want to say that this is a phenomenal asset, well done! Now I use a setup on my characters where I have two materials, the base character material, and the blood overlay material. So I've been trying to figure out how I could apply this blood overlay material and its properties over to the sliced mesh. The issue looks like it doesn't apply to the whole mesh. So I'm just wondering what the issue could be. Thank you in advance! (You can see the issue more clearly in the second clip)

     
    Recon03 likes this.
  10. Refentse

    Refentse

    Joined:
    Apr 1, 2020
    Posts:
    6
    Hey. I am having a problem with with some mesh renderers where cutting works in the editor but does not work at all once the build is exported to mobile. I notice when I remove or change the material for the models then cutting works fine on mobile. Is there a reason why some materials might not work with the mesh cutter?
     
    Last edited: Jan 16, 2023
  11. Refentse

    Refentse

    Joined:
    Apr 1, 2020
    Posts:
    6
    All issues are solved
     
  12. Landcaster

    Landcaster

    Joined:
    Nov 11, 2015
    Posts:
    12
    How?
     
  13. Refentse

    Refentse

    Joined:
    Apr 1, 2020
    Posts:
    6
    Working hard and never giving up. JK. I fixed the issue of cutting not working on mobile by changing the shader of the material on the model (I think I was using an unlit shader, then I changed to a lit shader). Then the reason the models were a different size after they were cut was because of how I had set up the scaling in my hierachy.
     
    PBTools likes this.
  14. khos

    khos

    Joined:
    May 10, 2016
    Posts:
    1,486
    Hi, can I use your asset to cut trees? eg if a car crashes into it with enough force it breaks the tree at that part?
     
  15. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Thanks for providing an answer to your original problem.
     
  16. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    I'm sorry but I have not tested webGL builds. I don't see why it shouldnt work though, could you perhaps provide more details since it is not clear which part is not working.
     
  17. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Certainly, your imagination is the limit on how to use this tool. Let me warn you though that tree models can get quite complex in terms of geometry, I hope you have a good setup & use adequate meshes.
     
    khos likes this.
  18. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This looks like a very specific problem to me related to materials. I'm not sure how to help you exactly other than suggest to try and play around with assigning the right materials/shaders to the cut meshes until your character looks like you expect him to. Once you've figured out your setup, you could apply the solution in the OnCreated callback after the new meshes have been instantiated.
     
  19. Darrkbeast

    Darrkbeast

    Joined:
    Mar 26, 2013
    Posts:
    125
    Hi is this tool only at run time, I was looking for a tool I can use to cut meshes in the editor to create for example body explosions with just some of the body parts.
     
  20. iacco

    iacco

    Joined:
    May 6, 2013
    Posts:
    4
    Hello,
    I just bought this asset, however I am having issues when cutting some meshes.
    I'm getting the following error when cutting using the async option


    Async cutter failed.System.IndexOutOfRangeException: Index was outside the bounds of the array.


    And a similar one when not using the async option:

    Code (CSharp):
    1. IndexOutOfRangeException: Index was outside the bounds of the array.
    2. DynamicMeshCutter.DynamicMesh.AddTriangle (System.Int32[] triangle, System.Int32 sub) (at Assets/DynamicMeshCutter/Scripts/Core/DynamicMesh.cs:80)
    3. DynamicMeshCutter.MeshCutting.Cut (DynamicMeshCutter.Info& info) (at Assets/DynamicMeshCutter/Scripts/Core/MeshCutting.cs:78)
    4. DynamicMeshCutter.CutterBehaviour.Cut (DynamicMeshCutter.MeshTarget target, UnityEngine.Vector3 worldPosition, UnityEngine.Vector3 worldNormal, DynamicMeshCutter.OnCut onCut, DynamicMeshCutter.OnCreated onCreated, System.Object boxedUserData) (at Assets/DynamicMeshCutter/Scripts/Utility/CutterBehaviour.cs:209)
    5. DynamicMeshCutter.PlaneBehaviour.Cut () (at Assets/DynamicMeshCutter/Scripts/Utility/PlaneBehaviour.cs:17)
    6. Sword.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/Sword.cs:32)
    Is there any way to fix this?
     
  21. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This tool works only at runtime, but perhaps one could rewrite the algorithm and make it compatible for editor time.
     
  22. dragonstar

    dragonstar

    Joined:
    Sep 27, 2010
    Posts:
    222
    hi bought the plugin a few days ago my question is how I can make the player wish have cut the object on collision what code I have to add to sword to make able the cut the objects on a collision?
     
  23. Sir_patrickl

    Sir_patrickl

    Joined:
    Jun 24, 2013
    Posts:
    62
    Hi, do you know if this would play nice with a different ragdoll system? I don't need the cut pieces to have a ragdoll I just want the main character mesh to continue to use the current ragdoll system while cutting off limbs. I'm currently using the "Ragdoll Animator" asset.
     
  24. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Check out Unity's Collider.OnCollisionEnter function
    https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

    Inside this function you can call the Cut() function of the CutterBehaviour.
     
  25. aaroshdas

    aaroshdas

    Joined:
    Apr 6, 2020
    Posts:
    29
    Hello, I've seen a few people adding some kind of effect, like a blood spray, coming out of two cut game objects and was wondering how you are able to get the position of the cut and the place you want the effect to play from.
     
  26. ncorns

    ncorns

    Joined:
    Jan 15, 2017
    Posts:
    10
    Using the asset and it works great for characters, any chance it could be updated to support uv3's? I have some tree assets which rely on uv3 for the texture tiling and they don't show correctly when sliced.

    Edit: I've managed to hack my way around the code and get them included, but it's not pretty.
     
    Last edited: Apr 29, 2023
    PBTools likes this.
  27. Kurteth

    Kurteth

    Joined:
    Aug 7, 2018
    Posts:
    15
    Hi! When using the asset to cut objects such as boxes and capsules, it works perfectly.

    However, when using it to cut Skinned Meshes with multiple skin mesh renderers as children, I get NullReferenceException Errors.

    Is there anyway to use this with object that have multiple skinned mesh renderers?

    I have even attempted to use Skinned Mesh Combiners, and it still does not function correctly, instead separating them upon cutting, and only having one of the objects be cut.

    Thanks!
     
    nehvaleem likes this.
  28. nehvaleem

    nehvaleem

    Joined:
    Dec 13, 2012
    Posts:
    436
    I am getting this as well. In my case, this only happens when there is a Dynamic Ragdoll component in the parent and it does not matter if the cut is async or not.

    Besides that - how we should handle characters with LODGroup? Is it ok to add mesh target to each lod separately?
     
  29. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    There is currently no plan to include support for uv3's however if you'd like you can show me your hack (via email) and I might implement it in a future update.
     
  30. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Working with complex hierarchies including multiple child skinned meshes is difficult and currently not supported out of the box.
    This is not to say it is impossible to achieve what you're trying to do, but you'll have to come up with a custom solution, i.e. combining certain meshes just before the cut, or perhaps alter the hierarchy (unparent objects just before the cut) to make it easier for the algorithm.

    The only currently officially supported hierarchy of skinned mesh renderers is the one you can find the sample scene.

    You could also try overwriting the MeshCreation class to make sure you instantiate and destroy the new/old gameobjects in the way you like, but this might require some effort.
     
    Kurteth likes this.
  31. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    The NullReference Error is likely due to a wrong setup of the comonent. It is hard to tell the exact cause without further information but I am looking into it.

    This tool was not developed with LOD groups in mind.
     
  32. aliayyaz

    aliayyaz

    Joined:
    Dec 9, 2021
    Posts:
    1
    Hi,

    Can this be used to cut/modify spheres?

    I am looking to make a planet destruction game and I want to be able to modify the shape and look of the planets based on type of attack.

    Thanks in advance
     
  33. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This can only be used to cut a mesh via a plane and nothing else.
     
  34. world_naoki

    world_naoki

    Joined:
    Mar 24, 2016
    Posts:
    11
    I bought this asset and I have a question.
    This tool Instantiate new Gameobject after cut but I want to cut existence Gameobject directly and use it continuously.
    Can I cut mesh directly?
     
  35. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    This is not supported out of the box, but you could implement this yourself, since the mesh creation is a separate step that happens after the calculation for the cut has finished. It is for this reason that I created a separate class called MeshCreation. If you were to overwrite the function in there, you can customize the mesh creation and deletion (or none thereof) of the original mesh.
     
  36. strelok1661

    strelok1661

    Joined:
    Feb 13, 2023
    Posts:
    1
    Hello
    Thank you for your hard work, this package is awesome
    I' tried to use it in VR, but i can't get correct From and To Vector3 parameters for cutting. I tried to use weapon center like you're describe in previous comment about VR, but i still can't get correct behavior. Model is cut, but after that it's broken.

    Maybe you can provide an example for VR?
    Thank you
     
  37. aaroshdas

    aaroshdas

    Joined:
    Apr 6, 2020
    Posts:
    29
    Hello, is there a way to access the cut game objects if you have the setting ticked that destroys the original mesh target?
     
  38. Klobster

    Klobster

    Joined:
    Feb 28, 2022
    Posts:
    1
    Hello

    I just purchased this product, but I'm having trouble with making second cuts on the same stone object.

    I've made a demo project to show the problem I'm having. Apart from the Dynamic Mesh Cutter scripts and the button script below, there is no other code added.

    Button Script
    Code (CSharp):
    1. using DynamicMeshCutter;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5.  
    6. public class Button_script : MonoBehaviour
    7. {
    8.     public Transform cuttingScriptObject;
    9.     private PlaneBehaviour cuttingScript;
    10.  
    11.     public void GoButtonClick()
    12.     {
    13.         cuttingScript = cuttingScriptObject.GetComponent<PlaneBehaviour>();
    14.         cuttingScript.Cut();
    15.         cuttingScriptObject.transform.rotation = Quaternion.Euler(-90f, 90f, 0f);
    16.         cuttingScript.Cut();
    17.     }
    18. }
    The project is set up as shown in the attached images.
    Pressing the button makes the first vertical cut, then rotates the cutter 90 degrees and makes the second horizontal cut.
    It seems to be making a duplicate sphere for the second cut and throwing the first sphere to -10000 Y axis. The final example5.png shows where I manually dragged the first sphere back in frame.
    Turning off the cutter's async setting doesn't fix it, but reverses which sphere gets thrown through the floor.

    It's probably going to be a too-much-too-fast problem, but would appreciate some assistance on how to solve it.
     

    Attached Files:

  39. aaroshdas

    aaroshdas

    Joined:
    Apr 6, 2020
    Posts:
    29
    Hello, I am having an issue where the mesh-cutting system not cutting/working after creating a webgl build. It works fine in the editor, and used to work fine in other builds but in the webgl build it is just not cutting? I know this is vague but I don't really understand at all any thoughts on what the issue might be?
     
  40. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    Sure there is, the callback function OnCreated gives you references to all created gameobjects, i.e. the "cuts" of the old gameobject, regardless of whether you destroy the original object or not.
     
  41. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    I'm not quite sure if I understand your problem, but there I see a few red flags from what you mentioned. Perhaps an explanation will help you identify the problem.

    1. You cannot cut "the same" object again. Once you cut an object, two or more new objects will be created. You need to get the reference to these new objects if you want to cut them again.
    2. In the script you posted, you seem to be using the same "cuttingScriptObject" twice. As explained above, this might lead to issue where the second cut doesn't seem to work properly.
     
  42. PBTools

    PBTools

    Joined:
    Mar 7, 2022
    Posts:
    48
    I have never tested webgl so I cannot comment on this unfortunately.
     
  43. Amenophis-Memnon

    Amenophis-Memnon

    Joined:
    Sep 22, 2016
    Posts:
    5
    Hi ! Thanks for this great asset. It's so easy to use.

    First sorry for my english. But i have a problem with UVs (?) when i cut one of my meshes.



    As you can see in this screenshot, I have two wooden beams. The second wooden beam is a perfect copy of the first beam. Only the cutting angle changes. But the texture of the left wooden beam is bugged.
    I'm using a custom "Face Material" on the MeshTarget and the material is correctly applied to the MeshRenderer when the cut occurs. So the problem is not here.

    I did several tests with the same cutting angle, and the same result occurred each time.

    I'm not very comfortable with handling UVs in Unity but i think the problem is here.
    There is a way to fix that myself or even better with an update ?

    Do you want me to send you my mesh to test by yourself?

    EDIT : Fixed by unwrapping the new faces after meshes is created
    Code (CSharp):
    1. public static class MeshHelper
    2.     {
    3.  
    4.         public static void UnwrapSubmeshes(Mesh mesh, int startIndex, int limit = -1)
    5.         {
    6.             UnwrapSubmeshes(0, mesh, startIndex, limit);
    7.         }
    8.         public static void UnwrapSubmeshes(int uvChannel, Mesh mesh, int startIndex, int limit = -1)
    9.         {
    10.  
    11.             Vector3[] vertexs = mesh.vertices;
    12.             Vector2[] uvs = mesh.uv;
    13.  
    14.             int l = mesh.subMeshCount;
    15.             if(limit > -1)
    16.                 l = Mathf.Min(l, startIndex + limit);
    17.  
    18.             for (int i = startIndex; i < l; i++)
    19.             {
    20.                 int[] subMeshTris = mesh.GetTriangles(i);
    21.                 for (int j = 0, subTrisL = subMeshTris.Length; j < subTrisL; j += 3)
    22.                 {
    23.  
    24.                     Vector3 a = vertexs[subMeshTris[j]];
    25.                     Vector3 b = vertexs[subMeshTris[j + 1]];
    26.                     Vector3 c = vertexs[subMeshTris[j + 2]];
    27.                     Vector3 side1 = b - a;
    28.                     Vector3 side2 = c - a;
    29.                     Vector3 N = Vector3.Cross(side1, side2);
    30.  
    31.                     N = new Vector3(Mathf.Abs(N.normalized.x), Mathf.Abs(N.normalized.y), Mathf.Abs(N.normalized.z));
    32.  
    33.  
    34.                     if (N.x > N.y && N.x > N.z)
    35.                     {
    36.                         uvs[subMeshTris[j]] = new Vector2(vertexs[subMeshTris[j]].z, vertexs[subMeshTris[j]].y);
    37.                         uvs[subMeshTris[j + 1]] = new Vector2(vertexs[subMeshTris[j + 1]].z, vertexs[subMeshTris[j + 1]].y);
    38.                         uvs[subMeshTris[j + 2]] = new Vector2(vertexs[subMeshTris[j + 2]].z, vertexs[subMeshTris[j + 2]].y);
    39.                     }
    40.                     else if (N.y > N.x && N.y > N.z)
    41.                     {
    42.                         uvs[subMeshTris[j]] = new Vector2(vertexs[subMeshTris[j]].x, vertexs[subMeshTris[j]].z);
    43.                         uvs[subMeshTris[j + 1]] = new Vector2(vertexs[subMeshTris[j + 1]].x, vertexs[subMeshTris[j + 1]].z);
    44.                         uvs[subMeshTris[j + 2]] = new Vector2(vertexs[subMeshTris[j + 2]].x, vertexs[subMeshTris[j + 2]].z);
    45.                     }
    46.                     else if (N.z > N.x && N.z > N.y)
    47.                     {
    48.                         uvs[subMeshTris[j]] = new Vector2(vertexs[subMeshTris[j]].x, vertexs[subMeshTris[j]].y);
    49.                         uvs[subMeshTris[j + 1]] = new Vector2(vertexs[subMeshTris[j + 1]].x, vertexs[subMeshTris[j + 1]].y);
    50.                         uvs[subMeshTris[j + 2]] = new Vector2(vertexs[subMeshTris[j + 2]].x, vertexs[subMeshTris[j + 2]].y);
    51.                     }
    52.  
    53.                 }
    54.             }
    55.  
    56.             mesh.SetUVs(uvChannel, uvs);
    57.         }
    Then call UnwrapSubmeshes in the OnCreated event like this :

    Code (CSharp):
    1. foreach (MeshTarget target in creationInfo.CreatedTargets)
    2. {
    3.     MeshRenderer renderer = target.GetComponent<MeshRenderer>();
    4.     Mesh mesh = target.GetComponent<MeshFilter>().mesh;
    5.  
    6.     MeshHelper.UnwrapSubmeshes(mesh, 1);
    7. }
    That work with a mesh with only 1 submesh. For an original mesh with more submeshes, you need to replace the "1" as second argument by the count of submeshes

    Capture d'écran 2023-10-19 005122.png
     

    Attached Files:

    Last edited: Oct 18, 2023
    PBTools likes this.
  44. firegames5645

    firegames5645

    Joined:
    Aug 16, 2020
    Posts:
    8
    Hello, I have a little issue.

    When I'm trying to use the library in the editor window, on Device Simulator it works excellent and Cut function works as I espected.

    But when I'm trying to use the same build on Android REAL Device it's getting a crush. Do you have any idea why it works so weird?

    image_2023-10-23_13-09-28.png

    The Code:
    upload_2023-10-23_13-10-49.png

    The column:
    upload_2023-10-23_13-11-36.png
    upload_2023-10-23_13-12-0.png


    So it looks totally weird for me, because my enemies have the same behaviour and the same configuration, but surprisingly it works fine on real devices
     

    Attached Files:

  45. kMasakiK

    kMasakiK

    Joined:
    Aug 11, 2018
    Posts:
    7
    Can PuppetMaster and Dynamic Mesh Cutter be used together?
     
  46. mertcanbayraktar

    mertcanbayraktar

    Joined:
    Aug 11, 2019
    Posts:
    3
  47. nsmith1024

    nsmith1024

    Joined:
    Mar 18, 2014
    Posts:
    870
    Hi what if the object im cutting has the mesh renderer located on a child object.

    Question: Which object do i attach the "Mesh Target"?

    1. Should i put it on the child with the mesh renderer, or the parent that has the collider and rigidbody?
    2. What if there are multiple skinned renderers on different child objects?
     
    Last edited: Jan 10, 2024
  48. TKDHayk

    TKDHayk

    Joined:
    Dec 22, 2015
    Posts:
    130
    Hi there, I just purchased this asset and read the manual for 5 min.

    A few feedbacks/questions off the bat:

    I felt like the manual was about how to use the tool, but didn't clearly explain how the tool works.

    I was surprised to see the word "Destroy" suddenly pop-up in the manual casually ...
    Its unclear whether destruction is optional, or a fundamental part of how the cut algorithm works.

    Are you 1) destroying the object and creating 2 separate "Pieces" and then destroying the original? In that case, this sounds like a pseudo-procedural destruction tool rather than a cutting tool.

    or 2) Removing edge vertices, and then creating a new set of vertices to fill the separation.

    Is there info on how the algorithm works or do I have to look at the code to understand it?

    Thank you!
     
  49. TKDHayk

    TKDHayk

    Joined:
    Dec 22, 2015
    Posts:
    130
    Furthermore , I'm having trouble understanding this the below excerpt. What do you mean by "further"? Is the whole point to separate the objects into separate meshes? What's the alternative to seperating meshes? How can you cut a mesh without separating it? Did you mean to say "If true, this allow the newly separated meshes to be seperable"?

    Thank you, I'm sure the asset is great, but so far i feel the manual leaves me with more questions than answers.


    upload_2024-1-12_21-58-30.png
     
  50. TKDHayk

    TKDHayk

    Joined:
    Dec 22, 2015
    Posts:
    130
    I seem to have met an impasse: Please Advise
    upload_2024-1-13_13-52-43.png