Didier-AD
Membres-
Compteur de contenus
130 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Didier-AD
-
Euh ! il parait que Reverse sur des listes longues çà prend du temps alors, sans Reverse juste pour le Fun (defun inc-lst (LstR Lst s / pos genereserie) (defun genereserie ( debut fin / l n) (setq l (list fin) n fin) (while (>= (setq n (1- n)) debut) (setq l (cons n l)) ) l ) (if (/= 'INT (type s)) (setq pos (- (length Lst) (length (member s Lst)))) (setq pos (1- s)) ) (append (mapcar '(lambda (n) (nth n Lst)) (genereserie 0 pos)) LstR (mapcar '(lambda (n) (nth n Lst)) (genereserie (1+ pos) (1- (length Lst)))) ) )
-
Youpee cette fois ci je suis le premier à répondre Euh ! C'était quoi la question ?
-
Comme on disait avant dans le jeu des chiffres et des lettres : "Pas mieux" bonne idée, ce challenge ; mon problème c'est que je me connecte tard et que les bonnes idées auront déjà été émises.
-
Zebulon a raison sur le fait que pour stocker et récupérer des données, les développeurs utilisent en général la concept "clef"- données "clef" - donnees ce qui parait compliqué ce sont tous ces chiffres supérieurs à 1000 qui permettent à autoCAD de connaitre le type de donnée à stocker en Xdatas l'idée que je te propose c'est de récupérer les données Xdatas et immédiatement "virer" ces codes 100? pour ne garder que les informations essentielles c'est à dire une liste du type (("Ph" 2) ("La" 0.8) ("Ht" 1)) d'abord elle paraitra plus lisible et il te sera facile d'extraire ce que tu veux avec la syntaxe (cadr (assoc clef la_liste)) ; exemple (cadr (assoc "La" '(("Ph" 2) ("La" 0.8) ("Ht" 1)))) te donnera 0.8 ci dessous une fonction qui compose une liste de ce genre ;;---Début---------------------------------------------------ExtractXdatas-------- ;; << extrait une liste lisible de xdatas à partir d'une entité >> ;; << devrait fonctionner avec des données COVADIS >> ;; ;; créée le : mercredi 16 mai 2007 à 21:52 ;; ;; Admet : ;; ======= ;; ent : Nom d'entité = entité contenant les xdatas à extraire ;; Appli : chaine = nom d'application ;; ;; Retourne : Liste = ((clef valeur) (cle valeur) (cle valeur)....) ;; ========== ;------------------------------------------------------------------------------- (Defun ExtractXdatas ( ent Appli / Infoent Lxdatas0 Lxdatas) (setq Infoent (entget (car (entsel)) (list Appli)) Lxdatas0 (cdadr (assoc -3 Infoent)) ) (while Lxdatas0 (setq Lxdatas (cons (list (cdr (car Lxdatas0)) (cdr (cadr Lxdatas0))) Lxdatas)) (setq Lxdatas0 (cddr Lxdatas0)) ) LxDatas ) ;;---fin-----------------------------------------------------ExtractXdatas-------- Charges cette fonction et Essaie sur une de tes polylignes COVADIS la syntaxe suivante (setq MaListe (ExtractXdatas (car (entsel)) "COVAMETRE")) tu devrais obtenir une liste de la forme (("Ph" 2) ("La" 0.8) ("Ht" 1)) pour récupérer la hauteur (clef "Ht"), il te suffit d'écrire (cadr (assoc "Ht" MaListe)) Je n'ai pas COVADIS, j'ai donc travaillé en aveugle ; il se peut qu'il y ait plusieurs applications (appartenant toutes à COVADIS, il me semble avoir un jour récupéré un dessin avec une multitude d'applications commençant par "COVA...) qui stockent chacune leurs informations sur une entité. La récupération de l'ensemble des données est alors un peu plus compliquée mais toujours possible. dans la manip que e te propose on essaie d'extraire uniquement les données de l'application "COVAMETRE" Pour répondre aux inquiétudes de "LeCrabe", il n'y a aucun danger à récupérer les informations Xdatas d'une entité ; par contre il n'est pas conseillé de tenter de les modifier. bon courage
-
Moi, j'ai compris que tu voulais geler/libérer un calque existant dans une fenêtre d'espace papier. et je vais tenter de répondre à ta question. - Ce que je sais c'est que la liste des calques gelés dans une fenêtre d'espace papier est stocké en Xdatas dans la fenêtre. - Je sais aussi que entmod ne fonctionne pas sur les fenêtres d'espace papier - je viens d'essayer avec les fonctions vla-GetXdata et vla-setXdata sans grand succès mais dans les Xdatas extraits il y a des listes de listes et me me suis peut-être planté dans les extractions de variant et safe array ; à tenter à nouveau. en attendant, ceci fonctionne ;;---Début---------------------------------------------------GelerDansFenetre---- ;; << gèle ou dégèle un calque dans une fenêtre d'espace papier >> ;; << >> ;; ;; créée le : mercredi 16 mai 2007 à 01:43 ;; ;; Admet : ;; ======= ;; calque : Chaine = calque à geler ou à libérer ;; fenetre : Nom d'entité = entité fenêtre d'espace papier ;; geler : Booléen = T = geler Nil = libérer ;; ;; Retourne : Sans intérêt = ;; ========== ;------------------------------------------------------------------------------- (Defun GelerDansFenetre ( calque fenetre geler / cmd) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_vplayer" (if geler "_F" "_T") calque "_S" fenetre "" "") (setvar "cmdecho" cmd) ) ;;---fin-----------------------------------------------------GelerDansFenetre---- Je sais,ce n'est pas très propre d'utiliser les commandes autoCAD mais les fenêtres d'espace papier c'est un peuchasse gardée chez autodesk : Pas Touch ! PS les options de la commandes sont en Anglais dans la fonction Bon courage.
-
Je trouve touchante cette suite de compliments réciproques. Mais Oh ! vous n'allez pas partir à la retraite ? pas maintenant ! Ce que j'apprécie de vos échanges, c'est cette envie d'aider les autres (V)Lispeurs et le temps que vous y consacrez. chapeau ! Ce que regrette c'est de ne connaître que des prénoms ou des alias et pas savoir ce que chacun fait et ce qui l'a amené à développer en LISP. Je commence : Je suis Prof de Génie civil ans un IUT, j'ai découvert autoCAD en 1985 avec la version 2.18 sur HP 150 et j'ai tracé (en automatique) mon premier cadre de béton armé en 1986 ; ensuite, après avoir joué avec du tracé automatique à partir de points topo, je suis revenu au ferraillage. Mes dadas, les xdatas associés aux réacteurs sur commande et je bosse le Lisp en général le soir. Mais je suis également un renégat : je fais un tout petit peu d'ARX et de VBA 1h 32 !!! bonne nuit
-
J'ai entendu une rumeur concernant l'impossibilité de faire tourner le VBA sur VISTA 64 bits... Est-ce vrai ? est-ce limité à autoCAD ? est-ce provisoire ? l'avenir le dira. En tous cas les développements LISP et Vlisp passent d'une version à l'autre sans aucun problème.
-
Oups ! Désolé, il semble si j'en crois mon disque dur que ce tutorial n'existe plus avec la 2006 ou la 2007 par contre il était fourni avec la 2004
-
Essaie déjà avec le tutorial fourni avec AutoCAD, Je le trouve très progressif, les exercices permettent de bien débuter bon courage
-
pour une fois que je peux t'aider Je viens de vérifier (sur la 2007), la routine suivante qui envoie une liste de présentations à un traceur affiche la barre de progression ;;---Début---------------------------------------------------AD_Pres_Plot-------- ;; << lance l'impression d'un layout >> ;; << >> ;; ;; créée le : mardi 13 février 2007 à 00:07 ;; ;; Admet : ;; ======= ;; l_layout : Liste = chaines = nom des layouts ;; ;; Retourne : Sans intéret = ;; ========== ;------------------------------------------------------------------------------- (Defun AD_Pres_Plot ( l_layout / lnom plot) (setq lnom (vlax-make-safearray vlax-vbString (cons 0 (- (length l_layout) 1)))) (vlax-safearray-fill lnom l_layout) (setq plot (vla-get-plot (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method plot 'SetLayoutsToPlot lnom) (vlax-invoke-method plot 'PlotToDevice) ) ;;---fin-----------------------------------------------------AD_Pres_Plot-------- pourtant les codes racontent la même chose, en gros peut- être que la fait de passer par vlax-invoke-method..... à voir bon courage
-
Je n'ai pas envie que le monde m'appartienne. Et puis, développer la nuit, quand tout est calme, quand le téléphone ne sonne pas.... Damned, je suis fait ! Francois est mon fils au sens génétique du terme (enfin c'est ce que me dit sa mère et au vu de la passion qu'il a pour le développement, je veux bien la croire) ADFER est mon bébé au départ au sens informatique du terme. mais je ne fais pas partie de Progiscad ne vas surtout pas crier tout çà sur les toits (ou les forums). cordialement
-
Merci beaucoup Zebulon Merci pour toutes ces nuits que je vais sûrement blanchir à essayer de pousser un peu plus la porte que tu viens d'entr'ouvrir... Et le pire, c'est que je suis sur que çà va tout de même m'amuser..... Merci encore
-
ajouter un bloc à la table des blocs
Didier-AD a répondu à un(e) sujet de Didier-AD dans Pour aller plus loin en LISP
OK, merci beaucoup ! j'aurais préféré ne pas devoir l'insérer puis l'effacer, juste l'intégrer à la table des blocs mais çà fonctionne même avec un bloc avec attributs, alors je ne vais pas chicaner et faire le difficile. -
Pour ajouter un bloc stocké sur disque à la table des blocs d'un dessin le code ci dessous fonctionne à condition que "monbloc.dwg" soit accessible par findfile (setq Tblblk (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method Tblblk 'Add (vlax-3d-point '(0.0 0.0 0.0)) "monbloc") mais celà retourne une erreur si je remplace "monbloc" par un chemin précis comme par exemple "c:/mesblocsàmoi/monbloc" Comment faire pour ajouter un bloc à la table des blocs si ce bloc n'est pas accessible par findfile ??? Il est bien entendu que je m'interdis d'utiliser un code du style (command "insert" "c:/mesblocsàmoi/monbloc") (command) qui va bien dans le cas général mais qui n'est pas adapté à tout ce qui est réacteur sur commande et sur erreur merci
-
J'ai payé, trop cher, à Autodesk une formation .net (pour voir ce qu'on pouvait en faire) ç'est effectivement presque sympa pour envoyer des instructions d'exécution à LISP par contre, pour utiliser des retours de fonctions LISP (interroger un dessin par exemple) c'est quasiment impossible. i lfaut le faire en .NET et on perd ce qui est déjà écrit. J'ai renoncé !
-
Je ne sais pas si celle là que tu as essayé d'utiliser sur la 2007 mais j'en avais proposé une du même nom ici ; je viens de vérifier, elle fonctionne sur la 2007.
-
je dois en faire une grosse mais où ?
Didier-AD a répondu à un(e) sujet de Didier-AD dans Visual LISP
Merci mais j'aimerais tout de même comprendre pourquoi faut pas mélanger.... -
ci joint un petit bout de LISP la commande C:TEST2 demande un nom de calque et le crée la commande C:TEST demande de pointer une entité, et demande un nom de calque elle est censée créer le calque et basculer l'entité dans ce nouveau calque. (defun c:test( / e nomcalc olay ) (setq e (car (entsel))) (setq nomcalc (getstring "\nNom du calque à créer ? ")) (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method olay 'Add nomcalc) (setq ent (entget e)) (entmod (subst (cons 8 nomcalc) (assoc 8 ent) ent)) ) ;-------------------------------------------------- (defun c:test2(/ nomcalc olay ) (setq nomcalc (getstring "\nNom du calque à créer ? ")) (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method olay 'Add nomcalc) ) ;--------------------------------------------------- (vl-load-com) (princ) La commande C:TEST2 fonctionne normalement la commande C:TEST plante rend l'écran instable sur AutoCAD 2007 et plante une erreur fatale sur AutoCAD 2006 9 fois sur 10.... J'en conclue que j'ai surement une erreur de concept mais où ? il s'agit de fonctions résumées qui dans mon développement sont un peu plus compliquées (définition de la couleur du calque et du type de ligne) ; jusqu'il y a 2 jours, je n'utilisais pas les fonctions VLA pour créer le calque, je me contentais de récupérer les caractéristiques du calque 0 par (setq infolay (entget (tblobjname "LAYER" "0"))= puis par une série de modification de la liste infolay je définissais les caractéristiques de mon nouveua calque et terminais par (entmake infolay) Il se trouve que cette ancienne technique que j'utilisais déjà au millénaire dernier met le souk dans la table des layers de le Beta 2008. je suis donc passé aux fonctions VLA et je vous confie le résultat merci à qui me dira où je me trompe....
-
Les palettes ne sont que des fenêtre Windows avec un look un peu particulier. ce que j'aimerais, moi, c'est un ObjectDcl qui permette de gérer également les palettes notamment pour la création et l'édition des objets particuliers (je parle d'objets intelligents avec Xdatas ou autres dictionnaires), il faut bien reconnaitre que l'interface palette de propriétés d'autoCAD est bien sympa et j'aimerai pouvoir créer et éditer mes objets avec une telle interface ceci dit, je suis bien d'accord avec toi le tas de palettes fournies avec autoCAD avec une foultitude de blocs, de hachures, et autres matériaux, c'est énervant ... surtout lorsqu'un écran tombe en panne et qu'il faut le remplacer en urgence par un 1024*768 ! quand au prix, j'ai toujours considéré qu'un outil n'est cher que s'il ne s'amortit pas par le temps gagné ou par le plaisir qu'on a à l'utiliser. A ce titre, ObjectDCL etait, très bon marché.... Espérons qu'il le restera
-
J'ai pris mon pied avec la version 2 d'objectDCL, j'ai pesté souvent contre la lenteur d'affichage de la version 3, contre son instabilité...dans tout ce qui n'était pas boite modale. J'ai communiqué plusieurs fois avec Chad à ce sujet avant que malheureusement........ Alors pour faire des modales certainement que le futur ObjectDCL fera l'affaire mais les modales, dans autoCAD, finalement il n'y en a quasiment plus, tout est en palettes et les quelques modales qui restent sont dynamiques ObjectDCL dans sa forme actuelle c'est un peu has been...vis à vis de l'interface d'AutoCAD un peu comme le DCL par rapport à ObjectDCL V2 Pour moi, c'est déjà trop tard, c'est au début du projet openDCL qu'il aurait fallu que Martin et Andrea se lancent...
-
Exact mais c'est le cas de toute forme d'intelligence qu'on peut donner à un dessin _recover permet de ne pas perdre les heures de travail mais souvent, ce n'est plus de la CAO juste du DAO Ben moi, avec un peu de réacteurs sur commande, çà me permet d'avoir en LISP des objets aussi performants que des custom objects d'ARX...sans en avoir les inconvénients, car ces objets sont composés d'entirés natives d'AutoCAD
-
Je ne dois pas tout avoir compris car voici une solution plus simple et plus courte (defun c:CalqueDuBloc (/ js n bl layer att) ;sélectionner les blocs avec attribut du dessin (setq js (ssget "X" (list (cons 0 "INSERT") (cons 66 1))) n 0 ) (repeat (if js (sslength js) 0) (setq bl (ssname js n) layer (cdr (assoc 8 (entget bl))) ;; récupérer le calque att (entget (entnext bl)) att (subst (cons 1 layer) (assoc 1 att) att) ; modifier l'attribut ) (entmod att) ;; mise à jour de l'attribut (entupd bl) ;; mise à jour du bloc (setq n (1+ n)) ) ) (alert "Commande c:CalqueDuBloc chargée") bon courage
-
Conserver les proprietes des entites
Didier-AD a répondu à un(e) sujet de willfrca dans Débuter en LISP
Salut, Je ne sais pas le nom de ta commande, je l'ai donc appelée Select->clayer voici son code (defun c:Select->CLayer (/ js rep n ent) (Prompt "\nSélectionner les entités à transférer") (setq js (ssget) n 0) (if js (progn (initget "Oui Non") (setq rep (GetKword "\nGarder les entités dans le calque initial [Oui/Non] ")) (repeat (sslength js) (setq ent (entget (ssname js n)) ent (subst (cons 8 (getvar "clayer"))(assoc 8 ent) ent) ) (if (or (not rep) (= rep "Oui")) (entmake ent) (entmod ent) ) (setq n (1+ n)) ) ) ) ) (alert "Commande Select->Clayer chargée") bon courage -
Acceder aux base de données avec vlisp
Didier-AD a répondu à un(e) sujet de stephan35 dans Pour aller plus loin en LISP
Il me semble que VB, je dis bien VB, pas VBA accède bien aux bases de données, sinon il n'y aurait pas tant d'applications de BD écrites en VB et en VB on peut accéder à AutoCAD également ... je ne prétends pas que c'est l'idéal mais s'il te faut absolument trouver une solution.... -
J'avais fait des essais avec les Ldata mais à me semblait moins performant et surtout moins souple. Lors d'une session de formation (#net... beurk) avec un développeur de chez autodesk, j'ai appris que les Xdatas étaient bien plus performants en terme de mémoire occupée et de temps d'accès que les dictionnaires ou que les antiques attributs de bloc pour stocker des infos. Moi çà mallait bien puisque, comme tu le dis, j'ai commencé à les utiliser quand ils sont apparus avec la R12.
