Titifonky Posté(e) le 13 juin 2005 Posté(e) le 13 juin 2005 Bonjour à tous, Je me suis lancé depuis peu dans le VBA et je rencontre mes premiers problèmes.J'ai écrit quelques lignes de code pour mettre certains types d'objet directement dans un calque au moment de leurs création.La routine fonctionne très bien pour les entitées simples tel que le rectangle, les fenêtres, mais quand j'essaye la propriété Layer sur des objets de cotation il m'annonce de manière aléatoire une erreur fatale. Public Obj As Object ---------------------------------------------------------------- Public Sub AcadDocument_EndCommand(ByVal CommandName As String) If CommandName <> "ERASE" And Not Obj Is Nothing Then Select Case Obj.ObjectName Case "AcDbPolyline" If ThisDrawing.ActiveLayout.Name <> "Model" And CommandName = "RECTANGLE" Then Obj.Layer = FindLayer("cadre") End If Case "AcDbViewport" Obj.Layer = FindLayer("fmult") Case "AcDbAlignedDimension", "AcDbRotatedDimension", "AcDbOrdinateDimension", "AcDbRadialDimension", "AcDbDiametricDimension", "AcDb2LineAngularDimension", "AcDbLeader", "AcDbMText" Obj.Layer = FindLayer("cotation") End Select End If Set Obj = Nothing End Sub ---------------------------------------------------------------- Private Sub AcadDocument_ObjectAdded(ByVal object As Object) Set Obj = object End Sub ---------------------------------------------------------------- Private Function FindLayer(nom As String) As String Dim AllLayers As Object Dim Layer As Object Set AllLayers = ThisDrawing.Layers For Each Layer In AllLayers If InStr(1, Layer.Name, nom, 1) Then FindLayer = Layer.Name Exit Function End If Next FindLayer = "0" End Function Es ce que quelqu'un à une idée sur ce genre de problèmes ?? Merci www.le-metal.net, sur la métallerie
Titifonky Posté(e) le 15 juin 2005 Auteur Posté(e) le 15 juin 2005 Salut la compagnie, Je pense que je vais continuer à discuter tout seul mais bon j'ai trouvé les raisons de mon problème et quelques solutions. Le problème avec l'evenement ObjectAdded c'est qu'il renvoie toutes les entitées crées au cours de la commande et non l'entitée général crée à la fin.Je m'explique :Quand autocad crée une ligne de cote, il crée d'abord les lignes, les fleches, les textes et [surligneur]les points[/surligneur] , etc...puis il en fait un bloc et doit surement le transformer en objet AutoCAD ??.Le problème arrive au moment de la création des points, ces points sont crée sur le calque Defpoint, à ce moment là si la propriété du calque est changé il va essayé de changer la propriété calque des points crées sur Defpoint. La cotation va être crée mais si on essaye d'effacer la ligne de cote il envoie une "Erreur Fatale".Conclusion, pour recuperer une entité complexe crée au cours d'une commande il vaut mieux utiliser" AutoCAD.Application.ActiveDocument.ModelSpace.Item(Count - 1)" , l'equivalent de entlast en Lisp. En esperant que ces informations vous aide. www.le-metal.net, sur la métallerie
didier Posté(e) le 15 juin 2005 Posté(e) le 15 juin 2005 Hello,ne sois pas frustré du manque de réponses,mais le VBA n'est pas très répandu chez les utilisateurs, je sévis de temps à autre dans ce langageet je ne viens pas assez souvent sur le sitepour lire les messages concernant ce langage. si Pako est là, il réponds souvent aussi,d'ailleurs je profite de ce messagepour lui transmettre mes amitiés ;) à bientôt Éternel débutant… Mon site perso : Programmer dans AutoCAD
Titifonky Posté(e) le 15 juin 2005 Auteur Posté(e) le 15 juin 2005 :D je ne suis pas frustré(e):), je trouve meme ça rigolo. Si j'avais reçu une reponse directe, je n'aurais pas chercher plus loin.Maintenant j'ai decouvert un peu plus le VBA et je trouve ca pas mal.Je me pose même la question de l'interet du Lisp si ce n'est la meilleur imbrication du Lisp dans Autocad par rapport au VBA.Les interfaces DCL ne sont pas très pratique.J'ai déjà fais un peu de programmation en Common LISP et je trouve qu'il manque le module de programmation orienté objet LISP "CLOS pour les intimes" dans autocad.Cela permettrait d'avoir un outils très puissant, et surement mieux que le VBAC'est dommage mais ce n'est qu'un avis personnel bien sur !!! Bonne soirée [Edité le 16/6/2005 par Titifonky] www.le-metal.net, sur la métallerie
didier Posté(e) le 15 juin 2005 Posté(e) le 15 juin 2005 hello, tu n'es pas obligé(e) de répondre,mais vu qu'une fois tu parles au fémininet la fois précédente au masculin,ne voulant froisser personne, fais attention à ta frappe,en sachant, on ne fera pas de fautes en te répondant amicalement Éternel débutant… Mon site perso : Programmer dans 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