Aller au contenu

Maxence DELANNOY

Membres
  • Compteur de contenus

    140
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Maxence DELANNOY

  1. Maxence DELANNOY

    Affichage premier plan

    Tu dois modifier l'ordre de tracé. VBA ne propose pas de méthode pour ça, donc tu dois bricoler. Tu peux par exemple lancer la commande ORDRETRACE (_DRAWORDER) via SendCommand : Public Sub MoveToTop() Dim object As AcadObject Dim pt As Variant ThisDrawing.Utility.GetEntity object, pt, "Sélectionnez une entité:" ThisDrawing.SendCommand "_DRAWORDER" & vbCr _ & "(handent """ & object.Handle & """)" & vbCr & vbCr _ & "_F" & vbCr End Sub Cet exemple amène au premier plan l'entité object. J'utilise une petite astuce, la fonction AutoLISP handent pour passer un nom d'entité à la commande.
  2. Maxence DELANNOY

    Problème hachure

    Premièrement faire un test si ce n'est pas déjà fait avec une entité simple. Si ça ne marche pas, je pense qu'il faut cloner les entités contenus dans le bloc. Pour cela, tu peux utiliser Entity.GetTransformedCopy en lui passent la matrice 3D BlockReference.BlockTransform. Sachant que GetTransformedCopy ne fonctionne pas pour les polylignes (je ne sait pas si c'est pour tous les types ou uniquement pour les Polyline2d. Les clones doivent être résidents dans la base de données si ta version d'AutoCAD est < 2012. Pas simple comme affaire... Dernier conseil, respecte bien l'ordre d'appel des différentes méthodes car il est important : Hatch hatch = new Hatch(); // L'échelle, l'angle doivent être définis avant l'appel à SetHatchPattern hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31"); space.AppendEntity(hatch); tr.AddNewlyCreatedDBObject(hatch,true); // Si associative, doit être placé après l'ajout des hachures à la base de données sinon exception // eNotInDatabase hatch.Associative = false; hatch.AppendLoop((int)HatchLoopTypes.Default, objIds); // Doit être appelé après SetHatchPattern d'après la doc. du SDK ObjectARX // et après AppendLoop puisque cette méthode calcule les intersections hatch.EvaluateHatch(true); Mise à jour Oups, je n'avais pas vu que tu utilisais COM, le code ci-dessus est en C#/.NET. Alors là, je ne peut pas t'aider...
  3. Difficile de répondre sans savoir précisément ce qui se cache dans le formulaire WinDistrib...
  4. De mémoire en .NET tous les points sont en SCG, sauf les points retournés via l'entrée de l'utilisateur (ed.GetPoint) qui sont exprimés dans le SCU (bon il y aussi SCA (affichage) et SCO (objet) dans certains cas). Dim pInWcs As Point3D Dim pInUcs As Point3D Dim ed As Editor pInUcs = pInWcs.TransformBy(ed.CurrentUserCoordinateSystem.Inverse()) Petit test en C# pour la transformation inverse : [CommandMethod("TEST")] public void Test() { Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; PromptPointResult ppr = ed.GetPoint("Point:"); Debug.WriteLine(ppr.Value, "SCU"); Debug.WriteLine(ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem), "SCG"); }
  5. 1. Tu dois retrouver toutes les définitions d'attributs se trouvant dans la définition du bloc et créer des références d'attributs. foreach (ObjectId id in btr) { var attDef = tr.GetObject(id, OpenMode.ForRead, false) as AttributeDefinition; if (attDef != null) { // Crée une référence d'attribut en copiant les propriétés de la définition d'attribut var attRef = new AttributeReference(); attRef.SetPropertiesFrom(attDef); attRef.SetAttributeFromBlock(attDef, br.BlockTransform); if (attValues != null && attValues.ContainsKey(attDef.Tag)) attRef.TextString = attValues[attDef.Tag]; br.AttributeCollection.AppendAttribute(attRef); tr.AddNewlyCreatedDBObject(attRef, true); } } 2. L'accès à ces propriétés se fait via la propriété DynamicBlockReferencePropertyCollection de la référence de bloc. DynamicBlockReferencePropertyCollection props = br.DynamicBlockReferencePropertyCollection; foreach (DynamicBlockReferenceProperty prop in props) { }
  6. Les méthodes définies comme commande via l'attribut CommandMethod ne peuvent pas comporter de paramètres. Tu dois utiliser Editor.GetString pour accepter une entrée utilisateur sous forme d'une chaîne.
  7. Sinon, pourquoi est-ce que tu génères à la volée ton fichier DCL ?
  8. Et quand tu appelles explicitement done_dialog, je pense que tu dois passer 1 (OK) dans le status. (done_dialog 1) Sinon, c'est 0 (Cancel) qui est retourné. Surtout pour le bouton "accept". Extrait de la doc. :
  9. A la lecture rapide du code, je vois que tu utilises get_tile pour retrouver la valeur du contrôle. Normalement, on utilise la variable $value. (action_tile "ctb" "(setq ctb $value)(done_dialog)") Je pense que si tu utilises get_tile dans le callback, la valeur du contrôle n'est pas encore mise à jour et donc tu récupère l'ancienne valeur (à vérifier, je n'ai jamais essayé).
  10. Tu dois passer un filtre de sélection à SelectAll : var tv = new[] { new TypedValue((int) DxfCode.Operator, "<OR"), new TypedValue((int) DxfCode.LayerName, "Calque1"), new TypedValue((int) DxfCode.LayerName, "Calque2"), [..] new TypedValue((int) DxfCode.Operator, "OR>") ; var sf = new SelectionFilter(tv); ed.SelectAll(sf); C'est en C# désolé, j'ai la flemme de traduire ça en VB.
  11. Avec VS 2010 pro, on peut le faire via le menu déroulant Déboguer >Supprimer tous les points d'arrêt (Ctrl+Maj+F9). On peut le faire également en affichant la fenêtre "Points d'arrêt" (Ctrl+Alt+B), il y a un bouton pour ça. Par contre, on n'a pas l'équivalent dans la version Express.
  12. Il faut passer par la propriété statique Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager. DocumentManager est une collection de documents sur laquelle tu peux boucler avec une instruction For Each. Exemple pour afficher le nom de tous les documents ouverts : For Each doc As Document In Application.DocumentManager Debug.WriteLine(doc.Name) Next
  13. Je pense que tu peux le faire sans AutoLISP, avec la commande -exportoautocad et son option Suffixe
  14. Je ne pense pas que ce soit possible en AutoLISP, même via COM. Il faut utiliser .NET (et encore l'API est limitée) ou ObjectARX pour manipuler les blocs dynamiques.
  15. La version 8 (la dernière) est très différente des versions précédentes. Elle se rapproche beaucoup d'AutoCAD.
×
×
  • 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é