Aller au contenu

Calepinage / Rotation de banche


Ksow

Messages recommandés

Bonjour !

Oui c'est encore moi, le mec chiant avec son LISP de quadrillage :D

 

MAIS cette fois-ci je tenais à partager un programme que j'ai fait en parallèle sur l'insertion automatique de blocs dynamiques de banches pour la réalisation de calepinage (et de rotation de banches).

 

Ci-joint la représentation des blocs dynamiques avec plusieurs visibilités :

 

1564047953-banches.png

 

Donc le but du programme est l'insertion automatique de banches avec le choix entre les différentes visibilités (avec/sans ré-hausse/sous-hausse) mais aussi le fait de pouvoir incrémenter le jour de rotation et ranger les banches par calques selon le jour. De plus j'ai ajouté la possibilité de simplifier les blocs en désactivant un calque qui permet de n'avoir plus que les joints et les trous de banches (en vert et rouge) ce qui reste plus agréable pour dessiner.

 

Si je partage ce programme, déjà si jamais quelqu'un en a besoin et bien tant mieux, sinon c'est pour m'en servir pour apprendre.

J'aimerai savoir si vous avez une idée de comment l'améliorer (je pars du principe qu'il est toujours possible d'améliorer un programme) tout aussi bien dans l'écriture que dans son utilisation et m'expliquer pourquoi, voilà tout. :P

 

Ci-joint le programme LISP :

(Edit suite à la remarque de eklundh80)

;;                                      +---------------------------+
;;                                      |   Projet : CALEPINAGE     |
;;                                      +---------------------------+

;;;*****************
;;;     DONNEES
;;;*****************

;;Recuperation et redefinition des donnees utilisateur
(defun init ()

(setq acrobj (getvar "OSMODE"))				;Accrochage aux objets
(setq units_angle (getvar "AUNITS"))			;Unites angulaire
(setq nbdeci (getvar "LUPREC"))				;Nombre de decimal
(setq attreq (getvar "ATTREQ"))
(setq attdia (getvar "ATTDIA"))

(setvar "OSMODE" 167)					;Accrobj (Ext'/Mil'/Centre/Intersect'/Perpendi')
(setvar "AUNITS" 0)					;Angle en degres
(setvar "LUPREC" 2)					;Decimale choisie : 2
(setvar "ATTREQ" 1)
(setvar "ATTDIA" 0)

)

;;RàZ des modifications des donnees utilisateur
(defun reinit ()
(setvar "OSMODE" acrobj)
(setvar "AUNITS" units_angle)
(setvar "LUPREC" nbdeci)
(setvar "ATTREQ" attreq)
(setvar "ATTDIA" attdia)
)

(defun IncrCalq (name value inf sup)

(cond
	((= calq_color sup) (setq calq_color inf))
	((or (= calq_color nil) (< calq_color inf) (> calq_color sup)) (setq calq_color value))
	((and (<= calq_color sup) (>= calq_color inf)) (setq calq_color (1+ calq_color)))
)
(setq i (1+ i))
(setq calq_name (strcat name (rtos i 2 0)))
(VerifCalq calq_name calq_color "CONTINUOUS")

)

(defun VerifCalq (name color typel)
(if 
	(not (tblsearch "LAYER" name))
	(command "_LAYER" "N" name "CO" color name "TL" typel name "")
)
	(command "_LAYER" "CH" name "")
)

(defun Ins_Banche (Pt)

(cond
	((= SH RH "Non") (setq Chx "SH / RH" Num "0"))
	((and (/= SH "Non") (/= RH "Non")) (setq Chx "SH / RH" Num (strcat SH " / " RH)))
	((and (= SH "Non") (/= RH "Non")) (setq Chx "RH" Num RH))
	((and (/= SH "Non") (= RH "Non")) (setq Chx "SH" Num SH))
)
(setq Vis (strcat Chx " - " Num))
(setq name (strcat "Bloc_Banche_" Dim))
(command "-INSERER" name Pt 1 1 0 "")
(cond
	((= Vue "Face") (setpropertyvalue (entlast) (strcat "AcDbDynBlockProperty" "Visibilité1") Vis))
	((= Vue "Dessus") (setpropertyvalue (entlast) (strcat "AcDbDynBlockProperty" "Visibilité1") Vue))
)

)

