didier Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 Coucou Bonjour à Toutes et à TousJe 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éesJe 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 AutoCADSi 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 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 trueUn 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
(gile) Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 Re, J'ai signalé l'erreur à Autodesk en ajoutant un commentaire dans ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 27 octobre 2016 Auteur Posté(e) le 27 octobre 2016 Coucou Merci beaucoup Effectivement ça fonctionneMoi, je croyais que puisque le plantage correspondait à la ligne je faisais l'amalgame et ne zoomait que sur cette ligneHonnê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 merciJe mets le sujet en résolu Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 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
didier Posté(e) le 27 octobre 2016 Auteur Posté(e) le 27 octobre 2016 Coucou Je remarque aussi qu'ils ne définissent pas de NAMESPACEEst-ce important ou est-ce moi qui interprète mal les bases du C# ?? Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 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
didier Posté(e) le 27 octobre 2016 Auteur Posté(e) le 27 octobre 2016 Coucou C'est un fil à la patte tendu en travers du chemin des adeptes du copier-coller, bien fait pour eux !!! Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 27 octobre 2016 Posté(e) le 27 octobre 2016 Le fait que je trouve le code C# "mal écrit" est probablement dû (au moins en partie) au fait qu'il soit converti (automatiquement) à partir d'un code VB. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant