2016-06-18 2 views
0

J'ai une question qui est plus la théorie des «meilleures pratiques» que la programmation technique réelle.Revit API Modification des éléments après la création

J'essaye de penser à la meilleure manière de manipuler éditer un élément après qu'il soit placé par mon programme. Spécifiquement j'ai mon programme mis en place comme suit:

L'utilisateur clique sur un outil qui "ajoute des familles dans un projet" essentiellement dans Revit. Il lit une esquisse créée par l'utilisateur et place les éléments en fonction de l'esquisse.

Sketch

Element creation

Je veux donner à l'utilisateur la possibilité de « modifier l'esquisse » de ces éléments semblables à dire une dalle de plancher. Je ne crois pas que l'API Revit expose la possibilité d'esquisser en utilisant le "mode croquis". J'essaie d'imiter cette capacité très utile dans mon programme. Donc, ce que j'ai fait est utilisé stockage extensible et stocker un UniqueId dans tous les éléments créés en utilisant mon outil. Ce que le programme fait est quand l'utilisateur clique sur l'outil "éditer des éléments", le programme demande la nouvelle esquisse, demande de cliquer sur l'élément existant, lit l'UniqueId de l'élément existant et appelle tous les éléments avec cet UniqueId et les supprime, puis le programme ajoute de nouveaux éléments dans le projet en utilisant les utilisateurs "nouvelle esquisse". Le problème est que, si l'utilisateur supprime les éléments d'origine qui ont été ajoutés au projet et essaye ensuite de les éditer, comment puis-je garantir que l'utilisateur ne supprimera pas les éléments originaux qui ont l'UniqueId? Je pense que la voie à suivre est d'utiliser la fonctionnalité Dynamic Model Update dans l'API Revit.

Comment la plupart de ces algorithmes sont-ils écrits? Suis-je sur la bonne voie ici? Est-ce que j'attribue simplement des UniqueIds aux éléments et les stocke sur les éléments eux-mêmes pour que je puisse les appeler plus tard? Peut-être qu'il y a une pièce théorique de base du puzzle qui me manque. Structures de données?

Répondre

0

Je pense que vous êtes essentiellement sur la bonne voie. L'utilisation d'un stockage extensible pour stocker les identifiants uniques est définitivement la solution, et l'utilisation de la fonctionnalité de mise à jour dynamique des modèles DMU pour réagir aux changements est bonne. La seule chose qui semble floue est le fait que Revit attribue automatiquement les identifiants uniques aux éléments lors de leur création, et vous ne pouvez rien faire pour y remédier. L'identifiant unique est unique et immuable, et vous n'avez aucun contrôle sur celui-ci. Par conséquent, l'approche la plus facile est probablement de supprimer tous les éléments d'esquisse précédents et de recréer l'esquisse entière et tous les éléments la définissant à partir de zéro chaque fois que l'esquisse doit être modifiée de quelque façon que ce soit.

+0

Merci pour la réponse. Pour éclaircir les choses, j'utilise le stockage extensible et la création d'un uniqueid unique et il est appliqué à tous les éléments qui appartiennent à cette esquisse. Ainsi, lors de l'édition de l'esquisse, le logiciel recherche ce schéma et l'identifiant ubique attribué au champ dans l'entité. Cet unique que je contrôle. En outre, après avoir lu beaucoup d'articles d'aide de Revit api, j'ai été sous l'impression unique est le chemin à parcourir puisque je peux copier des éléments d'un projet à l'autre et l'ID reste unique. Maxence, es-tu en train de dire que ça peut arriver avec des élémentides? – pirit4

+0

si vous utilisez des identifiants d'éléments stockés dans un stockage extensible, revit gère la traduction des relations d'une manière intelligente: http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –

0

Vous devez utiliser ElementId au lieu de UniqueId pour le stockage structuré, car un ElementId est automatiquement réaffecté au nouvel ElementId lorsqu'une mise à jour de partage de travail se produit. L'élément ElementId est également défini sur ElementId.InvalidElementId lorsque l'élément est supprimé.

+0

entièrement se mettre d'accord! Je vous remercie de le faire remarquer! voici une note à ce sujet: http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –