Netherlands
Joined: Apr 8, 2022
Post Count: 1391
Status:
Offline
Is there a max lenght for a SVG cutout string?
After this post I got an itch to solve the problem of 'difficult' cutouts.
I created an algorithm to generate a SVG cutout string from a room object. A room is perfect to create a shape with random curves. Of course the number of points such a room has can quickly run into the hundreds. Limited to 4 decimals every point adds 15 characters to a SVG string. I tested it with 386 points resulting in a string of 5699 characters. There was no problem setting such a cutout for the exported room object and the 'staircase shape' created a perfect hole in the floor.
But where is the limit? Is there a limit? Where does processing become a problem? My tests had no problems and worked very fast. But what happens with a million points? If there is a limit caused by some process in Sweet Home 3D I would like to know it so I can add a check for a maximum number of points.
---------------------------------------- Dodecagon.nl 1000+ 3D models, manuals, and projects
France
Joined: Nov 7, 2005
Post Count: 9426
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
There's no programmed limit, but as curved lines are converted to line segments, there's a default limit to avoid too many points (try adding a spiral staircase and you'll see that the cutout of the room it intersects is actually made of segments).
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
Netherlands
Joined: Apr 8, 2022
Post Count: 1391
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
I already know curves are actually segments. Zooming in you can see that as well. Same for a curved wall.
But it looks like I have to set an artificial limit like 1000 or 5000 to avoid processing of too many points and generating a huge SVG cutout string. The generating itself works amazingly well and is very fast in both C# and PHP. It even works with other objects like a wall. The Sweet Home 3D exports are perfectly formatted for this.
---------------------------------------- Dodecagon.nl 1000+ 3D models, manuals, and projects
France
Joined: Oct 20, 2017
Post Count: 312
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
Bonjour Keet. La solution que vous proposez pour créer des formes plus ou moins géométriques permettant de réaliser des "trous" dans des planchers est effectivement très intéressante. Ça m'a bien aidé à différentes reprises. Mais elle a aussi ses limites, je pense. Dans l'exemple ci-dessous représentant une des nombreuses pièces que j'ai créés pour reproduire ma maquette de trimaran dans Sweet Home, il n'y a aucune partie ayant une forme géométrique. J'ai utilisé comme arrière-plan une image à l'échelle 10 d'une des plaques contenant les pièces d'origines. A l'aide de petits murs (0,5 cm d'épaisseur et 4 cm de haut, et texture brun foncé), j'ai dessiné les formes extérieures de la pièce et aussi celles de l'intérieur qui restent creuses. Ça m'a permis de créer la surface intérieure (en bleu clair), qui une fois copiée sur le niveau 1 (épaisseur 4 cm) a été exportée au format .obj et revêtue de la texture bois clair.
Je l'ai ensuite ré importée comme meuble, placée sur le niveau 0 au bon endroit et recréer un objet regroupant les petits murs et la surface intérieure. Les trous intérieurs étaient toujours présents.
Je pense qu'il n'aurait pas été facile de créer des formes non géométriques représentant les différents trous intérieurs de toutes ces pièces à partir d'une chaine de découpe SVG.
----------------------------------------
[Edit 2 times,
last edit by captaincook at May 5, 2025, 12:57:05 PM]
Netherlands
Joined: Apr 8, 2022
Post Count: 1391
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
I already solved the SVG cutout problem. I can now generate any cutout string from a room or wall. The only limitation is that it has to be a single room or a single wall. But a room can have the weirdest shape you can think of with many points and a wall can be curved. Basically any set of v-lines that represents a single surface can be used to generate a string. This means I can create an object (like the holes in your example) and create a SVG cutout string for it. Then import the objects in a library, check 'staircase' and set the generated cutouts. Now the objects can be used to create holes in a floor and export the floor with the holes. Of course your method also worked but if you had multiple holes with the same shape that you needed in different parts my method would be a lot less work.
[French] J'ai déjà résolu le problème des découpes SVG. Je peux maintenant générer n'importe quelle chaîne de découpe à partir d'une pièce ou d'un mur. La seule limitation est qu'il doit s'agir d'une seule pièce ou d'un seul mur. Mais une pièce peut avoir la forme la plus bizarre que vous puissiez imaginer avec de nombreux points et un mur peut être incurvé. En fait, n'importe quel ensemble de lignes en v représentant une surface unique peut être utilisé pour générer une chaîne. Cela signifie que je peux créer un objet (comme les trous dans votre exemple) et créer une chaîne de découpe SVG pour cet objet. Ensuite, j'importe les objets dans une bibliothèque, je coche "escalier" et je définis les découpes générées. Maintenant, les objets peuvent être utilisés pour créer des trous dans un sol et exporter le sol avec les trous. Bien sûr, votre méthode fonctionne également, mais si vous aviez plusieurs trous de la même forme dont vous aviez besoin dans différentes parties, ma méthode serait beaucoup moins fastidieuse.
Traduit avec DeepL.com (version gratuite)
---------------------------------------- Dodecagon.nl 1000+ 3D models, manuals, and projects
France
Joined: Oct 20, 2017
Post Count: 312
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
J'avoue que le cas que je vous ai cité est un peu particulier. Sur l'ensemble des pièces réalisées(5 planches ci-dessous), il n'y a pas 2 trous identiques sauf dans le cas où il y a 2 pièces identiques (qu'il suffit de dupliquer).
Netherlands
Joined: Apr 8, 2022
Post Count: 1391
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
I think in your unusual case either method would work. With my method you would have the advantage that you can create holes without the thin walls to connect the outside walls to the walls for the holes. But that's just a minor advantage. In both cases you need to draw all the walls and rooms. With your method you don't need a library to set the SVG cutouts. It's good to have different choices in ways to solve problems!
[French] Je pense que dans votre cas particulier, l'une ou l'autre méthode pourrait fonctionner. Avec ma méthode, vous auriez l'avantage de pouvoir créer des trous sans avoir à utiliser des murs minces pour relier les murs extérieurs aux murs des trous. Mais ce n'est qu'un avantage mineur. Dans les deux cas, vous devez dessiner tous les murs et toutes les pièces. Avec votre méthode, vous n'avez pas besoin d'une bibliothèque pour définir les découpes SVG. Il est bon d'avoir différents choix dans la façon de résoudre les problèmes !
---------------------------------------- Dodecagon.nl 1000+ 3D models, manuals, and projects
France
Joined: Oct 20, 2017
Post Count: 312
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
La tranche de toutes les pièces originales en bois est marron foncé et leur surface marron clair. L'avantage avec ma méthode, c'est que je peux teinter les petits murs qui les bordent, y compris les parties creuses, différemment des surfaces des pièces.
----------------------------------------
[Edit 1 times,
last edit by captaincook at May 5, 2025, 3:49:00 PM]
France
Joined: Oct 20, 2017
Post Count: 312
Status:
Offline
Re: Is there a max lenght for a SVG cutout string?
Les petits bouts de murs (en rouge sur une image plus haut) ne servent qu'à éviter que lors de la création de la surface, celle ci couvre aussi les trous. Mais une fois celle ci réalisée, je supprime ces petits murs et modifie légèrement la surface pour supprimer le tout petit espace resté vide après la suppression de ces derniers. Et après je peux convertir la surface finale en .obj.