Aller au contenu

\"nomenclature\" autocad2004


Messages recommandés

Invité samuelM
Posté(e)

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

Posté(e)
-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

 

./__\.
(.°=°.)
Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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)

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".

Posté(e)
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)

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?

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité