-
Compteur de contenus
6 374 -
Inscription
-
Dernière visite
-
Jours gagnés
30
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Patrick_35
-
Modifier les propriété du calque de plusieurs blocs en meme temp.
Patrick_35 a répondu à un(e) sujet de Circus dans AutoCAD 2006
Non, mais tu peux toujours utiliser ce lisp ; Programme qui permet d'éteindre le calque courant dans toutes les fenêtres flottantes ; de toutes les présentations, sauf éventuellement dans la fenêtre active. ; Gestion des erreurs et restauration de l'environnement ; Cette procédure est stéreotypée dans mes programmes LISP (defun *error* (msg) (command) ; Annulation des commandes en cours (restaureEnv) ; Appel à la procédure de restauration (princ "\nerreur: ") (princ msg) (princ) ) ; Restauration de l'environnement ; Cette procédure est stéreotypée dans mes programmes LISP (defun RestaureEnv () (if (/= *old1* nil) (setvar "cmdecho" *old1*)) ; restaure la variable CMDECHO (if (/= *old2* nil) (setvar "LAYOUTREGENCTL" *old2*)) ; restaure la variable LAYOUTREGENCTL ) ; Boucle qui permet d'éteindre le calque courant dans la fenêtre en cours. ; Ceci se fait par le biais des données étendues (xDtata) de la fenêtre en cours, ; dans lesquelles il faut incorporer la liste pointée ; (1003 . Nom_du_Calque) entre les codes (1002 . {) et (1002 . }) (Defun Boucle3 ( / xData xType NewData NewType k) (vla-getxdata CurrentPViewport0 "" 'xType 'xData) ; Récupération des données xData de la fenêtre (setq k (vlax-safearray-get-u-bound xType 1)) ; Nb d'éléments dans xData (setq NewType (vlax-make-safearray vlax-vbInteger (cons 0 (+ k 1)))) ; Création d'un nouveau tableau Type (setq NewData (vlax-make-safearray vlax-vbVariant (cons 0 (+ k 1)))) ; Création d'un nouveau tableau Data (setq n 0) (repeat (+ k 1) ; boucle pour recopier les éléments des tableaux (vlax-safearray-put-element Newtype n (vlax-safearray-get-element xType n)) ; Recopie xType dans NewType (vlax-safearray-put-element NewData n (vlax-safearray-get-element xData n)) ; Recopie xData dans NewData (setq n (1+ n)) ; Incrémente ) (vlax-safearray-put-element Newtype (+ k 1) 1002) ; insere le dernier atome de la liste (vlax-safearray-put-element NewData (+ k 1) "}") ; insere le dernier atome de la liste (vlax-safearray-put-element Newtype (- k 1) 1003) ; insere l'atome en avant dernière position (vlax-safearray-put-element NewData (- k 1) ActiveLayer0) ; insere l'atome en avant dernière position (vla-setxdata CurrentPViewport0 NewType NewData) ; Enregistre la nouvelle liste dans la fenêtre (if (equal CurrentLayout0 ActiveLayout0) ; Si l'utilisateur se trouve dans une présentation (progn ; alors il faut régénérer les fenêtres de la présentation (vla-display CurrentPViewport0 0) ; Régénère la fenêtre (vla-display CurrentPViewport0 1) ; Régénère la fenêtre )) ) ; Enumération des fenêtres flottantes ; Les sous-objets d'une présentation représentent tous les éléments dessinés dans la présentation (blocs, fenêtres...), ; mais le premier sous-objet représente toujours la vue active de la présentation elle-même. ; Il faut donc sauter le premier test. (Defun Boucle2 (CurrentPViewport0) (if (and var1 (vlax-method-applicable-p CurrentPViewport0 'Display) ; Vérification que l'objet est une fenêtre (PViewPort) (not (Equal CurrentPViewport0 ActivePViewport0))) (boucle3)) ; et que la fenêtre en cours n'est pas active (setq Var1 T) ; Variable qui sert à sauter le 1er test ) ; Enumération des présentations (Defun Boucle1 (CurrentLayout0) (if (Not (Equal CurrentLayout0 ModelSpace0)) ; Si la présentation en cours n'est pas l'espace objet (progn (setq Var1 nil) ; Variable utile pour la boucle2 (if (= (vla-get-count (Vla-Get-Block CurrentLayout0)) 0) (progn (vla-put-activelayout Activedoc CurrentLayout0) (vla-put-activelayout Activedoc ActiveLayout0) )) (vlax-map-collection (Vla-Get-Block CurrentLayout0) 'Boucle2) ; boucle sur les sous-objets de la présentation )) ) ; Programme principal (Defun C:GelerCalqueP () (vl-load-com) ; Chargement des fonctions ActiveX (setq *old1* (getvar "cmdecho")) ; Sauvegarde de la variable (setq *old2* (getvar "LAYOUTREGENCTL")) ; Sauvegarde de la variable (setvar "cmdecho" 0) ; Messages désactivés (setvar "LAYOUTREGENCTL" 0) ; Régénération systématique des présentations (Setq ActiveLayer0 (getvar "CLayer")) ; Nom du calque courant (Setq ActiveDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ; Document actif (setq ActiveLayout0 (vla-get-activelayout ActiveDoc)) ; Présentation courante (y compris espace objet) (if (= (getvar "tilemode") 0) ; si on est dans l'espace papier (setq ActivePViewport0 (Vla-Get-ActivePViewport ActiveDoc)) ; alors il faut sauvegarder la fenêtre active (setq ActivePViewport0 nil) ; sinon pas de fenêtre active ) (setq ModelSpace0 (vla-get-Layout (vla-get-ModelSpace Activedoc))) ; Identificateur de l'espace objet (setq Layouts0 (vla-get-Layouts ActiveDoc)) ; liste de toutes les présentations (+ espace objet) (vlax-map-collection Layouts0 'Boucle1) ; sous-programme de traitement de chaque présentation (setq Var1 nil) ; Variable qui sert à choisir le message final (if (and ActivePViewport0 ; s'il existe une fenêtre active (not (equal (Vla-Get-ActivePViewport ActiveDoc) ActivePViewport0))) ; et que cette fenêtre n'est plus la même qu'au départ (progn (Vla-put-ActivePViewport ActiveDoc ActivePViewport0) ; alors restaurer la fenêtre de départ (setq Var1 T) ; choisir le message final correspondant ) ) (RestaureEnv) ; Appel à la procédure de restauration (if var1 ; choix du message (princ (strcat "Le calque " ActiveLayer0 " a été gelé dans les autres fenêtres flottantes")) (princ (strcat "Le calque " ActiveLayer0 " a été gelé dans toutes les fenêtres flottantes")) ) (princ) ) (princ "\nFonction C:GelerCalqueP chargée - tapez GelerCalqueP pour l'éxecuter.") (princ) ; pour utiliser ce programme, créer un bouton dans une barre d'outils. ; Puis taper la macro : ^C^CGelerCalqueP ; A chaque session Autocad, il faut recharger le programme, ; ou-bien le rajouter à la liste des programmes chargés au démarrage (menu Outils->Charger une application...) ; Pour moi : ; (Princ (= (cdadr (entget (vlax-vla-object->ename CurrentPViewport0))) "VIEWPORT") ; ceci est une autre méthode d'identification -
Combien gagne un ingénieur de développement chez Autodesk?
Patrick_35 a répondu à un sujet dans Emploi, monde du travail
A la décimal près. Juste une journée de travail/an ;) @+ -
Ou plus simplement, changer la valeur de la variable OSMODE qui dans l'exemple d'eric est à 7 @+
-
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
Ah oui, c'est exact. C'est corrigé @+ -
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
Salut Bonus Non, c'est volontaire de rechercher sur lst_str plutôt que sur folder_list car ça permet en cas de caractère générique ou de doublon de faire afficher les résultats au fur et à mesure et ça évite de patienter comme un idiot en attendant que ça se passe @+ -
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
Il n’y a pas à dire, Bonus est un bon, même un très bon. :cool: Je n'ai même pas eu le temps de rechercher la solution ;) Je me suis permis, si tu le permets de modifier un peu ton lisp pour compléter la recherche @+ (defun extract_folder (lst_fold / l_dir l) (setq l_dir '()) (foreach n lst_fold (setq l (vl-directory-files n nil -1)) (if (eq (car l) ".") (setq l (cddr l)) ) (cond (l (setq l_dir (append (mapcar '(lambda (x) (strcat n x "/") ) l ) l_dir ) ) ) ) ) l_dir ) (defun message(rep fichier) (if (vl-directory-files rep fichier 1) (princ (strcase (strcat "\nFichier " fichier(s) " trouvé(s) dans le répertoire " (vl-string-translate "/" "\\" rep)))) ) ) (defun list_directory (disk_unit fichier / disk_unit folder_name folder_list lst_str) (setq ; disk_unit "C:" folder_name (strcat disk_unit "/") folder_list (list folder_name) lst_str folder_list ) (message folder_name fichier) (while (setq lst_str (extract_folder lst_str)) (setq folder_list (append folder_list lst_str ) ) (foreach rep lst_str (message rep fichier) ) ) ; (textscr) ; (mapcar 'print folder_list) (prin1) ) (if (setq lec (getstring "Lecteur : ")) (if (setq fic (getstring T "Fichier recherché : ")) (list_directory lec fic) ) ) ; exemple (list_directory "c:" "acadinfo.lsp") [Edité le 24/1/2006 par Patrick_35] -
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
Salut Bonus C'est une solution J'etais en train de penser à autre chose C'est de regarder si la taille du fichier concerné n'augmente pas et pour éviter que ça aille trop vite, mettre une boucle d'attente du type (setq taille -1) (while (/= (vl-file-size "dir.tmp") taille) (setq taille (vl-file-size "dir.tmp") n 0) (while (< n 1000) (setq n (1+ n)) ) ) Mais apparemment, ça ne marche pas :( Avec vl-directory-files, c'est possible et ça éviterait la commande dos, il reste à trouver le bon algorithme pour recréer l'arborescence @+ -
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
Ah oui, c'est exact, je n'ai pas pensé aux doublons Quant à mes deux boucles La première est pour attendre que ma commande dos se termine afin d'examiner plus tard le fichier créé La deuxième est pour lire le fichier et de plus, j'indique le nom du répertoire et le nom du fichier séparément Le tmp est pour indiquer que c'est du temporaire et je l'efface à la fin @+ -
1) C'est exactement ce qui est fait. 2) La commande insert le permet où tu le souhaites Sinon, en vl tu fais comme ceci (if (= (getvar "tilemode") "1") (setq pap (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))) (setq pap (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))) ) (vla-InsertBlock pap (vlax-3d-point '(0.0 0.0 0.0)) (findfile (strcat nom_dwg ".dwg")) 1 1 1 0)) 3) les parenthèses vont toujours par paires. Quand on affiche son code sur Cadxp, les espaces sont supprimés :mad: un exemple avec les - représentant les espaces afin que ton code soit plus visible (defun c:as(/ sel) --(vl-load-com) --(vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) --(if (setq sel (ssget "_+.:E:s" '((0 . "HATCH")))) ----(vla-put-associativehatch (vlax-ename->vla-object (ssname sel 0)) :vlax-false) --) --(vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) --(princ) ) Tu peux aussi te servir de l'editeur _vlide (visual lisp) qui te mets ton code en couleur et tu peux apparier les parenthèses @+
-
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
??? Avec ton prog, tu as le même souci que sur le mien. Quand tu lance la commande shell, tu lances tout de suite le notepad qui ne trouve pas le fichier dir.txt L'avantage de passer par un fichier et de prendre tous les lsp, c'est de pouvoir faire une recherche multiple (avec une légère modif du lisp) @+ -
Où ça ? j'ai testé et tout fonctionne parfaitement Le lisp modifié. Il reste à ajouter la gestion des erreurs Pour ce qui est du nom des dwg, c'est dans les listes lst_3 et lst_4 @+ (defun c:gab(/ archi dcl_id lst_1 lst_2 lst_3 lst_4 meca nom_dwg resultat rlst_1 rlst_2 structure txt) (defun affichage() (set_tile "imperial" rlst_1) (set_tile "archi" archi) (set_tile "structure" structure) (set_tile "meca" meca) (set_tile "iso" rlst_2) ) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) ; remplace (command "_.undo" "_group") (if (setq dcl_id (load_dialog (findfile "gab.dcl"))) (progn (setq lst_1 '("AUCUN" "Format A- (8.5po. x 11po. ou 9 x 12)" "Format B- (11po. X 17po. ou 12 x 18) DESSIN D'ATELIER STRUCT. ACIER" "Format C- 457 x 610 (18po. X 24po.)" "Format D- 610 x 914 (24po. X 36po.)" "Format E- 914 x 1219 (36po. X 48po.)" "Format F- 216 x 356 (8.5po. X 14po.) DESSIN D'ATELIER STRUCT. ACIER" "Format G- 216 x 279 (8.5po. X 11po.) ADDENDA" "Format H- 216 x 279 (8.5po. X 11po.) CHANTIER- AVIS CHANGEMENT-MODIFICATION") lst_2 '("AUCUN" "A0 - 1189 x 841" "A1 - 841 x 594" "A2 - 594 x 420" "A3 - 420 x 297" "A4 - 297 x 210") lst_3 '("" "IA" "IB" "IC" "ID" "IE" "IF" "IG" "IH") ; nom des dwg en Standard impérial lst_4 '("" "A0" "A1" "A2" "A3" "A4") ; nom des dwg en ISO archi "0" structure "0" meca "0" rlst_1 "0" rlst_2 "0") (new_dialog "gab" dcl_id) (start_list "imperial") (mapcar 'add_list lst_1) (end_list) (start_list "iso") (mapcar 'add_list lst_2) (end_list) (affichage) (mode_tile "cancel" 2) (while (and (/= resultat 1) (/= resultat 0)) (action_tile "imperial" "(setq archi \"0\" structure \"0\" meca \"0\" rlst_1 $value rlst_2 \"0\")(affichage)") (action_tile "archi" "(setq archi \"1\" structure \"0\" meca \"0\" rlst_1 \"0\")(affichage)") (action_tile "structure" "(setq archi \"0\" structure \"1\" meca \"0\" rlst_1 \"0\")(affichage)") (action_tile "meca" "(setq archi \"0\" structure \"0\" meca \"1\" rlst_1 \"0\")(affichage)") (action_tile "iso" "(setq rlst_1 \"0\" rlst_2 $value)(affichage)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq resultat (start_dialog)) (unload_dialog dcl_id) ) (if (= resultat 1) (progn (cond ((/= rlst_1 "0") (setq txt (strcat "-- STANDARDS IMPÉRIAL--\n" (nth (atoi rlst_1) lst_1))) (setq nom_dwg (nth (atoi rlst_1) lst_3)) ) ((and (= archi "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nARCHITECTURE\n" (nth (atoi rlst_2) lst_2))) (setq nom_dwg (strcat "A" (nth (atoi rlst_2) lst_4))) ) ((and (= structure "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nSTRUCTURE\n" (nth (atoi rlst_2) lst_2))) (setq nom_dwg (strcat "S" (nth (atoi rlst_2) lst_4))) ) ((and (= meca "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nMÉCANIQUE-ÉLECTRICITÉ\n" (nth (atoi rlst_2) lst_2))) (setq nom_dwg (strcat "M" (nth (atoi rlst_2) lst_4))) ) ) (if nom_dwg (alert (strcat txt "\n \nNom du DWG : " nom_dwg ".DWG")) ; (command "_.insert" nom_dwg etc....) et on peut retirer les alerts ou mieux (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0.0 0.0 0.0)) (findfile (strcat nom_dwg ".dwg")) 1 1 1 0)) ; pour eviter un command ;) (alert "Rien de sélectionné") ) ) ) ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) ; remplace (command "_.undo" "_end") (princ) )
-
Salut J'ai repris ton lisp d'une manière un peu différente. Il ne te reste plus qu'à le compléter selon tes besoins Fichier GAB.DCL gab : dialog { label = "Gabarits - Feuille de dessin - (Dimensions en MM)"; width = 80; : boxed_column { label = "Sélectionnez un gabarit -- STANDARDS IMPÉRIAL--"; : popup_list {key = "imperial";} spacer; } : boxed_column { label = "Sélectionnez un gabarit -- STANDARDS ISO--"; : row { : radio_button {label = "ARCHITECTURE"; key = "archi";} : radio_button {label = "STRUCTURE"; key = "structure";} : radio_button {label = "MÉCANIQUE-ÉLECTRICITÉ"; key = "meca";} } : popup_list {key = "iso";} spacer; } is_cancel = true; ok_cancel; } Fichier GAB.LSP (defun c:gab(/ archi dcl_id lst_1 lst_2 meca resultat rlst_1 rlst_2 structure txt) (defun affichage() (set_tile "imperial" rlst_1) (set_tile "archi" archi) (set_tile "structure" structure) (set_tile "meca" meca) (set_tile "iso" rlst_2) ) (if (setq dcl_id (load_dialog (findfile "gab.dcl"))) (progn (setq lst_1 '("AUCUN" "Format A- (8.5po. x 11po. ou 9 x 12)" "Format B- (11po. X 17po. ou 12 x 18) DESSIN D'ATELIER STRUCT. ACIER" "Format C- 457 x 610 (18po. X 24po.)" "Format D- 610 x 914 (24po. X 36po.)" "Format E- 914 x 1219 (36po. X 48po.)" "Format F- 216 x 356 (8.5po. X 14po.) DESSIN D'ATELIER STRUCT. ACIER" "Format G- 216 x 279 (8.5po. X 11po.) ADDENDA" "Format H- 216 x 279 (8.5po. X 11po.) CHANTIER- AVIS CHANGEMENT-MODIFICATION") lst_2 '("AUCUN" "A0 - 1189 x 841" "A1 - 841 x 594" "A2 - 594 x 420" "A3 - 420 x 297" "A4 - 297 x 210") archi "0" structure "0" meca "0" rlst_1 "0" rlst_2 "0") (new_dialog "gab" dcl_id) (start_list "imperial") (mapcar 'add_list lst_1) (end_list) (start_list "iso") (mapcar 'add_list lst_2) (end_list) (affichage) (mode_tile "cancel" 2) (while (and (/= resultat 1) (/= resultat 0)) (action_tile "imperial" "(setq archi \"0\" structure \"0\" meca \"0\" rlst_1 $value rlst_2 \"0\")(affichage)") (action_tile "archi" "(setq archi \"1\" structure \"0\" meca \"0\" rlst_1 \"0\")(affichage)") (action_tile "structure" "(setq archi \"0\" structure \"1\" meca \"0\" rlst_1 \"0\")(affichage)") (action_tile "meca" "(setq archi \"0\" structure \"0\" meca \"1\" rlst_1 \"0\")(affichage)") (action_tile "iso" "(setq rlst_1 \"0\" rlst_2 $value)(affichage)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq resultat (start_dialog)) (unload_dialog dcl_id) ) (if (= resultat 1) (progn (cond ((/= rlst_1 "0") (setq txt (strcat "-- STANDARDS IMPÉRIAL--\n" (nth (atoi rlst_1) lst_1))) ) ((and (= archi "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nARCHITECTURE\n" (nth (atoi rlst_2) lst_2))) ) ((and (= structure "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nSTRUCTURE\n" (nth (atoi rlst_2) lst_2))) ) ((and (= meca "1") (/= rlst_2 "0")) (setq txt (strcat "-- STANDARDS ISO--\nMÉCANIQUE-ÉLECTRICITÉ\n" (nth (atoi rlst_2) lst_2))) ) ) (if txt (alert txt) (alert "Rien de sélectionné") ) ) ) ) ) (princ) )
-
comment trouver un fichier depuis un lisp
Patrick_35 a répondu à un(e) sujet de thierryd dans Débuter en LISP
J'ai bien cette routine qui pourrait convenir, mais le souci, c'est que le programme continue alors que l'écriture du fichier continue et du coup, ça plante. A moins de mettre une boucle d'attente, si quelqu'un à une solution, je suis preneur @+ (defun c:rech(/ resultat) (defun recherche_lisp(lecteur fichier / f n rep result) (command "shell" (strcat "dir " lecteur "\\*.lsp /on /s /b > dir.tmp")) (setq n 0) (while (< n 1000000) (setq n (1+ n)) ) (setq f (open "dir.tmp" "r")) (while (setq rep (read-line f)) (if (eq (strcase (vl-filename-base rep)) (strcase fichier)) (setq result (list (vl-filename-directory rep) (vl-filename-base rep))) ) ) (close f) (vl-file-delete "dir.tmp") result ) (if (setq resultat (recherche_lisp "c:" "mon_lisp")) (alert (strcat "Le fichier " (strcase (cadr resultat)) " est dans le répertoire\n \n" (strcase (car resultat)))) ) (princ) ) -
Oui, mais si tu regardes bien, le vlisp et le vba se ressemble beaucoup Par exemple pour ouvrir un dessin en vlisp (vla-open (vla-get-documents (vlax-get-acad-object)) "C:\\AutoCAD\\Sample\\downtown.dwg") en vba ThisDrawing.Application.Documents.Open ("C:\AutoCAD\Sample\downtown.dwg") ThisDrawing.Application = vlax-get-acad-object Documents = vla-get-documents Open = vla-open @+
-
Pas tout à fait, j'associe plutôt un objet à un réacteur. c'est la modification de l'objet qui appel mon réacteur Si tu regardes dans l'aide d'autocad, tu trouveras un tutorial en vlisp concernant des dalles de jardin et qui explique toute la démarche ou encore dans le répertoire d'autocad .\Tutorial\VisualLisp\lesson1 à 7 @+
-
Salut, un réacteur est un évènement qui permet d’agir, soit au niveau d'une commande, soit au niveau d'un objet Par exemple, je peux intercepter la commande de sauvegarde pour que se soit obligatoirement en V14 Un autre exemple qui j'ai publié sur ce site, est d'associer un texte avec une polyligne fermée pour indiquer une surface. Dès que je bouge ma poly avec les grips par exemple, mon texte se met à jour @+
-
Salut, Tu transformes par exemple ton jeu de sélection en une seule polyligne, ce qui crée une nouvelle entité qui n'appartient donc plus à ton jeu de sélection. Dans ce cas, utilise un (entlast) pour le chprop. Si tu transformes en plusieurs polylignes, dans ce cas, tu pointes d’abords avec un entlast, tu fais ta commande pedit et ensuite, pour retrouver ce qui à été créé, en entnext de l'entlast , puis entnext de l’entnext, etc… te donne les nouvelles entités créée. @+
-
Salut Tramber Je pense que c'est ce que tu cherchais @+ (defun c:cpvl(/ doc ent lay js n pt1 pt2 sel) (if (setq sel (ssget)) (if (setq pt1 (getpoint "\nPoint de base : ")) (if (setq pt2 (getpoint pt1 "\nDestination : ")) (progn (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (setq n 0) (while (ssname sel n) (setq js (cons (ssname sel n) js) n (1+ n)) ) (setq js (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 (1- (length js)))) (mapcar 'vlax-ename->vla-object (reverse js)))) (setq lay (vla-get-paperspace doc)) ; Copier dans l'espace papier (setq lay (vla-get-modelspace doc)) ; Copier dans l'espace objet (setq sel (vla-copyobjects doc js lay)) (foreach ent (vlax-safearray->list (vlax-variant-value sel)) (vla-move ent (vlax-3d-point pt1) (vlax-3d-point pt2)) ) (princ (strcat "\n" (itoa n) " objet(s) copié(s)")) (vla-endundomark doc) ) ) ) ) (princ) ) [Edité le 6/1/2006 par Patrick_35]
-
FILTRES et DCL ........
Patrick_35 a répondu à un(e) sujet de cadpolo dans Pour aller plus loin en LISP
Salut La variable retournée lors d'une sélection multiple peut-être par exemple "0 1 3 5 6 7 8" ces valeurs doivent correspondre normalement aux valeurs d'entrée de ta liste Pour les exploiter, un read permet de lire la première valeur (setq val "0 1 3 5 6 7 8") (setq n (read val)) n prend la valeur 0 qui correspond logiquement à un (nth 0 ta_liste) Pour continuer à lire, je réduis ma variable val avec un (setq val (substr val (+ (strlen (itoa n)) 2) (strlen val))) je continue encore avec un read Et pour que je puisse tout lire, j'inclus-le tout dans une boucle (setq val "0 1 3 5 6 7 8") (while (/= val "") (setq n (read val)) (princ (strcat "\nEntrée : " (itoa n))) (setq val (substr val (+ (strlen (itoa n)) 2) (strlen val))) ) @+ -
Pour serge77 Quand j'ai regardé ta macro, j'ai vu que tu te servais de la commande insérer, d'où ma réponse @+
-
Bonjour Il est souhaitable de redéfinir la variable attreq à 0 afin de pouvoir insérer le cartouche sans avoir à répondre aux attributs et ensuite de faire un attedit _last @+
-
Chargement de lisp au démarrage
Patrick_35 a répondu à un(e) sujet de Ramses dans Pour aller plus loin en LISP
Salut et pour compléter la réponse de Bonus pour la deuxième question, c'est dans le fichier acad2000doc.lsp (je ne sais pas pour les versions supérieures) Et on trouve ceci ;; Silent load for the Express Tools. ;; Altering this line will affect Express Tools functionality (load "acettest.fas" (princ)) @+ -
Filtre avec test relationnels
Patrick_35 a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Je viens de m'en rendre compte. C'est (gile) qui a raison Une cotation ordonnée à un code dxf 70 à 38 et un (logand 38 2) donne 2, ce qui fait que c'est du coup intégré à la sélection Bon, dur dur le début de l'année, il reste encore quelques bulles ;) @+ -
Filtre avec test relationnels
Patrick_35 a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Bonne année à vous tous Et de cette manière ? (ssget "_X" '((0 . "DIMENSION")(-4 . "< OR")(-4 . "&=")(70 . 2)(70 . 5)(-4 . "OR >" ))) @+ -
Me conseiller pour débuter en LISP
Patrick_35 a répondu à un(e) sujet de Ladinde dans Débuter en LISP
Salut regarde déjà ces trois liens AIDACAD FAQ AutoLISP AfraLisp @+
