
Elun
Membres-
Compteur de contenus
36 -
Inscription
-
Dernière visite
-
Jours gagnés
3
Elun a gagné pour la dernière fois le 15 octobre 2019
Elun a eu le contenu le plus aimé !
Visiteurs récents du profil
Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.
Elun's Achievements
Newbie (1/14)
4
Réputation sur la communauté
-
Liste des calques visibles d'une VIEWPORT définie
Elun a répondu à un(e) sujet de Elun dans Visual LISP
Merci beaucoup pour ta réponse ! Décidément les listes DXF sont pleines de surprises !!! La méthode fonctionne parfaitement ;p J'avais une autre question cependant : concernant la commande -SUPCALQUE, je ne vois pas d'autres moyen d'invoquer la commande dans une boucle pour lui spécifier le nom de chaque calque un par un. Or je sais qu'un appel de commande "ralenti" un peu le processus. Donc avons-nous moyen (au même titre que la commande SUPCALQUE, qui en choisissant l'option "Nommer" fait apparaître une listbox avec sélection multiple des calques) de rentrer une liste de calque ? J'ai remarqué que l'on pouvait en faisant n fois (n, le nombre de calque) la saisie : "N" "nomcalque1" "N" "Nomcalque2" ... "N" "Nomcalquen". Or une boucle ne permet pas de renvoyer deux valeurs (ici "N" et "nomcalquei"). J'avais déjà utilisé une méthode pour valider n fois une certaines commande tant qu'elle pose des questions (avec la variable système "CMDACTIVE") mais ici, cela ne semble pas fonctionner non plus. En soit le programme fonctionne très bien autrement mais il est vrai que cela peut être amélioré du point de vue du temps d'exécution. Et encore merci pour ta réponse GEGEMATIC ! Elun -
[RÉSOLU] Coordonnées trop grandes d' InsertionPoint sur référence de blocs
Elun a répondu à un(e) sujet de IncZ170 dans LISP et Visual LISP
Oui le rtos te renvoie une valeur en notation décimale, mais impossible d'utiliser des fonctions mathématiques avec un string. Si l'on fais (atof (rtos 6.52724e+006 2 3)), il renvoie 6.52724e+006 et non 6527240.000. Je n'ai pas vraiment eu le temps de voir une méthode depuis mon dernier message sur ce post mais je pense que la seule solution à ce jour reste la fonction (equal fuzz). Je n'ai pas eu d'erreur de lecture de coordonnées en rentrant ça. Après pour en revenir à ton problème Inc, si tu souhaites uniquement écrire un fichier texte avec ces coordonnées (sans manipulations) le (rtos) sera bon en effet mais si tu as besoin d'effectuer des opérations sur tes exports, ça risque d'être plus délicat. Elun -
[RÉSOLU] Coordonnées trop grandes d' InsertionPoint sur référence de blocs
Elun a répondu à un(e) sujet de IncZ170 dans LISP et Visual LISP
Salut ! Je me permet de répondre à ton post étant donné que j'ai le même problème que toi. Le souci vient en effet des nombres trop élevés. AutoCAD utilise donc la notation scientifique pour le transfert des données car les calculs se font en 64bits. Je te met le lien vers les réponses qu'on pu m'apporter bonuscad et (gile) sur mon post : http://cadxp.com/topic/48425-coordonnees-dun-point-via-entget/ En espérant que ça puisse t'aider un peu ^^ -
Bonjour à tous, J'ai un petit souci sur un de mes programmes. Je ne sais pas vraiment comment m'y prendre pour récupérer la liste des calques visibles dans une VIEWPORT (sélectionnée par l'utilisateur via (entsel) par exemple). Dans mon programme actuel, je récupère la liste des calques gelés (en général) et je passe cette liste pour la commande -SUPCALQUE. Le but de la manip' c'est lorsqu'on travaille sur des fichiers et que l'on souhaite purger un dessin pour un prestataire, on conserve généralement les données présentes dans un plan particulier. Pour le moment j'ai trouvé la combine de créer un filtre de propriété en rendant la VIEWPORT active basé sur le gel des calques dans la fenêtre, dégeler tous les calques (hors X-ref), puis geler tous les calques appartenant au filtre de propriété. Suite à cette manip' ma commande fonctionne mais c'est un peu triste de ne pas automatiser le processus. Je n'ai pas trouvé de résultats concluant dans les propriétés de la VIEWPORT mais j'avoue commencer à peine le visual lisp donc je m'en tiens aux routines basiques ^^' Donc si vous avez des idées sur une méthode, cela m'aiderait beaucoup :P Elun
-
Tout ceci est fort passionnant !!! Je vais mettre un moment avant de maîtriser un peu ces différentes méthodes mais je pense que les réacteurs d’événements seraient le plus adapté à mon problème (si on bouge un bloc, le câble qui lui est lié devrait suivre en toute logique) mais probablement le plus complexe du point de vue du code ! (surtout au vue de mon niveau actuel ^^') Je pense que je vais commencer déjà à me familiariser avec toutes ces méthodes pour bien cerner leur fonctionnement (et leurs limites) avant de me lancer dans mon projet. Je vous remercie pour vos retours en tout cas !! Elun
-
Bonjour, Merci pour vos réponses, je vais étudier les différents liens que vous m'avez conseillé dès à présent ;p @Olivier Eckmann : Je me suis déjà penché sur les ID des entités (code DXF 5) qui sont permanents (contrairement au code DXF -2) mais malheureusement je ne vois pas bien comment lier les ID de plusieurs entité en fonction d'un identifiant sans créer de fichier (.txt, .xls, ...) pour y stocker les liens en dur dans le PC. Or je ne souhaite pas créer de fichier temporaire (ou semi-temporaire) pour ce genre de programme. Je me rends compte qu'un programme comme celui-ci ne se situe pas vraiment dans les "débuts" du LISP mais j'ai pensé (peut-être à tort) que cet histoire de code DXF pourrait s'apparenter à un problème de débutant. Elun
-
Bonjour, Je me pose cette question farfelue : est-il possible de modifier la liste DXF d'une entité en ajoutant un code DXF custom ? En gros j'aimerais identifier des entités de manière permanente (même si on ferme/ouvre le dessin/AutoCAD) car ce sont des entités qui ont un numéro d'identification propre et unique et ne peuvent donc pas exister en double. Le but final du programme que je projette est de raccorder de manière automatique des équipements électriques entre eux, dans un ordre précis et chaque câbles et équipement élec' doit être unique et identifiable facilement via un numéro. J'ai déjà essayé d'affecter un code DXF "non existant" à une entité (via entmod) mais il rejette la requête. Or je ne peut pas vraiment "lier" un texte, un bloc et/ou une polyligne entre eux en fonction de leur numéro (non existant pour autoCAD) entre plusieurs session de travail... Il faudrait que si je supprime par exemple un équipement élec', les câbles qui lui sont associés soient supprimés également. Bref, c'est une question tordue et je galère un peu à l'expliquer... En espérant que vous aurez compris ! Bien à vous
-
Malheureusement, il n'existe pas vraiment de solution simple pour définir qu'une partie de la polyligne est horizontale et passe par un point spécifié par l'utilisateur. Il n'est pas possible de récupérer l'angle d'un segment de polyligne par rapport au SCU/SCG sans passer par du lisp complexe. Je viens de regarder d'ailleurs de passer par (dumpallpropertiesvalue) mais aucune ligne ne semble correspondre à l'angle d'un segment... (question à part, pour ceux qui utilise la fonction (getpropertyvalue), comment on accède aux propriétés des ItemX qui correspondent aux points de la polyligne ? j'ai eu beau chercher, je n'ai reçu que des "demandes ADS erronée"...) Pour en revenir à nos moutons, à chaque fois que l'on souhaite automatiser encore un peu plus un programme (même simple), il faut forcément ajouter des lignes de codes (parfois imbuvables) pour que ça fonctionne. Je me demande si pour ton problème il n'y aurait pas moyen de "tricher" un peu... Essaye avec ça pour voir : (defun c:cut ( / p cir) (while (setq p (getpoint "\nCliquer sur une intersection : ")) (command "_circle" p pause) (setq cir (entlast)) (setq p (list (+ (car p) 0.001) (cadr p) (caddr p))) (command "_trim" cir "" p "") (entdel cir) ) (princ) ) Il ne s'agit là que d'un test car il est fort probable que ce programme rencontre des erreurs et il ne prend pas vraiment en compte les petits ajustements d'un dessin, mais disons que ça peut servir de base sans modifier complètement ton programme ou devoir créer un programme complexe. Il rencontrera une erreur si la ligne horizontale ne dépasse pas l'intersection de 1mm dans le sens positif de l'axe x ou si la ligne en question n'est pas parfaitement horizontale. En espérant que cela puisse t'aider dans tes recherches. :P
-
Salut, Petite question : la commande CUT doit-elle couper les deux lignes qui se croisent ou une seule uniquement ? Ensuite concernant la commande _TRIM prend en compte l'ordre de tracé (et non l'ordre de création des lignes) donc tu peux jouer là dessus si besoin avant de lancer la commande _TRIM. En revanche, si les deux lignes doivent être coupées par la commande CUT, il suffit de lancer une seconde fois la commande _TRIM (ne prend pas en compte le fait qu'il peut y avoir N lignes passant par cette intersection) Si le but est de choisir la ligne que tu souhaites couper, le plus simple serait de faire une pause dans la commande _TRIM de mon point de vue. En espérant t'avoir aidé :P
-
CHANGER LES CARACTERISTIQUES D UN TABLEAU
Elun a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Bonjour PHILPHIL, Ce code me semble fort intéressant ! En revanche, les tableaux devant être mis à jour ne peuvent pas avoir plus de 10 colonnes (et s'ils en ont moins, doit-on alors entrer une largeur de colonne de 0 pour toutes celles qui n'existe pas ?), cela ne risque-t-il pas de créer des erreurs ? Etant donné que tu créer un fichier DCL temporaire, il pourrait être intéressant de créer une boîte de dialogue adapté au tableau que l'on souhaite modifier. :P Loin de moi l'idée de critiquer ce magnifique code, car je pense m'en inspirer fortement pour mes prochains développements !! ^^ Bravo à toi (et (gile) bien évidemment) :D -
Creation d'un Filtre de groupe
Elun a répondu à un(e) sujet de willy95 dans Pour aller plus loin en LISP
Bonjour, Je doute que cela existe, sur les forums anglais, il font souvent mention d'une option "filter" pour la commande "._-layer" mais cela ne semble pas d'actualité (en tout cas sur mon AutoCAD 2019). Mais tu peux essayer de voir déjà avec ces deux forums ainsi que le lisp de (gile), que je n'ai testé donc je ne sais pas s'il pourra t'aider. https://forums.augi.com/showthread.php?97438-Can-I-create-frequently-used-layer-filters-in-LISP&p=952247&viewfull=1#post952247 (il y le .lsp de (gile) dans sa réponse) Je n'ai pas pu dl le fichier .lsp, probablement que les délais ont expirés : https://www.cadtutor.net/forum/topic/32881-layer-group-filter/ En espérant que cela t'aidera un peu dans tes recherches, mais à mon avis, tu ne dois pas être le premier à te creuser les méninges pour un sujet comme celui-là ;p Elun, -
Merci à vous tous, Je vais essayer de creuser un peu plus pour trouver une méthode qui puisse gérer les imprécisions sans trop de problème. A ce stade, la version avec (equal) me semble pas mal mais pas forcément applicable à toutes les sauces ;p Il reste encore du boulot en effet de ce côté là mais à tout problème existe une solution ,) Encore merci à vous !
-
Ok, merci pour ces réponses en un temps record ! Donc si je comprend bien, la seule méthode que l'on ait à ce jour c'est de prendre les coordonnées "arrondies", et non "exactes" (via (equal+fuzz) ou (atoi (rtos)) par exemple) ? Autrement, en passant par la méthode , AutoCAD serait-il capable de l'associer au point de la polyligne ? Pour ma part, j'évite à tout prix les commandes de zoom dans mes lisp en raison du temps d'exécution, j'ai tendance à favoriser les (sssetfirst) pour la visibilité des jeu de sélection filtrés. En tout cas merci beaucoup, je vais travailler là-dessus en espérant trouver une solution viable ;p
-
Merci pour ta réponse, J'avoue n'avoir pas vraiment d'exemple très précis sur ce que je veux faire. C'est notamment pour des bouts de code lorsque je travaille. Par exemple j'ai une fonction qui me récupère la liste des coordonnées de chaque points d'une polyligne sélectionnée. Et si je souhaite utiliser cette polyligne comme tracé de capture pour un (ssget), la sélection est vide. Le soucis dans cette démarche c'est que déplacer un dessin géo-référencé, c'est tendancieusement long. Après ce n'est qu'un exemple parmi tant d'autres, j'utilise assez souvent ces sélections via les polylignes ou par exemple si je souhaite évaluer lorsqu'un point appartient à une polyligne.
-
Bonjour, J'ai remarqué à plusieurs reprises que sur certains DWG (notamment lorsqu'on travaille sur des fichiers géo-référencés) les coordonnées des points que l'on récupère via la fonction (entget) sont notées en notation scientifique (voir les codes DXF 10) : Je travaille pourtant en unités métriques et non en notation scientifique. Or si je récupère les coordonnées telles quelles et que je les utilise ailleurs (un (ssget) par exemple), AutoCAD me retourne une erreur ou ne sélectionne rien. Malheureusement je ne vois pas comment contourner cette simplification d'écriture de la part d'AutoCAD. Si vous avez une idée, je suis preneur ;p PS : Je préfère éviter de passer par du Visual LISP pour le moment si possible.