Communauté
BIM Revit, BIM et Autodesk Construction Cloud (ACC) - Français
Bienvenue sur le forum AEC francophone dédié aux solutions BIM de la société Autodesk. Cet espace est dédié aux professionnels et passionnés du secteur de l'Architecture, de l'Ingénierie et de la Construction (AEC) qui utilisent le logiciel Revit ainsi que les plateformes collaboratives d'Autodesk (ACC et Autodesk Forma). Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets, que vous soyez architecte, ingénieur, gestionnaire de projet ou tout autre acteur de l'AEC.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

C# Renseignement sur un winform dans une macro

5 RÉPONSES 5
Répondre
Message 1 sur 6
christian.stan
121 Visites, 5 Réponses

C# Renseignement sur un winform dans une macro

Bonjour,

Existe t-il une possibilité d'envoyer une data sans mettre fin au formulaire et comment fait-on cela sous revit?

j'essaie d'envoyer depuis un compteur numérique une info à une paramètre de vue

j'essaie de le faire de façon non statique

namespace stan
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.DB.Macros.AddInId("5B1B8162-473E-484B-8A81-501801B0AAF7")]
	public partial class ThisDocument
	{
		public static Document doc;
		public static Form2 boite2= new Form2();
		public static decimal etiq;
		
		private void Module_Startup(object sender, EventArgs e)
		{
			doc=this.Document;
		}

		private void Module_Shutdown(object sender, EventArgs e)
		{

		}

		#region Revit Macros generated code
		private void InternalStartup()
		{
			this.Startup += new System.EventHandler(Module_Startup);
			this.Shutdown += new System.EventHandler(Module_Shutdown);
		}
		
		// Lancez la boite de dialogue
		public void debut()
		{
			boite2.ShowDialog();
			Reponse(""+etiq);
			
		}
		
		// Fonction pour récupérer la phase
		public ElementId RecupPhase(string a)
		{
			List<Phase> listPhases = new FilteredElementCollector(doc).OfClass(typeof(Phase)).Cast<Phase>().ToList();
			List<ElementId> lidval=new List<ElementId>();
			
			foreach (Phase p in listPhases)
			{
				if (p.Name=="Phase "+a)
				{
					lidval.Add(p.Id);
				}	
			}
			return lidval[0];
		}
		
		// Attribuez une phase à la vue active
		public void Reponse(string b)
		{
			Parameter p=doc.ActiveView.LookupParameter("Phase");
			ElementId ph=RecupPhase(b);
			Transaction t= new Transaction(doc,"phase");
			t.Start();
			p.Set(ph);
			t.Commit();
		}
		#endregion
	}
}

 

namespace stan
{
	/// <summary>
	/// Description of Form2.
	/// </summary>
	public partial class Form2 : Form
	{
		public Form2()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		void NumericUpDown1ValueChanged(object sender, EventArgs e)
		{
			ThisDocument.etiq=numericUpDown1.Value;
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			ThisDocument.boite2.Close();
		}
		
	}
}

pouvez vous m'aider ou orienter

christianstan_0-1733245427439.png

 

cordialement

christian.stan

 

5 RÉPONSES 5
Message 2 sur 6
Charles.Piro
en réponse à: christian.stan

Salut @christian.stan ,

 

voici 2/3 éléments de réponse :

- Tout d'abord utilise une boite de dialogue modeless ainsi elle restera afficher pendant que Revit fonctionnera normalement

- Ensuite il faut utiliser les évènement pour faire communiquer Revit et ta boite de dialogue

- Si tu souhaite que le sens de communication soit : Boite de dialogue vers Revit ; utilise au sein de Revit un évènement de type Idling

 

J'essaye de te faire un exemple dans la journée

 

:visage_qui_fait_un_clin_d'œil:



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 3 sur 6
Charles.Piro
en réponse à: christian.stan

Salut @christian.stan ,

 

Il y a 2 manières de faire communiquer la boite de dialogue et l'environnement Revit : Evènement Idling et IUpdater.

Voici une solution exemple avec quelques éléments qui devraient t'aider un peu !

Il y a un dockpanel (idem boite de dialogue modeless) qui contient des champs : nom / id / identifiant

Il y a un IUPdater qui fonctionne lors de la modification du paramètre "identifiant" d'un élément (catégorie "Mur" de paramétré)

Il y a un Idling qui permet de renvoyer la valeur validée dans le dockPanel vers l'élément.

 

Fonctionnement de la solution : 

Ouverture du dockpanel via le ruban complément puis External Tools

Sélection d'un élément de la catégorie "Mur"

Modification du paramètre identifiant de l'élément (->affichage des données dans le panel une fois le paramètre modifié)

Modification de la valeur de l'identifiant dans le dockPanel puis clic sur "Valider"

Mise à jour de la nouvelle valeur dans le paramètre de l'élément Revit

 

Attention, j'ai constitué cette solution un peu vite, il peu y avoir quelques erreurs si tu l'utilise tel quel !! Lors de l'ouverture du premier document le dockpanel sera déjà ouvert (mais l'idling et l'iupdater ne seront pas initialisés), il faut le fermer puis relancer la commande via le ruban "complément".

 

Cette solution utilise le WPF mais c'est pareil avec du Winform.

 

:visage_qui_fait_un_clin_d'œil:

 

 

 

 



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 4 sur 6
christian.stan
en réponse à: Charles.Piro

Salut,

merci d'avoir pris le temps de répondre

je ne peux même pas essayer

je n'ai pas External Tools dans l' onglet compléments

christianstan_0-1733330744681.png

 

 winform peut être modeless? ou uniquement du WPF (on peut appliquer cela dans une macro revit?)

je m'essaie aux macros cela a l'air plus ''simple'' que les addins pour moi, je débute en c#

 

merci

cordialement

christian.stan

 

Message 5 sur 6
manon_puel
en réponse à: christian.stan

Bonjour @christian.stan 

Votre problème a-t-il été résolu? Si oui, pouvez vous nous indiquer de quelle façon pour que cela profite à la communauté, si non, pouvez vous nous dire si vous avez pu essayer les suggestions qui vous ont été faites? 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Manon Puel animatrice de la communauté francophone
Message 6 sur 6
christian.stan
en réponse à: manon_puel

salut,

j'ai essayé d'appliquer les conseils et méthodologie

mais comme je ne suis vraiment pas fort sur ces aspects de C#, je n'obtiens rien de probant pour le moment

il faut que je passe à un stade plus avancé

il faudra que je repose la question à un moment ou je puisse mettre en place les conseils

cordialement

christian.stan

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report