Aller au contenu

propriété layer = erreur fatale


Messages recommandés

Posté(e)

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
Posté(e)

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
Posté(e)

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 langage

et je ne viens pas assez souvent sur le site

pour lire les messages concernant ce langage.

 

si Pako est là, il réponds souvent aussi,

d'ailleurs je profite de ce message

pour lui transmettre mes amitiés ;)

 

à bientôt

 

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

: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 VBA

C'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

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é