Aller au contenu

GEGEMATIC

Membres
  • Compteur de contenus

    1 416
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par GEGEMATIC

  1. GEGEMATIC

    autocad vba vers openoffice

    Si si, tu fait des heureux, mais quelle salle manie de programmer en VBA !! humour... J'essaye de traduire ton truc en lisp, car après mes déboires que tu peu voir là: http://www.cadxp.com/sujetXForum-15425.htm et j'y arrive pas ...
  2. GEGEMATIC

    Connexion Autocad excel

    Bon, J'ai rien trouvé de "magique" Mais je suis tombé sur tes primitives de liaison excel Autocad (Je m'adresse à Patrick_35) dès l'instant qu'on peu lire et écrire dans une case excel, je peu bien fair l'effort d'actionner un bouton ->vers excel et un autre <-Vers Autocad ... faut pas charier !! Mais ça demande un peu de boulot. Et j'étais parti sur excel, que je n'utilise pas, parceque je pensais qu'il était seul à proposer une liaison dynamique avec Autocad. Mais ce n'est pas le cas. Du coup, j'ai vu le boulot de winfield, pour openoffice, et ça me parrait plus interressant de m'impliquer dans un developpement pour OOo Mais je n'arrive pas à passer le 1er ecceuil, dans ma traduction laborieuse ... ;Set serviceManager = CreateObject("com.sun.star.serviceManager") (setq serviceManager (vlax-create-object "com.sun.star.serviceManager")) ;Set Desktop = serviceManager.createInstance("com.sun.star.frame.Desktop") (setq Desktop (vlax-invoke-method serviceManager 'createInstance "com.sun.star.frame.Desktop")) Jusque là, ça va mais après : ;Set DocumentoOOo = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args) ;LoadParams:=VarArrayCreate([0,-1],varVariant); (setq args (vlax-make-safearray vlax-vbVariant '(0 . 1))) (Setq DocumentoOOo (vlax-invoke-method Desktop 'loadComponentFromURL "private:factory/scalc" "_blank" 0 args)) là ça plante, avec ce message: "Erreur Automation InterfaceOleWrapper_Impl::Invoke : \r\n[automation bridge]UnoConversionUtilities::createOleObjectWrapper \r\nThe VARIANT does not contain an object type! " Dommage, après la porte serait ouverte ... Des idées ? Gégé
  3. GEGEMATIC

    Connexion Autocad excel

    Je pensais pourtant être clair ... ce que je recherche, c'est le moyen de piloter la couleur d'un objet à partir d'une feuille excel. je vais aller voir dans VBA Reflexion faite, le liens flemming semble ne pas marcher non plus: ça sert surtout à faire des requêtes SQL depuis une base. Je vais trouver, mais c'est une galère monstre ... Merci, A+ Gégé
  4. GEGEMATIC

    Connexion Autocad excel

    Dans l'exemple de Patrick emin (s'il nous écoute, il se rappelle peut être ?), Le lien était dynamique: Je relie une entité à une ligne de la feuille excel L'exemple donné était une liaison avec un cercle: si sous excel je modifiais le rayon du cercle dans la cellule, le cercle était dynamiquement modifié dans autocad: C'est un lien dynamique J'ai map 2006, il y a des outils de connexion pour ça, mais je ne suis pas arrivé à les faire fonctionner avec excel J'ai la tête en marmelade, mais je vais être obligé de mettre les mains dans le cambouis...
  5. GEGEMATIC

    Connexion Autocad excel

    Merci de ta réponse, mais ce n'est pas ce que je cherche: Cette methode concerne un pilotage d'excel par autocad. on trouve également des exemples d'extraction vers excel, puis de retour du resultat vers Autocad, mais ce n'est pas ce dont j'ai besoin. Ce dont j'ai besoin est là: http://acad.fleming-group.com/index.html mais le temps me manque pôur l'appliquer spécifiquement à excel, le tester ... c'est pourquoi j'ai appelé à l'aide, car si qq avait travaillé sur le sujet, j'aurais gagné beaucoup de temps ... En fait, il y a qq temps, j'ai posé la question de l'export au format Map HTML: J'ai des cartes thematiques à créer pour une association de lute contre l'incinération (c'est du bénévolat, qui commence à me prendre beaucoup de temps) Comme personnes n'avait ça, j'ai donc dévelloppé un export Map HTML, et tout ce qui va avec. Ces cartes sont en fait des polygones, dans lesquels j'ai injecté des données d'objet ADE. Mais ce syteme est lourd, peu pratique: car les données que l'on me transmet sont rarement très bien formatées, il y a déjà un gros boulot. je le fais sous excel, puis je l'intègre sous autocad via la lecture de fichier csv Pour gagner du temps, (lors des nombreuses corrections...), j'aimerai piloter l'aspect de ma carte directement depuis excel: je verrai mieux mes données, ça supprimerait des étapes, pour moi ce serait plus simple. Il y a qq années, patrick Emin avait posté un exemple simple de liaison dynamique excel autocad, mais je ne le retrouve pas. Salut,
  6. Salut, Je recherche un exemple, le plus simple possible, de connexion entre excel et autocad. L'extraction d'attributs ne m'interresse pas. ce que je recherche, c'est le moyen de piloter la couleur d'un objet à partir d'une feuille excel. Je suis un peu perdu par le nombre de possibilités existantes, et j'aimerai savoir laquelle est la plus appropriée. Je me souviens d'un exemple proposé par Patrick Emin, qui permettait de changer le rayon d'un cercle par excel: Je ne remets pas la main dessus des souvenirs ?
  7. Bonjour, J'ai besoin d'exporter des cartes au format HTML, en utilisant le composant MAP d'HTML Ce n'est pas très compliqué comme format, et Il existe aussi des applis genre FrontPage qui le font à partir de SVG, mais je tiens à le faire directement depuis autocad pour des raisons pratiques Mais peut être que ça existe déjà, alors si quelqu'un a du code là dessus ? --
  8. GEGEMATIC

    Expressions régulières

    Ce que je cherchais : déjà une liste comme celle là [[:alpha:]] n'importe quelle lettre [[:digit:]] n'importe quel chiffre [[:xdigit:]] caractères héxadécimaux [[:alnum:]] n'importe quelle lettre ou chiffre [[:space:]] n'importe quel espace blanc [[:punct:]] n'importe quel signe de ponctuation [[:lower:]] n'importe quelle lettre en minuscule [[:upper:]] n'importe quelle lettre capitale [[:blank:]] espace ou tabulation [[:graph:]] caractères affichables et imprimables [[:cntrl:]] caractères d'échappement [[:print:]] caractères imprimables exceptés ceux de contrôle par exemple [[:digit:]] est équivalent à \d (en lisp \\d) pour moi, il vaut mieux utiliser la version lourde que la simplifiée, car dans 1 ans, j'arriverai à lire digit , mais pas \\d Je cherche en fait des notation non simplifiée des expression régulières: là je viend de faire le test: moins d'un mois après avoir mis le nez dedans, j'ai du mal à comprendre les motifs que j'ai défini. Je cherche également le moyen de créer des expression logiques, avec des masques optionels En fait le lisp est super adapté aux espression booléene, elle sont super lisibles en lisp, il faut en profiter. Je postais donc ici pour savoir s'il existait déjà des travaux, des normes, dans ce sens.
  9. tu as bien de la chance de pouvoir te connecter au serveur ftp de géomédia: comment font-ils pour compliquer à ce point, un truc élémentaire ? (les pauvres doivent utiliser un serveur sous windows, je vois pas d'autre explication ...) le nouvel internet explorer (+ glacial que jamais) ne propose plus "Se connecter en tant que" dans le menu fichier firefox n'a pas cette option et avec mon logiciel de ftp, j'ai encore une page vide. J'en conclue que Géomédia a du encore changer mes accès/mot de passe sans me prévenir. tu parle d'un patch de la 9.0 à la 9.1: sauf que moi j'en suis encore à la 2000-7 la version 9, elle est aussi sur le ftp ? gégé
  10. GEGEMATIC

    vlr-reaction-set

    En utilisant la version "commerciale" de rectangle je reste, c'est à dire "rectrue", je me suis aperçu d'un bug : il existe une famille de commande qui peuvent "détruire" la rectanglitude (c'est dans l'air ...) les commande BREAK,TRIM, FILLET,CHAMFER Pire, BREAK,TRIM peuvent créer de nouvelle entité qui conservent l'xdata de marquage de "rectanglitude" alors qu'elle n'en sont plus. Il convient donc d'ajouter ce groupe de commande dans l'evenement begincommand, et de leur attribuer une gestion spécifique.
  11. GEGEMATIC

    Expressions régulières

    Holà, je n'attend pas de réponse dans les 2 heures: si on a jamais été confronté au problème, il est évident qu'il faut un peu de temps pour comprendre,et aussi avoir le temps de se documenter mais en gros, les expression régulières te permettent d'isoler des sous ensembles dans une chaine de texte. l'exemple en VBA dont je suis partit utilise un titre noté comme suit: Douzes travaux d' Astérix (Les) pour obtenir Les douzes travaux d' Astérix. j'ai dévelloppé des trucs pour traitrer les chaines pendant des années, mais même si ma bib de fonction est conséquente, je dois reconnaitre qu'elle est loin de permettre ce que regexp permet. et j'ai très souvent besoin de ces trucs. Alors j'ai décidé de m'y mettre, mais je pense qu'il faut humaniser la syntaxe, car je vais perdre en compréhension ce que je gagne en puissance. le lisp que j'ai posté permet simplement d'utiliser la librairie VBA regexp en lisp, avec un syntaxe très lisp "chaine" "pattern" -> comme wcmatch (pw_regexp "Chaine à scanner" ".*à.*") -> ("@" 0) ("LENGTH" 16) nil) ce qui veut dire j'ai trouvé ce que tu dis à début = 0 long 16 maintenant : (pw_regexp "Chaine à scanner" ".*(à).*") -> ((("MATCH" "Chaine à scanner") ("@" 0) ("LENGTH" 16) (("$0" "à")))) veut dire j'ai trouvé ce que tu dis à début = 0 long 16, et je t'ai extrait le sous motif "à" dans la liste d'association de clef "$0", car c'est le 1er sous-motif que tu as définit
  12. GEGEMATIC

    Expressions régulières

    La puissance des expression régulière est complètement dingue, en ce qui concerne le décriptage d'une chaine. On peut tout imaginer. mais la notation style "je me la pète sur la console" est pour moi imbuvable surtout qu'en lisp, elle nous handicape, car il faut doubler les \ donc \d doit s'écrite \\d pour reconnaitre un chiffre: ça rend la lecteure encore plus ardue. D'autre part, en lisp, nous avons la chance d'utiliser le parenthèses: j'avais déjà fait remarquer aux VBistes qu'il est très facile de créer, modifier et maintenir des listes de filtres ssget très élaborées en lisp, et que ça devient vite infaisable en vba Dans cette optique, je pense qu'il serait interressant d'agrémenter regexp d'une syantaxe "en clair", avec des groupement and, ou bien structurés. je pense que INTEGER est plus lisible que \\d, surtout 1 an après avoir écrit son programme. mais avant de me lancer, j'aimerai reccueillir qq avis.
  13. GEGEMATIC

    Expressions régulières

    les fonctions debug peuvent tout simplement être enlevées, sinon : voilà leur code: ;**************************************************************************** ;;§/debug/prompt seulement si pw-debug-mode = T/msg (defun pw_debug_prompt ( msg ) (if pw-debug-mode (prompt msg) (princ) ) ) ;**************************************************************************** ;;§/debug/print seulement si pw-debug-mode = T/val (defun pw_debug_print ( val ) (if pw-debug-mode (print val) (princ) ) ) ;**************************************************************************** ;;§/debug/print avec nom variable seulement si pw-debug-mode = T/'val ;; val doit être obligatoirement quotté ;;affiche automatiquement le nom de la variable ;; (defun debug_print ( val ) (if pw-debug-mode (progn (if (= (type val) 'SYM) (setq nomvar (vl-symbol-name val)) (setq nomvar "Illisible car non quotée") ) (prompt (strcat "\nvariable " nomvar " valeur: ")) (prin1 (eval val)) (princ) ) ) ) ;**************************************************************************** ;;§/debug/passe en pw-debug-mode = T/none (defun c:debugmode () (setq pw-debug-mode T) (prompt "\nMode debug activé, nodebug pour le désactivé") (princ) ) ;**************************************************************************** ;;§/debug/passe en pw-debug-mode = nil/none (defun c:nodebug () (setq pw-debug-mode nil) (prompt "\nMode debug désactivé, debugmode pour le réactivé") (princ) )
  14. GEGEMATIC

    vlr-reaction-set

    Le lien est vers un fil de discussion sur planetar: je n'ai pas fait attention au fait qu'ici on est sur un forum php, et que la balise html n'est pas copiée je te remet le liens : news://news.planetar.net:119/eivu7t$bp6@planetar.CADFRANCE sinon le post est du 09/11/2006 sur planetar Rectangle_je_reste est open source, rectrue est en VLX et distribué avec PowerClic Je te reposte le message d'origine : Voilà une version simplifiée de Rectrue, que j'ai posté précédemment. Si Rectrue permet d'avoir réellement de vrais rectangle, Rectangle je reste ne le permet pas. C'est volontairement que j'ai simplifié le code, pour qu'il soit plus pédagogique au niveau des réacteurs que des fonctionnalités. Pour qu'il soit sans mystere, il peut fonctionner indépendemment de PowerClic, j'ai ajouté les routines utilisées. Ci dessous le texte d'en tête de ce programme : Rectangle_je_reste: une approche simplifiée d'un réacteur persistant sur un objet, en vue de le modifier lui même © G-EAUX 2006, Gérald Lemoine : http://www.g-eaux.com derniere modification le: 11/8/06 s'appuie également sur le code exemple Autodesk : gpathreact du tutorial visual lisp But de la manoeuvre : le tutorial gpath est truffé de faux amis, confondant réaction au sens de réacteur, et réaction classique au changement de chemin: de plus le programme est volumineux apprendre les réacteurs persistants dans ces conditions, c'est de la folie pure. Mais seuls Visualisp et arx permettent l'usage de réacteurs persistants dans de bonne condition. Le programme Rectrue permet lui de faire de vrais rectangles, qui le restent quoi qu'il arrive. mais pour donner un exemple des réacteurs, ça devenait trop compliqué j'ai donc fait une version simplifiée pour illustrer le mécanisme: dans cette version, la réaction est un peu idiote, le rectangle grossit toujours, et reste parrallèle au SCG quoi qu'il arrive Le principe : je veux régir lorqu'on modifie un rectangle, avec les grip, pour qu'il reprenne une forme de rectangle: je créée deux réacteur persitants : :vlr-modified :vlr-erased (erased pour nettoyer le récateur lors de l'effacement: c'est plus propre, mais ça n'a rien d'obligatoire) Mais on ne peut pas réagir sur une entité notifiée directement sur l'evenement "modified" donc il faut le faire lors de l'evennement "endcommand" mais on ne peut pas avoir le même traitement endcommand pour chaque commande: par exemple, une commande _qsave n'a aucun rapport avec nos rectangles: donc il faut également agir au niveau de commandwillstart, pour savoir quelle commande va être exécutée, et ce qu'il conviendra de faire. Malheureusement, certaines commandes comme copy, peuvent créer plusieurs nouvelle entités, et être intérompues par un "escape" dans ce cas, pas de commandEnded, dons il faut agire au niveau de commandCancelled c'est pourquoi, au chargement de ce lisp, des réacteurs sont ajoutés à : :vlr-commandWillStart :vlr-commandEnded :vlr-commandCancelled Le mode opératoire est en gros le suivant: au niveau de :vlr-commandWillStart, on remet à nil les variables globales, puis on leur assigne des valeurs selon le type de commande au niveau de :vlr-modified, on crée un liste des entités modifiées sur lesquelles intervenir puis on récupère nos entités variables, etc, au niveau de :vlr-commandEnded :vlr-commandCancelled, et on traite les entités à traiter. Avec ce canevas, il y a a peu près tout ce qu'il faut pour réagir convenablement à différentes situations: copie, mirroir, effacement, d'entité ayant des réacteurs persistants utilise les variables globales suivantes : *commandReactor* *reactorsToRemove* *liste-des-rectangles-changes* *change-area-reaction* *reactorsToCopy* *realentlast* ************************************************************************** -- http://www.g-eaux.com ;;************************************************************************** ;§/dessin/fonction principale: Crée un vrai rectangle /none ;; (defun c:rectangle_je_reste ( / elast PolylineName) (setq elast (entlast)) (command "rectang" pause pause) (setq PolylineName (entlast)) (if (/= PolylineName elast) (progn (RJR:associe_reacteur PolylineName) (vlax-ldata-put PolylineName "RECTANGLE" "JE_RESTE") ) ) ) ;;************************************************************************** ;§/dessin/réagit à la modification d'un rectangle: le recrée / VlaObjectUnderReaction ;; (defun recree_le_rectangle (reactor / oldarea reactordata newarea VlaObjectUnderReaction minpoint maxpoint bbox 4pt 4ptflat lcoords ) (setq reactorData (vlr-data reactor) ) (setq oldarea (car reactordata)) (setq VlaObjectUnderReaction (car (vlr-owners reactor))) (setq *callback-modification* VlaObjectUnderReaction) (if VlaObjectUnderReaction (progn (vla-GetBoundingBox VlaObjectUnderReaction 'minpoint 'maxpoint ) (if minpoint (setq bbox (list (vlax-safearray->list minpoint) (vlax-safearray->list maxpoint) ) ) nil ) (setq 4pt (PW_PRECT (car bbox) (cadr bbox))) (setq lcoords (vlax-make-safearray vlax-vbDouble '(0 . 7))) ;;(vlax-safearray-get-dim lcoords) (setq 4ptflat (pw_flatten_list 4pt)) (vlax-safearray-fill lcoords 4ptflat) (vla-put-coordinates VlaObjectUnderReaction lcoords) (setq newarea (vla-get-area VlaObjectUnderReaction)) ;;voici un exemple d'utilisation de données passées à votre fonction par le réacteur: ;;ce n'est pas très interressant , mais c'est un simple exemple... (setq newarea (vla-get-area VlaObjectUnderReaction)) (if (> newarea oldarea) (prompt "\nRectangle grossit") (prompt "\nRectangle réduit") ) ;;met à jour le récateur, et ses données associées (vlr-data-set reactor (list newarea)) ) (vlr-remove reactor) ) (setq *callback-modification* nil) ) ;;************************************************************************** ;§/dessin/réagit à la modification d'un rectangle: réécrit sa nouvelle aire/ ObjectReactor ;; (defun renseigne_le_rectangle (ObjectReactor / reactorData VlaObjectUnderReaction newarea ) (setq reactorData (vlr-data ObjectReactor) ) (setq VlaObjectUnderReaction (car (vlr-owners ObjectReactor))) (setq *callback-modification* VlaObjectUnderReaction) (setq newarea (vla-get-area VlaObjectUnderReaction)) ;;met à jour le réacteur, et ses données associées (vlr-data-set ObjectReactor (list newarea)) (setq *callback-modification* nil) ) ;;************************************************************************** ;§/rectrue/associe réacteur et reactordata au rectangle /PolylineName ; (defun RJR:associe_reacteur ( PolylineName / PolyObj Polyarea PolyCoords ) (setq PolyObj (vlax-ename->vla-object PolylineName)) (setq Polyarea (vla-get-area PolyObj)) (vlr-pers (vlr-object-reactor ;; The first argument for vlr-object-reactor is ;; the "Owner’s List" argument. This is where to ;; place the object to be associated with the ;; reactor. In this case, it is the vlaObject ;; stored in PolylineName. (list PolyObj) ;; The second argument contains the data that you need for your traitement (list Polyarea) ;; The third argument is the list of specific reactor ;; types that we are interested in using ' ( ;; reactor that is called upon modification of the object (:vlr-modified . RJR:rectang_changed) (:vlr-erased . RJR:rectang_erased) ) ) ;_ end of vlr-object-reactor ) ) ;;*************************************************************************************************************************** (defun RJR:rectang_changed (VlaObjectUnderReaction reactor arg-list) (if (= *callback-modification* VlaObjectUnderReaction) (prompt "\nCallBack : Ne réagit pas à la modification !") (progn (prompt "\nUtilisateur : réagit à la modification !") (setq *liste-des-rectangles-changes* (cons reactor *liste-des-rectangles-changes* ) ) ) ) ) ;;;--------------------------------------------------------------------; ;;; Function: RJR:command_will_start ; ;;;--------------------------------------------------------------------; ;;; Description: This is a reactor to any command starting ; ;;;--------------------------------------------------------------------; ;;; This is the function where we figure out what will be happening ; ;;; to the garden path. The various reactor globals are set to ; ;;; flag the changes that we expect to be made, so that subsequent ; ;;; reactor events will perform the correct actions. ; ;;;--------------------------------------------------------------------; (defun RJR:command_will_start (reactor command-list / currentCommandName) ;; Reset all four reactor globals to nil (setq *reactorsToRemove* nil *liste-des-rectangles-changes* nil *change-area-reaction* nil *reactorsToCopy* nil ) (cond ((member (setq currentCommandName (car command-list)) '("SCALE" "GRIP_SCALE" ) ) (setq *change-area-reaction* T) (princ "\nNOTE: The ") (princ currentCommandName) (princ "will not modify the rectang proportions") ) ((member currentCommandName '("MIRROR" "GRIP_MIRROR" "COPY" "GRIP_COPY" "PASTECLIP" "U" "UNDO") ) (setq *reactorsToCopy* T) (setq *realentlast* (pw_real_entlast)) ) ) (princ) (princ "RJR:command_will_start ") (princ) ) ;;;--------------------------------------------------------------------; ;;; Function: RJR:command_ended ; ;;;--------------------------------------------------------------------; ;;; Description: This reactor function is called at the end of any ; ;;; command. ; ;;;--------------------------------------------------------------------; ;;; This is where the majority of work is done. Once the command ; ;;; that the user is performing has ended, we can get to work. (We ; ;;; cannot modify entities while they are being modified by AutoCAD ; ;;; itself, so we have to wait until we get a notification that the ; ;;; command in progress is complete, and we can have access to the ; ;;; entities.) ; ;;;--------------------------------------------------------------------; (defun RJR:command_ended (reactor command-list / objReactor reactorToChange reactorData coordinateValues currentPoints newReactorData newPts tileList ) (cond ;; CONDITION 1 - POLYLINE ERASED (Erase command) ;; If one or more polyline borders are being erased (indicated ;; by the presence of *reactorsToRemove*), erase the tiles within ;; the border, then remove the reactor. (*reactorsToRemove* (foreach objReactor *reactorsToRemove* ;(gp:erase-tiles objReactor) (prompt "\nObjet effacé : supprime le réacteur") (vlr-remove objReactor) ) (setq *reactorsToRemove* nil) ) ;; CONDITION 3 - GRIP_STRETCH ;; In this case, we are keeping the associativity of the tiles to ;; the path, but the path and the tiles will need to be recalculated ;; and redrawn. A GRIP_STRETCH can only be performed on a single ;; POLYLINE at a time. ((and *liste-des-rectangles-changes* (not *change-area-reaction*)) (prompt "\nRecrée les rectangles") (foreach reactor *liste-des-rectangles-changes* (recree_le_rectangle reactor) ) ) ;;ne modifie pas la géométrie, mais rensiegne le réacteur sur la nouvelle (*change-area-reaction* (prompt "\nRe-renseigne les rectangles") (foreach reactor *liste-des-rectangles-changes* (renseigne_le_rectangle reactor) ) ) ;;ajoute le réacteur à l'objet (*reactorsToCopy* (prompt "\nAssocie le réacteur aux rectangles") (setq sel (pw_selafter *realentlast*)) (setq lsel (pw_listsel sel)) (foreach l lsel (if (= "JE_RESTE" (vlax-ldata-get l "RECTANGLE" )) (RJR:associe_reacteur l) ) ) ) ) (princ) ) ;;;--------------------------------------------------------------------; ;§/rectrue/recation quand une commande genre copy, a été interrompue par escape /PolylineName (defun RJR:command_cancelled (reactor command-list / objReactor) ;;ajoute le réacteur à l'objet (if *reactorsToCopy* (progn (prompt "\nAssocie le réacteur aux rectangles") (setq sel (pw_selafter *realentlast*)) (setq lsel (pw_listsel sel)) (foreach l lsel (if (= "JE_RESTE" (vlax-ldata-get l "RECTANGLE")) (RJR:associe_reacteur l) ) ) ) ) ) ;;;--------------------------------------------------------------------; ;;; Function: RJR:rectang_erased ; ;;;--------------------------------------------------------------------; ;;; Description: This reactor function is triggered if the path ; ;;; outline is being erased. In this case, store the ; ;;; reactor to the global list *reactorsToRemove* ; ;;;--------------------------------------------------------------------; (defun RJR:rectang_erased (outlinePoly reactor parameterList) (setq *reactorsToRemove* (cons reactor *reactorsToRemove*) ) ) ; ***************************************************************************** ; Librairie utilisée ; ***************************************************************************** ;;§/listes/ ecrase une liste de liste a une liste d'élements/lst ;(pw_flatten_list '((1 2)(3 4) 4.5 (5 6))) -> (1 2 3 4 4.5 5 6) ; (defun pw_flatten_list (lst / l deb) (setq deb (car lst)) (setq lst (cdr lst)) (if (not (listp deb)) (setq deb (list deb)) ) (foreach l lst (if (listp l) (setq deb (append deb l )) (setq deb (append deb (list l ))) ) ) deb ) ;****************************************************************************** ;;§/dessin/ crée une liste de 4 sommet d'un rectange à partir de sa diagonale/p1 p2 ;; sert surtout pour textbox (defun pw_prect ( p1 p2 / x1 x2 y1 y2 p3 p4) (setq x1 (car p1) x2 (car p2) ) (setq y1 (cadr p1) y2 (cadr p2)) (setq p3 (list x2 y1 ) p4 (list x1 y2 )) (mapcar 'pw_pt_2d (list p1 p3 p2 p4)) ) ;*************************************************************************** ;§/divers/Dilivre un point 2D a partir d'une liste point/pt (Defun pw_pt_2d (pt) (list (car pt) (cadr pt)) ) ;**************************************************************************** ;§/SELECTIONS/ cree une liste d'entité à partir d'un jeu de selection d'autocad/js ; (defun pw_LISTSEL (js / rs ) (cond ((not (equal (type js) 'PICKSET)) (prompt "\nNot à selection set !")) (T (setq rs (pw_lsel2 js))) ) rs ) ; ** pw_lsel 2sous programme de listsel (defun pw_LSEL2 (j / e i r) (setq i 0) (while (setq e (ssname j i)) (setq r (cons e r)) (setq i (+ 1 i)) ) (reverse r) ) ;;************************************************************************* ;;§/SELECTIONS/ crée un jeu de selection des entités suivant un element/ent ;;fonction ralentie par la 2006, qui n'axepte pas les sequend ;;donc necessité de faire un entget pour chaque entité ;; (defun pw_selafter ( ent / sel etyp ) ;;si le dessin etait vierge, ent = nil (if ent (setq sel (ssadd)) (setq sel (ssadd (setq ent (entnext)))) ) (while (setq ent (entnext ent)) (setq etyp (cdr (assoc 0 (entget ent)))) (if (not (member etyp '("ATTRIB" "SEQEND"))) (setq sel (ssadd ent sel)) ) ) sel ) ;;************************************************************************* ;;§/SELECTIONS/retourne le vrai dernier element, dans le cas ou entlast retourne un element complexe/none ;;rajouté un test sur SEQEND : en effet, si 3dpolyligne = entlast, le entnext du sequend retourne au début ;; du dessin ! (defun pw_real_entlast ( / ent tmp ok eg tp) (setq ok T) (if (setq ent (entlast)) (while (and (setq tmp (entnext ent)) ok) (setq eg (entget ent)) (setq tp (cdr (assoc 0 eg))) (if (= "SEQEND" tp) (setq ok nil) ) (setq ent tmp) ) ) ent ) ;;************************************************************************** ;; AT LOAD - Au chargement ;;************************************************************************** (if pw-ver (progn (if (not (wcmatch pw-ver "7*")) (prompt "\nMettez à jour powerClic vers une version 7 : c'est recommandé" ) ) ) (prompt "\nNe pas utiliser PowerClic avec Autocad, c'est de l'inconscience\nenfin moi, ce que j'en dis ...") ) ;;initialisation des différents réacteurs au niveau du document (if (not *commandReactor*) (setq *commandReactor* (VLR-Command-Reactor nil ; No data is associated with the command reactor '((:vlr-commandWillStart . RJR:command_will_start) (:vlr-commandEnded . RJR:command_ended) (:vlr-commandCancelled . RJR:command_cancelled) ) ) ;_ end of vlr-command-reactor ) ) (Prompt "\nVersion pédagogique simplifiée de Rectrue : Tapez la commande \"rectangle_je_reste\" pour dessiner un rectangle" ) (Prompt "\nPuis essayez les commandes copier, rotation, echelle, mirroir et déplacer" ) (Prompt "\nensuite modifiez vos rectangles avec des grips, ou la comande etirer :" ) (Prompt "\nVotre rectangle reste un rectangle, mais dans cette version, il ne peut que grandir" ) (princ)
  15. Salut tout le monde: Je ne sais pas si le sujet à déjà été évoqué ici. Les expression régulières. J'avais trouvé un truc de tanzillo, je ne sais plus ou. Je suis reparti dessus, et je l'ai mis à ma sauce Maintrenant, avcant d'aller plus loin, c'est à dire d'humaniser le langage des expression régulirer je prefere '("ENDWITH' "Z") à $Z et de permettre des opérateur logique, j'aimerai savoir si ce travail n'a pas déjà éré fait ;;************************************************************************* ;;§/regexp/Utilisation en lisp des expression régulières/string patt ;;retourne une liste d'association, MATCH, @(debut), LENGTH, $0 submatch1 etc ;;pour la gestion des alias, comme \d (chiffre), ne pas oublier de doubler le \ donc: \\d ;;exemples : ;;un seul match, plusieurs submatch : ;;(Pw_RegExp "les douze travaux d'Astérix" "(l[a-zA-Z0-9_]{0,2})( )(.*)") ;;-> ((("MATCH" "les douze travaux d'Astérix") ("@" 0) ("LENGTH" 27) (("$0" "les") ;;("$1" " ") ("$2" "douze travaux d'Astérix")))) ;;plusieurs match aucun submatch : ;;(setq res (Pw_RegExp "IS1 is2 IS3 is4" "(is.)")) ;;->((("MATCH" "IS1") ("@" 0) ("LENGTH" 3) (("$0" "IS1"))) (("MATCH" "is2") ("@" 4) ;;("LENGTH" 3) (("$0" "is2"))) (("MATCH" "IS3") ("@" 8) ("LENGTH" 3) (("$0" "IS3"))) ;;(("MATCH" "is4") ("@" 12) ("LENGTH" 3) (("$0" "is4")))) ;;plusieurs match, plusieurs submatch : ;;(setq res (Pw_RegExp "IS1 is2" "((is)([0-9]))")) ;;->((("MATCH" "IS1") ("@" 0) ("LENGTH" 3) (("$0" "IS1") ("$1" "IS") ("$2" "1"))) ;;(("MATCH" "is2") ("@" 4) ("LENGTH" 3) (("$0" "is2") ("$1" "is") ("$2" "2")))) ;;Pw_RegExp par Gérald Lemoine (c) G-eaux 2007 http://www.g-eaux.com ;;credits: ;; RegExpTest.lsp Copyright (c) 2004, Tony Tanzillo ;; Regexp.pdf Regexp en VBA Copyright Charles A © 2006 http://cafeine.developpez.com/access/tutoriel/regexp/ ;; Regexp.pdf Regexp en .NET Copyright Par MORAND Louis-Guillaume 08/03/2005 http://lgmorand.developpez.com/dotnet/regex/ (defun Pw_RegExp (string patt / RegExp cnt match result i 1stindex long lresultat val itm j SubMatches lsubm submcnt) (setq RegExp (vlax-create-object "VBScript.RegExp")) (pw_debug_prompt "\nRegexp -------------------------\n") ;(vlax-dump-object Regexp T) (vlax-put-property RegExp 'Pattern patt) (vlax-put-property RegExp 'Global :vlax-true) (vlax-put-property RegExp 'IgnoreCase :vlax-true) (setq result (vlax-invoke-method RegExp 'Execute string)) (pw_debug_prompt "\nResult -------------------------\n") ;(vlax-dump-object result T) (princ (strcat "\nMatches found: " (itoa (setq cnt (vlax-get-property Result 'Count))))) (setq i 0) (repeat cnt (if (setq match (vlax-get-property Result 'Item i)) (progn (pw_debug_prompt "\nMatch -------------------------\n") ;(vlax-dump-object match T) (pw_debug_prompt (strcat "\nMatch[" (itoa i) "]: " (setq val (vlax-get-property Match 'Value)) " @ " (itoa (setq 1stindex (vlax-get-property Match 'FirstIndex))) " Length " (itoa (setq long (vlax-get-property Match 'Length))) ) ) ;;explore les submatches (setq SubMatches (vlax-get-property Match 'SubMatches)) (setq submcnt (vlax-get-property SubMatches 'count)) (debug_print 'submcnt) (setq lsubm nil) (setq j 0) (repeat submcnt (setq itm (vlax-get-property SubMatches 'Item j)) (debug_print 'itm) (setq lsubm (cons (list (strcat "$" (itoa j)) (vlax-variant-value itm)) lsubm)) (setq j (1+ j)) ) (setq lresultat (cons (list (list "MATCH" val) (list "@" 1stindex) (list "LENGTH" long) (reverse lsubm)) lresultat ) ) ) ;#progn ) (setq i (1+ i)) ) ;;suivant pour montrer comment fonctionne la methode replace ;;fonctionne avec (Pw_RegExp "([l|d|a][a-zA-Z0-9_]{0,2})( )(.*)" "les douze travaux d'Astérix") ;;(print (setq repl (vlax-invoke-method RegExp 'Replace string "$3 ($1)"))) (vlax-release-object result) (vlax-release-object RegExp) (if Match (vlax-release-object Match) ) (if submatch (vlax-release-object submatch) ) (princ "\n") (reverse lresultat) )
  16. GEGEMATIC

    vlr-reaction-set

    La question est ancienne, je pense que tu as fini par y répondre, mais pour parler de mon expérience à ce sujet, voilà ma petite contrib news://news.planetar.net:119/eivu7t$bp6@planetar.CADFRANCE Dans ce post, je présentais rectangle je reste, un programme idiot, qui avait le mérite de montrer tous les pb de réaction à une modification. Typiquement, la solution que j'ai utilisée est celle du tutorial Autodesk: Lorsque l'evenenemnt Begin_command intervient, je filtre les commandes succeptibles de modifier une entité, et de quelle manière lorsqu'arrive le entity_modified, j'ajoute simplement le nom de l'entité à la liste des entités modifiées Lorque j'ai le command_ended, je lance ma fonction de réaction, en ut_ilisant une variable qui prévient l' entity_modified qu'il faut ignorer l'évenement, car il provient d'une commande de réaction. Pour la gestion des réacteur, et leur effacement, j'ai rennoncé à supprimer un réacteur lorsque l'on efface une entité : la gestion des _undo, _redo faisait que ça ne marchait pas bien. Il vaut mieux supprimer les réacteurs orphelins à l'ouverture du dessin.
×
×
  • 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é