Aller au contenu

Bred

Membres
  • Compteur de contenus

    2 764
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Bred

  1. Bred

    Rec ou re

    Chercher... chercher... Outils / Personnaliser / Paramètre de Programme (acad.pgp) ... il faut relancer Autocad pour que les modifications soit pris en compte.
  2. Bred

    xdata

    Re, Alors, voilà un prog plus "complet" : - J'ai modifiés le nom des outils : Enregistrer Xdata dans objet : L-Xdata Enregistrer Xdata dans .csv : XdataXL Mise à jou Xdata par rapport à un .csv : XLXdata - Afin de rentrer les informations voulus, j'ai détachés la partis renseignement et adapté toutes les autres routines pour que ça fonctionne avec (normalement...) Tu rajoutes/enlève/modifie ce que tu veux dans la liste (en gras) Attention : de cette liste dépends le bon fonctionnement de la mise à jour par rapport au .csv ! Donc ne pas la modifier entre une "extraction de Xdata" et une "Mise à jour de Xdata"... - j'ai rajouter un outils (RXO) qui sort juste les x-data contenus dans l'objet selectionné. - La création et la liaison à faire avec le .csv se fait maintenant à la demande. ;;; Renseignements (à modifier) pour enregistrement Xdata (defun Renseignements-XDATA (Q / I LST-F LSTR R) [b]; liste à modifers pour reneignements : (setq lstR '("Nom" "Adresse" "Localisation" "taille" "Poids"))[/b] (if Q (progn (setq i -1) (repeat (length lstR) (setq R (getstring T (strcat "\n " (nth (setq i (1+ i)) lstR) " :")) lst-F (append lst-F (list (strcase (nth i lstR)) R))) ) lst-F ) lstR ) ) ;;; Requètes (defun c:R-Xdata (/ I L LST LST-B N S S-T VLA-OB XDATA XTYPE) (princ "\n Recherches des Renseignements :") (setq lst (Renseignements-XDATA "Q")) (setq s (ssget "_X" (list (list -3 (list (car lst))))) s-t (ssadd)) (repeat (setq i (sslength s)) (setq vla-ob (vlax-ename->vla-object (ssname s (setq i (1- i))))) (vla-getxdata vla-ob "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))) (repeat (setq n (length (setq lst-B (Renseignements-XDATA nil)))) (if (equal (strcase (cadr (member (strcase (nth (setq n (1- n)) lst-B)) lst))) (strcase (cadr (member (strcase (nth n lst-B)) l)))) (ssadd (handent (cadr l)) s-t)) ) ) ) ) (if (zerop (getvar "cmdactive"))(sssetfirst nil s-t)) (if (> (sslength s-t) 1) (princ (strcat "\n "(rtos (sslength s-t)) " objets sélectionnés.")) (princ (strcat "\n "(rtos (sslength s-t)) " objet sélectionné.")) ) (princ) ) ;;; Retourne Xdata dans Objet. (defun c:RXO () (setq ent (car (entsel "\n Choisir l'objet contenant les renseignements :"))) (if ent (if (not (Test-Xdata ent)) (alert "\n Pas de Xdata dans cette entité."))) (princ) ) ;;; Test Existance Xdata (defun Test-Xdata (ent) (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData)) i -1 txtt "") (repeat (/ (length l) 2) (setq txtt (strcat txtt "\n" (nth (setq i (1+ i)) l) ": " (nth (setq i (1+ i)) l)))) (alert (strcat "Xdata Existants : " txtt)) t ) ) ) ) ) ;;; Programme Demandant/Donnant la liste Xdata dans entité. (defun c:L-Xdata (/ ENT I LST-D VLA-OB) (setq ent (car (entsel "\n Choisir l'objet dans lequel enregistrer les renseignements :"))) (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (not (Test-Xdata ent)) (progn (setq lst-D (Renseignements-XDATA "Q") i -1) (Set-xData ent (list "ENTITE" (vla-get-handle vla-ob))) (repeat (/ (length lst-D) 2) (Set-xData ent (list (nth (setq i (1+ i)) lst-D) (nth (setq i (1+ i)) lst-D))) ) ) ) ) ) (princ) ) ;;; Enregistres Xdata des entités selectionnés dans fichier .csv (defun c:XdataXL (/ E F I L SEL XDATA XTYPE) (setq sel (ssget) f (getfiled "Nom Fichier à enregistrer :" "" "csv" 1) f (open f "w")) (repeat (setq i (sslength sel)) (setq e (vlax-ename->vla-object (ssname sel (setq i (1- i))))) (vla-getxdata e "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData)) x -1) (repeat (/ (length l) 2) (princ (nth (setq x (+ x 2)) l) f) (princ ";" f) ) ) ) (princ "\n" f) ) (close f) ) ;;; Récupères les données d'un .csv pour les mettre en Xdata. (defun c:XLXdata (/ ADRESSE ENT F H L LOCALISATION NOM) (setq f (getfiled "Choisir Fichier :" "" "csv" 4) f (open f "r") l "l" R (Renseignements-XDATA nil)) (while l (setq l (read-line f)) (if l (progn (if (vl-string-search "\"" l) (setq l (substr l (+ 2 (vl-string-search "\"" l)) (strlen l))) ) (setq h (substr l 1 (vl-string-search ";" l)) ent (handent h)) (if ent (if (entget ent) (progn (Set-xData ent (list "ENTITE" h)) (setq i -1) (repeat (length R) (setq l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) D (substr l 1 (vl-string-search ";" l))) (if (vl-string-search "\"" D) (setq D (substr l 1 (vl-string-search "\"" D)))) (Set-xData ent (list (strcase (nth (setq i (1+ i)) R)) D)) ) (princ (strcat "\n Entité " h " Mis à Jour.")) ) (alert (strcat "Entité " h " Supprimé !")) ) (alert (strcat "Entité " h " Non trouvé !")) ) ) ) ) (close f) (princ) ) ;;; Routine Enregistrement Xdata dans entité : (Set-xData '("Nom" "Toto")) (defun Set-xData (ent lst / VLA-OB XDATA XTYPE) (if (equal (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent))) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 1)) xType (vlax-make-safearray vlax-vbInteger (cons 0 1))) (vlax-safearray-fill xData lst) (vlax-safearray-fill xType '(1001 1000)) (vla-setxdata ent xType xData) ) [Edité le 22/12/2007 par Bred]
  3. Bred

    xdata

    bonuscad... une fois de plus... OUF ! :o Quel boulot ! Superbe !
  4. Bred

    xdata

    Je m'en vais, mais avant, je pense avoir trouver l'erreur, Re-charge tout : (defun Set-xData-lili (ent lst / VLA-OB XDATA XTYPE) (if (equal (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent))) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 1)) xType (vlax-make-safearray vlax-vbInteger (cons 0 1))) (vlax-safearray-fill xData lst) (vlax-safearray-fill xType '(1001 1000)) (vla-setxdata ent xType xData) ) (defun c:cim (/ ADRESSE ENT LOCALISATION NOM TXT L VLA-OB XDATA XTYPE ) (setq ent (car (entsel "\n Choisir l'objet dans lequel enregistrer les renseignements :"))) (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))) (alert (strcat "Xdata Existants : " "\n ENTITE: " (nth 1 l) "\n NOM: " (nth 3 l)"\n ADRESSE: "(nth 5 l)"\n LOCALISATION: "(nth 7 l)))) (progn (setq Nom (getstring T "\n Nom :") adresse (getstring T "\n Adresse :") localisation (getstring T "\n Localisation :")) (Set-xData-lili ent (list "ENTITE" (vla-get-handle vla-ob))) (Set-xData-lili ent (list "NOM" Nom)) (Set-xData-lili ent (list "ADRESSE" adresse)) (Set-xData-lili ent (list "LOCALISATION" localisation)) ) ) ) ) (princ) ) (defun c:cimxl (/ E F I L SEL XDATA XTYPE) (setq sel (ssget) f (open "c:\\testcim.csv" "w")) (repeat (setq i (sslength sel)) (setq e (vlax-ename->vla-object (ssname sel (setq i (1- i))))) (vla-getxdata e "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))) (princ (nth 1 l) f) (princ ";" f) (princ (nth 3 l) f) (princ ";" f) (princ (nth 5 l) f) (princ ";" f) (princ (nth 7 l) f) (princ "\n" f) ) ) ) (close f) ) (defun c:xlcim (/ ADRESSE ENT F H L LOCALISATION NOM) (setq f (open "c:\\testcim.csv" "r") l "l") (while l (setq l (read-line f)) (if l (progn (if (vl-string-search "\"" l) (setq l (substr l (+ 2 (vl-string-search "\"" l)) (strlen l)))) (setq h (substr l 1 (vl-string-search ";" l)) ent (handent h)) (if ent (if (entget ent) (progn (setq l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) Nom (substr l 1 (vl-string-search ";" l)) l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) adresse (substr l 1 (vl-string-search ";" l)) l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) localisation (substr l 1 (vl-string-search ";" l))) (if (vl-string-search "\"" l) (setq localisation (substr l 1 (vl-string-search "\"" l)))) (Set-xData-lili ent (list "ENTITE" h)) (Set-xData-lili ent (list "NOM" Nom)) (Set-xData-lili ent (list "ADRESSE" adresse)) (Set-xData-lili ent (list "LOCALISATION" localisation)) (princ (strcat "\n Entité " h " Mis à Jour.")) ) (alert (strcat "Entité " h " Supprimé !")) ) (alert (strcat "Entité " h " Non trouvé !")) ) ) ) ) (close f) (princ) ) A plus tard.
  5. Bred

    xdata

    Ha ! Enfin quelque chose de concret ! ;) Cela veut dire que le programme attends un nombre et à nil à la place... Fait un Ctrl+F9 au moment de l'erreur, et copie la ligne surligné. Le problème devrais venir de la récupération des données dans le csv. Dans l'editeur visual lisp, tu devrais charger ligne par ligne le prog et voir ce que ça te retourne... (Il faut que je te laissse, là, à plus tard....)
  6. Bred

    xdata

    :casstet: :casstet: :casstet: J'ai re-testé dans le doute, je n'ai pas de problème.... peut-être ne faut-il pas appeller le lsp "xlcim.LSP", appel-le n'importe comment, mais pas du nom d'une routine (je n'ai jamais testé en fait). Mais peut-être que vu l'abondance de test que tu fais, tu devrais passer par l'editeur pour charger les lisp "à la main"... PS : J'ai édité le code précédent afin qu'il fonctionne si l'entité dans le tableau n'a jamais existé. re-copie le.
  7. Bred

    xdata

    Re, Cela voudrais dire que tu n'as pas charger le code "XLCIM" ("Commande inconnue") Essaye de le copier dans la ligne de commande. ... j'vais manger... à tou'Te
  8. Bred

    xdata

    Salut, C'est totalement incompréhensible, vu que le ce code ici fonctionne chez toi.... :casstet: :P essaye en cheangeant le nome du fichier en "c:\\test.csv"... Ou encore : avec le bloc note, crées un "c:\\testcim.csv" (vide), et dans l'editeur visual-lisp charge la ligne (findfile "c:\\testcim.csv"), cela devrait te retourner "c:\\testcim.csv"
  9. Bred

    Données

    ... en fait je viens de me rappeler que j'avais déjà répondu à ce problème ici, en expliquant un principe de base pour créer une extraction de bloc en lisp.
  10. Bred

    Données

    Et bien, je pense que cela dépend du type d'attribut que l'on veux extraire. Personnelement je travaille avec des attributs invisibles et fixe. Pour que le gabarit puisse fonctionner, il faudrait que j'en crées un avec tous mes blocs existants. Ce qui est possible, sauf que si je crées de nouveau blocs, il faut que je re-crées le gabarit... ... Sous 2008 J'ai été obligé de me créer ma propre extraction d'attribut, en recherchant exactement les etiquettes voulus.... ceci fait, j'espère ne plus avoir de problème pour les versions suivantes...
  11. Bred

    Données

    Salut et bienvenue ! (gile) : et non, plus sous 2008... il y a obligation d'utiliser un fichier gabarit... et je n'ai jamais rouvé le moyen de le faire fonctionner correctement (car le gabarit est super verrouillé : si tu n'as pas toutes les possibilités rentrez, l'extraction n'est pas complète...) Donc, pas d'autolisp....
  12. Bred

    xdata

    Salut, donc, la suite, 1ère partie : La liaison Excel->Autocad. Si les données dans le tableau .csv sont modifiés et que la commande "xlcim" est lancé, les xdata sont (normalement) mis à jour. (attention, ne pas changer la première valeur : celle-ci fait référence à l'objet contenant les xdata) J'ai aussi modifiez l'écriture et du rangement des xdata (en prévision de la suite...) donc tout recharger (commande cim / cimxl et xlcim + routine Set-xData-lili) A tester.... merci. ;;; ;;;(setq ar1 (vlax-make-safearray vlax-vbInteger '(0 . 3))) ;;;(vlax-safearray-fill ar1 '(1001 1000 1070 1040)) ;;;(setq ar2 (vlax-make-safearray vlax-vbVariant '(0 . 3))) ;;;(vlax-safearray-fill ar2 '("myApp" "myString" 777 333.333 )) ;;; ;;;(vla-setXdata oBlock ar1 ar2) (defun Set-xData-lili (ent lst / VLA-OB XDATA XTYPE) (if (equal (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent))) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 1)) xType (vlax-make-safearray vlax-vbInteger (cons 0 1))) (vlax-safearray-fill xData lst) (vlax-safearray-fill xType '(1001 1000)) (vla-setxdata ent xType xData) ) (defun c:cim (/ ADRESSE ENT LOCALISATION NOM TXT L VLA-OB XDATA XTYPE ) (setq ent (car (entsel "\n Choisir l'objet dans lequel enregistrer les renseignements :"))) (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))) (alert (strcat "Xdata Existants : " "\n ENTITE: " (nth 1 l) "\n NOM: " (nth 3 l)"\n ADRESSE: "(nth 5 l)"\n LOCALISATION: "(nth 7 l)))) (progn (setq Nom (getstring T "\n Nom :") adresse (getstring T "\n Adresse :") localisation (getstring T "\n Localisation :")) (Set-xData-lili ent (list "ENTITE" (vla-get-handle vla-ob))) (Set-xData-lili ent (list "NOM" Nom)) (Set-xData-lili ent (list "ADRESSE" adresse)) (Set-xData-lili ent (list "LOCALISATION" localisation)) ) ) ) ) (princ) ) (defun c:cimxl (/ E F I L SEL XDATA XTYPE) (setq sel (ssget) f (open "c:\\testcim.csv" "w")) (repeat (setq i (sslength sel)) (setq e (vlax-ename->vla-object (ssname sel (setq i (1- i))))) (vla-getxdata e "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))) (princ (nth 1 l) f) (princ ";" f) (princ (nth 3 l) f) (princ ";" f) (princ (nth 5 l) f) (princ ";" f) (princ (nth 7 l) f) (princ "\n" f) ) ) ) (close f) ) (defun c:xlcim (/ ADRESSE ENT F H L LOCALISATION NOM) (setq f (open "c:\\testcim.csv" "r") l "l") (while l (setq l (read-line f)) (if l (progn (setq l (substr l (+ 2 (vl-string-search "\"" l)) (strlen l)) h (substr l 1 (vl-string-search ";" l)) ent (handent h)) (if ent (if (entget ent) (progn (setq l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) Nom (substr l 1 (vl-string-search ";" l)) l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) adresse (substr l 1 (vl-string-search ";" l)) l (substr l (+ 2 (vl-string-search ";" l)) (strlen l)) localisation (substr l 1 (vl-string-search ";" l)) localisation (substr l 1 (vl-string-search "\"" l))) (Set-xData-lili ent (list "ENTITE" h)) (Set-xData-lili ent (list "NOM" Nom)) (Set-xData-lili ent (list "ADRESSE" adresse)) (Set-xData-lili ent (list "LOCALISATION" localisation)) (princ (strcat "\n Entité " h " Mis à Jour.")) ) (alert (strcat "Entité " h " Supprimé !")) ) (alert (strcat "Entité " h " Non trouvé !")) ) ) ) ) (close f) (princ) ) Edit : Test si l'entité existe. [Edité le 9/12/2007 par Bred]
  13. Ah ben oui... merci.... :calim: Et non, c'est toi, et ça ne m'ettones pas ! ;)
  14. ça m'avais fait penser à entnext, moi... (setq Ent (nentsel "\nTableau: ") ID (vla-get-ObjectID (vlax-ename->vla-object (cdr (assoc -1 (entget (entnext (car ent))))))))
  15. Salut, Je vais pas t'aider, mais, Es-tu sûr que c'est un Mtext ? (c'est ce qu'il est pensé de croire quand on veux le modifier et que l'editeur s'ouvre, mais bon....)
  16. Bred

    aider un gros nullos

    encore ??? :cool: J'ai moyen : 1 - dans la barre d'outils "rendu", tu as un bouton "materiaux" te permettant de créer/nommer et de paramétrer ton materiaux. 2 - tu tapes "attachermateriau" dans la ligne de commande, et tu fais un glisser/déposer des calques que tu veux en type de rendu. 3 - tu mets les objets dans le calque correspondant au type de materiaux que tu viens de choisirs.
  17. ... c'est le code dxf 45.... mais en VL ???
  18. Salut, Sauriez-vous par où atteindre la valeur du facteur d'echelle du masque d'arrière plan SVP ? Pas trouvé là (vlax-dump-object (vlax-ename->vla-object (tblobjname "STYLE" (getvar "TEXTSTYLE"))) t) ni dans le texte lui même.... Merci !
  19. Salut, Esc-ce que ce lisp ne répondrais pas à ce que tu demandes ?
  20. Bred

    xdata

    Salut, Il faut faire un tri des objets selectionnés suivant la demande, ou revoir plus précisement les xdata pour créer des info plus facile à rechercher. C'est possible, mais il faudra lancer une mise à jour manuel dans Aocad (il faudra lui dire). Mais pour ça il faut aussi référencer dans le tableau quel objets contiens les xdata. Tous cela est possible, mais il me faut du temps et là je n'en ai pas, désolé. A suivre ....
  21. Moi, ça me trou 'lisp cette manière... Je n'arrive vraiment pas à l'assimiler, malgré toutes les explications de (gile)...
  22. Bon, je m'amuse tout seul là, mais je voulais enlever ces 2 repeat... voilà : (defun delst (l pos nb / i ls) (repeat (setq i (length l)) (if (or (< (setq i (1- i)) pos) (> i (1- (+ nb pos)))) (setq ls (append (list (nth i l)) ls)) ) ) ls )
  23. Exactement la même chose que précedement, mais un poil plus jolie.... (defun delst (l pos nb / i ls1 ls2) (append (repeat (setq i pos) (setq ls1 (cons (nth (setq i (1- i)) l) ls1))) (repeat (- (setq i (length l)) (+ pos nb)) (setq ls2 (cons (nth (setq i (1- i)) l) ls2))) ) )
  24. Tu es désobligeant (gile)... de me balancer à chaque fois ma médiocrité à la figure !!! :( :( ;) En effet... lovecraft avait vu juste au sujet de member... pfffff... une autre méthode alors ? (defun delst (l pos nb / i ls1 ls2) (repeat (setq i pos) (setq ls1 (cons (nth (setq i (1- i)) l) ls1))) (repeat (- (setq i (length l)) (+ pos nb)) (setq ls2 (cons (nth (setq i (1- i)) l) ls2))) (append ls1 ls2) ) ... mais un double repeat, c'est pas beau.... :P
  25. :casstet: Si je t'en parle .... je lache mon morceau : (defun delst (l pos nb / i ls) (repeat (setq i pos) (setq ls (cons (nth (setq i (1- i)) l) ls)) ) (append ls (member (nth (+ pos nb) l) l)) )
×
×
  • 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é