Azerty Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 Bonjour.Je cherche à automatiser les manipulations suivantes : - Dessin d'un "rectangle" aux proportions A4- Dessin de 2 repères de pliage, hauteur 1 unité- Étirement possible en hauteur, en restant multiple de "29.7" sur 1, 2 ou 3 hauteurs de A4- Étirement possible en largeur, en restant multiple de "21" sur 2, 3 ... 15 largeurs de A4- Copie / réseau de repères de pliage sur la largeur, là où nécessaire.- Explosion du bloc (tout aurait été dessiné dans le calque courant) L'idée de simplifier ces manips, je ne suis surement pas le 1er à l'avoir ...D'ailleurs j'ai trouvé ceci sur la toile :http://traitpoint.blogspot.fr/2010/01/visual-lisp-cadrelsp.html ;;; ============================================= ;;; Cadre.lsp ;;; Fonctions pour le placement d'un Cadre à divers formats multiples de A4 ;;; avec - repérage des marques de pliage et de découpe ;;; - Création du calque et application de sa symbologie ;;; ;;; Auteur : TH ;;; Date création : 12/2009 ;;; Date modification : 02/01/2010 ;;; Usage : ;;; 1 - (PlaceCadre) : Placement d'un cadre A4 par insertion d'un bloc Dynamique ;;; 2 - Déplacement éventuel et étirement du bloc par contraintes dynamiques en multiples de A4 ;;; 3 - (AcheveCadre) : Achève le cadre sélectionné par placement des marques de format et explosion du bloc. ;;; Note : On peut tout à fait attendre la fin du plan pour achever un cadre ;;; On conserve ainsi la possibilité de le redimensionner au besoin. ;;; ============================================= ;;; ============================================= ;;; PlaceCadre ;;; Placement d'un cadre A4 par insertion d'un bloc Dynamique ;;; Usage : (PlaceCadre) -> Sélection du point d'insertion. ;;; ============================================= (defun c:PlaceCadre(/ pt) ;;; On demande et on mémorise le point d'insertion (setq pt (getpoint "\nIndiquez le point d'origine (bas_gauche) du cadre : \n")) (StoSymb) ; Mémorisation du calque et de la symbologie courante (CreeCalque "MEP-CAR-DES-" "continuous" "20" "111" "1") ; Au cas où... On crée le calque avant de s'en servir. (ForceSymb "MEP-CAR-DES-") ; Force le calque et la symbologie ;;; On appelle et on place le bloc (un fichier dwg pour un bloc) au point mémorisé (command "_insert" "Unité:\\Dossier\\Sous_Dossier\\Sous_sous_dossier\\etc...\\etc...\\Cadre_01000.dwg" pt 1 1 0) (RclSymb) ; Rappel du calque et de la symbologie d'origine ) ;;; ============================================= ;;; AcheveCadre ;;; Achève la définition du cadre : place les marques de format et explose le bloc. ;;; Usage : (AcheveCadre) -> sélection du cadre à terminer. ;;; ============================================= (defun c:AcheveCadre(/ e vList obj count) ; On achève bien les chevaux (vl-load-com) (setq e (car (entsel "\nSélection du cadre à finaliser\n"))) ; affecte à e l'entité sélectionnée à l'écran (setq obj (vlax-ename->vla-object e)) ; affecte à obj la correspondance objet de l'entité e (if (vlax-property-available-p obj 'effectivename) ; si l'objet a un nom effectif c'est un bloc (progn (if (= (vlax-get-property obj "effectivename") "Cadre_01000") ; si le nom effectif du bloc est le bon (progn (setq pO (cdr (assoc 10 (entget e)))) ; affecte à pO les coordonnées du point d'Origine du Bloc. (setq xO (car pO)) ; à xO l'abscisse du point d'Origine (setq yO (cadr pO)) ; à yO l'ordonnée du point d'Origine (setq pL (getdynprop obj "Largeur")) ; à pL la Largeur (setq pH (getdynprop obj "Hauteur")) ; à pH la Hauteur ; (princ "xO : ")(princ xO)(princ " , yO : ")(princ yO)(princ " , L : ")(princ pL)(princ " , H : ")(princ pH)(print) (StoSymb) ; Mémorisation du calque et de la symbologie courante (ForceSymb "MEP-CAR-DES-") ; Force le calque et la symbologie (setq vSnap (getvar "osmode")); on mémorise l'accrochage (setvar "osmode" 16393) ; on désactive l'accrochage (if (> pL 210) ; Si le cadre est plus large qu'un A4, on marque les plis sur la largeur (progn (setq count 1) (while (> pL (* count 210)) (plie (+ xO (* count 210)) yO 0 1) ; les plis d'en bas (plie (+ xO (* count 210)) (+ yO pH) 0 -1) ; les plis d'en haut (setq count (+ count 1)) ) ) ) (if (> pH 297) ; Si le cadre est plus haut qu'un A4, on marque les plis sur la hauteur (progn (setq count 1) (while (> pH (* count 297)) (plie xO (+ yO (* count 297)) 1 0) ; les plis de gauche (plie (+ xO pL) (+ yO (* count 297)) -1 0) ; les plis de droite (setq count (+ count 1)) ) ) ) (command "_explode" e) ;;; ON EXPLOSE CE FOUTU BLOC !!! (setvar "osmode" vSnap) ; on restitue l'accrochage (RclSymb) ; Rappel du calque et de la symbologie d'origine ) ) ) ) ) ;;; ============================================= ;;; Plie ;;; place les marques de pli et de découpe aux coordonnées pX,pY ;;; et dans le sens sX ou sY (1, -1) (avec sX xor sY = 0) ;;; Usage : (Plie pX pY sX sY) ;;; ============================================= (defun Plie (pX pY sX sY / x2 y2 x3 y3 x4 y4) (if (= 0 sX) (progn (setq x2 pX)(setq x3 (- pX 5))(setq x4 (+ pX 5)) (setq y2 (+ (* sY 5) pY))(setq y3 pY)(setq y4 pY) ) (progn (setq x2 (+ (* sX 5) pX))(setq x3 pX)(setq x4 pX) (setq y2 pY)(setq y3 (- pY 5))(setq y4 (+ pY 5)) ) ) (command "polylign" (list pX pY) (list x2 y2) "") (command "polylign" (list x3 y3) (list x4 y4) "") ) ;;; ============================================= ;;; getdynprop ;;; Retourne la valeur de la propriété dynamique propname de l'objet bloc obj ;;; usage : (setq pval (getdynprop entité "NomDeProriété")) ;;; ============================================= (defun getdynprop (obj propname / v vval sal tot i curval) (setq v (vla-getdynamicblockproperties obj) vval (vlax-variant-value v) sal (vlax-safearray->list vval) tot (length sal) i 0 ) (while (< i tot) (if (= (vlax-get-property (nth i sal) "PropertyName") propname) (progn (setq curval (vlax-get-property (nth i sal) "Value")) (setq i tot)) (setq i (1+ i)) ) ) (if curval (vlax-variant-value curval)) ) ;;; ============================================= ;;; CreeCalque ;;; Création d'un Calque avec ses attributs ;;; Usage : (CreeCalque "NomDuCalque" "Style de ligne" "Epaisseur" "Couleur" "Tracer") ;;; Tracer = 1 , Ne pas tracer = 0 ;;; Epaisseur : 20 pour 0.20 , -1 pour DuCalque , -1 pour Par_Défaut ... ;;; ============================================= (defun CreeCalque (Calque LT Ep Col Plot) (entmakex (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 70 0) (cons 2 Calque) (cons 62 (atoi Col)) (cons 6 LT) (cons 370 (atoi Ep)) (cons 290 (atoi Plot)) ) ) ) ;;; ============================================= ;;; StoSymb ;;; Mémorisation du calque et de la symbologie courante ;;; Usage : (StoSymb) ;;; ============================================= (defun StoSymb () (setq Calque_0 (getvar "clayer")) (setq Couleur_0 (getvar "cecolor")) (setq LType_0 (getvar "celtype")) (setq Epaiss_0 (getvar "celweight")) ) ;;; ============================================= ;;; RclSymb ;;; Rappel du calque et de la symbologie d'origine ;;; Usage : (RclSymb) ;;; ============================================= (defun RclSymb () (setvar "clayer" Calque_0) (setvar "cecolor" Couleur_0) (setvar "celtype" LType_0) (setvar "celweight" Epaiss_0) ) ;;; ============================================= ;;; ForceSymb ;;; Force le calque et la symbologie "DuCalque" ;;; Usage : (ForceSymb "Nom_Du_Calque") ;;; ============================================= (defun ForceSymb (NomCalque) (setvar "clayer" NomCalque) (setvar "cecolor" "DuCalque") (setvar "celtype" "DuCalque") (setvar "celweight" -1) ; (-1 = "DuCalque") ) Le problème, c'est qu'avec ce LISP j'arrive seulement à insérer un bloc(préalablement créé, nommé CADRE, et en modifiant le chemin d'accès)Mais c'est tout... Pourriez-vous me dépanner ?- avec un .lsp autonome- avec un bloc dynamique qui s'étire en hauteur, et surtout en largeur avec réseau de repères de pliage Toue aide est la bienvenuePar avance, MERCI !!! Une seule chose à dire : MERCI CADxp !
x_all Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 j'ai pas bien compris ton histoire de repère de pliage... un petit dessin en exemple serai peut être pas du luxe car après faire un bloc dynamique avec des état de visibilité doit pas être compliqué... tu veux aller jusqu'à combien de A4 ? quelques trucs sur autocad
alala Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 Bonjour, l'on peu réaliser cela avec un bloc dynamique avec :- 2 paramètres linéaires- 2 actions d'étirement- 2 actions de réseau Ensuite l'on configure les paramètres d'étirement pour avoir un incrément de 210x297 et le tour est joué. Cela correspondrais à la demande? C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
Big666 Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 IMAGINE Cadre ,Cartouche , avec choix du cartouche ,boite DCL pour choisir tous ça . Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
Azerty Posté(e) le 31 juillet 2013 Auteur Posté(e) le 31 juillet 2013 ■C'est quoi " IMAGINE " ? une appli ? ou tu répondais à la personne 2 messages plus haut ? ■ Voici en image une re-explication de mes besoins.http://img15.hostingpics.net/thumbs/mini_585631ScreenShot004.jpg Pas mal de fois par jour, je positionne un cartouche dans l'espace objet d'un .dwg(avec attributs, et dimensionné pour du A4 au 200e)Ensuite je positionne une multitude de rectangles (~ A4 portrait)Une fois leur emplacement acceptable, je redessine un rectangle, égal au cadre extérieurJ'efface tous les "A4 temporaires" pour les remplacer par des repères de pliage(c'est-à-dire des traits d'environ 10 mm le long du cadre (impression 200e) Je cherche un moyen de me faciliter la vieafin d'obtenir directement (Cf. l'image) un cadre aux dimensions multiples d'un A4avec des repères de pliage tous les 210 mm sur papier (soit 42 unités, je bosse en mètres ...) Quand je disais l'équivalent de 15 A4 en largeur, ça fait 3,15 m ça commence a faire beaucoupMais on va dire de 2 à 10 sur la largeur ... le plus souvent sur une hauteur, mais parfois 2, et rarement 3 mais ça arrive. ■J'ai posté dans LISP- d'une part car en cherchant sur la toile (fr) je suis tombé sur le code cité plus haut- d'autre part, je m'étais dis qu'il serait peut-être plus simple de demander de l'aide en deux étapes 1 ==> un bloc pour étendre un cadre ne multiple de A42 ==> un .lsp pour "dessiner des repères à l'intérieur d'un rectangle, sur les 2 côtés les plus longs" ■Je ne suis pas très doué avec les blocs dynamiquesJ'ai bidouillé sans aucun résultat probant ...Mais si tu me dis qu'avec ces 3 éléments là, ça peut fonctionner, je vais déjà essayer d'en comprendre le fonctionnement 1 à la fois Une seule chose à dire : MERCI CADxp !
alala Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 C'est donc bien possible avec un bloc Dynamique. J'explique la procédure de travail : - Ouvrir un nouveau plan - BEDIT en ligne de commande ou Outils -> Editeur de blocs- choisir <Dessin courant> - dessiner un cadre de la taille désiré (210x297 - les marges donc 10mm de sur chaque bord si besoin = 190x277) aux coordonnées 0,0 - dessiner les marques de pliage à l'extérieur du cadre de façon à obtenir les 4 coins marqués - dans la palette d'outils de création de blocs, choisir, dans l'onglet "paramètres", la fonction "Linéaire"- placer tel une côte ce paramètre sur le bas (à l'horizontal) du cadre précédemment dessiné (de gauche à droite de préférence)- ouvrir les propriétes de l'élément déposé et changer dans "jeu de valeurs" : - "Type de dist" -> Incrément - "Dist incrément -> 210 - "Dist minimum - > 190- changer également la propriété "Nombre de poignées" -> 1-dans la palette d'outils de création de blocs, choisir, dans l'onglet "paramètres", la fonction "Linéaire" - placer tel une côte ce paramètre sur la droite (à la verticale) du cadre précédemment dessiné (de haut en bas de préférence)- ouvrir les propriétes de l'élément déposé et changer dans "jeu de valeurs" : - "Type de dist" -> Incrément - "Dist incrément -> 297 - "Dist minimum - > 277- changer également la propriété "Nombre de poignées" -> 1 - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Etirer"- sélectionner le paramètre horizontal- Sélectionner le point ou se trouve la flèche - Dessiner une emprise qui englobe la partie droite (du coté de la flèche du paramètre) du cadre précédemment dessiné- sélectionner le cadre - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Etirer"- sélectionner le paramètre vertical- Sélectionner le point ou se trouve la flèche - Dessiner une emprise qui englobe la partie basse (du coté de la flèche du paramètre) du cadre précédemment dessiné- sélectionner le cadre - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Réseau"- sélectionner le paramètre horizontal- sélectionner les marques de pliage verticale en bas et en haut à droite (du coté de la flèche du paramètre)- distance : 210 - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Réseau"- sélectionner le paramètre vertical- sélectionner les marques de pliage horizontale en bas à droite et à gauche (du coté de la flèche du paramètre)- distance : 297 - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Déplacer"- sélectionner le paramètre horizontal- Sélectionner le point ou se trouve la flèche - sélectionner les marques de pliage horizontale en bas et en haut à gauche (du coté de la flèche du paramètre) - dans la palette d'outils de création de blocs, choisir, dans l'onglet "Actions", la fonction "Déplacer"- sélectionner le paramètre Vertical- Sélectionner le point ou se trouve la flèche - sélectionner les marques de pliage Verticale en bas à gauche et à droite (du coté de la flèche du paramètre) Enregistrer!Enjoy! :D C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
Julian-Nihon Posté(e) le 31 juillet 2013 Posté(e) le 31 juillet 2013 Bonjour Je ne sais pas si j'ai bien compris ton problème, mais j'ai quand même fait un test. Au pire, si ça ne correspond pas, ça pourra toujours te servir d'exemple ... Sur ce, bonne journée a tous !
x_all Posté(e) le 1 août 2013 Posté(e) le 1 août 2013 je comptai m'y coller quand (ou si) j'avais un peu de temps, mais c'est bien ce que j'avais en tête... comme quoi le lisp ne résout pas tout :) quelques trucs sur autocad
Azerty Posté(e) le 1 août 2013 Auteur Posté(e) le 1 août 2013 Merci pour vos rapides réponses ! @ Julian-NihonC'est un peu près ça, à quelques détails près :- les caractères asiatiques ne sont pas installés sur le PC que j'ai devant les yeux ...- les repères verticaux sont inutiles (une fois toute la longueur pliée, le cartouche A4 sert de repère)- les repères de pliage au milieu du plan tels une limite communale sont ... euh ... sympas ^^ mais gênants :D- dimensions 10x trop grandes pour mon usage en particulier (et à priori, les blocs dynamiques n'aiment pas les mises à l'échelle) @ AlalaMerci pour toutes ces explications détaillées.En adaptant un peu, j'ai réussi à obtenir exactement ce que je voulais.Une toute petite remarque par rapport à tes explications : si on positionne les 2 flèches au même endroit, en bas à droite du cadre, il n'est pas possible de descendre d'une rangée, sans élargir le cadre (en gros faire un A2) car les flèches dynamiques ne sont pas gérées dans le cycle de sélection des trucs superposés.Mais me suis adapté, no souci ^^ En tout cas, merci à tous, CADXP (comme depuis 10 ans ^^) m'a encore simplifié la vie ! EDIT :@ x_allEffectivement, le lisp trouvé sur la toile semble non-autonomeEt à condition d'avoir une version post-blocs dynamiques (v2007 ? 2008 ? je ne sais plus trop) c'est vraiment simple et efficace ... Une seule chose à dire : MERCI CADxp !
alala Posté(e) le 1 août 2013 Posté(e) le 1 août 2013 Pour les flèches superposés je le déconseillerais, mais dans ton cas tu souhaitait avoir un élargissement vers le bas/droite de ton cadre, donc pas trop le choix. Personnellement dans mes test je place les paramètre un peu plus loin (au bord des 210/297 mon cadre étant plus petit à cause des marges) et tout fonctionne, mais suivant le besoin il faut effectivement adapter l'outil. Content que tu ai pu réaliser ton besoin. C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
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