Aller au contenu

[Résolu] Positionnement textes et Libellés


Messages recommandés

Posté(e)

Bonjour à tous,

 

Nouvelle question sur Revit. J'ai l'impression d'être un psychopathe de la mise en forme, car je n'ai trouvé aucun sujet parlant de ce problème.

 

Existe-t-il un moyen pour aligner un texte/libellé par rapport à un point de justification ? Par exemple le milieu-centre d'une zone de texte par rapport au centre d'une "case" ?

 

Pour l'instant je fais de la mise en place à l’œil, mais mon côté psychorigide est excessivement agacé par cette mise en forme approximative !

 

Du coup, si vous avez l'astuce je suis tout ouïe !

 

Bonne journée à tous !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Posté(e)

Rassures toi, tu n'es le seul psychopathe dans la place, je ne sais même pas s'il y a quelqu'un de normal par ici ;)

 

A ma connaissance, il n'y a aucun moyen d'aligner exactement un texte. Il faut le positionner à peu prêt. En pratique ça marche bien, si tu zoomes bien sur la zone, personne ne remarquera un léger décalage.

 

Tu peux aussi créer un outil pour réaliser l'alignement via l'API. Voici le code nécessaire, ça aligne le texte sur le milieu de la diagonale formée par les 2 points sélectionnés :

 

UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Selection selection = uiDoc.Selection;
ICollection<ElementId> ids = selection.GetElementIds();
using (var tr = new Transaction(doc, "Center text"))
{
 if (tr.Start() == TransactionStatus.Started)
 {
   foreach (ElementId id in ids)
   {
     Element element = doc.GetElement(id);
     var tn = element as TextNote;
     if (tn == null) continue;
     XYZ p1 = selection.PickPoint("First point");
     XYZ p2 = selection.PickPoint("Second point");
     tn.Coord = (p1 + p2) / 2;
     tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_HORZ).Set((int) TextAlignFlags.TEF_ALIGN_CENTER);
     tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_VERT).Set((int) TextAlignFlags.TEF_ALIGN_MIDDLE);
   }
   tr.Commit();
 }
 else
 {
   throw new UserException("Transaction can not be started.");
 }
}

 

Je le publierai certainement à l'avenir dans un complément mais pour l'instant j'ai d'autres priorités. Tu peux peut-être en faire une macro VSTA. J'ai écrit une introduction à VSTA dans le 1er numéro d'AroBiM : http://arobim.fr/joomla/la-revue/file/4-arobim-001. Je vois sur ton blog que tu essaies au Lisp, tu devrais t'en sortir avec VSTA.

Maxence DELANNOY

Développement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAO

WIIP - http://wiip.fr

Posté(e)

Bonjour,

 

Merci de la réponse. Je m'en doutais que cette fonction de confort n'était pas implémentée directement. Aaaah les ricains !

 

Sinon, je pense avoir a peu près bien suivi l'article du premier numéro d'AroBIM:

  1. Création d'un module C#
  2. Création d'une Macro
  3. Collage du code que tu m'as donné
  4. Compilation
  5. ...

 

Ah... j'ai un souci au point 5 :rolleyes:

 

Le compilateur me mets deux erreur:

  • Le nom 'commandData' n'existe pas dans le contexte actuel (CS0103)
  • Le type ou le nom d'espace de noms 'UserException' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) (CS0246)

 

As-tu une piste ?

 

Merci par avance de ta précieuse aide !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Posté(e)

Salut,

 

commandData est utilisé lorsque tu développe un addin avec un logiciel externe à Revit (exemple :Visual Studio). Dans le cas présent la ligne est :

UIDocument uiDoc = Application.ActiveUIDocument;

 

Pour l'Exception, je pense que UserException est une classe que Maxence à créé dans son projet. Dans ton cas, utilise ceci :

throw new Exception("Transaction can not be started.");

 

;)

  • Upvote 1

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

bonjour,Les premiers pas dans le monde sont les plus dur,

faire une boite de dialogue "hello coucou " la je sais faire.

Applique le code texte entre 2pt avec les 2 modifications

UIDocument uiDoc = Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Selection selection = uiDoc.Selection;
ICollection<ElementId> ids = selection.GetElementIds();
using (var tr = new Transaction(doc, "Center text"))
{
 if (tr.Start() == TransactionStatus.Started)
 {
   foreach (ElementId id in ids)
   {
     Element element = doc.GetElement(id);
     var tn = element as TextNote;
     if (tn == null) continue;
     XYZ p1 = selection.PickPoint("First point");
     XYZ p2 = selection.PickPoint("Second point");
     tn.Coord = (p1 + p2) / 2;
     tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_HORZ).Set((int) TextAlignFlags.TEF_ALIGN_CENTER);
     tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_VERT).Set((int) TextAlignFlags.TEF_ALIGN_MIDDLE);
   }
   tr.Commit();
 }
 else
 {
   throw new Exception("Transaction can not be started.");
 }
}

