Import Excel/ modification de coordonnées du model

Bonjour,

Je suis nouveau sur Dynamo, et je souhaite importer des données As built (coordonnées de point x,y,z pour pieux) d’excel vers Revit; tout en ayant une modification des chaques elements sur mon model Revit …
Est ce possible avec Dynamo?

J’ai generé un script Dynamo pour avoir les coordonnées des points et les exportés dans un premier temps sur excel, et je souhaite que pendant l’exécution des pieux si leurs positions changent que je puisse faire une sorte de Importation qui modifirait la position de mes elements dans mon model.

Merci

Bonjour,

Pour moi, la question la plus épineuse dans ton script est : comment relier les points de la liste Excel aux points de ta maquette ? Sont-elles rangées dans le même ordre ? Si non, il faut trouver un moyen de savoir quel point va avec lequel.

Le reste du processus est simple :

  • Récupérer les points Excel et les points Revit.
  • Tester les points deux à deux.
  • Modifier l’emplacement des familles dont le résultat des tests prouve un déplacement.

Je pense que tu auras besoin des nœuds

  • Geometry.DistanceTo (pour tester les points deux à deux)
  • If
  • Vector.ByTwoPoints (pour créer le vecteur de déplacement des objets)
  • List.FilterByBoolMask (pour sélectionner les familles à déplacer)
  • Un nœud pour déplacer les familles (dont j’ai oublié le nom mais du genre Element.MoveByVector)

Si tes listes ne sont pas ordonnées de la même manière, je vois deux moyens de les trier :

  • Remplir un paramètre manuellement dans les familles et le tableau Excel pour les identifier
  • Décomposer les points selon X et Y et les trier par valeur (pour ça, je suppose que les pieux tels que construits ne se sont pas déplacés de beaucoup).

Il va falloir se familiariser avec le fonctionnement des listes :slight_smile:

1 J'aime

Merci Jean pour ta reponse,

Je comprends bien ta question sur mon script :sweat_smile: Mais je dois reitérer que j’ai essayé jusqu’a ce niveau sans tout a fait être sure de moi et même bien comprendre…

A ta 2ieme question si je comprends bien, Oui les points de la liste excel et ceux de ma maquette sont rangées dans le même ordre (voir photo jointe)…si c’est pas de ça que vous parlez, vous pouvez me stopper.

Je vais déjà ressortir tout ces noeuds dont tu as énuméré et essayer de comprendre qui va avec qui…afin de finaliser mon scrip.

Merci.

Bonjour,

Que dit le message d’erreur sur le noeud: Point.ByCoordinates?

Si j’ai bien compris le but du script, voici deux exemples de ce qui peut être faisable pour déplacer des objets selon un tableau Excel :

1 J'aime

Bonjour jfbrigaud,

Voici le message :

Avertissement:Point.ByCoordinates attend le ou les types d’argument (double, double, double), mais a été appelé avec (string[], string[], string[]).

Merci bien.

Bonjour Jean,

Merci bien pour les exemples types.
Je vais mettre en pratique et voir ce que donne,
il ya encore pas mal de noeuds a comprendre le rôle dans le developpement d’un script…

Merci encore, je vous tiens au courant de la suite.

Excusez moi svp,

je rencontre un probleme dans la récupération des points de la liste Excel dont l’erreur sur le noeud Point.ByCoordonates…

J’ai crée un nouveau fichier excel, j’ai modifié les coordonnées de 4 points…puis lié mon fichier excel afin de céer les coordonnées comme sur votre exple 2.

Je vais peut être joindre mes fichiers au cas ou.

Merci d’avance.

ImpNewPosition.dyn (44,1 Ko)

Selon cette erreur, c’est parce que les données qui sortent d’Excel sont sous forme de texte (String) et non de nombre (Double).
Il faut rajouter un nœud String.ToNumb pour les transformer en nombre

Ensuite, l’affichage de la liste du bloc note ne fonctionne pas comme les autres nœuds, un Code Block n’affiche que ce que contient la dernière ligne (ici, x[2];). Cela ne l’empêche pas de fonctionner correctement.

Enfin, il faut relier le nœud Point;ByCoordinate et Geometry.DistanceTo (dans l’entrée Other)

1 J'aime

Bonjour,

Jean vient de répondre Point.ByCoordinates attend des nombres décimaux (double) or les valeurs actuelles sont des Textes (String). Vous devez les convertir.
Le noeud Object.Type peut vous aider à connaitre le type de données.

