Aller au contenu

Luna

Membres
  • Compteur de contenus

    1 113
  • Inscription

  • Dernière visite

  • Jours gagnés

    42

Tout ce qui a été posté par Luna

  1. Coucou, Les lignes de repères avec une ligne de guidage à 0 fonctionnent parfaitement bien...quel est le soucis précisément ? Car la réponse est potentiellement non (c'est à dire qu'il n'existe pas de commande AutoCAD permettant de créer des polylignes en forme de flèche) mais tout simplement parce que c'est le rôle des lignes de repère justement... Peut-être que tu dois également jouer sur le "Type d'Association" et "Association gauche" / "Association droite" pour obtenir ton résultat souhaité ? Bref, il te faut juste tester un peu les limites de ce type d'objet car probablement qu'il répond à ton besoin comme tu le souhaites mais que tu ne sais pas vraiment comment le paramétrer 😉 Bisous, Luna
  2. Coucou, Je suis désolée mais je n'arrive pas à comprendre la demande même avec le .dwg d'exemple. Notamment, comment es-tu parvenu à dessiner en 3D avec une simple polyligne ?! C'est pour moi le plus grand mystère et du coup je suis quelque peu perdue... De plus, à quoi correspond le résultat ? J'ai compris qu'il faut éclater la polyligne en lignes, mais au delà de chat, je n'ai aucune idée de à quoi correspondent les traits bleus et magenta, pourquoi il y a des blocs qui apparaissent et pas forcément aux sommets de la polyligne initiale, etc... Bref, je pense qu'un peu plus d'explications détaillées seraient les bienvenue car en l'état, je ne saurais y répondre. Bisous, Luna
  3. Il faut utiliser ATTSYNC une fois la modification faite ! Lorsque l'on modifie les définitions d'attributs, il faut toujours (après avoir fermé et enregistré les modifs de l'éditeur de bloc) lancer ATTSYNC et "Sélectionner" une référence du bloc modifié pour mettre à jour les modif' dans ton dessin !! Bisous, Luna
  4. Coucou, Autrement il est possible de faire du post-traitement (après la création de tes blocs, tu lances un programme LISP ou autre qui t'ajoutes un préfixe et/ou suffixe sur tes attributs). De manière native, il n'est pas possible de définir un préfixe et/ou suffixe sur un attribut car ton attribut est un simple texte... Comme tu l'as suggéré, il est possible de définir ce préfixe et/ou suffixe par le biais d'un texte dans la définition du bloc. Perso je l'ai déjà fait et cela fonctionne bien à partir du moment où tu as définis une méthode à appliquer pour le nom de tes attributs... Autrement-dit il faut juste savoir quelle place la valeur de ton attribut va prendre (en nombre de caractères, etc) et placer ton texte de manière à ce que cela soit naturel. Après il faut juste jouer sur la justification de ton attribut pour limiter la casse. Bisous, Luna
  5. Coucou, Tu peux éventuellement regarder du côté de la variable système "UCSNAME" mais par contre cette variable ne renvoie la valeur que pour l'espace courant... Donc si ton texte + champ est dans l'espace papier par exemple, bah il n'affichera rien car ton espace papier est en "Général" donc pas un SCU nommé. Mais en revanche si ton texte est directement dans l'espace objet, il affichera selon le SCU de la fenêtre la bonne valeur (dans le cas d'un SCU nommé). Après je n'ai pas vraiment testé, donc si chat se trouve, la manip' ne fonctionne pas vraiment mais cela peut être une piste. De plus, comme le souligne @JPhil, si UCSFOLLOW = 0, tu peux très facilement avoir une fenêtre dont son SCU n'est pas aligné à l'axe X Y de la fenêtre, donc tu n'auras pas de méthode fiable. Bisous, Luna
  6. Coucou, Cela va dépendre de la manière dont tu as ajouté des données étendues... En utilisant (regapp) et le code -3, alors tu pourras récupérer la liste en utilisant (entget (car ent) '("*")) puis (cf. >>Da-code<<) (cdr (assoc -3 ...)) Si tu utilises plutôt les fonctions (vlax-ldata-*), alors tu as la fonction (vlax-ldata-list) qui te permet de récupérer la liste des données étendues définies par (vlax-ldata-put). Je suppose qu'il existe d'autres méthodes pour stocker ces données étendues mais ne les connaissant pas, je ne saurais te dire comment les récupérer. En terme de risque, tout dépend du type de données étendues je pense : s'il s'agit de données étendues qui sont unique alors le risque c'est que tu va perdre cette unicité mais s'il s'agit de simples infos complémentaires commune entre blocs communs, alors je doute qu'il y ait le moindre risque Bisous, Luna
  7. Coucou, Le (and) est une manière détournée de stopper le programme au moindre retour de nil sur l'une des lignes suivantes. Cela permet de s'assurer que le programme est arrivé jusqu'au bout (le (and) renvoie T dans ce cas) ou s'il a échoué à un endroit (le (and) renvoie nil, et sans évaluer les lignes suivantes, évitant ainsi une erreur !). Bisous, Luna
  8. Coucou, Peut-être n'ont-ils pas les mêmes droits d'accès au fichier sur ton serveur. J'ai essayé vite fait sur mon PC et bien que je puisse ouvrir les fichiers PDF sur mon serveur, lorsque j'utilise StartApp j'ai une erreur pour "Accès refusé" au document... >w< Par contre, StartApp renvoi 33 et non nil, donc le soucis est sûrement différent.. D'un point de vu programmation, cela me semble correct donc le problème ne peut venir que des droits d'accès au fichier (ou éventuellement tu peux essayer d'ajouter le chemin d'accès à ton fichier dans les chemins de supprt approuvé) ? Bisous, Luna
  9. Luna

    Export de point en CSV

    Hihi, Bon j'avoue il m'est déjà arrivé de me lever à 4h pour tester une ligne de code puis de retourner me coucher une fois avoir trouvé une solution... Mais bon...c'est mieux chat que de ne pas dormir à cause d'un problème non résolu...! M'en vais faire une mini-sieste pour récupérer quelques minutes de sommeil ! 🙂 Bisous, Luna
  10. Luna

    Export de point en CSV

    Coucou, En effet je ne devait pas être bien réveillée à ce moment, désolée... Du coup j'ai remplacé la ligne (handent name) par (cdr (assoc 5 (entget name))) Je ne sais pas pourquoi j'avais utilisé la fonction (handent), j'avais probablement déjà réfléchis à la fonction inverse qui nécessite de sélectionner un objet basé sur son handle... Normalement tu ne devrais plus avoir de soucis 😉 J'ai modifié mon code au-dessus ! Bisous, Luna
  11. Luna

    Export de point en CSV

    Coucou, Est-ce moi ou bien il manque une partie du code ? Tu utilises des variables non déclarées... Essaye quelque chose comme chat (non testé) : (defun c:CSV (/ *error* jsel i name filename file mat pt) (defun *error* (msg) (if file (close file)) (princ msg) ) (if (and (setq jsel (ssget '((0 . "INSERT") (2 . "TCPOINT") (66 . 1)))) (setq filename (getfiled "Création du fichier CSV" "" "csv" 1)) (setq file (open filename "W")) (write-line "Handle;Matricule;X;Y;Z") ) (repeat (setq i (sslength jsel)) (setq name (ssname jsel (setq i (1- i))) pt (cdr (assoc 10 (entget name))) mat (getpropertyvalue name "MAT") ) (write-line (strcat (cdr (assoc 5 (entget name))) ";" mat ";" (rtos (car pt) 2 2) ";" (rtos (cadr pt) 2 2) ";" (rtos (caddr pt) 2 2) ) file ) ) ) (if file (close file)) (princ) ) Bisous, Luna
  12. Luna

    Quelle GED

    Coucou, Au boulot on utilise M-Files, qui a une bonne intégration pour les logiciels comme AutoCAD (on peut récupérer les métadonnées du fichier .dwg en champ dynamique directement dans AutoCAD par exemple). Je dirais qu'elle est bien foutu d'un point de vue pro, étant donné que je n'ai connu que celle-ci, je ne pourrais te dire si c'est la "meilleure", juste qu'elle est bien ^^" Bisous, Luna
  13. Yup, merci à vous deux ! Du coup ce nouveau raccourci n'apparaît pas dans le menu "Démarrer" de Windows ? Bon en tout cas je ne sais pas si cela aura corrigé le soucis, mais c'est assez énervant (et récurrent) donc j'espère que c'est corrigé... Bisous, Luna
  14. Coucou, J'ai le même problème et du coup j'ai réinitialisé le profil utilisateur (cela ne corrige pas le soucis) mais je ne peux pas réinitialiser les paramètres par défauts...(cf. capture ci-dessous). Pour une raison que j'ignore, la ligne 'Restaurer les paramètres par défaut' est disponible pour mon AutoCAD 2019 mais pas pour mon AutoCAD 2022, or j'utilise la version 2022 et non la 2019... Une idée de comment réinitialiser les paramètres par défaut pour une version 2022 ? Bisous, Luna
  15. Tu peux également utiliser la fonction (wcmatch) au lieu de (= (strcase (substr (car x) 1 3)) "CDV") tu peux également l'écrire (wcmatch (strcase (car x)) "CDV*") Bisous, Luna
  16. Coucou, Pour faire des manipulations sur plusieurs .dwg, je te conseille d'utiliser SuperAutoScript. Ce n'est malheureusement pas un outil que je maîtrise donc je ne pourrais pas te fournir les réponses précise par rapport à cet outil... Concernant la mise en page, c'est quelque chose qui est directement lié à l'onglet de présentation donc il te suffit d'avoir ta mise en page dans un gabarit (DWT) et de créer une présentation à partir de ce gabarit sur tous tes DWG pour avoir ton cartouche / mise en page. En revanche, si tu as des mises en page, cartouches/infos à renseigner différentes entre différents folios cela va forcément rendre la programmation complexe car elle ne peut pas inventer la solution idéale, il faut la programmer et donc avoir une logique de programmation. Si jamais tes DWG possède déjà tous les cartouches et autre directement dans l'espace objet, et donc qu'il suffit uniquement d'imprimer l'espace objet en version "ZOOM" > "Zoom Etendu", normalement, tu as moyen de faire une impression de l'espace objet (en revanche, tu n'as pas moyen de récupérer la mise en page souhaitée pour l'espace objet à partir d'un gabarit donc plus complexe... Pour merger plusieurs fichiers DWG en un seul fichier DWG, le risque c'est évidemment si tous les fichiers DWG travaillent sur une zone similaire, bah tous tes objets seront mélangés...ce qui n'est pas le but je présume ? Encore une fois, pour cela je pense que le SuperAutoScript peut ouvrir un DWG, faire un "_SELECT" "_All" > "COPIERBASE" > "0,0,0" puis fermer le DWG, ouvrir le DWG commun et coller le contenu du presse-papier en 0,0,0. Bisous, Luna
  17. Luna

    Lisp Select-filter

    Coucou, Vui je n'ai pas trouvé de méthode pour le faire en version normale via la commande FILTRE ou SELECTRAP... En effet la fonction (select-filter) renvoie le jeu de sélection (pour le développeur) et rend la sélection courante (pour l'utilisateur). Elle n'est franchement pas évidente à utiliser malheureusement, bien que son utilisation ait pour but d'être utile, donc je suis contente de voir que tu as réussi 😉 Évidemment, elle n'est pas encore suffisamment au point et nécessite encore de nombreuses updates/améliorations avant d'être comme je le souhaite mais bon...quand le temps m'en laissera la chance >w< Bisous, Luna
  18. @JPhil, Je crois que l'erreur vient juste de là : (setq doublons (vl-remove-if '(lambda (x) (< 1 (length (cdr x)))) blocsParCdv)) Si je suis logique, cela signifie que tu supprimes (vl-remove) la paire d'association (x) si (-if) le nombre d'entités (length (cdr x)) est strictement supérieur (<) à 1. Autrement dit, tu obtiens l'inverse de ta liste de doublons... xD donc fait plutôt : (setq doublons (vl-remove-if '(lambda (x) (= 1 (length (cdr x)))) blocsParCdv)) Et cela devrait donner le résultat souhaité (i hope...) car tu veux traiter les doublons plutôt que les références uniques je présume 😉 Bisous, Luna
  19. Luna

    Lisps de Patrick_35

    @Aurélie, Oki cool 😉 bonne journée ! @chaletsteve, Peut-être auras-tu plus de chance en ayant un échange constructif avec l'auteur de ces blocs qui semblerait-il a appris à créer des blocs dynamiques sans jamais savoir que l'on pouvait faire des blocs non-dynamique !! Car sur l'exemple que tu as envoyé, je dirais que seule la propriété "Taille du composant" est un paramètre dynamique valide ! Le reste ne correspond à rien !! De plus les blocs dynamiques sont un peu plus "lourds" donc pour un même nombre de références de blocs, AutoCAD aura beaucoup plus de latence avec des blocs dynamiques qu'avec des blocs standards. Donc peut-être que tu arriveras à un résultat plus simple en expliquant à l'auteur de ces blocs le fonctionnement d'une référence de bloc standard et notamment l'utilisation des propriétés Rotation et Echelle ! Bisous et bon courage (merci de prendre soin de moi et de mon temps 😉 ), Luna
  20. Luna

    Lisps de Patrick_35

    @chaletsteve, Le problème est le suivant : Les blocs oranges ont tous une rotation égale à 0 ! Donc forcément les ExpressTools et RBLOC vont mettre la rotation du bloc gris à 0... Tes blocs oranges ont des propriétés dynamiques (qui ne font aucun sens à mes yeux...) dont "Rotation droite", "Rotation gauche", "Rotation des libellés" qui permettent de forcer sa rotation sans modifier la propriété de base "Rotation" mais ton bloc gris n'a rien de tout cela...! Etant donné que le bloc n'a pas de logique propre à ce niveau-là, la programmation devient un terrain dangereux..Je pourrais essayer de voir s'il y a moyen de palier à ton problème lorsque j'aurais un peu de temps mais par contre cela ne fonctionnera que pour la propriété Rotation de ton bloc gris et par rapport au fonctionnement actuel des blocs orange ! Autrement-dit si tes blocs sont un peu différents, chat ne marchera pas (et je ne vais pas m'amuser à créer un programme à chaque nouveau bloc étrange que tu reçois ... Bisous, Luna
  21. Luna

    Lisps de Patrick_35

    @Aurélie, Vui c'est un léger soucis de version... Le programme LISP récupère la valeur de la variable système "LOCALE" et lorsque Patrick_35 a écrit ce programme, la variable "LOCALE " devait être égale à "FRA", aujourd'hui (je ne connais pas la date de modification) la variable "LOCALE" à pour valeur "FR" pour un système en français. Donc actuellement si "LOCALE" est différente de "FRA", il choisi le fichier *en.dcl ! La modification étant relativement simple (et parce que j'ai peur qu'en utilisant VS code il y ait des soucis d'encodage, voici la démarche à suivre : 1. Tu ouvres une session AutoCAD et tu ouvres un dessin (nouveau ou existant peu importe) 2. Tu lances la commande VLIDE qui va ouvrir l'IDE AutoCAD pour faire de la programmation (nouvelle fenêtre) 3. Dans cette nouvelle fenêtre tu fais "Fichier" > "Ouvrir" et tu sélectionnes ton fichier "Gef.lsp" 4. Une fois le fichier ouvert, tu vas à la ligne 57 où tu devrais trouver la fonction : (defun fra() (eq (getvar "locale") "FRA") ; (member (strcase (getvar "dctmain")) '("FR" "FRA" "FRC")) ) 5. Tu supprimes le ";" devant la ligne (member ...) et tu ajoutes un ";" devant la ligne (eq ...) 6. Tu enregistres le fichier et tu fermes l'IDE 7. Tu recharges le fichier .lsp via la commande APPLOAD (et normalement il devrait te mettre la DCL en FR 😉 Bisous, Luna
  22. Luna

    Lisps de Patrick_35

    Coucou @Aurélie, Malheureusement Patrick_35 nous a quitté en mars 2019 et ne pourra donc pas répondre à ton message... Voici le lien du forum : Pour ton soucis, serait-il possible de voir quelle version du programme tu possèdes ? Autrement, je suis persuadée que @lecrabe possède une version correcte de GEF dans sa bibliothèque 😉 Personnellement je viens de tester avec le lien disponible sur le premier post pour DL les fichiers .lsp / .dcl et je n'ai aucun problème sur ma version 2022... Es-tu sûre que le chemin est à la fois dans les "Emplacements approuvés" ET dans les "Chemins de recherche de fichiers de support de travail" ? Bisous, Luna
  23. @JPhil, En effet c'est déjà un peu plus clair pour moi. Et du coup je rejoins l'idée de @(gile) qui consiste à créer une liste d'association dont ta clé de recherche est la valeur de ton attribut CDV et la valeur associée correspond à la liste des blocs concernés. C'est plus direct et nettement plus simple en terme de manipulation car cela s'applique pour de nombreux programmes. Bisous, Luna
  24. Coucou, J'ai du mal à comprendre le fonctionnement de tes fonctions (sub) et (sub2) par rapport au texte écrit en commentaire... Par exemple (sub) fonctionne avec ta liste (setq lst '("IEF-01-VEI" "IEF-01-VEI" "IEF-02-VEI" "IEF-03-VEI" "IEF-04-VEI" "IEF-04-VEI" "IEF-04-VEI" "IEF-05-VEI")) (sub lst 1) returns ((2 . "IEF-01-VEI") (1 . "IEF-02-VEI") (1 . "IEF-03-VEI") (3 . "IEF-04-VEI") (1 . "IEF-05-VEI")) Mais si on prend une liste non triée : (setq lst '(0 1 2 3 4 5 4 6 5 1 6 7 7 9 2 1 5 3 4)) (sub lst 1) returns ((1 . 0) (1 . 1) (1 . 2) (1 . 3) (1 . 4) (1 . 5) (1 . 4) (1 . 6) (1 . 5) (1 . 1) (1 . 6) (2 . 7) (1 . 9) (1 . 2) (1 . 1) (1 . 5) (1 . 3) (1 . 4)) Or si on s'en tient à ton commentaire Bah je devrais plutôt obtenir ce résultat : ((1 . 0) (3 . 1) (2 . 2) (2 . 3) (3 . 4) (3 . 5) (2 . 6) (2 . 7) (1 . 9)) Donc la fonction serait plus quelque chose dans le genre : (defun sub (lst / tmp) (if (setq tmp (vl-remove (car lst) lst)) (cons (cons (- (length lst) (length tmp)) (car lst)) (sub tmp)) (list (cons (length lst) (car lst))) ) ) Donc ensuite, si je comprends bien ton (sub2) correspond à un (vl-remove-if '(lambda (x) (= (car x) 1)) lst) car il supprime tout ce qui n'apparaît qu'une seule fois dans ta liste de départ (en prenant dans l'exemple ci-dessus que 'lst' correspond au résultat de (sub) !). La fonction tri permet si je comprends bien, de récupérer la liste des chaînes de caractères qui possèdent une chaîne de caractères spécifique en début de chaîne (nommée 'arg'). Cependant ce que je n'arrive pas à comprendre c'est la finalité du programme... Que désires-tu exactement ? A quoi correspondent les fonctions (sub) et (sub2) ? Il y a trop de variables pour que mon cerveau arrive à suivre pour le coup >w< Bisous, Luna
  25. Oki doki, maintenant que je n'ai plus de nœuds au cerveau je comprends mieux 😉 Merci !! Bisous, Luna
×
×
  • 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é