Invité samuelM Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 Bonjour, Voici un programme qui permet de récupérer les dimensions d'un objet 3D et de les enregistrer dans une feuille exel. je voudrai apporter des modifications mais j'aurai besoin de votre aide. (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) ) les modifications que je voudrai apporter sont : - nommer l'objet après l'avoir sélectionné (avec ce code je pense) (setq nom (getstring "\nNommer l'objet sélectionné :")) -faire tourner le programme en boucle pour pouvoir faire plusieurs sélection et plusieurs dénomination. (mais là je sais vraiment pas du tout) merci de votre aide
Tramber Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 -faire tourner le programme en boucle pour pouvoir faire plusieurs sélection et plusieurs dénomination. (mais là je sais vraiment pas du tout) Sois plus précis parce que là, je ne comprends pas vraiment la différence. Se pose quand même la question du NOM à chaque solide. Alors que pourrait-il y avoir de + ? Je te propose le code modifié pour ta première demande toutefois :(je trouve ton code un peu cavalier avec la gestion d'erreur pour arrêter, mais bon,....je ne voudrais pas non plus te freiner dans tes progrès). (defun c:dimsection (/ *error* file ent minpt maxpt dims dim i nom) (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 nom (getstring "\nNommer l'objet sélectionné :")) (setq ent (vlax-ename->vla-object ent)) (= (vla-get-ObjectName ent) "AcDb3dSolid") (not (vla-GetBoundingBox ent 'minpt 'maxpt)) (setq dims (append (vl-sort (mapcar '- (vlax-safearray->list maxpt) (vlax-safearray->list minpt) ) '> ) (list nom)) );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 " " (VL-PRINC-TO-STRING dim))))))) (*error* nil) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 Dernière minute :Je viens de tomber sur ce message ! Dois-je louer la bonne volonté d'enfin bien publier dans le bon forum ? ou m'indigner de voir les sujets se multiplier pour la même chose ? :casstet: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 Tramber, je trouve ton code un peu cavalier avec la gestion d'erreur pour arrêter, mais bon,....je ne voudrais pas non plus te freiner dans tes progrès Tu as du lire un peu trop vite, ce n'est pas le (*error* nil) qui fait sortir de la boucle, mais un retour nil de l'expression (if (and ...) ...).Personnellement je trouve ça plutôt élégant.Le (*error* nil) à la fin permet juste de ne pas répéter les expressions :(if file (close file) ) (princ)à la fin du code.Ça aussi je trouve ça assez élégant, d'ailleurs je l'utilise assez souvent. Il me semble que le code a été écrit par bryce.Si samuelM l'avait écrit, je ne pense pas qu'il aurait eu de problème pour le modifier à sa guise. samuelM, Il semble que tu veuilles courir avant de savoir marcher.Tes demandes montrent que tu as des lacunes dans les fondamentaux du LISP, et tes ambitions sont des programmes demandant une (parfois très) bonne maitrise de la programmation avec ce langage. Ce n'est pas en essayant d'assembler des codes écrits par d'autre (et que tu ne semble pas capable de comprendre) que tu acquerras des bases solides qui te permettrons de voler de tes propres ailes.Fixe toi des objectifs moins ambitieux et essaye de les résoudre tout seul, c'est en faisant des erreurs et en les corrigeant tout seul qu'on apprend le mieux. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité samuelM Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 tramber : Dernière minute :Je viens de tomber sur ce message ! Dois-je louer la bonne volonté d'enfin bien publier dans le bon forum ? ou m'indigner de voir les sujets se multiplier pour la même chose ? en effet je ne l'avais pas publié au bon endroit. c'est pourquoi je l'ai refais ici et je crois que je suis au bon endroit. Gile.en effet ce n'est pas moi qui l'ai écris, et je n'ai pas dis que c'était le cas. c'est un programme qu'un autre membre a réalisé quand j'avais évoqué ma demande la première fois. De plus, il est vrai que j'ai des lacune car je n'ai jamais été formé sur autocad mais sur solidworks. j'ai simplement eu la proposition d'un poste dans une entreprise qui souhaitait me faire évoluer et donc mes demandes sur ce forum sont mes objectifs que je dois remplir lors de mon contrat. A côté de mes interrogation sur le forum, je m’entraîne aussi à faire des petits programme et à comprendre chaque étape. toutes les réponses que chacun apporte m'aide à comprendre et j'ai aussi un livre "programmer autocad".
Tramber Posté(e) le 10 juin 2011 Posté(e) le 10 juin 2011 Tu as du lire un peu trop vite, ce n'est pas le (*error* nil) qui fait sortir de la boucle, mais un retour nil de l'expression (if (and ...) ...). J'ai bien vu. T'inquiètes. Je ne comprenais pas cette construction de la part d'un débutant, c'est tout. Mais je comprends mieux maintenant. Pour le livre "Programmer AutoCAD", je l'ai vu en librairie, c'est juste une initiation.... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Invité samuelM Posté(e) le 14 juin 2011 Posté(e) le 14 juin 2011 Bonjour, Pour le moment, le programme s’exécute juste sur l'objet sélectionné, Je voudrai pouvoir appliquer le programme à plusieurs sélections d'un coup. Je pense qu'il faut commencer par changer "entsel" par "ssget". mais après je suis perdu. je ne sais pas comment appliquer le reste de la fonction à l'ensemble de la liste de sélection. Pouvez vous encore m'aider?
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