Aller au contenu

[Résolu] Nouveau SCU en C#


didier

Messages recommandés

Coucou

 

Bonjour à Toutes et à Tous

Je continue dans le C# et je rencontre des soucis que je ne sais expliquer donc encore moins résoudre.

------------------------------------------------------------------------------------------------------------------------------------------------

Je cherche à faire un changement de base en utilisant les matrices donc je dois donner au moins les bases des systèmes de coordonnées

Je par du général vers un système particulier que je cherche à définir, la suite on verra au fur et à mesure ...

Je regarde dans l'aide et je trouve ce qu'il y a dans ce lien : Aide AutoCAD

Si le lien fonctionne vous êtes sur la page : define a user coordinate system

 

Je ne fais pas de copier coller pour être certain d'enregistrer ce que je tape et là j'ai tapé trois fois de suite pour être certain mais :

Je reçois une erreur fatale au niveau de cette ligne :

 

acUCSTblRec.Origin = New Point3d(4, 5, 3)
acUCSTblRec.XAxis = New Vector3d(1, 0, 0)
acUCSTblRec.YAxis = New Vector3d(0, 1, 0)

 

Pour affirmer que c'est ici que ça plante je me suis mis en pas à pas et par F11 j'avance ligne par ligne

 

Question :

Qu'est ce qui est incorrect dans cette ligne pour planter le logiciel ?

 

J'ai mis les trois lignes mais c'est dès la première que je me fais sortir comme un malpropre

 

Merci d'avance à celles et ceux qui vont prendre de leur temps pour me dépatouiller

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tout d'abord, ton lien ne fonctionne pas (du moins pour moi).

J'imagine que c'est celui de l'aide pour 2015.

 

Là, je ne dis vraiment pas bravo à Autodesk parce que je trouve ce code mal écrit* (je sais, c'est subjectif) mais surtout avec une erreur monumentale. Le pire, c'est que dans mes recherches, je suis tombé sur l'aide de 2011 qui n'a pas cette erreur.

 

Si l'exception est déclenchée sur la ligne :

acUCSTblRec.Origin = new Point3d(4, 5, 3);

ce n'est pas cette ligne de code qui est en cause.

 

Plus haut dans le code, on teste si la table des SCUs ne contient pas déjà un SCU nommé New_UCS, si la condition est vraie, autrement dit que :

(acUCSTbl.Has("New_UCS") == false) retourne true

Un nouveau SCU nommé est créé et ajouté à la table des SCUs, à la transaction, puis immédiatement jeté par l'expression :

acUCSTblRec.Dispose();

C'est cette ligne qui est en cause.

 

Donc, personnellement, j'aurais écrit:

if (acUCSTbl.Has("New_UCS"))
{
   acUCSTblRec = (UcsTableRecord)acTrans.GetObject(acUCSTbl["New_UCS"],OpenMode.ForWrite);
}
else
{
   acUCSTblRec = new UcsTableRecord();
   acUCSTblRec.Name = "New_UCS";
   // Open the UCSTable for write
   acUCSTbl.UpgradeOpen();
   // Add the new UCS table record
   acUCSTbl.Add(acUCSTblRec);
   acTrans.AddNewlyCreatedDBObject(acUCSTblRec, true);
}

 

* En C#, (acUCSTbl.Has("New_UCS") == false) s'écrit plus simplement (!acUCSTbl.Has("New_UCS")), mais dans la mesure où les deux cas (if et else) sont traités, pourquoi utiliser une condition négative ?...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Merci beaucoup

Effectivement ça fonctionne

Moi, je croyais que puisque le plantage correspondait à la ligne je faisais l'amalgame et ne zoomait que sur cette ligne

Honnêtement je ne voyais pas ce qui clochait dans cette définition de point 3D mais je suis novice (encore)

Je ne lâche pas l'affaire et je continue.

---------------------------------------------------------------------------------------------------------------

Autre chose :

Quand on se permet de faire des remarques à Autodesk, moi je dis : respect !

---------------------------------------------------------------------------------------------------------------

Encore merci

Je mets le sujet en résolu

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Quand on se permet de faire des remarques à Autodesk, moi je dis : respect !

 

Tout le monde fait des erreurs, moi le premier, mais ajouter une erreur aussi énorme dans un exemple de "l'aide officielle" alors qu'elle n'y étais pas dans les versions précédentes (avant 2014), c'est quand même pas banal...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Je pense que c'est dû au fait que ces exemples sont d'abord écrit en VB puis convertis en C# (probablement à l'aide d'un convertisseur automatique).

 

Avec VB, Visual Studio crée un espace de nom de même nom que le projet (comme en C# par défaut) mais ne l'affiche pas dans le code des différentes classes.

En fait avec Visual Basic, beaucoup d'informations concernant le projet sont "cachées" dans les propriétés du projet comme certaines importations d'espaces de nom (directives using en C#) ou les options de compilation.

 

Dans le cas de ces exemples de code, la classe NewUcs est définie dans l'espace de nom du projet en VB (sans qu'on le voit dans le code) et dans l'espace de nom "global" en C#.

 

Définir ses classes dans un espace de nom n'est pas une obligation, mais c'est une meilleur pratique (c'est pour ça que Visual Studio en crée un par défaut avec le nom du projet).

 

Encore une "lacune" de ces exemples de l'aide. Bien vu didier, je ne l'avais pas remarqué, j'utilise toujours mes propre "modèles de projet".

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é