Ksow Posté(e) le 25 juillet 2019 Posté(e) le 25 juillet 2019 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 : 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 1
>>NicoM Posté(e) le 25 juillet 2019 Posté(e) le 25 juillet 2019 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.
lili2006 Posté(e) le 25 juillet 2019 Posté(e) le 25 juillet 2019 Bonjour à toutes et tous,Pour pouvoir tester ton prog, il nous faudrait aussi le fcihier "Bloc_Banche_250.dwg",.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Ksow Posté(e) le 25 juillet 2019 Auteur Posté(e) le 25 juillet 2019 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
Invité eklundh80 Posté(e) le 26 juillet 2019 Posté(e) le 26 juillet 2019 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 PromptingCe 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") ) )@+
Ksow Posté(e) le 26 juillet 2019 Auteur Posté(e) le 26 juillet 2019 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 PromptingCe 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
PHILPHIL Posté(e) le 26 juillet 2019 Posté(e) le 26 juillet 2019 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 largeurmais quand on passe en vue avant,on a 188.1 cmet 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Ksow Posté(e) le 26 juillet 2019 Auteur Posté(e) le 26 juillet 2019 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 largeurmais quand on passe en vue avant,on a 188.1 cmet 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é !
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