;;; *****************
;;;     PROGRAMME
;;; *****************

(defun c:CALEPINAGE (/ Choix_unit Choix Dim Vue SH RH Chx Num name acrobj units_angle nbdeci attreq attdia)

(init)
(initget 1 "MIllimetre Centimetre MEtre")
(setq Choix_unit (getkword "\nSpécifier l'unité du dessin [MIllimetre/Centimetre/Metre] :  "))
(cond
	((= Choix_unit "MIllimetre") (setvar "INSUNITS" 4))
	((= Choix_unit "Centimetre") (setvar "INSUNITS" 5))
	((= Choix_unit "MEtre") (setvar "INSUNITS" 6))
)
(if (null i) (setq i 0))
 	  
(initget "62.5 125 250")
(setq Dim (cond ((getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ?")) ("250")))
 
(initget "100 150 Non")
(setq SH (cond ((getkword "\nSouhaitez-vous une sous-hausse [100/150/Non] <Non> ?")) ("Non")))
 
(initget "500 Non")
(setq RH (cond ((getkword "\nSouhaitez-vous une ré-hausse [500/Non] <Non> ?")) ("Non")))
 
(initget "Face Dessus")
 	(setq Vue (cond ((getkword "\nSous quelle vue souhaitez-vous l'implanter [Face/Dessus] <Dessus> ? ")) ("Dessus")))
 
(while (/= Choix "Quitter")
	(initget "J-Incrément Banche Quitter Implanter")
	(if (null (setq Choix (getkword "\nQue souhaitez-vous faire [J-Incrément/Banche/Quitter] <Implanter> ? ")))
		(progn
			(setq Choix "Implanter")
			(while (setq Pt (getpoint "\nVeuillez saisir un nouveau point d'insertion : "))
				(Ins_Banche Pt)
			)
		)
		(cond
			((= Choix "J-Incrément") (IncrCalq "00-CALEPINAGE JOUR " 1 1 7))
			((= Choix "Banche")
				(progn
				  	(initget "62.5 125 250")
					(setq Dim
					       (cond ((getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ? ")) ("250"))
     						)
					
				  	(initget "100 150 Non")
				  	(setq SH
					       (cond ((getkword "\nSouhaitez-vous une sous-hausse [100/150/Non] <Non> ?")) ("Non"))
					 )
					
				  	(initget "500 Non")
				  	(setq RH
					       (cond ((getkword "\nSouhaitez-vous une ré-hausse [500/Non] <Non> ?")) ("Non"))
					 )
					
				  	(initget "Face Dessus")
				  	(setq Vue
					       (cond ((getkword "\nSous quelle vue souhaitez-vous l'implanter [Face/Dessus] <Dessus> ?")) ("Dessus"))
					 )
				
				)
			)
		)
	)
)

)

 

Bonne journée.

 

Ksow

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Je te remercie d'avoir poster ce sujet juste avant le miens !

Dans ton lisp j'ai trouvé la réponse à ma question :D

 

Sinon ce Lisp semble très bien écrit mais venant d'un débutant comme moi, ce n'est pas forcément très crédible !

Projeteur Béton Armé sur Revit et AutoCAD 2023

Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.

Lien vers le commentaire
Partager sur d’autres sites

Je te remercie d'avoir poster ce sujet juste avant le miens !

Dans ton lisp j'ai trouvé la réponse à ma question :D

 

Sinon ce Lisp semble très bien écrit mais venant d'un débutant comme moi, ce n'est pas forcément très crédible !

 

Merci par rapport à l'écriture de mon lisp, j'essaye d'écrire le plus clair possible histoire de ne pas me perdre non plus quand je travaille dessus.

 

A vrai dire je suis tout aussi débutant haha.. En tout cas, si ça t'a aidé et bien tant mieux :D

 

 

Bonjour à toutes et tous,

Pour pouvoir tester ton prog, il nous faudrait aussi le fcihier "Bloc_Banche_250.dwg",..

 

Ci-joint le fichier DWG qui me sert de support lors de mes essais :

https://transfernow.net/8215g2b5ibfa

Lien vers le commentaire
Partager sur d’autres sites

Invité eklundh80

Salut,

Je suis tombé , il y a peu, sur cette explication de Lee Mac pour Getkword qui permet d'éviter les entrées nulles à traiter avec (if (null (etc::

Lee Mac Prompting

Ce qui pourrait simplifier une partie de ton code de la façon suivante:

 

Lignes initiales:

(initget "62.5 125 250")
(if (null (setq Dim (getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ? ")))
 (setq Dim "250")
 )

 

Nouvelles lignes:

(initget "62.5 125 250")
(setq Dim (cond ((getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ? "))
	("250")
	)
     )

@+

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je suis tombé , il y a peu, sur cette explication de Lee Mac pour Getkword qui permet d'éviter les entrées nulles à traiter avec (if (null (etc::

Lee Mac Prompting

Ce qui pourrait simplifier une partie de ton code de la façon suivante:

 

Lignes initiales:

(initget "62.5 125 250")
(if (null (setq Dim (getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ? ")))
 (setq Dim "250")
 )

 

Nouvelles lignes:

(initget "62.5 125 250")
(setq Dim (cond ((getkword "\nQuelle taille de banche souhaitez-vous implanter [62.5/125/250] <250> ? "))
	("250")
	)
     )

@+

 

Salut et merci pour l'info !

J'ai essayé et ça fonctionne très bien :)

J'ai mis le programme à jour.

 

Bonne journée.

 

Ksow

Lien vers le commentaire
Partager sur d’autres sites

Hello Ksow

 

 

je viens de regarder tes blocs.

 

ils semblent qu'il ne sont pas a l'échelle

 

la vue de dessus est bonne, on a bien 250cm de largeur

mais quand on passe en vue avant,on a 188.1 cm

et tes réhausses de 50cm font 37.6 cm

 

ca doit etre du a une importation en inch peut etre de tes blocs que tu as redécomposé

 

et pour alléger le fichier, pourquoi ne pas faire des bloc en cm ( ou metre, ou millimetre ) seulement et quand tu demandes si tu bosses en metre ou millimetre, de leurs donner une échelle X,Y,Z de 10 ou de .1

 

ca evite d'avoir les fichiers en metre et millimetre

 

 

a+

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Hello Ksow

 

 

je viens de regarder tes blocs.

 

ils semblent qu'il ne sont pas a l'échelle

 

la vue de dessus est bonne, on a bien 250cm de largeur

mais quand on passe en vue avant,on a 188.1 cm

et tes réhausses de 50cm font 37.6 cm

 

ca doit etre du a une importation en inch peut etre de tes blocs que tu as redécomposé

 

et pour alléger le fichier, pourquoi ne pas faire des bloc en cm ( ou metre, ou millimetre ) seulement et quand tu demandes si tu bosses en metre ou millimetre, de leurs donner une échelle X,Y,Z de 10 ou de .1

 

ca evite d'avoir les fichiers en metre et millimetre

 

 

a+

 

Phil

 

Salut,

 

Effectivement tu as raison! C'est plutôt étrange car si je rentre dans le bloc de ré-hausse il est à la bonne échelle. Comme tu dis j'ai du avoir un problème lors de son importation, je vais essayé de régler ça.

 

Sinon concernant l'utilisation d'un seul bloc avec dans une seule unité et d'utiliser une échelle est tout simplement dû au fait que je ne réussissais pas à le faire... Du coup la solution que j'ai trouvé a été de créer plusieurs blocs d'échelle différente...

 

Merci :)

 

EDIT : il s'agissait bien d'un problème d'échelle pour mes blocs, je les ai modifié un par un et tout est bon maintenant. J'ai vérifier toutes mes dimensions et tout correspond bien à ce qui est souhaité.

Encore merci pour me l'avoir signalé !

Lien vers le commentaire
Partager sur d’autres sites

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é