1 J'aime

Merci infiniment pour vos apports,

Je dois avouer qu’il ya encore beaucoup mais alors bcp a apprendre dans ce logiciel;

J’ai bien converti mes données textes en nombre, et jai pu obtenir mes points de coordonnées XYZ, Et le script a qu’en même bien fonctionné, malgres les erreurs que vous pouvez remarquer sur l’image joint;

Je ne comprends pas pourquoi, j’ai FALSE sur le noeud ( > ) et a la fin de mon script les reponses des 4 pieux modifiés Nul…dans Element.MoveByVector ?

Merci d’avance;

Par ailleurs,

En fond d’écran du script, vous pouvez voir les 4 points encerclés en rouge qui ont bien changés de position…ce qui est déjà bien comme resultat.

Mais, pourquoi ceci ne déplace pas physiquement mes pieux de fondation modifiés ?
Car je me dis pour faire par exemple de l’As built pour 2000 pieux, ce serait difficile voir pénible de les changer un a un a la nouvelle position…
Voilà un peu l’idée de mon projet, dsl si je m’explique un peu mal …

Merci d’avance.

Cette partie du script sert à tester si la distance entre le point de la famille dans la maquette et le point du tableau Excel est supérieur à une valeur (ici, 0.1).
image

Le résultat du nœud < est booléen (vrai ou faux). Sois c’est plus petit, soit ça ne l’est pas.
Ce n’est absolument pas nécessaire au script, c’était plus pour l’exemple (pour décider de ne pas bouger les objets qui n’ont que très peu de différence entre maquette et réalité dans ce cas).

Si un résultat est Nul c’est que le bloc n’a pas marché. Que dit l’erreur ?

En fond d’écran du script apparait tous les bloc qui ont un aperçu et qui ont une géométrie à afficher (points, lignes, volumes,…) (clique-droit sur un bloc-> aperçu).
En l’occurrence, les nœuds Point.xxx ont un aperçu, c’est donc les point du bloc Point.ByCoordinate qui sont affichés. Lorsqu’on sélectionne un bloc, les objets en aperçu se surlignent en arrière-plan (ça peut aider à comprendre l’effet d’un bloc).

Si le nœud Element.MoveByVector ne marche pas, essayes directement avec le nœud Element.SetLocation (qui a l’avantage d’être plus directe). Il faut aussi vérifier que rien n’empêche l’élément de bouger (verrouillage, cotes,…)

2 J'aime

Bonjour,

Je me suis remis sur mon projet…

Quelqu’un sait me dire pourquoi j’ai comme reponse « nul » sur mon Noeud Element.SetLocation ?
qu’est ce qui pourrait ne pas avoir marcher …
NB : l’erreur dit ceci
"Avertissement:Element.SetLocation attend le ou les types d’argument (Element, Geometry), mais a été appelé avec (Revit.Elements.FamilyType[], Autodesk.DesignScript.Geometry.Vector[]).’’

De plus, sur ma maquette il ya bien les positions des 4 points modifiés qui ont bien changés mais ses deniers n’ont pas bougés physiquement mes pieux…

Merci d’avance.

Bonjour,

C’est normal, tu appelles des Family.Type, et non des Family.Instance ou Element.
Tu ne peux pas modifier la position d’un type :

image

1 J'aime

Merci Jean,

Oui effectivement, lorsque je connecte List.GetItemAllIndex à « element » sur mon noeud Element.SetLocation, je resultat est le même.
Et l’erreur sur mon noeud est le même que précedement…

Par contre,
En utilisant le noeud Element.MoveByVector, mon script semble bien fonctionner avec un déplacement réel des pieux concernés.
Mais comme vous pouvez le voir, toujours des resultats nul (voir note en rouge sur le dessin).

Dans ce cas, Est ce normal ? Si non comment y remédié a cela ?

Merci d’avance.

Voici bien le resultat avec le noeud Element.MoveByVector.

on a bien une réel modification de la position de mes pieux; mais dans mon scrip des valeurs NUL dans le dernier noeud.

1 J'aime

En effet, je n’ai que rapidement regardé ta capture d’écran et je suis passé à coté du principal.

Element.MoveByVector attend en entrée un élément et un vecteur.
Element.SetLocation attend en entrée un élément et un point.

Voici comment cela doit être relié (l’un ou l’autre) :

Sur le fait que tes éléments ne bougent pas, sont-ils libre de mouvement ? Est-il possible les déplacer à la main dans la maquette ?