Revit : C# déplacement du cadre d'une vue X/Y en programmation C#

Revit : C# déplacement du cadre d'une vue X/Y en programmation C#

be-bj
Advocate Advocate
950 Visites
14 Réponses
Message 1 sur 15

Revit : C# déplacement du cadre d'une vue X/Y en programmation C#

be-bj
Advocate
Advocate

Bonjour

Je cherche une solution pour le déplacement du cadre d'une vue X/Y en programmation C# je ne vois pas la solution dans la programmation ?

Cordialement, bonne journée.


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
C# déplacement du cadre d'une vue X/Y en programmation C#

0 J'aime
Solutions acceptées (1)
951 Visites
14 Réponses
Replies (14)
Message 2 sur 15

Charles.Piro
Advisor
Advisor

Salut,

 

Tu souhaite déplacer le cadre de la vue dans une feuille ou le contour du cadre de la vue ?

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


0 J'aime
Message 3 sur 15

be-bj
Advocate
Advocate

Bonjour

 

C'est le cadre de la zone d'étage (voir nuage ci dessous dans l'image)

que j'ai besoin de déplacer en X et Y et de lui donner une largeur et une hauteur afin de la cadrer a l'endroit que je veux pour copier dans une feuille de présentation.

 

Merci pout ton aide, bonne journée 

bebj_0-1651237276439.pngbebj_0-1651237276439.png

 

0 J'aime
Message 4 sur 15

Charles.Piro
Advisor
Advisor

Salut,

 

Voici un exemple qui devrait répondre à ta problématique : 

View m_vue = doc.ActiveView;

//Active le cadrage de la vue
m_vue.CropBoxActive = true;

//Permet de récupérer les lignes de cadrage de la vue
IList<CurveLoop> lstCurve = m_vue.GetCropRegionShapeManager().GetCropShape();

Decalage en X et Y
double dblDecalageX = 0.0;
double dblDecalageY = 0.0;

//Création d'un nouveau contour en fonction du decalage souhaité :
CurveLoop newLoop = CurveLoop.CreateViaTransform(lstCurve[0], Transform.CreateTranslation(new XYZ(dblDecalageX, dblDecalageY, 0)));

//Applique le nouveau contour à la vue :
m_vue.GetCropRegionShapeManager().SetCropShape(newLoop);

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


0 J'aime
Message 5 sur 15

be-bj
Advocate
Advocate

Bonjour

 

Je te remercie, je vais faire le teste en fin de semaine.

 

Merci pour on aide

 

Cordialement bonne journées

0 J'aime
Message 6 sur 15

patrick.emin
Alumni
Alumni

Bonjour @be-bj , avez-vous pu tester la solution proposée ?


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime
Message 7 sur 15

be-bj
Advocate
Advocate

Bonjour

 

Pas encore normalement fin de semaine

 

Merci, bonne journée

0 J'aime
Message 8 sur 15

be-bj
Advocate
Advocate

Bonjour

Désolé ça ne fonctionne pas 

 

Ci joint le message d'erreur

 

bebj_0-1652341442728.pngbebj_0-1652341442728.png

ci joint l'emplacement de l'erreur

 

également comment définir la hauteur et la largeur du cadre ?

 

Cordialement bonne journée

 

0 J'aime
Message 9 sur 15

be-bj
Advocate
Advocate

Oups

 

manque le programme

bebj_0-1652341648506.pngbebj_0-1652341648506.png

Codialement

0 J'aime
Message 10 sur 15

Charles.Piro
Advisor
Advisor

Salut,

 

Il faut encapsuler ton code de modification dans une transaction !

 

 

using (Transaction trans = new Transaction(rvtDoc))
{
trans.start("move the cropbox");

//your code

trans.commit();
}

 

 

Documentation : https://www.revitapidocs.com/2023/308ebf8d-d96d-4643-cd1d-34fffcea53fd.htm 

 

Deuxième problème, tu termine ton programme ("return Autodesk.Revit.UI.Result.Succeeded") avant d'appliquer le nouveau cadrage à la vue.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


0 J'aime
Message 11 sur 15

be-bj
Advocate
Advocate

Bonjour

Désolé pas de déplacement pas d'erreur

Cordialement, bonne journée

bebj_0-1652358649673.pngbebj_0-1652358649673.png

 

0 J'aime
Message 12 sur 15

Charles.Piro
Advisor
Advisor

Logique, il te manque un "commit" à la fin de la transaction pour valider les actions effectuée.

 

Voici le code :

UIDocument uiDoc = uiApp.ActiveUIDocument;
Document rvtDoc = uiDoc.Document;
			
View m_vue = rvtDoc.ActiveView;

using (Transaction trans = new Transaction(rvtDoc))
{
trans.Start("move the cropbox");

//Active le cadrage de la vue
m_vue.CropBoxActive = true;

//Permet de récupérer les lignes de cadrage de la vue
IList<CurveLoop> lstCurve = m_vue.GetCropRegionShapeManager().GetCropShape();

//Decalage en X et Y
double dblDecalageX = 10.0;
double dblDecalageY = 10.0;

//Création d'un nouveau contour en fonction du decalage souhaité :
CurveLoop newLoop = CurveLoop.CreateViaTransform(lstCurve[0], Transform.CreateTranslation(new XYZ(dblDecalageX, dblDecalageY, 0)));

//Applique le nouveau contour à la vue :
m_vue.GetCropRegionShapeManager().SetCropShape(newLoop);

trans.Commit();
}

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


0 J'aime
Message 13 sur 15

be-bj
Advocate
Advocate

Bonjour

 

Oui effectivement ca fonctionne bien pas vue je change les lunettes !!!

 

Ci je comprend bien le déplacement c'est des pouces ?

 

Il me reste a trouver comment dimensionner la hauteur et la largeur

 

Merci pour votre rapidité, bonne journée

0 J'aime
Message 14 sur 15

Charles.Piro
Advisor
Advisor

Salut,

 

Non ce n'est pas des pouces mais des pieds décimaux (1 ft = 0.3048m). C'est au sein d'une feuille que les valeurs de déplacement sont en pouce (1 in = 0.0254m).

Pour travailler sur la hauteur et les largeur des cadres, il faudra récupérer les lignes au sein de la CurveLoop et utiliser les valeurs des points de départ/arrivées. C'est un travail assez complexe car il ne suffit pas de modifier les positions pour recréer un cadre aux bonnes dimensions, il faut également le placer au bon endroit.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


0 J'aime
Message 15 sur 15

be-bj
Advocate
Advocate
Solution acceptée

Bonjour

 

Ok bien noter

 

Merci, bonne journée

0 J'aime