lex Posté(e) le 6 décembre 2009 Posté(e) le 6 décembre 2009 Bonjour à tous, pouvez-vous m’aider :Je souhaite créer un lisp qui me permet d’insérer plusieurs blocs dwg. L’idée serait la suivante :sur base d’une liste Excel ou txt le programme lisp viendrai lire ce fichier xls ou txt Exemple : Nom du fichier Excel ( Selection.xls ) ou ( Selection.txt ) C:\bibliotheque\dwg\P&ID\01.dwgC:\bibliotheque\dwg\P&ID\05.dwgC:\bibliotheque\dwg\P&ID\10.dwgC:\bibliotheque\dwg\P&ID\11.dwgC:\bibliotheque\dwg\P&ID\18.dwgC:\bibliotheque\dwg\P&ID\22.dwgC:\bibliotheque\dwg\P&ID\23.dwg Si qu’elle qu’un à une idée c’est sympaD’avance merci.
lili2006 Posté(e) le 6 décembre 2009 Posté(e) le 6 décembre 2009 Bonsoir à toutes et tous, Bienvenue lex, Des cadors de ce forum ont déjà pondu pas mal de trucs en ce qui concerne les liaisons EXcel AutoCAD. Tu peux donc consulter ce forum, Sur la page de Patrick_35 plus précisément, regardes du cotés de IXL et/ou LXL,... Bonne lecture,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lex Posté(e) le 6 décembre 2009 Auteur Posté(e) le 6 décembre 2009 Merci LILI2006Je les ai chargé, je vais les étudiermerci à Patrick_35
(gile) Posté(e) le 6 décembre 2009 Posté(e) le 6 décembre 2009 Salut et bienvenue, Il est beaucoup plus facile de traiter des fichiers ascii (txt, csv...) que des fichiers xls.Au vu de ta demande, je te recommanderais de commencer avec des fichiers texte. Pour ça, AutoLISP fournit toutes les fonctions nécessaires, pas besoin de fonctions Visual LISP. Si tu veux pouvoir choisir le fichier à traiter, la fonction getfiled ouvre la boite de dialogue standard dr sélection de fichier et retourne le chemin complet du fichier. Il faut ensuite ouvrir le fichier en lecture avec la fonction open (argument "r" pour read). La fonction read-line permet de lire successivement les lignes du fichier. Utilisée dans une boucle while, tu peux, tant qu'il y a des lignes vérifier si le fichier existe avec findfile et, s'il existe, l'insérer (il faut au moins spécifier le point d'insertion). Une fois la procédure terminée, il est impératif de fermer le fichier avec la fonction close. Si tu tiens à utiliser un fichier Excel, tu peux utiliser ou t'inspirer des routines de GetExcel, mais c'est du LISP d'un autre niveau. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lex Posté(e) le 7 décembre 2009 Auteur Posté(e) le 7 décembre 2009 Merci pour les conseils,Mais je suis novice en la matière, tout au plus je pourrais m'inspirer d'une routine déjà existante et peut-être arriver à l'adapter.je vais voire.
(gile) Posté(e) le 7 décembre 2009 Posté(e) le 7 décembre 2009 Salut, Je veux bien t'aider un peu plus avant mais une chose reste obscure pour moi :on insère tous les blocs nommés dans le fichier, OK. Mais où ? tous en 0,0 ? faut-il laisser la main à l'utilisateur à chaque bloc pour qu'il spécifie le point d'insertion ? s'agit-il juste d'ajouter les blocs à la collection sans les insérer ?... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 7 décembre 2009 Posté(e) le 7 décembre 2009 Bonjour, je me posais les mêmes questions. J'ai fait quelque chose qui laisse la main à l'utilisateur pour les insérer où il veux. J'ai fixé l'échelle à 1 et l'angle de rotation à 0. (defun insmul_err (msg) (command "_.undo" "_end") (setvar "ATTREQ" oldattreq) (alert (strcat "Erreur : " msg)) (setq *error* m:err ;; restaurer *error* m:err nil ) (princ) ) (defun c:insmul (/ nomf oldattreq f l blocname) (vl-load-com) (setq m:err *error* ;;sauvegarder *error* *error* insmul_err ;;redéfinir *error* ) ;; trouver le fichier qui contient les noms de blocs (setq nomf (getfiled "Sélectionner un fichier" "" "txt" 0)) (if nomf ;; si un fichier a été sélectionné (progn (setvar "CMDECHO" 0) ;; n'affiche pas le détail des commandes (command "_.undo" "_begin") (setq oldattreq (getvar "ATTREQ")) ;; mettre de côté la valeur courante de ATTREQ (setvar "ATTREQ" 0) ;; s'il y a des attributs, prendre les valeurs par défaut (setq f (open nomf "r")) ;; ouvrir le fichier nomf en lecture (while (setq l (read-line f)) ;; lire chaque ligne l de f (setq blocname (vl-filename-base l)) ;; extraire le nom du bloc (if (tblsearch "BLOCK" blocname) ;; vérifier s'il est déjà inséré dans le fichier (setq l blocname) ;; dans ce cas on insère le bloc déjà présent (if (not (findfile l)) ;; sinon on vérifie si le fichier existe (progn (alert (strcat l "\nnon trouvé")) ;; faut croire qu'il n'existe pas (setq l nil) ;; et on met l à nil pour éviter d'insérer un bloc inexistant ) ) ) (if l ;; le bloc existe soit dans la table de bloc, soit dans le répertoire spécifié (command "_insert" ;; on lance la commande INSERER l ;; du bloc l pause ;; on attend que l'utilisateur donne le point d'insertion 1 ;; echelle x fixée à 1 1 ;; echelle y fixée à 1 0 ;; angle de rotation fixée à 0 ) ) ) ;; while (close f) ;; fermer le fichier f (setvar "ATTREQ" oldattreq) ;; remettre ATTREQ à sa valeur initiale (command "_.undo" "_end") ) ) (princ) ) S'il s'agit d'ajouter les blocs à la collection sans les insérer, on sait faire sans lisp avec designcenter AmicalementVincent [Edité le 7/12/2009 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bonuscad Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Bonjour, Un œil sur ce sujet ? Et encore sur cette suite... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Ceux qui me connaissent savent mon avis.En la matière, mieux vaut débuter par une petit script. En effet, mieux vaut régler ATTREQ et les ACCROBJ à 0. Mais le script est mon réflexe quand je vois des listing Excel ou Txt avec quelqu'un qui maitrise Excel.L'adaptation necessaire sera probablement d'utiliser Excel pour remplacer les \ par des / ou des \\.En script, la commande INSERER a besoin du point puis des instructions 1 1 0 (échelle X, Y et rotation). Avant de lisper, scriptez :D Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lex Posté(e) le 9 décembre 2009 Auteur Posté(e) le 9 décembre 2009 Salut gile en réponse à ton courrier du 7-12 Oui mais de la manière suivante :Actuellement j’utilise les scripts. Chaque symbole est inséré par un script, Au départ je défini le point 0,0,0 puis j’insére les blocs les un à la suite des autres en 0,0,0, afin qu’ils ne se superposent les uns sur les autresJe redéfini l’ucs origine 0,0,0 en tenant compte de la largeur du bloc inséré. Pour info j’utilise les clichés de la boite de dialogue généré par slidelib , c’est ancien mais les scripts dans les palettes d’outils ça marche pas ! L’idée et de me faciliter la vie en générant des plans de façons automatique par une sélection de bloc au choix dans un ordre logique de fonctionnent technique.se trouvant dans un fichier excel sous forme de devis puis les éléments sélectionnés avec leur chemin d’accès, leur position leur grandeur seront transférées dans un fichier txt ou csv qui sera lu par un lisp. Exemple de script filedia 0_insertc:/biblio/dwg/model/VA1-10,0 _ucsorigin52.5000,0_zoom_extentspulsion$i=pulsion1 $i=* filedia 1 Ce script fonctionne sauf la syntax $i=pulsion1 $i=* qui fonctionné autocad r12 qui faisait un rappel immédiat de la boite de cliché pulsion après insertion. Merci d’avance.[Edité le 9/12/2009 par lex] [Edité le 9/12/2009 par lex]
lex Posté(e) le 17 avril 2010 Auteur Posté(e) le 17 avril 2010 Bonsoir zebulon, encore merci pour ton lisp insmul c’est super, je ne suis pas un crack en lisp mais j’ai essayé d’adapter mon script dans ton code mais sans succès.Comme ce-ci tu voies l’amateur. (defun insmul_err (msg) (command "_.undo" "_end") (setvar "ATTREQ" oldattreq) (alert (strcat "Erreur : " msg)) (setq *error* m:err ; restaurer *error* m:err nil ) (princ) ) (defun c:insmul (/ nomf oldattreq f l scriptname) (vl-load-com) (setq m:err *error* ; sauvegarder *error* *error* insmul_err ; redéfinir *error* ) ;; trouver le fichier qui contient les noms de blocs (setq nomf (getfiled "Sélectionner un fichier" "" "txt" 0)) (if nomf ; si un fichier a été sélectionné (progn (setvar "CMDECHO" 1) ; n'affiche pas le détail des commandes (command "_.undo" "_begin") (setq oldattreq (getvar "ATTREQ")); mettre de côté la valeur courante de ATTREQ (setvar "ATTREQ" 0) ; s'il y a des attributs, prendre les valeurs par défaut (setq f (open nomf "r")) ; ouvrir le fichier nomf en lecture (while (setq l (read-line f)) ; lire chaque ligne l de f (setq script (vl-filename-base l)) ; extraire le nom du bloc (if (tblsearch "script" scriptname) ; vérifier s'il est déjà inséré dans le fichier (setq l scriptname) ; dans ce cas on insère le bloc déjà présent (if (not (findfile l)) ; sinon on vérifie si le fichier existe (progn (alert (strcat l "\nnon trouvé")) ; faut croire qu'il n'existe pas (setq l nil) ; et on met l à nil pour éviter d'insérer un bloc inexistant ) ) ) (if l ; le bloc existe soit dans la table de bloc, soit dans le répertoire spécifié (command "_script" ; on lance la commande INSERER l ; du bloc l pause ; on attend que l'utilisateur donne le point d'insertion ) ) ) ; while (close f) ; fermer le fichier f (setvar "ATTREQ" oldattreq) ; remettre ATTREQ à sa valeur initiale (command "_.undo" "_end") ) ) (princ) )
zebulon_ Posté(e) le 19 avril 2010 Posté(e) le 19 avril 2010 Bonjour, tu essayes de lancer un script depuis un lisp. Soit tu suis la proposition de Tramber, tu écris un un script et tu l'exécutes, soit tu veux pousser plus loin et utiliser le lisp. Pas les 2 en même temps. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant