Invité samuelM Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Bonjour Voici un début de programme que j'aimerai bien sur fini mais je n'y arrive pas. il permet de sortir les section d'un objet3d et je voudrai pouvoir l'enregistrer sur une feuille exel. Je demande donc votre aide pour m'aider à le rendre opérationnel. voici la routine : (defun c:a1 (/ ent clq lo la ep name descr file ) (vl-load-com) (and (setq ent (car (entsel "\nSélectionnez un solide: "))) (setq name (getstring "\nNommer l'objet :")) (setq ent (vlax-ename->vla-object ent)) (= (vla-get-ObjectName ent) "AcDb3dSolid") (setq lo (+ lo (vla-get-Length ent)) la (+ la (vla-get-Length ent)) ep (+ ep (vla-get-Length ent)) ) (setq descr (strcat "\nNom de l'objet.......\t"name "\nLongeur..............\t"(rtos lo) "\nLargeur..............\t"(rtos la) "\nEpaisseur............\t"(rtos ep) "\nSurface..............\t"(rtos (* lo la)) ) ) (textscr) ) (princ) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: " ) "Oui" ) (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33) "a" ) ) (princ descr file) (close file) ) ) (graphscr) (princ) ) Merci à ceux qui répondront
harksin Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Je voudrais bien t'aider mais il faudrais que tu déffinisse se que tu entend par section.selon quel plans par exemple il faut aussi que tu dise sous quelle forme tu souhaite obtenir les resultats dans tout les cas a mon sens il te faut : 1 extraire les donné des point du dessin (sont inculs dans la liste des ton solide (entget (entsel)) pour voir a quoi elle ressemeble et quel code tu devras rechercher 2 avec des outil matématique tel que le produit vectorielet deux ou trois notion d'intersection droite plans définir les point dessinant ta coupe a partir de la tu fait tout ce que tu veut J'espere avoir était clairmais mon niveau actuel en lisp rend difficile l'explication de maniere claire... a bientot
Invité samuelM Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Merci de ta réponse. Voici le programme de base qui donne les info que je souhaite : (defun c:dimsection (/ ent minpt maxpt) (vl-load-com) (and (setq ent (car (entsel "\nSélectionnez un solide: "))) (setq ent (vlax-ename->vla-object ent)) (= (vla-get-ObjectName ent) "AcDb3dSolid") (not (vla-GetBoundingBox ent 'minpt 'maxpt)) (mapcar 'print (vl-sort (mapcar '- (vlax-safearray->list maxpt) (vlax-safearray->list minpt) ) '> ) ) ) (princ) ) à partir de là, je souhaite envoyer ses info dans une feuille exel tout en stockant ses données pour ajouter à chaque sélection et ne pas créer une feuille à chaque sélection. Mon niveau en lisp est vraiment très médiocre :(
Bred Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Salut,As-tu penser à écrire un fichier .csv (séparateur ";") ?C'est le même principe que d'écrire un fichier .txt Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Invité samuelM Posté(e) le 12 mai 2011 Posté(e) le 12 mai 2011 Bonjour, Là je commence à ne plus comprendre! Peux tu m’éclaircir?Merci
Bred Posté(e) le 12 mai 2011 Posté(e) le 12 mai 2011 Re, Cela écris dans un fichier .csv que Excel peut lire.Tu changes de colonne avec un ";" Lance ça, puis va ouvir le fichier c://TAB.csv (setq f (open "c://TAB.csv" "w") i 0) (repeat 5 (princ (strcat "Col1;Col2;Col3; Ligne" (rtos (setq i (1+ i))) "\n") f) ) (close f) Ensuite, pour écrire en dessous, il suffit de relire le tableau en l'enregistrant dans une variable, puis de rajouter les choses à la suite. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Invité samuelM Posté(e) le 17 mai 2011 Posté(e) le 17 mai 2011 Bonjour, Merci bred pour ces info et ce code mais je n'arrive pas à m'en sortir :(
Invité samuelM Posté(e) le 19 mai 2011 Posté(e) le 19 mai 2011 Bonjour, Après plusieurs heures d'essai et de recherche, je n'arrive pas à en finir et faire que ce programme fonctionne.je remet mes deux programme que j'ai : Ce premier qui permet de donner les sections d'un objet 3D (vl-load-com) (and (setq ent (car (entsel "\nSélectionnez un solide: "))) (setq ent (vlax-ename->vla-object ent)) (= (vla-get-ObjectName ent) "AcDb3dSolid") (not (vla-GetBoundingBox ent 'minpt 'maxpt)) (mapcar 'print (vl-sort (mapcar '- (vlax-safearray->list maxpt) (vlax-safearray->list minpt) ) '> ) ) ) (princ) ce deuxième qui permet d'enregistrer : (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: " ) "Oui" ) (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33) "a" ) ) (princ descr file) (close file) ) ) (graphscr) (princ) et ce troisième que "Bred" m'a gracieusement donné mais que je n'arrive pas à intégrer : (setq f (open "c://TAB.csv" "w") i 0) (repeat 5 (princ (strcat "Col1;Col2;Col3; Ligne" (rtos (setq i (1+ i))) "\n") f) ) (close f) Je résume ce que je souhaite :Sortir sur une feuille exel, sous forme de tableau, les sections des objets que je sélectionne (Longueur, largeur, epaisseur) J'en appelle donc à vous pour m'aider à m'en sortir car je ne sais pas comment avancer d'avantage. Merci d'avance pour ceux qui prendrons le temps de m'aider.
bryce Posté(e) le 19 mai 2011 Posté(e) le 19 mai 2011 Bonjour, Peut-être quelque chose comme ça : (defun c:dimsection (/ *error* file ent minpt maxpt dims dim i) (vl-load-com) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if file (close file) ) (princ) ) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] : ") "Oui") (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "csv" 1) "w" ) ) ) ) (while T (if (and (setq ent (car (entsel "\nSélectionnez un solide (Echap pour terminer): "))) (setq ent (vlax-ename->vla-object ent)) (= (vla-get-ObjectName ent) "AcDb3dSolid") (not (vla-GetBoundingBox ent 'minpt 'maxpt)) (setq dims (vl-sort (mapcar '- (vlax-safearray->list maxpt) (vlax-safearray->list minpt) ) '> ) );setq dims ) (progn (setq i (length dims)) (foreach dim dims (if file (progn (princ dim file) (if (= i 1) (princ "\n" file) (princ ";" file) ) (setq i (1- i)) ) ) (princ (strcat " " (rtos dim))) );foreach dim );progn );if );while T (*error* nil) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Invité samuelM Posté(e) le 20 mai 2011 Posté(e) le 20 mai 2011 Bonjour! C'est super Bryce. merci pour cette remise en ordre et ce programme. Pour le moment ça me va mais j'aurai peut être des modif à apporter plus tard. mais c'est déjà super. Merci beaucoup
Invité samuelM Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 Bonjour, je reviens pour avoir de l'aide pour des modifications sur ce programme. je voudrai pouvoir nommer chaque sélection que je fais et qu'elle apparaisse dans la feuille exel.
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