Reponse constructeur :

'Autodesk.Revit.ApplicationServices.Application' ne contient pas une définition pour 'ActiveUIDocument' et aucune méthode d'extension 'ActiveUIDocument' acceptant un premier argument de type 'Autodesk.Revit.ApplicationServices.Application' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)
Construction échouée. (00:00:00.5829237)

J'ai installer SDK .msi , j'ai un beau répertoire avec aucun lien vers API

J'ai du mal faire un truc ,

Posté(e)

Salut,

dans quel environnement exécute tu ton ton code ?

Dans le dossier SDK, toutes les solutions sont ouvrables avec Visual Studio. Que te manque t-il dans ce dossier ?

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

bonjour,

je n'est pas installé visuel studio pour l'instant

revit mep 2016 sous windows 10 (aucune autre machine actuellement sous la mains)

à cette heure je vient de trouvé AddInManager N EST PAS CONPATIBLE WINDOWS 10

Merci pour les infos ,je vait faire mes recherches pour bien demmarer ou attente les MàJ

 

éditer à 10h46 après modification des fichiers *.addin changerment des textes "[TARGETDIR]" par " ./" j'ai bien le bouton outil externe

Posté(e)

Bonjour à tous,

 

Désolé de ne pas avoir donné signe de vie, j'étais en congé :(rires forts): .

 

J'ai donc appliqué les petites modifications préconisées par @Goldorak44.

 

Cependant, j'ai toujours une erreur qui s'affiche dans le compilateur :

'Autodesk.Revit.ApplicationServices.Application' ne contient pas une définition pour 'ActiveUIDocument' et aucune méthode d'extension 'ActiveUIDocument' acceptant un premier argument de type 'Autodesk.Revit.ApplicationServices.Application' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) (CS1061)

 

 

Voici le code tel que je l'ai dans mon éditeur (peut être que j'ai fait une boulette !):

/*
* Created by SharpDevelop.
* User: GuillaumeO
* Date: 05/11/2015
* Time: 18:28
* 
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using Autodesk.Revit.Exceptions;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;

namespace ModuleBetrec
{
   [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
   [Autodesk.Revit.DB.Macros.AddInId("735454FC-813B-42BB-9E79-7D6569BC811C")]
public partial class ThisApplication
{
	private void Module_Startup(object sender, EventArgs e)
	{

	}

	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);
	}
	#endregion
	public void CenterTxt()
	{
		UIDocument uiDoc = Application.ActiveUIDocument;
		Document doc = uiDoc.Document;
		Selection selection = uiDoc.Selection;
		ICollection<ElementId> ids = selection.GetElementIds();
		using (var tr = new Transaction(doc, "CenterTxt"))
		{
			if (tr.Start() == TransactionStatus.Started)
			{
				foreach (ElementId id in ids)
				{
					Element element = doc.GetElement(id);
					var tn = element as TextNote;
					if (tn == null) continue;
					XYZ p1 = selection.PickPoint("First point");
					XYZ p2 = selection.PickPoint("Second point");
					tn.Coord = (p1 + p2) / 2;
					tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_HORZ).Set((int) TextAlignFlags.TEF_ALIGN_CENTER);
					tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_VERT).Set((int) TextAlignFlags.TEF_ALIGN_MIDDLE);
				}
				tr.Commit();
			}
			else
			{
				throw new Exception("Transaction can not be started.");
			}
		}
	}
}
}

 

Merci à tous et bonne journée !

Mon pense bête : Mon blog fourre-tout

Ma bible : Aide AutoCAD

Mon futur calvaire : Revit

Posté(e)

Salut,

 

effectivement, il y a une erreur !! Dans le gestionnaire de Macro, tu as créé ton module dans l'onglet "Application" au lieu de l'onglet "NOM_DU_PROJET".

 

Si tu souhaite que ta commande soit liée à ton ordinateur et non pas au document, tu dois développer ton module dans l'onglet "Application". Tu récupère le document courant comme ceci :

UIDocument uiDoc = ActiveUIDocument;

 

Par contre si tu souhaite que ta commande soit associée à ton document et non à ton ordinateur, tu dois développer ton module dans l'onglet "NOM_DU_PROJET". Dans ce cas là tu récupère le document courant comme ceci :

UIDocument uiDoc = Application.ActiveUIDocument;

 

 

;)

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

:(rires forts): :(rires forts):

 

1) Tu sélectionne les textes que tu souhaite aligner

2) Tu exécute la macro

3) Pour chaque texte sélectionné, il va te demander deux points

4) il va te déplacer chaque texte au milieu des deux points

 

Essaye cette manip avec 1 texte puis plusieurs pour bien comprendre le fonctionnement !

A partir de ça, à toi de modifier la macro à ta guise pour obtenir le fonctionnement souhaité. N'hésite pas a poser des questions si des points te bloque.

 

;)

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité