-
Compteur de contenus
406 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par chris_mtp
-
Bonjour à tous, Il est vrai que cet outil manque réellement aux fonctions Lisp d'Autocad. De plus, avec ObjectDCL ou OpenDCL, c'est vraiment la galère pour comprendre et faire intéragir un lisp avec une boite de dialogue du type .odcl ou .odc. Rien qu'avec un bouton text, pour activer une commande lisp définie par (defun c: ...), j'ai vraiment la galère. J'ai compris le principe de (dcl_Project_Load "C:/....../M_DAO.ODCL" T) (dcl_Form_Show m_dao_1) pour charger une feuille dans Autocad. Dans ma boite de dialgoue OpenDCL, j'ai crée un Tab Strip avec plusieurs onglets, j'ai crée un Text Button par dessus. Si j'insére le code ci-dessous dans la console Autolisp, la fenêtre s'affiche mais sans de bouton OK ou annuler en bas, et sans le TextButton. Quelqu'un aurait il une idée ? ou du moins un exemple ? Le mieux pour moi serait de récupérer les infos rentrés par l'utilisateur de chaque tab sous forme de liste. Mais encore faut il savoir le faire et pour l'instant je bugge.... Merci par avance de votre aide. John
-
Je vais regarder ca d'un peu plus près. En effet, Bonuscad merci. Mais ca marche très bien avec la méthode de vincentp010. John
-
Bonjour Didier, Avec ta réponse 2, mon lisp marche nickel mais avec l'ajout des codes DXF 72 et 73, le texte se place en bas à gauche de ma présentation à 0,0,0. J'ai pas conséquent enlever de mon lisp initial la ligne (command "-UNITES" 2 4 3 4 300.000g) en conservant quand même mon code pour l'insertion des textes et là plus de problèmes. (command "_text" "mg" (list 5.5 158.5) 3.5 100 (nth 5 lstf)) . Il doit y avoir un problème avec le point d'alignement du texte dans ton bout de code. J'ai essayé avec le code 11 qui définit ce point mais en vain. J'en suis donc revenu à mon ancienne méthode. Merci encore de ton aide. John.
-
Bonjour Didier, En effet avec un entmake ca va marche mieux et pas de problème d'inclinaison. Il me faudrait seulement le code dxf du style de texte et le code dxf de justification de mon texte. Mais je pense que je vais trouver. Je reviens vers toi au besoin. Merci encore de ton aide. John.
-
Merci Vincentp010. Ca marche bien comme çà mais j'aimerais quand même savoir pourquoi mon code n'est pas bon ? Si vous avez des idées. Merci encore. John
-
Bonjour à tous, J'ai un GROS problème d'inclinaison de texte. Si j'insére un texte par : (command "_text" "mg" (list 5.5 158.5) 3.5 100 (nth 5 lstf)) Il s'oriente avec un angle correspond à l'angle d'inclinaison de mon texte alors que je fais en début de lisp. (command "-UNITES" 2 4 3 4 300.000g) Comment ca se fait ? De plus, Si je mets dans la fenêtre proprietés dans le champ rotation la valeur de mon angle d'inclinaison le texte se met à l'horizontale. J'ai essayé de modifier quelques variables comme SNAPANG ou ANGBASE ou encore ANGDIR mais rien à faire. Quelqu'un aurait-il une idée ? Merci par avance de votre aide. John.
-
Bonjour à tous, Je crée via un lisp une nouvelle présentation dans un plan Autocad et je crée à l'intérieur une fenêtre automatique avec la commande fmult et en indiquant le point haut gauche et bas droit de mon cadre. Je voudrais modifier le zoom de cette fenêtre qui me fait toujours un zoom étendu du dessin. Je voudrais zoomer sur un point avec des coordonnées connue et selon une échelle connue. J'ai essayé de modifié les propriétés de la fenêtre crée avec : (command "fmult" (list 45.5 181) (list 141 105.5)) (setq fen (entlast)) (setq fen_pr (entget fen)) (setq fen_pr (subst (list 12 (atof (nth 1 pt1)) (atof (nth 2 pt1)) 0) (assoc 12 fen_pr) fen_pr)) (entmod fen_pr) (entupd fen) Mais apparement cela ne marche pas ? Le code 12 correspond bien au centre de la fenêtre et le code 45 à la taille de l'échelle. Merci par avance de votre aide. John
-
Merci Lilli, fonctionne nickel Bravo Patrick
-
Bonjour à tous, Ou peut on trouver le lisp de nettoyage en question ? Le lien du site ci-joint ne marche plus apparement. John
-
Ca marche nickel Gile. Essayez avec plusieurs dates sur plusieurs feuilles ou sur une même feuille. gc-XlDbRead est quand même beaucoup plus rapide que gc-XlRead. Merci encore de ton aide et Bravo. John
-
Ok alors, je voulais te proposer une solution pas trop longue. De mon côté, j'ai voulu faire une fonction qui avec un nombre de jours retourne la date réelle depuis l'année 1990 mais avec les années bissextile, c'est difficile voir impossible. Ya des trucs sur le net à ce sujet mais pas de formule concrète. Merci encore de ton aide.
-
Bonjour, Si tu veux, pour te simplifier, il suffit avec la fonction gc-XlDbRead en lisant la première colonne comme une chaîne non ? Que j'ai dans ma première colonne un point du type A325, PT56 ou 25, il retournera le tout comme une chaîne de caractères non ? Le format Date de gc-XlDbRead me va très bien avec un (substr (nth 10 num) 1 10) , j'ai pu contourner le problème. Merci encore de ton aide. John
-
C'est compliqué de comprendre le VB Net. J'ai essayé et sérieux c'est difficle.
-
Bonjour Gile Je vais finalement utiliser gc-XlDbRead plus fiable plus rapide et plus sûr. Par contre, quand dans ma prenière colonne j'ai un numéro du type "O1" ou "P36" par exemple, la fonction me retourne un "" comme premier élements de ma sous liste alors que quand c'est un numéro simple du type "582" ou "693", il me le retourne correctement. Je ne sais pas si tu peux y faire quelque chose en modifiant la DLL ou quoi. Avec gc-XlRead, j'ai ("P356" "465954.8293" "753614.70005" "22.00337" "738" "" "" "" "" "" "40378") Avec gc-XlDbRead, j'ai ("" "465954.8293" "753614.70005" "22.00337" "738" "" "" "" "" "" "19/07/2010 00:00:00") La date avec gc-XlDbRead est formaté correctement, toutes les décimales sont retournés mais pas le numéro du point, Toujours à mon avis le presse papier non ? Si tu as 2min, merci. John
-
J'y suis arrivé en écoutant vos conseils à lire une feuille Excel tout en lisp mais sérieux c'est trop long et trop complexe. Et là ne j'ai pas vraiment le temps en ce moment. Et par contre, j'ai les mêmes problèmes pour les arrondi. En lisp, j'ai un retour sur les coordonnées à 4 décimales alors que dans Excel, il y a en plus, 9 voir 10. Merci Patrick mais je vais continuer comme çà avec l'ancienne méthode, ca marche bien. Gile, je te demanderai une seule petite modification de la DLL ExcelLisp, Si on peut lire la dernière colonne d'une ligne contenant une valeur comme un texte et non un nombre ca m'aiderait sérieusement. Je m'explique, la dernière colonne de toutes mes feuilles est une date et ExcelLisp me retourne un nombre de cette même dernière colonne. Ce nombre correspond au nombre de jours écoulés de la date en question jusqu'au 1er Janvier 1990. Du coup, je ne peux pas retrouver ma date exacte lors du traitement de mes données. Si cette dernière petite modification est possible, merci par avance Gile. John.
-
Bonjour Patrick, Merci pour ta réponse mais j'en reviens à mon problème décrit en réponse 12. Si j'arrive à faire une fonction qui me trouve la référence d'un numéro de point dans la colonne A d'uen feuille Excel, alors que je connaitrais la dernière cellule d'excel que doit lire GetExcel et je pourrais tout faire en lisp. Actuellement, je fais tous lire par la fontion de Gile et je tri ensuite ma liste sous forme de numéro de points. Le but serait par exemple de trouver que le numéro P35 se trouve à la ligne A[surligneur] 3256[/surligneur] et donc de lire la feuille Excel avec Getexcel du type (GetExcel "C:\\Dossier\\Fichier.xls" "Feuil1" "K [surligneur] 3256[/surligneur] ") . Mon problème vient de trouver le numéro de la ligne correspondant au numéro de point de traiter. Du point 1 au P35 par exemple. Donc dans mon exemple de la cellule A1 à la ligne K [surligneur]3256 [/surligneur] En espérant avoir été clair, merci par avance de ton aide. John.
-
Merci Gile. Là ca marche nickel avec toutes les décimales. Un petit bémol cependant, si dans la feuille Excel, j'ai une colonne Date, la fonction me la transforme en nombre mais je vais trouvé une solution pour contourner ce problème. Merci encore de ton aide et Bravo. John.
-
Bonjour Gile Si j'utilise gc-XlRead, j'ai en retour une liste du type "1" "494687.6423" "206640.4516" "199.5672065" alors qu'avec gc-XlDbRead, j'ai en retour une liste du type "1" "494687.642348306" "206640.451570744" "199.567206472286" d'où mon incompréhension. Si tu as une solution, c'est bien sinon c'est pas grave. La fonction gc-XlRead marche très bien, enregistrer mes feuilles en CSV et les traiter seraient trop long et utiliser GetExcel pose des problèmes de syntaxe. Je suis arrivé à faire ce que je voulais avec mon lisp. Il y a juste cette petite erreur que je ne comprends pas. Si tu as 2min, merci sinon c'est pas grave. John.
-
Bonjour Gile J'ai une autre question Avec la fonction gc-XlRead, lorsque la fonction lit des cellules contenant des nombres, il arrondit les résultats à 4 chiffres après la virgule ou bien il retourne la totalité des décimales contenues dans les cellules. Par conséquent, il est préférable dans mon cas d'utiliser les fonctions de AdoExcelLisp avec gc-XlDbRead. Mais en utilisant gc-XlDbRead j'ai des problèmes avec mon lisp Du coup, serait il possible de modifier la fonction gc-XlRead avec l'extraction de toutes les décimales ? Merci par avance de ta réponse. John.[Edité le 14/8/2010 par chris_mtp] [Edité le 14/8/2010 par chris_mtp]
-
Bonjour Gile, Merci de te réponse. Je t'explique ma démarche. Je veux importer des points dans Autocad en ayant le fichier Excel Ouvert pour repréer le nom des feuilles à traiter. Par conséquent, je fais ma liste de noms des feuilles avec les commandes que tu m'as indiqué ci-dessus, je ferme ensuite la liason et libère les ressources de excel. J'ai suivi l'exemple de Patrick avec un vlax-get-or-create-object car mon fichier excel est ouvert. Ensuite, je récupére les données d'Excel avec gc-XlRead plus rapide à mon goût. Je sais que ce n'est pas tu m'as conseillé mais je n'arrive pas à utiliser GetExcel ou encore GetCell. Ensuite, je tri la liste récupérer avec gc-XlRead pour pouvoir traiter que certains points. Cette méthode marche très bien et est très rapide. Seulement, ce n'est pas ce que tu m'as conseillé. Je sais. J'aurais aimé tout faire en Lisp et ne pas utiliser gc-XlRead mais je ne sais pas comment récupérer la référence d'une cellule en ne rentrant que le numéro de point de la première colonne d'une feuille comme décrit dans mon message précedent. Sinon, oui je pourrais faire tout en Lisp mais là je suis bloqué. J'espère n'avoir pas trop été confus et être compréhensible. Je précise, j'ai fini mon lisp, j'ai pu faire ce que j'ai voulu avec la fonction gc-XlRead mais ce n'est pas très propre comme démarche. Merci encore de ton aide. John.
-
Merci Patrick pour ta réponse. J'ai pu m'en sortir et créer la liste de noms des feuilles d'un fichier Excel. Avec les fonctions de Gile, GetExcel, je peux sortir sous forme de liste les données qui m'intéresse mais je suis confronté à un dernier problème. Il faudrait que je trouve la référence d'une cellule de la première colonne. Je m'explique, dans mon fichier excel, j'ai plusieurs colonnes avec les mêmes entêtes de colonnes. La première colonne correspond au numéro de point. Je n'arrive pas à créer une fonction qui me permettrait en rentrant le numéro de point (par exemple "38" ou "P36") de trouver la référence de la cellule (par exemple A2 ou A325) et ainsi pouvoir par exemple ne créer la liste avec GetExcel que des données comprises entre les lignes définies (par exemple de A2 et A325). La recherche dans une feuille excel définie ne s'effectuerait que dans la première colonne A et dès que la fonction trouve la valeur entrée, elle me retourne la référence de la cellule. Je suis bloqué et il ne me manque que çà pour terminer mon lisp. Si vous avez 2min pour vous pencher sur le sujet, ce serait bien sinon si c'est trop compliqué, c'est pas grave. Merci par avance de votre aide. John
-
Bonjour Gile, J'ai un problème pour récupérer la liste des feuilles d'un fichier Excel. Je récupère le nom du Fichier à traiter avec (setq fni (getfiled "Sélectionner le fichier Excel" "" "xls;xlsx;*" 0)) Ensuite, je fais les deux premières commandes comme décrit ;; On démarre un processus avec la fonction vlax-create-object (ou vlax-get-or-create-object) (setq ExcelApp (vlax-create-object "Excel.Application")) ;; On ouvre le fichier (setq filo (vlax-invoke-method (vlax-get-property ExcelApp 'WorkBooks) 'Open fni ) ) Et ensuite je lance ;; On récupère la liste des feuilles (vlax-for sheet (vlax-get-property ExcelApp 'Sheets) (setq sheetList (cons (vlax-get-property filo 'Name) sheetList)) ) Mais il me retourne une liste avec que le nom du fichier d'origine et pas le nom des feuilles de ce même fichier. Il ne me manque plus que çà. J'ai tout trouvé pour lire et écrire dans Excel. Pour sortir des informations d'Excel et ensuite les traiter dans Autocad mais là, sérieux je bloque Merci par avance de ton aide. John
-
Bonjour Gile, Ca marche nickel chez moi Autocad 2010 et Excel 2003 sur Vista. Ca prend un peu de temps avec beaucoup de points à traiter (environ 4000) mais ca va quand même (1min pas plus) Donc si je comprends bien, pas besoin d'ouvrir Excel et pas de problème de gestion de mémoire ou d'application avec Excel. Le seul hic cependant, c'est qu'il faut connaitre (ou au moins avoir ouvert avant le fichier) le nom de la feuille Excel. Si on peut retourner dans une liste le nom de toutes les feuilles d'un fichier Excel sans devoir l'ouvrir, ca serait énorme. Ca rejoindrai un peu ma demande dans l'autre post. En tout cas, ta fonction marche nickel. Bravo encore. John
-
Bonjour Gile, Je suis en train d'utiliser les deux fonctions de ExcelLisp mais j'ai un gros problème avec le choix de la feuille à sélectionner dans un classeur Excel. J'ai un fichier Excel avec plusieurs feuilles qui contiennent elle-même plusieurs points. J'aimerais en indiquant le chemin de mon fichier excel par getfiled avoir la liste de toutes les feuilles présentes dans ce fichier excel et ensuite lancer la lecture de la feuille sélectionné avec gc-XlRead mais il me manque des connaissances en Vlisp pour obtenir cette liste. Je ne pense qu'en pur AutoLisp cela soit possible. Je fais un traitement sur l'insertion de blocs depuis Excel vers Autocad avec des attributs un peu particuliers, d'où ma demande sur une fonction si possible. Merci par avance de ton aide. John [Edité le 1/8/2010 par chris_mtp]
-
Ajuster Polyligne 2D/3D sur Contour
chris_mtp a répondu à un(e) sujet de chris_mtp dans Pour aller plus loin en LISP
Donc, si je comprends bien, il n'existe pas d'autre moyen d'automatiser cette manip ? A moins de déterminer les points d'intersections des polylignes 2D et 3D avec le contour ? Je vais voir ce que je peux faire de ce côté là. Et pour les hachures, je ne vois pas comment faire. John.
