Aller au contenu

[Résolu] Cadre (bloc dynamique) multiple de A4


Azerty

Messages recommandés

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 bienvenue

Par avance, MERCI !!!

Une seule chose à dire : MERCI CADxp !

Lien vers le commentaire
Partager sur d’autres sites

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!

Lien vers le commentaire
Partager sur d’autres sites

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érieur

J'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 vie

afin d'obtenir directement (Cf. l'image) un cadre aux dimensions multiples d'un A4

avec 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 beaucoup

Mais 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 A4

2 ==> 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 dynamiques

J'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 !

Lien vers le commentaire
Partager sur d’autres sites

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!

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos rapides réponses !

 

@ Julian-Nihon

C'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)

 

@ Alala

Merci 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_all

Effectivement, le lisp trouvé sur la toile semble non-autonome

Et à 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 !

Lien vers le commentaire
Partager sur d’autres sites

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!

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é