-
Compteur de contenus
1 489 -
Inscription
-
Dernière visite
-
Jours gagnés
19
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par zebulon_
-
Bonjour, je cherche une fonction, qui me permettrait de saisir dynamiquement un point à l'écran. Il y a bien la fonction grread, comme montré ici http:// http://www.cadxp.com/sujetXForum-4861.htm mais, grread n'a comme unique avantage que de pouvoir être dynamique. Pour le reste (accrochage aux objets, coordonnées au clavier, commandes transparentes, touches de fonctions ...) on perd tout. Alors, soit on s'en passe et c'est dommage, soit on réécrit tout et c'est compliqué. Ce dont je rêve, c'est une fonction getpoint dynamique qui conserve les accroches objet, les coordonnées au clavier etc..., qu'on pourrait mettre dans une boucle while. La condition d'arrêt de la boucle while correspondrait au moment ou l'utilisateur valide le point choisi. C'est pas possible ?
-
Copier un bloc depuis la table des blocs
zebulon_ a répondu à un(e) sujet de LUDWIG dans Débuter en LISP
Faut-il absolument les dupliquer ? Parce que s'il suffit de renommer ça me semble plus simple. -
Moi, j'ai pas de télé... Alors pour me divertir, je vais à la messe. Comme disait Victor Hugo dans "Notre Dame de Paris" : Ceci tuera cela sauf que chez Victor Hugo, ceci c'était l'imprimerie et cela les cathédrales. Amen.
-
Salut, J'ai testé le lisp et il fonctionne bien chez moi. Par contre, ça sert à quoi de faire le arxload ? J'ai mis cette ligne en remarque chez moi et ça continue de marcher. Peut-être ça sert à s'assurer de disposer de la commande align ? Mais pourquoi vouloir utiliser la commande align, s'il n'y a pas de mise à l'échelle. La commande rotation devrait faire l'affaire.
-
Diviser un objet par une selection d\'objets
zebulon_ a répondu à un(e) sujet de Titifonky dans Routines LISP
à toutes fins utiles ... ;;; créer un groupe avec les adresses d'éléments contenus dans LST ;;; (defun makegrp (LST DESC / EN) (command "_.-group" "_create" "*" DESC) (foreach EN LST (command EN)) (command "") ) -
Lorsque Autodesk à sorti le Batch Drawing Converter, je me suis dit : "Voilà qui va être super pour faire les enregistrements ascendants ...". Mais, ma joie n'a duré que quelques instants, le temps de me rendre compte que cet utilitaire ne fonctionne que sur des postes où autocad 2004 ou 2005 est installé. Quant à l'intégrité des objets, il m'arrive souvent, quand je fais un _aecexporttoautocad2000 avec ADT2004, de perdre une bonne partie des fmult. Alors, je pense que ce n'est en tous cas pas à Autodesk de nous donner des leçons d'intégrité ...
-
Moi, en tant qu'Auto(chtone)Alsacien, j'attend avec impatience le TGV Est pour aller au Micad, parce que l'avion c'est vraiment trop cher ou trop dangereux dans la région (crash de Habsheim, crash du mont sainte odile ....). Pourtant, les Vosges ne sont pas ce qu'on peu appeler de la haute montagne, mais bon quand on vole trop bas on finit par cogner, surtout de nuit et par temps de brouillard. Bon d'accord, venir de St Pierre et Miquelon en train, c'est un peu dur...La douzaine d'Auto(A)cadiens sur le caillou n'ont que l'option avion ou l'option bateau. Peut être préfèreront-ils l'option bateau puisqu'ils ont, comme nous tous, l'habitude que ça rame ?
-
SolidWorks met à notre disposition un utilitaire génial et gratuit qui permet à toutes les versions R14-R2005 d'ouvrir des formats dwg de la version 2.5 jusqu'à 2004/2005 et de les enregistrer, et ceci directement dans Autocad... Avec cet outils autoCAD 2000 sait ouvrir des fichiers autocad 2004/2005, les modifier et les réenregistrer. Il paraît que ça marche même avec LT. Combien de fois j'ai envoyé des plans dwg à des entreprises, architectes, etc... et on me rappelle en disant : "Je n'ai que la version R14, vous ne pourriez pas enregistrer vos fichiers dans cette version et me les renvoyer ?" Question à laquelle je répondais poliment : "Mais oui bien sûr, sans problème ..." en pensant "Fait chi... t'as qu'a acheter la dernière version..." Maintenant, je dirai : "téléchargez cet utilitaire :" http://www.dwggateway.com/ [Edité le 22/3/2005 par zebulon_]
-
Diviser avec des objets
zebulon_ a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
Salut, va voir à cette adresse http://www.afralisp.com/methods/lista/intersectwith_method.htm en utilisant visual lisp, ça va devenir beaucoup plus simple. -
Bonjour, je cherche à faire un script qui ouvre des fichiers DWG en lecture seule. Quelqu'un connaîtrait-il la syntaxe de la commande _open qui active cette option ??? Merci.
-
Sélection par rapport à un objet existant
zebulon_ a posté un sujet dans Pour aller plus loin en LISP
Bonjour, Ci-joint un lisp qui sélectionne les objets en s'appuyant sur un objet existant. Cela fonctionne en utilisant la commande autocad _divide. Cela implique une précision que j'ai fixé arbitrairement à 100. (defun c:test () (setq ENT (car (entsel "\nSélectionner un objet "))) (setq ETL (entlast)) (command "_divide" ent 100) (setq ETL (entnext ETL)) (setq LISTPT nil) (while ETL (setq E (entget ETL)) (setq PT (trans (cdr (assoc 10 E)) 0 1)) (setq LISTPT (cons PT LISTPT)) (setq ETL (entnext ETL)) ) (setq OLDOS (getvar "OSMODE")) (setvar "OSMODE" 0) (command "_erase" "_p" "") (command "_change" "_cp") (foreach PT LISTPT (command PT) ) (command "" "" "_p" "_co" "14" "") (setvar "OSMODE" OLDOS) (princ) ) -
Faire une sélection à l\'aide d\'un objet existant
zebulon_ a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Salut, c'est trop compliqué pour ma petite tête, c'est pourquoi j'aime les choses simples et les outils déjà disponibles et créés par des gens plus intelligents que moi. Donc, pour sélectionner suivant un objet, je vous propose l'idée suivante : 1°) cliquer sur un objet 2°) déterminer la longueur de l'objet 3°) lancer la commande _measure en spécifiant une longueur de segment relative à la longueur de l'objet. 4°) Récupérer dans une liste les coordonnées des points créés par _measure 5°) Utiliser ces coordonnées pour faire la sélection 6°) Effacer les points créés en 3°) -
Bonjour, Je cherche à récupérer la couleur d'un calque exisant. J'utilise la fonction tblsearch puis je regarde ce qui est associé au code dxf 62, ce qui marche bien quand on a défini une couleur de 1 à 254. Pour les couleurs RVB et Pantone, le code dxf 62 contient la couleur 8 bits la plus proche. C'est déjà intéressant comme info, mais où sont stockées les informations concernant les couleurs RVB et Pantone ?
-
où est la différence par rapport à ce que je proposais plus haut ????
-
Peut être cherches-tu une fonction pour lire les tables de symboles LAYER, LTYPE, VIEW, STYLE, BLOCK, UCS, APPID, DIMSTYLE et VPORT et en récupérer les noms ??? (defun table_entete (TB / TBLIST TBLIST TBNAME RES) (setq TBNLIST nil) (setq TBLIST (tblnext TB T)) (while TBLIST (setq TBNAME (cdr (assoc 2 TBLIST))) (setq TBNLIST (append TBNLIST (list TBNAME))) (setq TBLIST (tblnext TB)) ) (setq RES TBNLIST) ) (defun c:tbl () (setq l1 (table_entete "LAYER")) (setq l2 (table_entete "VIEW")) (setq l3 (table_entete "BLOCK")) (setq l4 (table_entete "UCS")) ;;; etc )
-
Bien sûr !!! Pourquoi m'obstiner à vouloir utiliser (bpoly). Il suffit d'utiliser la commande Autocad. C'est sans doute parce que je voulais faire Lispien. Merci à tous.
-
Bonjour, je cherche de plus amples info concernant la commande bpoly. Pour l'instant, j'utilise cette fonction sous cette forme : (setq pt (getpoint "\nSaisir point intérieur")) (setq e (bpoly pt)) et je retrouve dans e l'adresse du contour créé ou nil si bpoly n'a pas abouti. Ce que j'aimerai, c'est que (bpoly) me renvoie le contour ET les îlots éventuels, comme la commande _BPOLY.
-
Dans la suite de nos discussions concernant la commande _.pline à l'intérieur d'un lisp, j'ai écris une routine un peu plus "tout terrain", pour qu'elle soit appliquable à toutes les commandes autocad. (defun mycmd (CMD / ETL LELEM RES OLDCMDECHO) (setq OLDCMDECHO (getvar "CMDECHO")) (setq ETL (entlast)) (setvar "CMDECHO" 1) (command CMD (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (setvar "CMDECHO" OLDCMDECHO) (setq LELEM nil) (if (not ETL) (setq ETL (entnext)) (setq ETL (entnext ETL)) ) (while ETL (setq LELEM (cons ETL LELEM)) (setq ETL (entnext ETL)) ) (setq RES LELEM) ) (defun c:mytest () (setq LE (mycmd "_.line")) (foreach E LE (command "_.change" E "" "_properties" "_color" 3 "") ) (setq LE (mycmd "_.pline")) (foreach E LE (command "_.change" E "" "_properties" "_color" 4 "") ) (setq LE (mycmd "_.arc")) (foreach E LE (command "_.change" E "" "_properties" "_color" 5 "") ) (setq LE (mycmd "_.copy")) (foreach E LE (command "_.change" E "" "_properties" "_color" 6 "") ) (mycmd "_.move") (princ) ) Votre avis ?
-
saisir une polyligne dans lisp - suite
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
ben voilà, il suffit de demander les papiers... çà marche bien, merci. Le seul cas où ça plante encore, c'est quand le fichier est entièrement vide et que dans entlast il y a nil. Du coup (entget nil) renvoie une erreur. -
La semaine dernière, nous avons parlé de ce sujet et trouvé une solution alliant l'utilisation de la variable cmdactive et l'utilisation d'une commande pause dans une boucle while. Je voulais améliorer cette solution en vérifiant si l'utilisateur a bien créé une pline, malheureusement la comparaison sur des adresses d'entité n'a pas l'air de fonctionner.... (defun c:mapoly (/) (setvar "CMDECHO" 1) (setq ETL (entlast)) (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (if (/= ETL (entlast)) (progn (command "_.change" (entlast) "" "_properties" "_color" 3 "") ) ) (princ) )
-
saisir une polyligne dans lisp
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Pourquoi faire simple quand on peut faire compliqué ???? J'avais essayé en utilisant la variable LASTPROMPT, mais sans succès. CMDACTIVE est bien plus approprié ! Cela marche bien chez moi aussi. Il faut juste veiller à ce que la variable CMDECHO soit à 1, sinon c'est pas terrible au niveau de l'affichage. Voilà une solution élégante qui en intéressera plus d'un. N'est ce pas Tramber ? Cette solution a un autre avantage que la simplicité. Le jour où on change de version d'autocad et que le traducteur nous a joué un ptit tour en n'appellant plus les choses pareil (et nous savons tous que ça arrive toujours), ça continue de fonctionner sans avoir à se repalucher le lisp pour qu'il corresponde aux nouvelles options. [Edité le 11/2/2005 par zebulon_] -
saisir une polyligne dans lisp
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
c'est dans les grandes lignes la même chose que en plus concis. Mais on n'a toujours pas accès aux options de la commande polyligne. On ne peut saisir que des sommets, on ne peut pas annuler, faire des arcs, définir une épaisseur de polyligne etc ... -
Bonjour à tous, je reviens sur un sujet qui a sûrement déjà été abordé ici. Donc, mon but est de faire saisir une polyligne depuis une application lisp. Première idée : (command "_pline" pause pause pause ....) Mais combien faut-il mettre de pause ???? On en vient à l'idée de rajouter une boucle while quelque part... (defun c:mapoly () (command "_pline" (while T (command pause) ) ) ) Mais comme vous le voyez, je n'ai pas trouvé comment dire à la boucle while de s'arrêter de boucler. Autre idée, faire saisir un point à l'utilisateur et arrêter la boucle quant le getpoint renvoie nil. Cela donnerai quelque chose comme : (defun c:mapoly () (command "_pline") (setq PT (getpoint)) (command PT) (while PT (setq PT (getpoint PT)) (command PT) ) ) ça marche déjà pas mal mais ça ne prend en compte que les points saisis, pas les options qu'on peut saisir au clavier comme Arc, annUler etc ... Comment faire comprendre à getpoint qu'il doit aussi saisir les textes ? Ma recherche s'est orientée vers initget en règlant les bits à 128. Cela permet de renvoyer des entrées clavier arbitraires, me dit l'aide. C'est mystérieux, mais cela fait en sorte que getpoint renvoie à la fois des points saisis et des textes. Si quelqu'un à des infos un peu plus précises sur initget, je suis preneur... On en vient donc à ce qui suit : (defun c:mypline () (setvar "cmdecho" 0) (command "_PLINE") (setq PT (getpoint "\Spécifiez le point de départ ")) (command PT) (setq oldPT (list PT)) (while PT (if (> (length oldPT) 1) (setq MSG "\nSpécifiez le point suivant ou [Clore/Demi-larg/LOngueur/annUler/LArgeur] ") (setq MSG "\nSpécifiez le point suivant ou [Demi-larg/LOngueur/annUler/LArgeur] ") ) (initget 128) (setq PT (getpoint (car oldPT) MSG)) (if PT (cond ((= (type PT) 'LIST) ;;; c'est un point (command PT) (setq oldPT (cons PT oldPT)) ) ((= (type PT) 'STR) ;;; c'est un texte (setq PT (strcase PT)) (cond ((= PT "C") (if (> (length oldPT) 1) (progn (command PT) (setq PT nil) ) ) ) ((= PT "D") (command PT) (setq laDEP (getdist (strcat "\nSpécifiez la demi-largeur de départ <" (rtos (/ (getvar "PLINEWID") 2)) "> "))) (if (not laDEP) (setq laDEP (/ (getvar "PLINEWID") 2)) ) (command (rtos laDEP 2 10)) (setq laFIN (getdist (strcat "\nSpécifiez la demi-largeur de fin <" (rtos laDEP) "> "))) (if (not laFIN) (setq laFIN laDEP) ) (command (rtos laFIN 2 10)) ) ((= PT "LO") (command PT) (initget 1) (setq LO (getdist "\nSpécifiez la longueur de la ligne : ")) (command (rtos LO 2 10)) (setq oldPT (cons (getvar "LASTPOINT") oldPT)) ) ((= PT "U") (if (> (length oldPT) 1) (progn (command PT) (setq oldPT (cdr oldPT)) ) (prompt "\nTous les segments ont déjà été annulés.") ) ) ((= PT "LA") (command PT) (setq laDEP (getdist (strcat "\nSpécifiez la largeur de départ <" (rtos (getvar "PLINEWID")) "> "))) (if (not laDEP) (setq laDEP (getvar "PLINEWID")) ) (command (rtos laDEP 2 10)) (setq laFIN (getdist (strcat "\nSpécifiez la largeur de fin <" (rtos laDEP) "> "))) (if (not laFIN) (setq laFIN laDEP) ) (command (rtos laFIN 2 10)) ) (T (prompt "\nPoint 2D ou une entrée clavier.")) ) ) ) (command "") ;;; je sors de la commande quand PT est nil ) ) ) Cela simule une saisie d'une polyligne avec les options hormis les arcs. Avant de creuser plus loin, je viens vers vous pour voir d'une part si je ne fais pas fausse route ou s'il n'y a pas plus simple pour résoudre mon problème. Amitiés Strasbourgeoises
-
Tout à fait exact, la fonction type est bien pratique dans certains cas. Je regrettai simplement que la fonction atof renvoie une valeur numérique (0.0) alors qu'elle ferait mieux de renvoyer nil si elle ne peut pas analyser le texte. Sinon, pour la fonction type, elle retourne un article, SYM, INT, FILE, REAL, STR, LIST, SUBR ... Si on veut faire une comparaison avec ces articles, il faut absolument qu'ils ne soient pas évalués. par exemple : (if (= (type a) 'INT) (alert "Entier") (alert "Pas un entier") ) L'apostrophe a son importance...
-
Bonjour, J'ai eu un petit soucis avec la fonction (atof chaîne), parce que je pensais que lorsque chaîne ne pouvait pas être analysé correctement, atof me renverrai nil. Perdu... (atof "toto") renvoie la valeur 0.0 dans le même genre, (atoi "toto") renvoie 0. Alors que (distof "toto") renvoie nil, ce qui me semble un peu plus logique.
