-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Salut, Comme dit Esbe la variable à modifier est INPUTHISTORYMODE. Pour ne plus avoir les coordonnées des derniers points sur la ligne de commande il faut désactiver le bit 1. Regarde dans l'aide pour voir si tu veux aussi désactiver d'autres fonctionnalités (par défaut elles sont toutes activées (15 = 8 + 4 + 2 + 1).
-
Non, non, le chemin donné par Tramber existe toujours en 2007 !
-
Pour Fraid Au temps pour moi ! (deuxième fois) J'avais effectivement mal compris la question. Si pour les xref je vois bien ce que tu veux : purger la collection des xref qui n'ont plus de références dans le dessin (comme pour des blocs), pour les images raster, je ne vois pas. À ma connaissance (toute limitée), les images raster ne sont contenues dans aucune autre collection que les collections d'entités des espaces objet ou papier dans lesquelles elles sont insérées. Si une image raster est supprimée du dessin le lien avec le fichier source est aussi supprimé. Ceci explique peut-être ma confision. Si je me trompe, je te remercie d'éclairer ma lanterne. Pour Purge_xref je mets ici une autre routine (la précédente semble intéresser sergeluc et peut-être d'autres). J'ai changer le nom pour éviter les confusions : xref_purge ;;; XREF_PURGE Purge les xrefs non référencées (defun c:xref_purge (/ AcDoc BlCol n xref lst lay l_lst) ;; Chargement des fonctions ActiveX (vl-load-com) ;; AcDoc : pointeur vers le document actif (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Dévérouillage de tous les calques (repeat (setq n (vla-get-count (vla-get-Layers AcDoc))) (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n)))) (if (= :vlax-true (vla-get-lock lay) ) (progn (vla-put-lock lay :vlax-false) (setq l_lst (cons lay l_lst)) ) ) ) ;; Pour chaque nom de xref de la collection, on teste si une référence ;; est présente dans le dessin, si non la xref est détachée du dessin (vlax-for x (vla-get-Blocks AcDoc) (if (= :vlax-true (vla-get-isXref x) ) (if (not (ssget "_X" (list (cons 0 "INSERT") (cons 2 (vla-get-name x))) ) ) (progn (princ (strcat "\La xref \"" (vla-get-name x) "\" a été purgée.") ) (vla-detach x) ) ) ) ) ;; Restauration de l'état des calques (if l_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) l_lst ) ) (princ) ) Pour sergeluc, le souci semble bien venir d'une histoire de compatibilité entre versions, je ne peux pas vraiment t'aider à le résoudre, je n'ai qu'AutoCAD 2007 sous la main. [Edité le 8/6/2006 par (gile)]
-
Salut Patrick_35 Je pensais mettre en téléchargement les fichiers LISP et DCL en clair et un VLX, le tout dans un dossier compressé (avec un petit readme). Il n'est pas queston, bien sûr, de "cryptage", c'est juste pour qu'il soit possible de charger le programme avec un seul fichier, sans avoir à se préoccuper de ranger les DCL dans un dossier de recherche etc ... C'est ce que j'avais fait pour "Helicoide" et oublié de faire pour "Res_hel",un seul fichier vlx (dans les téléchargements proposés par les membres). À l'occasion, je demanderais à Patrick de changer ce dernier téléchargement pour y inclure les fichier LSP et DCL. [Edité le 8/6/2006 par (gile)]
-
Salut, Il est écrit juste à côté, sur l'image que j'ai mise c'est "D6340".
-
Salut, Tu as des explications ici ou encore là. Tu peux lire aussi dans le Menu princpal -> Support -> CADxp, le site.
-
Pour Fraid Au temps pour moi ! Les LISP sont un peu "brut de décoffrage". Les messages d'erreur que tu as eu signifient que la liste de xref était vide et que jeu de sélection des images aussi. J'ajoute des contrôles dans les deux LISP pour éviter ces messages si les routines sont lancées dans des dessin ne contenant pas de xref et/ou pas d'images. Pour sergeluc Avant de faire (vla-get-Name (vlax-ename->vla-object (car (entsel)))) sur la 2000 avais-tu fais (vl-load-com) pour charger les fonctions ActiveX ? Je suis content que çà marche sur AutoCAD 2006.
-
Salut thierryd, C'est dans mon optique de mettre le programme en téléchargement. Si j'ai préféré ne pas le faire tout de suite, c'est parcque toute modification dans un fichier en téléchargement ne peut se faire sans une intervention de notre cher webmaster. La publication dans le forum m'a permis de faire, depuis la première version à une bonne quinzaine de modifs, pour répondre à des suggestions ou réparer des dysfonctionnements grace à l'aide des membres qui ont testé le programme. J'attends encore un petit peu, si de nouveaux retours arrivaient, et je le proposerai en téléchargement sous format compilé .vlx et avec les fichiers source.
-
Salut, Pour serge luc, merci pour le retour. Le premier message d'erreur : "; erreur: Erreur Automation Clé dupliquée" est effectivement le message retourné si le nom du bloc (ou de la xref) est donné avec son extension, comme par exemple : (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) [surligneur]"NomDuBloc.dwg"[/surligneur]) la syntaxe correcte est : (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) [surligneur]"NomDuBloc"[/surligneur]) Est-ce toi qui as entré le nom de la xref ou est il acquis par le lisp (vla-get-Name ...) ? En clair, sur AutoCAD 2000, si tu fais (comme le fait le LISP) : (vla-get-Name (vlax-ename->vla-object (car (entsel)))) et que tu sélectionnes une xref, est-ce qu'il t'est retourné le nom de la xref avec son extension ? Si oui, il faut, pour AutoCAD 2000, ajouter à la routine une ligne de code pour supprimer l'extension du nom de chaque xref de la liste avant le mapcar qui teste la validité du chemin. (setq lst (mapcar '(lambda (x) (vl-string-right-trim ".dwg" x)))) Pour Fraid Ton LISP spurge pourrait utiliser les fonctions vlisp à la place des (command ... )(généralement l'exécution est plus rapide) : (defun c:spurge (/ AcDoc) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-PurgeAll AcDoc) (c:purge_xref) (c:purge_raster) (vla-AuditInfo AcDoc :vlax-true) (princ) ) Il faut bien sûr que les routines purge_xref et purge_raster soient chargées. [Edité le 6/6/2006 par (gile)]
-
Après m'avoir "lu" ?... ;) Merci
-
Perte des icônes des boutons personnalisés
(gile) a répondu à un(e) sujet de brunomu dans AutoCAD 2004
Le fichier .mnc sera recompilé , mais pas le fichier .mnu (c'est un fichier de "gabarit" et c'est le chargement d'un .mnu qui génère un nouveau .mns et donc un nouveau .mnc). Personnellement, je conserve le fichier AutoCAD.mnu tel quel pour pouvoir revenir, si besoin, au menu "originel". -
Salut et bienvenue, Tu peux voir ici, tu peux aussi faire une recherche (Rechercher dans les forums, dans le gris en haut de la page) avec "vectoriser" ou "scanner", le sujet a souvent été abordé.
-
Euh ... Je pense avoir fait tout bien comme il faut pour être sur la carte, mais je ne me vois pas, est-ce normal ? http://img332.imageshack.us/img332/5290/frappr0uj.png
-
Salut, J'ai compilé les bouts de codes du lien donné par sergeluc pour en faire une fonction : purge_xref. La fonction crée une liste de toutes les xrefs du dessin (même les xrefs imbriquées) puis teste la validité du chemin et détache celles dont le chemin n'est pas valide. Elle est définie avec un (defun c: ...) et peut donc être appelée à la ligne de commande en tapant purge_xref, elle peut aussi être appelée depuis un autre LISP (puisque tu dis vouloir l'intégrer) avec un (c:purge_xref). Attention tout de même, je nai pas fait de tests approfondis. Versions modifiées, ajout de contrôles et d'un message pour chaque xref ou raster supprimé. ;;; PURGE_XREF Détache toutes les xrefs du dessin dont le chemin n'est pas valide (defun c:purge_xref (/ AcDoc n lay l_lst ss obj lst n_lst name bloc ent) ;; Chargement des fonctions ActiveX (vl-load-com) ;; AcDoc : pointeur vers le document actif (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Dévérouillage de tous les calques (repeat (setq n (vla-get-count (vla-get-Layers AcDoc))) (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n)))) (if (= :vlax-true (vla-get-lock lay) ) (progn (vla-put-lock lay :vlax-false) (setq l_lst (cons lay l_lst)) ) ) ) ;; ss : sélection de tous les blocs et Xrefs insérés sur les calques dévérouillés (setq ss (ssget "_X" '((0 . "INSERT")))) ;; On parcourt le jeu de sélection pour constituer une liste (lst) ;; avec seulement les noms des Xrefs (if ss (progn (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))) ) (if (and (not (member (vla-get-name obj) lst)) ;_ éviter les doublons (= :vlax-true ;_ uniquement les Xrefs (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) (vla-get-Name obj)) ) ) ) (setq lst (cons (vla-get-name obj) lst ) ) ) ) ;; On parcourt la liste lst et pour chaque Xref, on cherche si ;; dans ces composants il y a une (ou des) Xref. Si ces le cas, ;; elles sont rajoutées en fin de liste et seront traitées à leur tour. (setq n_lst 0) (if lst (while (setq name (nth n_lst lst)) (setq bloc (vla-item (vla-get-blocks acDoc) name)) (repeat (setq n (vla-get-count bloc)) ;_ nombre de composant du bloc (Xref) (setq ent (vla-item bloc (setq n (1- n)))) (if (and (= (vla-get-ObjectName ent) "AcDbBlockReference") ;_ si le composant est un bloc (not (member (vla-get-name ent) lst)) ;_ s'il n'est pas déjà dans la liste (= :vlax-true ;_ si c'est une Xref (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) (vla-get-Name ent) ) ) ) ) (setq lst (reverse (cons (vla-get-Name ent) (reverse lst))) ;_ la Xref est ajoutée en fin de liste ) ) ) (setq n_lst (1+ n_lst)) ) ) ) ) ;; On parcourt la liste et on teste, pour chaque xref, si le chemin est valide ;; Si le chemin n'est pas valide la xref est détachée (mapcar '(lambda (x) (setq path (vla-get-Path (vla-item (vla-get-blocks acdoc) x))) (if (not (open path "r")) (progn (princ (strcat "\Suppression de la xref : " x)) (vla-detach (vla-item (vla-get-Blocks AcDoc) x)) ) ) ) lst ) ;; Restauration de l'état des calques (if l_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) l_lst ) ) (princ) ) Dans le même esprit pour les images raster : ;;; PURGE_RASTER Supprime toutes les images raster du dessin dont le chemin n'est pas valide (defun c:purge_raster (/ AcDoc n lay l_lst ss img pat) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Dévérouillage de tous les calques (repeat (setq n (vla-get-count (vla-get-Layers AcDoc))) (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n)))) (if (= :vlax-true (vla-get-lock lay) ) (progn (vla-put-lock lay :vlax-false) (setq l_lst (cons lay l_lst)) ) ) ) ;; Sélection de toutes les images raster (setq ss (ssget "_X" '((0 . "IMAGE")))) ;; Suppression de celles qui ne sont pas référencées (if ss (repeat (setq n (sslength ss)) (setq img (vlax-ename->vla-object (ssname ss (setq n (1- n)))) pat (vla-get-ImageFile img) ) (if (not (open pat "r")) (progn (princ (strcat "\nSuppression de l'image : " (vla-get-Name img)) ) (vla-delete img) ) ) ) ) ;; Restauration de l'état des calques (if l_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) l_lst ) ) (princ) ) [Edité le 7/6/2006 par (gile)]
-
Salut mdsv31, tu devrais peut-être rafraichir le sujet, il n'y pas beaucoup de monde sur la carte.
-
Tracer un ARC avec pt de départ, rayon et un objet pour la tangente
(gile) a répondu à un(e) sujet de bonuscad dans Routines LISP
Réponse un peu tardive. Le LISP fonctionne très bien dans les SCU parallèles au SCG (en tout cas, je n'ai pas eu de problèmes). Mais il a un comportement capricieux dans les SCU non parallèles au SCG, des fois çà marche bien, des fois à moitié, des fois pas du tout. J'ai fait quelques tests avec (vla-IntersectWith ...) 3 cercles (rouge, jaune, vert, cyan) tous dans le même plan non parallèle au SCG. http://img185.imageshack.us/img185/4763/intersect1wy.png avec les cercles vert et cyan (puis cyan et vert) :) avec les cercles rouge et vert (puis vert et rouges) :casstet: avec les mêmes, si on change l'option d'extension :mad2: avec les cercles rouge et jaune (ou jaune et rouge) :( PS : J'ai conservé le dessin, si çà intéresse quelqu'un ... [Edité le 4/6/2006 par (gile)] -
Toutes les lignes en polylignes
(gile) a répondu à un(e) sujet de atchoume dans Pour aller plus loin en LISP
Comme le sujet m'intéressait, j'ai fait une version plus aboutie. À l'intérieur d'une boucle qui fait un premier jeu de sélection en filtrant les lignes par calque, on boucle sur chaque ligne (si elle n'a pas déjà été jointe à une polyligne) pour faire un autre jeu de sélection en filtrant les lignes du calque ayant les mêmes propriétés (couleur, type de ligne, épaisseur de ligne). C'est ce nouveau jeu de sélection qui est passé à PEDIT. ;;; L2PL - Gilles Chanteau - 04/06/06 ;;; Joint en lwpolyligne toutes les lignes jointives ayant des propriétés ;;; similaires (calque, couleur, type de ligne, épaisseur de ligne) ;;; Les lignes sur les calques vérouillés ou gelés ne sont pas traitées. ;; Redéfinition de *error* (defun L2PL_ERR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (command "_.undo" "_end") (setvar "CMDECHO" old_echo) (setq *error* m:err m:err nil ) (princ) ) ;; C:L2PL (defun c:l2pl (/ old_echo lay ss1 ss2 ss3 n ent lst col lt el) (setq m:err *error* *error* p2pl_err old_echo (getvar "CMDECHO") ) (command "_.undo" "_begin") (setvar "CMDECHO" 0) ;; boucle sur chaque calque (setq lay (tblnext "LAYER" T)) (while lay (if (zerop (logand 5 (cdr (assoc 70 lay)))) ;; si le calque n'est ni vérouillé ni gelé (progn (setq ss1 (ssget "_X" (list (cons 0 "LINE") (cons 8 (cdr (assoc 2 lay)))) ) ss3 (ssadd) ) (if ss1 ;; boucle sur chaque ligne (si le calque en contient) (repeat (setq n (sslength ss1)) (setq ent (ssname ss1 (setq n (1- n)))) (if (setq l_ent (entget ent)) ;; si la ligne n'a pas déjà été traitée (progn (if (not (setq col (cdr (assoc 62 l_ent)))) (setq col 256) ) (if (not (setq lt (cdr (assoc 6 l_ent)))) (setq lt "BYLAYER") ) (if (not (setq el (cdr (assoc 370 l_ent)))) (setq el -1) ) ;; sélection de toutes les lignes du calque de mêmes propriétés (setq ss2 (ssget "_X" (list (cons 0 "LINE") (cons 8 (cdr (assoc 2 lay))) (cons 62 col) (cons 6 lt) (cons 370 el) ) ) ) ;; création de la polyligne (if (= 1 (getvar "PEDITACCEPT")) (command "_.pedit" ent "_join" ss2 "" "") (command "_.pedit" ent "_yes" "_join" ss2 "" "") ) (setq ss2 nil) ;; si la polyligne créée n'a que 2 sommets (if (= 2 (length (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (entlast)) ) ) ) (setq lst (cons (entlast) lst)) ) ) ) ) ) ) ) (setq lay (tblnext "LAYER")) ) ;; les polylignes à 2 sommets sont re-tansformées en lignes (mapcar '(lambda (x) (command "_.explode" x)) lst) (command "_.undo" "_end") (setvar "CMDECHO" old_echo) (setq *error* m:err m:err nil ) (princ) ) -
Modification : Pour éviter une erreur au cas ou des références du même bloc seraient insérées à la fois sur des calques vérouillés et des calques dévérouillés, le LISP dévérouille tous les calques pour effectuer les modifications, puis restaure l'état initial. Version 2.2
-
Les gabarits de dessin sont dans le dossier : C:\Documents and Settings\Nom_Utilisateur\Local Settings\Application Data\Autodesk\AutoCAD 2006\R16.2\fra\Template
-
trier par ordre croissant ou décroissant en lsp
(gile) a répondu à un(e) sujet de doua dans Débuter en LISP
Salut, Je ne suis pas sûr de bien comprendre ce que tu veux faire. reverse retourne une liste en ordre inverse : (reverse '("b" "d" "e" "a" "c")) - > ("c" "a" "e" "d" "b") acad_strlsort trie une liste de chaine par ordre alphabétique : (acad_strlsort '("b" "d" "e" "a" "c")) -> ("a" "b" "c" "d" "e") Pour trier dans l'ordre aplhabétique inversé (reverse (acad_strlsort '("b" "d" "e" "a" "c"))) -> ("e" "d" "c" "b" "a") Sinon il y a aussi la fonction vl-sort qui trie une liste selon une fonction de comparaison (attention, elle supprime les doublons): (vl-sort '(5 1 5 3 4 2) ' (1 2 3 4 5) ou (vl-sort '("b" "d" "e" "a" "c") ' ("a" "b" "c" "d" "e") ou (vl-sort '(5 1 5 3 4 2) '>) -> (5 4 3 2 1) pu (vl-sort '("b" "d" "e" "a" "c") '>) -> ("e" "d" "c" "b" "a") [Edité le 3/6/2006 par (gile)] -
Salut, Si tu veux récupérer les propriétés des 40 calques (couleur, type de ligne ...) dans un dessin vide,fais comme dit Esbe, un gabarit : tu enregistres ton dessin, tu effaces et purges tout ce que tu ne veux pas conserver et tu "enregistres sous" au format *.dwt Si tu veux exporter les entités contenues dans tes 40 calques tu peux passer par des wblocs, voir ce sujet.
-
Toutes les lignes en polylignes
(gile) a répondu à un(e) sujet de atchoume dans Pour aller plus loin en LISP
Bonuscad a complètement raison, Join3dPoly fonctionne avec une sélection faite (donc contrôlée) par l'utilisateur et pour créer une seule poly3d. J'ai répondu un peu vite et en utilisant PEDIT, il n'est pas nécessaire de faire tous ces tests sur les extrémités des lignes, PEDIT s'en charge. Pour me faire pardonner de t'avoir égaré sur des chemins forts tortueux, je te propose une ébauche, qui traite les lignes par calque : (defun c:line2pline (/ lay n_lay ss n ent) (setq lay (tblnext "LAYER" T)) (while lay (setq n_lay (cdr (assoc 2 lay)) ss (ssget "_X" (list '(0 . "LINE") (cons 8 n_lay))) ) (if ss (repeat (setq n (sslength ss)) (setq ent (ssname ss (setq n (1- n)))) (if (entget ent) (if (= 1 (getvar "PEDITACCEPT")) (command "_.pedit" ent "_join" ss "" "") (command "_.pedit" ent "_yes" "_join" ss "" "") ) ) ) ) (setq lay (tblnext "LAYER")) ) (princ) ) [Edité le 3/6/2006 par (gile)] -
Sauvegarde d\'une constante dans DWG
(gile) a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Non, c'est toi qui t'assure de passer un nombre réel comme argument à la fonction / Si un nombre entier est affecté à la variable unite (float unite) transforme l'entier en réel, si c'est déjà un réel rien ne change (c'est ce que montrent les exemples de l'aide). -
Sinon, pour un accès rapide aux données DXF (pour application) d'une entité, voir ce sujet, personnellement, j'ai ajouté dans le menu Outils -> Renseignement une commande LST_DXF : (defun C:LST_DXF () (mapcar 'print (entget (car (entsel)))) (textscr) (princ) ) [Edité le 2/6/2006 par (gile)]
-
Sauvegarde d\'une constante dans DWG
(gile) a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Non, c'est preque çà, il manque un espace entre * et 250, il vaut mieux éviter les accents dans les noms de variables et, il y a une subtilité avec la division en LISP : si tu divises un entier par entier le résultat sera un entier d'où : (/ 10 3) retourne 3 ou (/ 1 10) retourne 0 Il est donc impératif qu'au moins un des arguments de la fonction / soit un réel pour que le résultat soit un réel : (/ 10.0 3) retourne 3.33333 et (/ 100.0 10) retourne 10.0 Je dois avouer avoir fait cette faute encore récemment, il est donc prudent d'écrire : (/ (* 250 (/ 1 (/ 100.0 Ech))) unite) Sinon, on peut simplifier la formule de Rebcao (çà, c'est des maths basiques) : (2.5 * Ech) / unité Ce qui en LISP(avec float pour s'assurer que unite est un réel) donnerait : (/ (* 2.5 Ech) (float unite))
