-
Compteur de contenus
1 113 -
Inscription
-
Dernière visite
-
Jours gagnés
42
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Luna
-
Coucou @olympio, Je présume qu'en postant dans ce sujet en particulier, c'est que tu souhaites un rendu similaire (remplissage d'une cellule d'un tableau existant sur AutoCAD (à savoir que le sujet est posté dans la catégorie ZWCAD) ? En l'état, il nous manque de nombreuses précisions essentielles au développement d'un moindre programme (ou tout simplement t'aiguiller vers des programmes existants parfaitement fonctionnels). De plus, d'un point de vue utilisateur et développeur il n'y a que très peu d'intérêt d'avoir une seule commande pour dénombrer les blocs et calculer la longueur totale des polylignes ! Il s'agit de 2 concepts totalement différents et il est donc préférable d'utiliser 2 commandes distinctes ! Et (histoire d'en rajouter une couche), les programmes permettant de compter les blocs ou calculer la longueur cumulée des polylignes il en existe déjà des centaines !! As-tu cherché si les solutions existantes répondaient à ta demande ? Si oui, serait-il possible de savoir lesquels tu as essayé et ce qui ne convient pas ? Bisous, Luna
-
Bloc qui donne sa distance par rapport à un bloc de référence
Luna a répondu à un(e) sujet de Perline dans AutoCAD 2018
Coucou, Serait-il possible d'avoir un DWG d'exemple avec les blocs impliqué et des textes expliquant les différentes données d'entrée ? Faut-il essayer de trouver une solution en LISP ou bien réfléchir sous forme de bloc dynamique ? Bisous, Luna -
CADMIN : SVP un nouveau Forum "AutoCAD LT 2024"
Luna a répondu à un(e) sujet de lecrabe dans CADxp, vos souhaits
2014 ? Soit la révolution était en marche depuis plus longtemps que prévu, soit j'ai raté un épisode ^^ Bisous, Luna -
Creation d'atlas depuis des blocs
Luna a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Coucou, Serait-il possible d'avoir un .dwg d'exemple afin que l'on puisse avoir un support de travail et mieux percevoir l'ensemble des contraintes/données ? Bisous, Luna -
Coucou, Je n'ai aucunes connaissances concernant ChatGPT mais il me semble que la base de son fonctionnement c'est d'apprendre au fur et à mesure via ce qui traine sur le net, les questions et corrections que l'utilisateur proposera à l'outil. Or, vu le nombre de codes LISP faux et/ou bancals qui traine sur le net, je vois difficilement comment ChatGPT pourra fournir des codes logiques et simples. Ton code ci-dessus le montre très bien : il écrit pleins de lignes de code sans même savoir pourquoi... Comme le dit @(gile), il est nettement plus difficile de corriger un code foireux que d'apprendre à le faire nous même... Cela peut en effet s'avérer utile et plus juste (juste, pas fiable attention !) pour des langages plus répandus comme Python, VBA, etc... mais le LISP n'apporte pas suffisamment d'échantillons cleans pour que cela soit réellement utile et gamechanger. Je crains également la vague de posts de codes issus de ChatGPT qui ne fonctionnent pas et que l'on devra réparer nous-même. Des programmes existants et fonctionnels feront parfaitement l'affaire mais les utilisateurs préfèreront poser une question à ChatGPT. Les forums seront juste le SAV de l'outil non adapté à la demande, j'en ai peur.. Bisous, Luna
-
[Résolu] (defun... (defun...)) ou (defun...)(defun...) ?
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, Pour le coup (et c'est tout l'intérêt d'une fonction d'ailleurs) c'est justement cette dernière expression interprétée par une fonction qui est importante ! Le (princ) en fin de programme, c'est très généralement en fin d'une commande (defun c:...) car on préfère éviter que la commande renvoie quelque chose en ligne de commande ou tout simplement nil. Donc le (princ) est uniquement là pour rendre la ligne de commande "muette" une fois une commande exécutée. En revanche pour une fonction on veut toujours avoir un retour pour s'assurer du bon fonctionnement de celle-ci, ou bien pour nous renvoyer une valeur dont nous pourrions avoir besoin (un réel, un string, une liste, etc...). Un exemple simple : (list 1 2) renvoie (1 2), ce qui correspond bien à une valeur renvoyée par une fonction. Certaines fonctions renvoie des valeurs, d'autres renvoie simplement vrai ou faux (T ou nil) ou même des valeurs si vrai, nil sinon. Bref, dans l'exemple de (gile) ci-dessus c'était dans l'unique but de s'assurer en ligne de commande que la fonction s'est bien déroulée jusqu'au bout et précise le numéro de la fonction pour que tu comprennes l'ordre de déclaration 😉 La déclaration des variables et fonctions locales est primordiale et permet justement de réduire les erreurs ! Un autre exemple en parlant d'erreurs : dans de nombreux programmes aboutis, tu verras un (defun *error* ...) déclaré localement pour justement permettre de redéfinir localement la fonction *error* existante pour s'adapter au programme en cours sans reprogrammer la fonction existante et ainsi créer un problème ensuite. Mais, il est OBLIGATOIRE de la déclarer localement donc faire très attention avec chat ! Bisous, Luna -
Coucou @DenisHen, L'exemple est simple. Prenons un point 2D, nommé pt : (list 0.0 1.0) Ici (car pt) renvoie 0.0 (donc un réel et non une liste). En revanche (cdr pt) renvoie (1.0) car (cdr) renvoie la liste moins la première valeur, donc une liste composée d'un seul élément. Si tu veux récupérer l'élément alors il faut faire (cadr pt) pour obtenir 1.0 🙂 Si désormais on prends pt2 : (cons 0.0 1.0) alors désormais on a une paire pointée dont le premier élément est la key et le second une value associée à la key. Ainsi donc, (car pt2) retourne 0.0 et (cdr pt2) retourne 1.0 En revanche si on prend une liste composée de liste, alors on est dans le premier cas. Autrement dit il te faut utiliser (car) pour récupérer la première liste, puis (cadr) pour récupérer la seconde liste. Si tu veux apprendre la différence, il te suffit de comprendre la différence entre (list) et (cons), puis de comprendre le fonctionnement si on combine les deux ensemble en faisant des (list) de (list) ou de (cons) et des (cons) de (cons) ou de (list). Cela peut paraître un peu étrange au début mais cela n'est pas si compliqué que cela au final (évidemment plus tu ajoutes des listes dans des listes et plus c'est compliqué mais vas-y étape par étape). Bisous, Luna
-
Organisation d'une liste (déplacement d'un élément)
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
On m'a appelé ? ^^' J'arrive un peu après la guerre donc je ne pourrais proposer plus que ce qui a déjà été fait. En revanche en LISP, la maîtrise des listes est primordial et apprendre à faire mumuse avec ainsi est très certainement le meilleur moyen d'apprendre :3 Le principal n'est pas d'arriver à une solution parfaite, mais plutôt de trouver la solution qui te correspond au mieux et cela tu l'as très bien compris ! Donc bon courage pour le reste et à force de pratiquer tu finiras par apprivoiser les fonctions (mapcar) et (lambda), et même si tu n'y parviens pas tu trouveras un chemin alternatif : le tiens 😉 PS: désolée si je ne suis plus aussi active qu'à mon habitude depuis quelques temps..cela devrait s'arranger d'ici peu 🙂 Bisous, Luna -
Comment faire un bouton avec une image dans un DCL ?
Luna a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Coucou, Je ne pourrais malheureusement pas t'aider sur ce sujet précis car je n'ai jamais eu le temps d'étudier la gestion des images dans les DCL. Cependant, d'un point de vue purement logique, je dirais que ce n'est pas "placer une image dans un bouton" mais plutôt "faire d'une image un bouton". Le type de tile est différent selon le sens 🙂 Pour m'aider dans mes pérégrinations DCL, j'utilise ce site et ses exemples : https://autolisp-exchange.com/Tutorials/MyDialogs.htm Même si le design fait un peu viellot, c'est pas mal pour apprendre les notions ;] Bisous, Luna -
Petit soucis sur l'existence d'un fichier.
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Il n'y a pas de soucis, on est tous débutants, quelque soit nos compétences 😉 Et chacun réfléchis à sa manière donc ce qui peut être logique pour certains peut ne pas l'être pour d'autres. Après en effet comme le dit @didier, la fonction native (findfile) permet déjà de vérifier l'existence d'un fichier. Attention cependant car d'après l'aide il est normal que la fonction (findfile) te renvoie le fichier ".niv" comme existant : The findfile function makes no assumption about the file type or extension of filename. If filename does not specify a drive/directory prefix, findfile searches the AutoCAD library path. If a drive/directory prefix is supplied, findfile looks only in that directory. Bref, quand tu as un doute, toujours vérifier l'aide AutoCAD c'est déjà une vraie mine d'or. Bisous, Luna -
Petit soucis sur l'existence d'un fichier.
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou @DenisHen, Juste à titre d'information purement logique, plutôt que d'écrire (if (/= [...] nil) ... ; If not nil, then ... ; If nil, then ) On va simplement écrire (if [...] ... ; If not nil, then ... ; If nil, then ) parce que le premier argument du (if), correspondant à la condition, permet de tester si une expression est VRAI ou FAUX, ce qui en langage LISP se traduit par T ou NIL. Donc dans ton cas de figure (if (/= (findfile NouvExt) nil) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) devient (if (findfile NouvExt) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) ce qui, aussi bien à l'écriture qu'à la lecture, simplifie un peu la vie et t'épargne quelques redondances et lapalissades de programmation 😜 PS: Je me permet de faire la remarque car ce n'est pas la première fois que je vois tes conditions de (if) écrient ainsi... Après peut-être est-ce volontaire pour simplifier ta compréhension personnelle lors de la relecture ^^ Bisous, Luna -
oki doki ! Si jamais, tu peux également ajouté à la suite du (if ...) ceci : (sssetfirst nil jeu) cela permettra de mettre le jeu de sélection obtenu comme jeu de sélection courant (donc tu pourras interagir directement avec via les commandes, palette de propriétés, etc...) Bisous, Luna
-
@Netparty, Attention tout de même, car les entités présentent dans les définitions de bloc ne sont pas comptabilisées dans le LISP, mais le sont avec l'astuce d'Eric ! Donc après, tout dépend de ce que tu veux comme information et faire avec les entités sur le calque 0... Bisous, Luna
-
rajouter les VARIABLES GLOBALES
Luna a répondu à un(e) sujet de PHILPHIL dans Pour aller plus loin en LISP
On peut évidemment facilement lire un fichier LISP et chercher une logique pour récupérer la liste des variables, comme par exemple pour chaque ligne possédant un : (setq tu récupères tous les caractères qui suivent jusqu'au caractère " " (espace). Ainsi tu peux déjà récupérer une partie des variables déclarées dans un programme. Cependant dans de nombreux cas, tu ne vas pas pouvoir récupérer toutes les variables déclarées, comme par exemple (setq var1 ... var2 ... ) (setq var1 ... var2 ... ) (mapcar 'set (list 'var1 'var2)) bref, c'est faisable pour une partie, mais récupérer 100% des variables déclarées pour les ajouter à la liste des variables locales, cela reste difficile...et ce à cause de la façon dont est écrit le LISP. Bisous, Luna -
rajouter les VARIABLES GLOBALES
Luna a répondu à un(e) sujet de PHILPHIL dans Pour aller plus loin en LISP
haha ^^ Comme je l'ai dit, je le fait personnellement dans tous les cas à la mano pour les raisons citées au-dessus (et aussi parce que je n'ai pas trouvé un moyen de le faire en auto). Mais vui en soit ce n'est pas un gros travail et à partir du moment que l'on sait qu'il faut déclarer ses variables localement, chat se fait plutôt facilement ! Tout dépend de la méthode de travail de chacun aussi, j'avoue que j'ai tendance à utiliser un minimum de variables lorsque je le peux donc c'est plus simple pour les déclarer. J'utilise également une dénomination commune pour mes variables entre tous mes programmes, comme chat j'ai juste une logique à appliquer lorsque je dois les déclarer (si je parcours un jeu de sélection, je sais d'avance que je doit déclarer jsel, i et name par exemple). Et comme je l'ai dit, il est fortement conseillé de déclarer ses variables localement avant de tester un programme sur AutoCAD, cela évite de polluer le dessin avec des variables globales inutiles (sauf cas particuliers). Mais vui, c'est important de déclarer ses variables localement ! Alors du coup je suis peut-être une puriste, mais au moins mes programmes fonctionnent parfaitement entre-eux 😜 Bisous, Luna -
rajouter les VARIABLES GLOBALES
Luna a répondu à un(e) sujet de PHILPHIL dans Pour aller plus loin en LISP
Coucou, Personnellement je déclare mes variables locales manuellement, car cela me force premièrement à relire entièrement le programme avant de le tester, et ensuite cela force également une certaine rigueur sur la déclaration des variables et la manière dont j'ai besoin d'elles. Pour VS Code, je n'ai aucune idée de si cela est possible malheureusement. Pour l'IDE d'AutoCAD (commande VLIDE), il me semble qu'il y a moyen d'avoir la liste des variables qui ne sont pas déclarées localement dans un fichier via "Check Text in editor" (cf. >>ici<< en anglais, expliqué par LeeMac). Bisous, Luna -
Impression PDF de calques gelés / inactifs
Luna a répondu à un(e) sujet de jpa38 dans AutoCAD 2020-2024
Coucou, L'impression des documents PDF est parfaitement logique au contraire ! Car le but de gelé les calques dans un plan PDF, c'est aussi pour limiter son poids !!! Si tu imprimes 100% des calques et que tu demandes à ton visualiseur de gérer de son côté le gel/dégel des calques par défaut, tu vas te retrouver avec des fichiers PDF impossible à ouvrir, transférer, etc... parce qu'il feront 200 Mo >w< Donc non au contraire, il n'y a pas d'amélioration à proposer car cela sera refusé. Donc si tu as besoin de geler des calques directement dans ton PDF, il faut faire cela depuis ta visionneuse PDF et non AutoCAD. Bisous, Luna -
Impression PDF de calques gelés / inactifs
Luna a répondu à un(e) sujet de jpa38 dans AutoCAD 2020-2024
Coucou, A ma connaissance la réponse est non malheureusement...AutoCAD ne permet pas d'imprimer des calques gelés/inactifs mais en les désactivant dans un fichier PDF. Je pense que la seule solution possible est de le faire manuellement à partir du fichier PDF créé, mais pas depuis AutoCAD... comme l'a suggéré @Olivier Eckmann ! Le fait de pouvoir imprimer un calque gelé/inactif depuis AutoCAD ne serait pas logique de la part du logiciel car cela rendrait les états de calques inutiles et qui plus est, pour une impression PDF uniquement si l'on a coché dans les options "intégré les informations sur les calques". C'est beaucoup trop de conditions pour que le logiciel puisse définir une option permettant de faire cela... Bisous, Luna -
Modification du Lisp SSL pour sélectionner un calque par nom et par par sélection.
Luna a répondu à un(e) sujet de AntoineF dans AutoCAD LT 2014
Oki, tu me diras si cela fonctionne correctement dans ce cas ! 😜 Bisous, Luna -
Bon à ce que je vois on est passé sur les happy bots ^^ Pas de lien hypertexte ni de termes déplacés, juste de la pollution par des attaques de compliments ... Décidément je ne comprendrais jamais quelles sont les motivations des auteurs de bots...chat me dépasse ! Bon courage aux modos, j'ai bien cru que les vagues s'étaient calmées mais elles ont juste évoluées -_- Bisous, Luna
-
Modification du Lisp SSL pour sélectionner un calque par nom et par par sélection.
Luna a répondu à un(e) sujet de AntoineF dans AutoCAD LT 2014
@AntoineF, Oki, dans ce cas en me basant sur le programme SSL initial : ;; Sélection par calque (defun c:ssl (/ ss ent) (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)) ) (and (sssetfirst nil nil) (setq ent (car (entsel))) ) ) (sssetfirst nil (ssget "_X" (list (assoc 8 (entget ent))))) ) (princ) ) On peut créer une seconde commande SSL2 (si tu veux changer le nom, tu peux) comme ceci : ;; Sélection par calque (defun c:ssl2 (/ str) (sssetfirst) ; Désélectionne les objets actuellement sélectionnés (pas de pré-sélection !) (and (setq str (getstring T "\nNom du calque: ")) ; Requête utilisateur pour une chaîne de caractères (espaces autorisés) (tblsearch "LAYER" str) ; Vérifie l'existence du calque dans la table "LAYER" (sssetfirst nil (ssget "_X" (list (cons 8 str)))) ; Sélectionne tous les objets appartenant au calque spécifié ) (princ) ) Comme ici on entre le nom en ligne de commande, la pré-sélection n'est pas autorisée (donc on utilise (sssetfirst) pour vider le jeu de sélection actif). Il faut également vérifier l'existence du calque via (tblsearch "LAYER" str) La casse n'est pas respectée, autrement dit écrire "calque1", "CALQUE1" ou "Calque1", ... ne changera pas le fonctionnement du programme. Évidemment écrire le nom d'un calque à la main peut s'avérer vite long (car il ne faut pas faire de faute de frappe, et écrire le nom en entier) mais il s'agit de ta demande initiale 🙂 Pour l'utiliser, il suffit de rajouter le code "modifié" à la suite du SSL initial ^^ Bisous, Luna -
Modification du Lisp SSL pour sélectionner un calque par nom et par par sélection.
Luna a répondu à un(e) sujet de AntoineF dans AutoCAD LT 2014
Coucou, Alors j'ai pleins de questions ! :3 1.] Tu as posté dans le forum "AutoCAD LT 2014", or les versions LT ne supportent pas le LISP. Je suppose donc que tu n'as pas posté ton message au bon endroit, autrement la réponse serait : pas de LISP pour les LT donc pas besoin de faire de modifications. 2.] Lorsque tu dis "en nommant un calque dans la barre de commande", qu'entends-tu par là exactement ? Cela signifie-t-il que au cours de la commande SSL au lieu de devoir cliquer sur une entité pour récupérer le nom du calque, tu désires entrer manuellement le nom du calque en ligne de commande ? Si oui, alors doit-on prendre en compte la casse ? Faut-il prévoir les recherches relatives (cf. Wildcard Characters) également ? As-tu bien conscience que les fautes de frappes ne pourront pas être tolérées par le programme modifié ? 3.] Est-ce un remplacement de fonctionnalité du programme que tu souhaites (impossibilité de cliquer sur une entité mais renseignement du nom du calque en ligne de commande), ou bien un ajout de fonctionnalité (clic sur une entité ou renseignement du calque en ligne de commande) ? 4.] Désires-tu que l'on te donne des pistes de recherches (ex: tu essayes d'apprendre le LISP et donc tu désires faire la modification toi-même mais tu ne sais pas comment t'y prendre) ou bien tu désires un programme modifié de A à Z (on modifie le programme et on poste le programme modifié dans son intégralité (ici seulement SSL, tu te chargeras de remplacer dans ton fichier la partie correspondante)) ? Bisous, Luna -
recuperer les données d'une entite dans un bloc dynamique ou pas
Luna a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Coucou, Le problème principal vient de la confusion entre définition de bloc et référence de bloc je pense... En effet, si ta référence de bloc est étirée par un ensemble de paramètres linéaires (modifiant ainsi la longueur de ta polyligne visuellement dans ta référence), cela ne changera aucunement les propriétés de la polyligne dans la définition de bloc. Un exemple tout simple pour voir la différence : insère une référence de bloc (non étirée) dans ton dessin, ouvre ton bloc dans l'éditeur de bloc et regarde la propriété longueur de ta polyligne. Quitte l'éditeur de bloc, modifie ta référence de bloc (étirée), ré-ouvre la dans l'éditeur de bloc et regarde de nouveau la longueur de ta polyligne. Tu verras que celle-ci n'a pas été modifiée ! En programmation c'est la même histoire, si l'on accède aux sous-objets d'un bloc, on y accède via la définition de bloc donc les propriétés des objets ne refléteront jamais les données dynamiques d'une référence de bloc. Pour ce faire, les solutions de @Olivier Eckmann et @Curlygoth sont de bonnes pistes ou bien tu peux récupérer la longueur initiale de la polyligne ainsi que des paramètres dynamiques et faire le calcul par programmation pour "estimer" la longueur graphique de ton objet (mais si tu as des étirements avec des coeff différents de 1.0 cela complexifie les calculs). La solution du champ dynamique de @Olivier Eckmann semble cependant la meilleure solution possible (penser à cocher la case "Afficher la valeur de la référence de bloc" !). Bisous, Luna -
Coucou, L'action menée par @didier a-t-elle portée ses fruits ou bien le bot fait toujours des ravages ? J'ai également vu un message posté par invité, il y a peu (et qui ne semble pas provenir d'un bot ou alors ils gagnent en intelligence ^^") ici : Comment est-ce possible ? Car je doute qu'une personne humaine cherche absolument à trouver une faille dans la publication des messages pour les invités juste pour poster une réponse 'cohérente' (8ans après) à un sujet. Ou même qu'un bot est un intérêt à poster un message de ce type (pas de liens cliquables)... Bisous, Luna
-
Je suis nulle en informatique mais...n'y a-t-il pas moyen que le bot puisse accéder à une version plus ancienne du site ? Mais je reconnais que si le statut d'invité n'a qu'un droit de lecture actuellement, il ne doit pas être simple de corriger le problème tant que la faille n'est pas trouvée... Peut-être que parmi la communauté de CADxp, on pourrait avoir des virtuoses du clavier pour tenter de trouver d'où provient le soucis (principe de 'hackers white hat'). Il serait en effet extrêmement triste de voir CADxp disparaître ainsi. Surtout en se disant que le site a fêté ses 20ans il y a peu ! J'espère de tout coeur qu'une solution sera trouvée au plus vite en tous cas (je présume que vous avez déjà pensé à supprimer/déplacer le sujet ciblé par le bot déjà..) Bisous, Luna
