Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. Un petit exemple en LISP (defun c:NREP (/ txt src str) (and (setq txt (car (nentsel "\nSélectionnez le texte source : "))) (setq src (cdr (assoc 0 (entget txt)))) (wcmatch src "*TEXT,ATT*") (setq str (getpropertyvalue txt (if (= src "MTEXT") "Contents" "TextString" ) ) ) (command "_mleader" "_options" "_content" "_mtext" "_max" 2 "_exit" pause pause str) ) (princ) )
  2. Coller un texte provenant d'un fichier en xref dans une ligne de repère est possible et relativement facile avec un peu de programmation. Maintenir un lien dynamique (comme le fait un champ) entre le texte source et la ligne repère, c'est une autre paire de manches...
  3. (gile)

    thunderbolt

    Je crains qu'il n'y ait là quelque confusion. USB 3 désigne un port avec un débit théorique (USB 3 : 5 go/s, USB 3.1 : 10 go/s). J'imagine que la "la prise [...] plus petite" désigne le nouveau connecteur USB C qui aujourd'hui peu supporter USB 2.0, USB 3.0, USB 3.1, mais aussi Thunderbolt 3.0 (40go/s). J'ai un ZBOOK HP avec 3 ports USB 3 (connecteur USB A classique) et 2 ports Thunderbolt 3 (connecteur USB C).
  4. Les données étendues (xdata) sont limitées à 16ko par objet. Les fonctions LISP xdroom et xdsize permettent respectivement de connaître l'espace disponible pour un objet et le 'poids' d'une liste de données étendues. Les dictionnaires d'extension et xrecords n'ont pas ces limitations. Les codes DXF pour les données étendues sont les groupes 1000 et supérieurs, pour les xrecords on utilise les même groupes que pour les objets AutoCAD. En général avec les données étendues on utilise plusieurs fois le même code (par exemple 1000 pour les chaînes) pour une une seule application enregistrée, c'est la position (index) dans la liste qui permet de déterminer à quoi correspond la donnée. Avec les xrecords on peut faire pareil (un xrecord pour une liste des données) ou bien créer plusieurs xrecords (avec une donnée par xrecord) cette dernière façon permet 'nommer' chaque donnée. Suivant que tu utilises AutoLISP ou 'VisualLISP' tu peux te servir des bibliothèques Dictionaries ou AutomationHelpers en bas de cette page.
  5. (gile)

    Trapeze

    Le fichier Trapezoid.zip est désormais disponible depuis cette page. Débloquer puis extraire et exécuter TrapezeSetup.msi pour installer le plugin sur toutes les versions d'AutoCAD (et verticaux) depuis 2013
  6. C'est la première chose à faire. Ensuite, la fonction native vl-sort permet tout à fait de répondre à ta demande. (vl-sort lst '(lambda (s1 s2 / x1 x2) (if (= (setq x1 (substr s1 5 13)) (setq x2 (substr s2 5 13)) ) (< (substr s1 (- (strlen s1) 5)) (substr s2 (- (strlen s2) 5)) ) (< x1 x2) ) ) )
  7. Les polices dites à chasse fixe (ou monospace) sont celles utilisées par les éditeurs de code, par exemple Courier New, Consolas, Monospace 821 BT, Lucida Console, Fixedsys...
  8. Même question posée le 2 mai, même réponse.
  9. (gile)

    Nouveau Site Perso

    (Auto)LISP, VBA sont indéniablement des langages de programmation au même titre que C, C++, C#, Python, VB, Java ou encore VBScript, JavaScript, etc. Diesel n'est en aucun cas un langage de programmation, idem pour les syntaxes utilisées par les macros de commande ou les scripts AutoCAD. Comme je disais plus haut, le fait que les programmes écrits en VBA sont souvent appelés des "macros" est probablement dû à l'enregistreur de macros d'Excel ceci n'altère en rien la qualité de langage de programmation, c'est juste une habitude de langage. Parmi les langages de programmation, certains sont parfois qualifiés de "langages de script" (langages de (très) haut niveau, interprétés, généralement dynamiques) comme LISP, JavaScript, VBScript, etc. Ils n'en restent pas moins de véritables langages de programmation et n'ont rien à voir avec les scripts AutoCAD qui ne sont qu'un enchainement des commandes et options tels qu'entrés en ligne de commande.
  10. (gile)

    Nouveau Site Perso

    @DenisHen, je ne vois pas où @didier dit que VBA n'est pas un langage de programmation et je n'avais jamais entendu ou lu un tel propos nulle part. Si on appelle parfois les programmes VBA des "macros", c'est probablement parce qu'il y a une enregistreur de macros dans Excel qui génère automatiquement du code VBA. Mais une "macro" VBA n'a rien à voir avec une macro de commande AutoCAD. Par ailleurs, on peut considérer que VBA tout comme AutoLISP est un langage de script, ce qui ne veut pas dire que ces langages ne font pas plus que des scripts AutoCAD.
  11. Salut, Si tu lis l'aide de la boite de dialogue "Propriétés du filtre de calque", tu verras que pour le champ "Nom" on peut utiliser des caractères génériques. ~*TRAVAIL*
  12. En programmation, un jeu de sélection ne peut être traité tel quel qu'en appelant des commandes AutoCAD (et en VBA ce n'est pas si simple parce que SendCommand n'accepte qu'une chaîne de caractères). Pour traiter un jeu de sélection (généralement obtenu pas une entée utilisateur) on le parcourt et on traite chacune des entités qu'il contient, par exemple, pour copier un jeu de sélection, on copie et délace chaque entité (avec Copy et Move en VBA). C'est pour ça que très tôt dans ce fil certains t'on demandé si tu avais vraiment besoin d'un jeu de sélection et dans ton cas, comme il n'y a pas d'intervention de l'utilisateur pour sélectionner les objets, on aurait pu s'en passer depuis le début, en parcourant toutes les entités de l'espace objet et en traitant directement celles qui remplissaient les critères. Bon, ça aura servi a approfondir l'usage des filtres de sélection...
  13. D'après ce que je comprends, le souci de @rrobert est dans le traitement du jeu de sélection. Il semble que la question du filtre de sélection pour ne garder que les blocs dynamiques dans l'intervalle d'un étage soit (enfin) résolue. Reste donc à supprimer de ce jeu de sélection les blocs anonymes dont la valeur de la propriété EffectiveName ne correspond pas à celle du bloc source. Donc de l'utilisation de la méthode RemoveItems (ssdel en LISP).
  14. Je ne peux pas t'aider en ce qui concerne la syntaxe VBA pour la déclaration des variables, mais je suis quasiment certain pour la syntaxe pour les valeurs du filtre (c'est le même principe qu'en LISP et qu'en .NET). filterType(0) = 0 filterData(0) = "INSERT" filterType(1) = 2 filterData(1) = nom_bloc & ",`*U*" filterType(2) = -4 filterData(2) = "*,>=,*" filterType(3) = 10 filterData(3) = pointMin filterType(4) = -4 filterData(4) = "*,<,*" filterType(5) = 10 filterData(5) = pointMax
  15. Merci pour eux et pour tous les autres changements. Beau boulot.
  16. Ce qui bouffe de la ressource c'est : premièrement, l'utilisation de blocs dynamiques en grand nombre (une nouvelle définition de bloc anonyme pour chaque référence dont les propriétés ont été modifiées) et ensuite les propriétés dynamiques dans le bloc, mais certainement pas le fait d'utiliser une hachure solide, un solide 2d ou une polyligne avec largeur.
  17. @rrobert, tu fais comme tu veux, chacun ses préférences. Par contre, l'activité des forums peut te donner une idée de la quantité d'aide et d'exemples que tu trouveras: CADxp : VBA = 4600 messages LISP = 41600 messages Autodesk : VBA = 91526 envois, LISP = 385009 envois TheSwamp : VBA 9168 posts, LISP = 110610 posts @Luna, @rrobert, pour les blocs dynamiques pas de salut hors programmation. La commande FILTRE (_FILTER) offre les mêmes possibilités que les filtres de sélections, et le Diesel n'est pas vraiment un langage de programmation, il permet juste de mettre certaines conditions dans les macros de commandes.
  18. Les versions LT ne supportent aucune programmation.
  19. Vois cette section de la doc et les sujets relatifs en lien.
  20. Non, le LISP n'est pas plus puissant ou mieux, il est juste mieux intégré et plus concis. C'était juste pour être sûr de ce que tu voulais faire et te montrer qu'on peut tout filtrer excepté le nom effectif des blocs anonymes. Le filtre en VBA devrait être quelque chose comme ça : Dim pointMin() As Double = Array(0.0, lim_inf, 0.0) Dim pointMax() As Double = Array(0.0, lim_sup, 0.0) Dim filterType As Variant = Array(0, 2, -4, 10, -4, 10) Dim filterData As Variant = Array("INSERT", nom_bloc & ",`*U*", "*,>=,*", pointMin, "*,<,*", pointMax)
  21. C'est ça que tu veux faire ? (defun c:test (/ b n u e s i) (while (not (and (setq b (car (entsel "\nSélectionnez le bloc de référence: "))) (= (cdr (assoc 0 (entget b))) "INSERT"))) (prompt "\nLa sélection est vide ou non valide.")) (setq n (getpropertyvalue b "BlockTableRecord/Name") u (getvar 'useri1) e (/ (fix (cadr (getpropertyvalue b "Position"))) u)) (if (setq s (ssget "_X" (list (cons 0 "INSERT") (cons 2 (strcat n ",`*U*")) (cons -4 "*,>=,*") (cons 10 (list 0. (* e u) 0.)) (cons -4 "*,<,*") (cons 10 (list 0. (* (1+ e) u) 0.))))) (repeat (setq i (sslength s)) (setq b (ssname s (setq i (1- i)))) (if (/= (getpropertyvalue b "BlockTableRecord/Name") n) (ssdel b s)))) (sssetfirst nil s) (princ))
  22. Objet Collection, moi je ne fais pas de VBA...
  23. Salut, @rrobert, concernant la mise en page, il serait préférable d'utiliser la bonne balise quand tu postes du code ( <> au lieu de "). Sinon, as-tu vraiment besoin d'un jeu de sélection ? Ne peux-tu pas plutôt utiliser une Collection pour les blocs concernés ?
  24. Tu as été plus exhaustive.
  25. Salut, Sujet moultes fois traité en LISP. On ne peut pas filtrer directement (avec un filtre de sélection) les blocs dynamiques par leur noms. Généralement on filtre avec le nom du bloc de base (pour les référence dont les propriétés dynamiques n'ont pas été changées) et tous les noms commençant par *U (références de bloc anonymes). Puis on traite la sélection en vérifiant la propriété EffectiveName. Pour filtrer la sélection : Dim filterType As Variant Dim filterData As Variant Dim grpCode(0) As Integer grpCode(0) = 0 Dim grpCode(1) As Integer grpCode(0) = 2 filterType = grpCode Dim grpValue(0) As Variant grpValue(0) = "INSERT" Dim grpValue(1) As Variant grpValue(1) = "test,`*U*" filterData = grpValue Pour traiter le jeu de sélection : For Each objet In selection If objet.EffectiveName = nom_bloc Then 'Traitement des blocs End If Next
×
×
  • 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é