Aller au contenu

rrobert

Membres
  • Compteur de contenus

    145
  • Inscription

  • Dernière visite

Tout ce qui a été posté par rrobert

  1. Merci de ces retours, cela va bien m'aiguiller pour optimiser le bloc. Je vous l'ai mis en PJ. bloc.dwg
  2. Et bien par exemple lorsque je clique sur la liste des états de visibilité de ce bloc depuis l'onglet propriétés, il y a un vrai lag avant que le survol de la souris ne mette en surbrillance le futur objet, et une fois un nouvel état de visibilité sélectionné, il y a un certain temps d'attente avant que la visibilité soit mise à jour. Pour infos, environ 350 occurrences du bloc sur le plan. Vous avez déjà côtoyé le bloc en question et constaté lesdits ralentissements sur cette réponse de topic :
  3. @Luna j'avais bien compris le problème, pour l'instant je vais faire 2/3 trucs urgents en VBA pour moi, je verrai après si je passe le cap du script et diesel pour les collègues car ça fait déjà pas mal de choses à décortiquer en ce moment 😉
  4. Argh, je n'ai donc plus aucun argument pour développer en lisp 😉 Merci de l'info. Yes il en faut, je vais m'attaquer à un gros truc là, mais grâce à tous vos conseils je vais déjà bien avancer 🙂
  5. Merci du lien. J'ajoute aussi que si je veux autant développer en VBA et pas trop en lisp c'est que nous sommes 4 au bureau et que je suis le seul à avoir AutoCAD en full, les autres ayant LT c'est mieux si tout le monde peut en profiter 😉
  6. Merci d'avoir pris le temps du lisp et de me montrer en VBA, c'est très appréciable. Je comprends bien mieux la structure des bloc et blocs dynamiques dans Autocad. Donc si je comprends bien il me suffit d'ajouter autant de codes DXF que je souhaite à FilterType et autant de conditions à FilterData pour complexifier le filtrage si je le souhaite?
  7. Bonjour, J'ai récupéré un bloc d'un ancien collègue et ce bloc comporte un solide pour symboliser l'extrémité d'une flèche. Ce bloc est utilisé de nombreuses fois sur le plan (2D) et a tendance à le ralentir. J'aimerai alléger ce bloc. Est-ce qu'un solide est moins lourd qu'une hachure, ou l'inverse? Par ailleurs, je suppose qu'il vaut mieux créer une polyligne avec plusieurs largeurs pour faire une flèche, plutôt que de faire une polyligne avec un remplissage? Merci de vos retours, Rémi
  8. @gile c'est exactement ça ! Je sais, je sais, le lisp est plus puissant et mieux, mais la syntaxe n'est pas évidente au début, et connaissant déjà le VBA je trouvais ça plus facile de me lancer avec le VBA. D'autant qu'avec les userForm il est facile de créer des choix de sélections, bref je trouve cela plus personnalisable !
  9. Merci pour tous vos retours, je vais regarder ça (préfiltrage et collections). @didier le fichier fait 105 ko et la PJ est limitée à 47 kb :
  10. Ooookk je comprends ! C'est exactement ça, merci Olivier !
  11. Au temps pour moi ! Voici la macro complète: Sub selectionner_etage() 'Cette macro permet de sélectionner un bloc manuellement puis de sélectionner tous les blocs du même nom présents sur le même étage ' Elle évoluera dans le temps pour créer un utilitaire de sélection complet permettant de renseigner les calques, noms, visibilité, attributs, dimensions, etc. Dim etage_recherche As Integer Dim etage_ref As Integer Dim espacement_etage As Double Dim lim_inf As Double Dim lim_sup As Double Dim viewpoint As Variant 'Variables pour la sélection d'objet Dim selectionref As AcadEntity Dim point_selection_ref As Variant Dim blocref As AcadBlockReference Dim nom_bloc As String Dim selection As AcadSelectionSet Dim objet As AcadObject Dim objet_suppr(0) As AcadEntity Dim bloc As AcadBlockReference Dim bloc_sel As AcadBlockReference 'on vient récupérer les variables Autocad nécessaire à la réalisation de la macro espacement_etage = ThisDrawing.GetVariable("useri1") 'L'utilisateur doit sélectionner UN bloc de référence 'Si la sélection comporte une erreur on recommence la phase de sélection On Error Resume Next RETRY: 'Code de sélection du bloc de référence ThisDrawing.Utility.GetEntity selectionref, point_selection_ref, vbCr & "Sélectionnez le bloc de référence" 'verification des erreurs de selection If Err <> 0 Then Err.Clear MsgBox "La sélection est vide ou non valide." GoTo RETRY End If 'On vérifie que l'élément de référence sélectionné est un bloc If TypeOf selectionref Is AcadBlockReference Then Set blocref = selectionref nom_bloc = blocref.EffectiveName 'On détermine le niveau du bloc ainsi que les limites sup et inf du niveau 'ATTENTION, ceci ne fonctionne qu'avec les coordonnées du SCG If blocref.InsertionPoint(1) >= 0 Then etage_ref = Fix((blocref.InsertionPoint(1)) / espacement_etage) Else etage_ref = Fix((blocref.InsertionPoint(1)) / espacement_etage) - 1 End If lim_sup = espacement_etage * (etage_ref + 1) lim_inf = espacement_etage * etage_ref 'MsgBox "Nom du bloc : " & nom_bloc 'MsgBox "Point d'insertion (1) : " & blocref.InsertionPoint(1) 'MsgBox "Etage ref : " & etage_ref 'MsgBox "Lim inf : " & lim_inf 'MsgBox "Lim sup : " & lim_sup Else MsgBox "L'élément sélectionné n'est pas un bloc." GoTo RETRY End If 'On sélectionne tous les objets du plan Set selection = ThisDrawing.SelectionSets.Add("test01") selection.Select acSelectionSetAll MsgBox ("Elements sélectionnés: " & str(selection.Count)) 'On Parcourt chaque objet de la sélection For Each objet In selection Set objet_suppr(0) = objet 'On vérifie que l'objet est un bloc If TypeOf objet Is AcadBlockReference Then Set bloc_sel = objet With bloc_sel 'On vérifie si le bloc sélectionné a le même nom que le bloc de référence If .EffectiveName = nom_bloc Then 'MsgBox (.InsertionPoint(1)) 'On vérifie que le bloc est au même niveau que le bloc de référence If .InsertionPoint(1) > lim_inf And .InsertionPoint(1) < lim_sup Then 'MsgBox (.EffectiveName) objet.Highlight True Else selection.RemoveItems (objet_suppr) Set objet_suppr(0) = Nothing End If Else selection.RemoveItems (objet_suppr) Set objet_suppr(0) = Nothing End If End With Else selection.RemoveItems (objet_suppr) Set objet_suppr(0) = Nothing End If Set objet_suppr(0) = Nothing Next Set objet_suppr(0) = Nothing 'selection.Update MsgBox ("Elements sélectionnés après filtrage: " & str(selection.Count)) 'selection.Highlight True selection.Delete End Sub Le fichier est trop lourd pour passer en PJ... 😕 Une collection, what? Jamais entendu parler de ça.
  12. L'idée est très bonne mais comment faire? Créer un jeu de sélection vide, parcourir tous les blocs du dessin et l'ajouter s'il correspond aux conditions?
  13. Pas tout à fait, le bloc faisait déjà ce que tu me décris ;) Ce que j'aimerai c'st avoir un seul attribut au lieu des 2 (Avoir 1 attribut "Diamètre" qui remplace "ØINF" et "ØSUP"), et que cet attribut puisse apparaitre en deux fois dans le bloc, en haut et en bas (après je gèrerai les visibilités sans souci)
  14. Je me casse la tête depuis 3h..... Ma Sub actuelle permet de : - sélectionner un bloc dans mon plan - Sélectionner tous les blocs du même nom étant au même étage (les étages étant définis par un écartement fixe stocké dans USERI1) EX : pour USERI1=50, le RDC est situé entre 0 et 50m, le R+1 entre 50 et 100m, etc. Les étages négatifs sont pris en compte. Sauf que voilà.... Je n'arrive pas à comprendre la sélection alors que le code ne me paraît pas trop foireux.. (probablement pas optimisé, certes) Le code : Je ne comprends pas trop comment RemoveItems fonctionne.... Si je supprime les lignes RemoveItems, je n'ai pas de souci, ça fonctionne bien ! Sinon il me sort une sélection au hasard, avec des objets en highlight qui ne correspondent pas au nombre d'objets restants dans la sélection.
  15. @Curlygoth je risque certainement d'avoir des sélections toujours éphémères, je suppose qu'il y a une méthode de sélection plus adaptée que créer un SelectionSet ? Je pense aussi tout sélectionner puis filtrer après du coup 😉
  16. La visibilité pour tous les états ne change rien.. En PJ un fichier avec le bloc. J'ai un attribut ØINF et un attribut ØSUP Mais j'aimerai avoir un seul attribut "Diamètre", qui soit en haut et en bas des flèches. Merci de regarder, Rémi Test.dwg
  17. Bonjour, J'aimerai avoir plusieurs occurrences d'un même attribut dans un bloc, et gérer l'affichage de ces occurrences en fonction de l'état de visibilité. Sauf que lorsque je copie l'attribut dans l'éditeur, seule une occurrence est visible... Par exemple, j'ai un bloc avec une flèche en bas et une flèche en haut. Le bloc possède un attribut "diamètre". J'aimerai afficher cet attribut sur la flèche du bas ainsi que sur la flèche du haut. Et lorsque je change la visibilité du bloc pour n'avoir que la flèche du haut, je voudrais conserver uniquement l'occurrence du haut. Est-ce possible? Je n'ai rien trouvé sur le forum ou internet. Merci, Rémi
  18. @Curlygoth je risque certainement d'avoir des sélections toujours éphémères, je suppose qu'il y a une méthode de sélection plus adaptée que créer un SelectionSet ?
  19. EffectiveName, merci !! Cela confirme mes doutes, on est donc très limité dans le filtrage pré-sélection et il faut forcément passer par une évaluation de tous les objets d'une sélection plus large ! Merci pour ces retours. @Curlygoth si je ne me trompe pas, une sélection simple permet un traitement sans historique alors qu'un jeu de sélection conservera toujours les objets sélectionnés dedans? Comment supprimer un objet d'un jeu de sélection?
  20. VBA Je me bats depuis plusieurs jours... Je souhaite sélectionner tous les blocs dynamiques de mon dessin ayant le nom "test". J'utilise jusqu'ici la méthode suivante (je vous passe la déclaration des variables) : Le problème c'est qu'avec les blocs dynamiques, tous mes blocs "test" ont en fait un nom différent (*Uxx). Normal car ce sont des blocs dynamiques. Mais est-il possible de tester le nom "générique" du bloc plutôt que son nom *Uxx ? J'ai essayé une autre méthode, mais cette dernière ne détecte pas les blocs dynamiques, seulement les blocs normaux : Le problème c'est que je n'arrive pas à trouver les codes DXF me permettant de renseigner la bonne valeur pour filterType et filterData... Bref, je cherche une méthode permettant de sélectionner des blocs dynamiques avec plusieurs possibilités de filtres 😉 Merci pour vos aides, Rémi
  21. Comment as-tu fait pour visualiser l'emprise de ton bloc? Est-ce que IntersectWith peut contrôler autre chose que l'emprise (par exemple considérer le point d'insertion du bloc)?
  22. @Curlygoth je m'en doute, mais ça atteint la limite de mes connaissances de VBA sur Autocad 😉 Existe-t-il des cours VBA Autocad pour débutants? Concernant la question du nombre de sélections : Voici un exemple type de ce que je souhaite faire : J'ai 6 blocs disposés ainsi : (la disposition change évidemment pour chaque projet) Je souhaite contrôler que tous mes blocs sont bien reliés entre eux. Ou plutôt, que chaque bloc a sa ou ses extrémités reliées à un autre bloc. Idéalement, j'aimerai sélectionner tous mes blocs d'un coup et que la macro vérifie tous les blocs en un passe (avec par exemple un attribut interne possédant le nombre de connections à vérifier pour chaque type de bloc).
  23. Autre question @gile, peut-on contrôler l'emprise du bloc ou bien est-elle définie automatiquement en fonction des objets qui sont dessus? 😁
  24. @gile j'avais en effet pensé à cette solution. Ducoup sélectionner les blocs, en faire une copie, exploser les originaux, déterminer les intersections puis supprimer les originaux? Est-ce que IntersectWith peut gérer plus de deux objets?
  25. Intéressant ! Je vais creuser ce sujet 🙂
×
×
  • 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é