From: Frenchy Pilou (PILOU)
... quand on n'y connait rien! :)
Juste pour voir si c'était possible de nos jous!
J'aimais bien cette fonction dans TopMod ou Vectary
J'ai donc demandé à Banana 3ème du nom !
Voici sa réponse!
-----
To create a command (plugin) for MoI3D that generates an "arch" (or smooth bridge) between two selected faces, we can utilize the Blend factory. In NURBS modeling, creating a seamless, curved connection between two separate surfaces is typically done by blending their edges.
This script automates the process: it takes two selected faces, extracts their boundaries (edges), and runs the blend command to generate a smooth solid connecting them.
The JavaScript Code (MakeArch.js)
Save the following code into a text file named MakeArch.js.
To create a command (plugin) for MoI3D that generates an "arch" (or smooth bridge) between two selected faces, we can utilize the Blend factory. In NURBS modeling, creating a seamless, curved connection between two separate surfaces is typically done by blending their edges.
This script automates the process: it takes two selected faces, extracts their boundaries (edges), and runs the blend command to generate a smooth solid connecting them.
The JavaScript Code (MakeArch.js)
Save the following code into a text file named MakeArch.js.
JavaScript
/* MakeArch.js
MoI3D Command to create a smooth Blend (Arch) between 2 selected faces.
*/
function MakeArch() {
var gd = moi.geometryDatabase;
var faces = gd.getSelectedObjects().getFaces();
// Validation: Ensure exactly 2 faces are selected
if ( faces.length !== 2 ) {
moi.ui.alert( "Error: Please select exactly 2 faces to create an arch." );
return;
}
// Initialize the Blend factory
var factory = moi.command.createFactory( 'blend' );
// Input 0: Edges of the first face
// Input 1: Edges of the second face
factory.setInput( 0, faces.item(0).getEdges() );
factory.setInput( 1, faces.item(1).getEdges() );
// Optional: Adjust Bulge (1.0 is standard, higher is more 'arched')
// factory.setInput( 2, 1.0 );
// Generate the geometry
factory.commit();
// Optional: Select the new object and deselect the original faces
gd.deselectAll();
// (We cannot easily grab the exact new object ID after commit without listeners,
// but the new object will be created in the scene)
}
MakeArch();
From: Frenchy Pilou (PILOU)
Après avoir mis la commande dans le bon répertoire (Roaming / Moi/ commands)
---- (ses conseils )
Ouvrez MoI3D.
Sélectionnez deux faces (par exemple, les faces supérieures de deux piliers ou cylindres distincts).
Appuyez sur Tab, saisissez MakeArch et appuyez sur Entrée.
Fonctionnement
Logique : Ce script agit comme un outil de « pont ». Il sélectionne la boucle d’arêtes des faces A et B et indique à MoI de calculer une surface de raccordement entre elles.
Forme : Grâce à l’utilisation de la fonction Blend (et non Loft), la connexion conserve sa tangence (son aspect lisse) avec les faces sources, créant ainsi une arche incurvée plutôt qu’un tuyau droit.
Dépannage
Torsion : Si l’arche semble tordue, l’alignement automatique des points de départ des arêtes est peut-être incorrect. Ce problème est fréquent dans les scripts automatisés. Dans ce cas, utilisez la commande Blend manuelle pour ajuster les points de jonction.
Planéité : Si les faces sont parfaitement coplanaires (à plat sur le même sol), le raccordement risque de rester plat. Inclinez légèrement vos faces l’une vers l’autre pour obtenir une arche plus harmonieuse.
Mais rien à l'écran car il semble qu'elle utilise le fonctionnement de Rhino ( Blend - Face to face ) et non des courbes ou des arêtes dans Moi!
Je lui fait remarquer d'où sa 2ème tentative!
From: Frenchy Pilou (PILOU)
Vous avez tout à fait raison de le souligner. Dans MoI3D, l'outil de fusion natif est conçu exclusivement pour les courbes et les arêtes, et il rencontre souvent des difficultés si on lui fournit une liste de plusieurs arêtes (comme les quatre arêtes d'une face carrée) sans les avoir préalablement jointes.
Pour que cela fonctionne correctement avec les faces (qu'il s'agisse de cercles, de rectangles ou de polygones complexes), le script doit d'abord joindre les arêtes de chaque face en une seule courbe composite en arrière-plan, puis fusionner ces deux courbes.
Voici le code du plugin corrigé et robuste.
Script amélioré (MakeArch.js)
Cette version crée une courbe jointe temporaire pour chaque face en mémoire, garantissant ainsi que l'outil de fusion reçoive une seule entrée propre par face.
/* MakeArch.js
Creates a Blended Arch between 2 selected Faces.
Improvements:
- Automatically gathers all edges of a face.
- JOINS them into a single curve (essential for non-circular faces).
- Runs the Blend command on these joined curves.
*/
function MakeArch() {
var gd = moi.geometryDatabase;
var faces = gd.getSelectedObjects().getFaces();
// 1. Validate Selection
if ( faces.length !== 2 ) {
moi.ui.alert( "Error: Please select exactly 2 faces." );
return;
}
// Helper: Join a Face's edges into a single Curve object
function getJoinedCurve( face ) {
var joinFactory = moi.command.createFactory( 'join' );
joinFactory.setInput( 0, face.getEdges() );
// .calculate() creates the object in memory without adding to the scene yet
var resultList = joinFactory.calculate();
joinFactory.cancel();
return resultList;
}
// 2. Create joined curves for both faces
// This handles cases where a face is made of 4 edges (rectangle)
// by turning them into 1 joined loop for the Blend tool.
var curveListA = getJoinedCurve( faces.item(0) );
var curveListB = getJoinedCurve( faces.item(1) );
// 3. Setup the Blend Factory
var blendFactory = moi.command.createFactory( 'blend' );
blendFactory.setInput( 0, curveListA );
blendFactory.setInput( 1, curveListB );
// Optional: Set Bulge (Default is 1.0).
// Increase to ~2.0 for a higher arch, decrease to ~0.5 for a flatter one.
blendFactory.setInput( 2, 1.0 );
// 4. Create the final geometry
blendFactory.commit();
// Cleanup selection
gd.deselectAll();
}
MakeArch();
Pourquoi cette méthode est plus efficace
Rectangles/Polygones : Une face rectangulaire possède 4 arêtes. Si vous les envoyez directement à Blend, MoI a du mal à identifier les connexions entre les arêtes. Ce script exécute d'abord Join, de sorte que Blend ne voit qu'une seule boucle continue par côté.
Cylindres : Le sommet d'un cylindre est constitué d'une seule arête. Le script fonctionne toujours (la jonction d'une arête produit une seule courbe), il est donc universel.
Gestion de la mémoire : Il utilise calculate() pour l'étape intermédiaire, ce qui évite de laisser des courbes temporaires inutiles dans votre scène ; il ne crée que l'arche finale.
Installation : Enregistrez le fichier sous le nom MakeArch.js dans votre dossier \commands\.
Redémarrez MoI3D (ou rechargez les scripts).
Sélectionnez 2 faces → Appuyez sur Tab → Tapez MakeArch.
Cette méthode reproduit en un seul clic le flux de travail manuel « Sélectionner les arêtes → Joindre → Sélectionner les autres arêtes → Joindre → Blend ».
From: Frenchy Pilou (PILOU)
Mais hélas toujours rien à l'écran!
Ses explications semblent bonnes mais il doit y avoir un petit grain de sable quelque part!
En tout cas incroyable que l'on puisse faire ce genre de chose, lui faire des remarques et qu'elle y réponde!
Elle ne doit pas être loin d'un résultat plus visible! :)
From: Frenchy Pilou (PILOU)
Ce n'est pas encore ça! :)