-
Compteur de contenus
2 764 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Bred
-
Salut, ? Il faut sélectionner le bloc "entier"..... ou le décomposer avant... (si tu peux sélectionner des entités indépendentes dans un bloc... ben ce n'est plus un bloc !!!!...)
-
Bonne Année à toutes et tous.... http://idata.over-blog.com/0/06/76/91/autres-gifs-f-te/annee19.gif
-
Ben j'ai bêtement regardé en pensant que la solution seriat avec les angles... jusqu'à ce que je dessine un polygone convexe avec un des angles "aigus"... ce qui plante toutes mes bases...
-
Salut, Je n'ai pas de LT sous la main (et encore moins de 2008), mais je pense que tu veux parler de 3D figurative, à moins que la 3D soit accessible sous LT maintenant... C'est assez difficile à expliquer comme ça, mais l'important est de comprendre l'utilisation du (des) point de fuite.... Voici un lien qui peut aider : http://pagesperso-orange.fr/nvogel/Dossiers/FichiersPersp/perspective/PerspCentrale.htm
-
Salut, Modifie R-Xdata : ;;; Requètes (defun c:R-Xdata (/ I L LST N S S-T VLA-OB XDATA XTYPE lst-T E Y) (princ "\n Recherches des Renseignements :") (setq lst (Renseignements-XDATA "Q") i 0) (repeat (/ (length lst) 2) (if (not (equal (nth (1+ i) lst) "")) (setq lst-T (append lst-T (list (nth i lst) (nth (1+ i) lst))))) (setq i (+ i 2)) ) (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)) y 0 e 0) (repeat (/ (length lst-T) 2) (if (equal (cadr (member (strcase (nth y lst-T)) l)) (cadr (member (strcase (nth y lst-T)) lst-T))) (setq e (1+ e))) (setq y (+ 2 y)) (if (equal e (/ (length lst-T) 2)) (ssadd (vlax-vla-object->ename vla-ob) 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) ) Je regarderais ça quand j'aurais un peu plus de temps....
-
Salut, C'est que ton Excel doit transformer 159E9 (handles) en 1.59e+09 (Exposant).... Il faudrait tester en rajoutant un " ' " (apostrophe) avant les entrées dans le .csv ... Non testé : ;;; 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 (length (setq lst (reverse (append (list "ENTITE") (Renseignements-XDATA nil)))))) (princ (strcat "'" (nth (setq i (1- i)) lst)) f) (princ ";" f) ) (princ "\n" f) (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 (strcat "'" (nth (setq x (+ x 2)) l)) f) (princ ";" f) ) ) ) (princ "\n" f) ) (close f) )
-
Salut, et bonnes fêtes !!! Lisp modifiés : : ;;; 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) ) ;;; Renseignements (à modifier) pour enregistrement Xdata (defun Renseignements-XDATA (Q / I LST-F LSTR R) ; liste à modifers pour reneignements : (setq lstR '("ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT" "ETAGE")) (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 ) ) ;;; 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 (length (setq lst (reverse (append (list "ENTITE") (Renseignements-XDATA nil)))))) (princ (nth (setq i (1- i)) lst) f) (princ ";" f) ) (princ "\n" f) (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 (not (vl-string-search "ENTITE" 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) ) C'est possible.... laisse moi le temps (je ne suis pas trop devant mon ordi en ce moment, mais plutôt devant des bouteilles acompagnant raclettes et autres fondus....)
-
Re, juste pour compléter l'explication de (gile), et parceque je l'ai découvert il y a quelque jours par hasard, mais pause = "\\"
-
Salut, et bienvenue ! Le problème de ton code est dü au lancement de la commande "_line". Tu lances une commande, sans lui dire quoi faire... Il aurait fallu au moins deux "pause". Mais si tu veux "continuer la ligne", c'est plus fin : (defun C:tlep (/ celw) (setq celw (getvar "celweight")) (setvar "celweight" 35) (command "_line" (while (> (getvar "cmdactive") 0) (command pause) ) ) (setvar "celweight" celw) )
-
:casstet: mmmm ? -tu as bien copié le code ? -tu fais quoi exactement ?
-
Pffffffffff.... Et non... j'étais dessus aussi... et à part écrire un truc débile avec une multitude de conditions, je n'arrivais à rien. Et maintenant que (gile) à publier son code, et que le truc malin étais d'utiliser vl-string->list permettant de faire un code en peu de ligne, j'avoue que je laisse tomber... Fabuleux, (gile) !
-
Salut, Je enfin écris le code permettant de rechercher les éléments voulus. Il se refert aux codes précédents (la liste de renseignement). Par contre je ne savais pas quoi faire des objets trouvés, donc je les selectionnes. A l'utilisateur de savoir ce qu'il veut en faire.... ;;; 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) ) (PS: j'ai édité le lisp précédent poury inclure celui-ci)
-
Re, Le lisp en en réponse 15 de cette page est "ouvert". C'est à dire que tu te drées toi même le nombre et nom de données à rentrer, en renseignant la liste du prmier code. Tu peux changer cette liste. Ex : (setq lstR '("Couleurs" Textures" "Dimensions")) Je pesne que c'est la solution la plus pratique. Tu pourras réaliser une extration d'attribut, répéter les pièces égales faciment (une salle de classe ressemble beaucoup à une autre), modifier les blocs en esembles, etc....
-
Salut, je suis trés occupé en ce moment sur des choses perso, et je n'ai pas de temps... Rapidement : Tu dois avoir dans la liste des xdata le repère "taille" (tu modifie la liste du lisp) Pour ça, je n'utiliserais pas les xdata, mais de simples blocs, renseigner avec des attributs !.... (une prise = bloc avec attributs donnant les renseignements de la prise)
-
Salut, Pour les texte : Tu selectionnes tous tes textes, tu ouvres (si ce n'est déjà fait) la fenêtre de propriétés -> dans la partie "Texte" tu as "Masque d'arrière plan". Pour les cotes : tu selectionnes tes cotes, propriétés, Texte, couleur de remplissage....
-
Sélectionner ou saisir un texte
Bred a répondu à un(e) sujet de Matt666 dans Pour aller plus loin en LISP
Zut ! Je pensais y arriver comme ça, mais ça plante si il y a des espaces dans le nom du calque (ce sui revient à ton problème...) (setq calq "") (vlax-for i (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (setq calq (strcat (vla-get-Name i) " " calq))) (initget calq) (setq ent (entsel "\nCliquer sur une entité ou entrer le nom du calque : ")) -
Salut, Commande _chspace ou Modification/Modifier l'Espace.
-
Sélectionner ou saisir un texte
Bred a répondu à un(e) sujet de Matt666 dans Pour aller plus loin en LISP
Salut, une manière détourné : (setq Q (getstring t "\n Entrer le nom du calque < Cliquer sur une entité > : ")) (if (Equal Q "") (while (not ent) (setq ent (car (entsel "\n Cliquer sur une entité :"))) ) ) [Edité le 18/12/2007 par Bred] -
Salut, Tu peux déjà faire ce que je soumet dans ma réponse 16.
-
Super ! :D pour le principe, petites astuces : - Au lieu de mettre ent1 à nil au début, tu "déclarares tes variables locales" afin que le lisp les mettes à nil pour ce code. comme cela : (defun c:calq ([b]/ ent1[/b]) (surtout ne pas oublier le " / ") - au lieu d'écrire (while (= ent1 nil)... tu pourrais écrire : (while (not ent1).... - et enfin, pour a lisibité dans la ligne de commande en cas de selection vide, tu fais un "saut à la ligne" à l'appel de l'invite de entsel avec un "\n" (setq ent1 (entsel "\nentité?")) Je pense que maintenant, tu peux mettre le résultat dans une petite boite de dialogue où serait écrit Regarde la fonction "alert" et "strcat"....
-
Ha zut ! Tu dois bien avoir un fichier tampon quelque-part ? (dans temp par exemple)
-
pfff... comme si c'était Ecrit.... ... suffit de (te) lire, et pas dans ta dernière ligne, au contraire ! ....T'es pas rigolo, tu lui en donnes trop !!! ;) [Edité le 14/12/2007 par Bred]
-
Salut, J'ai édité la routine précédente afin qu'elle tri (filtre) aussi les cercles. Et j'ai expliqué en intro aussi le but réel de cette routine.
-
Ha ? a... ;)
-
Salut, Et non... car alors tu trouves la calques sur lequel se trouve l'attribut, qui peut-être différent du bloc qui le contient (mais c'est vrais que tu réponds tout de même au sujet). pour rester clair, essaye d'appeler tes variables du nom de ce quel doivent contenir. Ex : (setq ent (entsel "entité")) (setq dxf-ent (entget (car ent))) Attention ! Si tu ne selectionne rien, le fait de faire ceci te retourne une erreur ! (pour les autres codes précédents aussi d'ailleur) Il faut tester la selection... ou empécher une selection nulle... C'est la suite de l'exo j'imagine...
