JPhil
Membres-
Compteur de contenus
207 -
Inscription
-
Dernière visite
-
Jours gagnés
6
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par JPhil
-
Quelque chose comme ça ? "Folio précédent :" $(-,$(getvar,ctab),1) "/" "Folio courant :" $(getvar,ctab) "/ Folio suivant :" $(+,1,$(getvar,ctab)) [Edit] Fonctions DIESEL >>> ici <<<
-
Intéressant le ctrl+clique mais il ne faut pas que le bloc possède un lien hyperlien.
-
Publier une sélection de présentation automatiquement
JPhil a répondu à un(e) sujet de yusukens82 dans Pour aller plus loin en LISP
C'est normal dans le sens où je n'ai pas proposé un programme prêt à l'emploi, j'ai juste proposé des idées pour que tu puisses faire ton propre programme. -
[Résolu] Ca fonctionne à l'horizontale, mais pas à la verticale (insertion de bloc aligné).
JPhil a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Dans la fonction polar, la valeur de la variable rot doit être en radian. Est-ce le cas ? En regardant ailleurs sur d'autres forums il s'avère que la variable rot est définie comme cela (setq rot (angle p1 p2)). Pour ech et pM c'est bon. -
[Résolu] Ca fonctionne à l'horizontale, mais pas à la verticale (insertion de bloc aligné).
JPhil a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Quand le mur est en biais ça donne quoi ? [Edit] Titre : Ça fonctionne à l'horizontale, mais pas à la verticale (insertion de bloc aligné). Message : il fonctionne quand le mur est vertical (hachures possibles) mais pas quand il est horizontal Ça fonctionne à quel moment ^^ ? -
Publier une sélection de présentation automatiquement
JPhil a répondu à un(e) sujet de yusukens82 dans Pour aller plus loin en LISP
Etape 1 - Récupération des onglets commençant par les lettres "Exe" : ;;; Listing de tous les onglets "Exe*" (vlax-for layout (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) (if (/= (vla-get-name layout) "Model") (if (= (wcmatch (vla-get-name layout) "Exe*)) (setq lstlay (vl-list* (vla-get-name layout) lstlay)) ) ; fin if ) ; fin if layout "Model" ) ; fin vlax ;;; Fin listing de tous les onglets "Exe*" lstlay : liste tous les onglets commençant par "Exe" Prévoir un traitement pour les mettre dans l'ordre. Etape 2 - Exécution de la commande publier : (GETDIR) (mkdsd lst typ dwf out vf) ;;; sauvegarde état boite de dialogue (setq oldFD (getvar "FILEDIA")) ;;; boite de dialogue désactivée (setvar "FILEDIA" 0) ;;; publication avec le fichier dsd (command "-publish" filp) ;;; restauration boite de dialogue (setvar "FILEDIA" oldFD) GETDIR va demander où enregistrer le fichier final (DSD et PDF) filp c'est le répertoire sélectionné par GETDIR avec comme nom de fichier "temppub.dsd" Fonction MKDSD ;;===========================================================================;; ;; MKDSD IS A UTILITY WHICH WILL CONSTRUCT A DRAWING SET DESCRIPTION FILE ;; ;; (*.DSD) FOR CONFIGURATION OF THE "PUBLISH" COMMAND ;; ;; ;; ;; ARGUMENTS: LST -> A LIST - OR LIST OF LISTS - COMPRISED OF: ;; ;; 1) SHEET NAME (STR); USUALLY THE NAME OF THE DRAWING ;; ;; 2) FULL DRAWING PATH (STR), INCLUDING FILE NAME ;; ;; 3) LAYOUT NAME (STR) ;; ;; 4) PAGE SETUP (STR); NOTE - EMPTY STRING IF PAPERSPACE ;; ;; 5) SHEET PATH (STR); TYPICALLY THE SAME AS DRAWING PATH ;; ;; TYP -> AN INTEGER, INDICATING THE TYPE OF OUTPUT: ;; ;; 0 - DWF, SINGLE SHEETS ;; ;; 1 - DWF, MULTI-SHEET ;; ;; 2 - PRINTER SPECIFIED IN PAGE SETUP ;; ;; 3 - DWFX, SINGLE SHEETS ;; ;; 4 - DWFX, MULTI-SHEET ;; ;; 5 - PDF, SINGLE SHEET ;; ;; 6 - PDF, MULTI-SHEET ;; ;; DWF -> OUTPUT (STR) - FULL PATH/NAME FOR MULTI-SHEET FILE ;; ;; OUT -> OUTPUT (STR) - PATH ONLY FOR SINGLE SHEET FILES ;; ;; (NAMES TAKEN FROM INDIVIDUAL SHEET ;; ;; NAMES, PER LST ARGUMENT, ABOVE) ;; ;; VF -> BOOLEAN - INDICATES WHETHER TO OPEN GENERATED FILE ;; ;;===========================================================================;; (defun mkdsd (lst typ dwf out vf / D-S-D FIL FLDSD I S X Y) (setq d-s-d (open (setq fil (strcat PubPath "temppub.dsd")) "w")) (setq filp fil) ; FLDSD CONSTRUCTS STRINGS BASED ON THE LST ARGUMENT, ; TO BE WRITTEN INTO THE DSD. (defun fldsd (strlst / ) (mapcar '(lambda (s) (write-line s d-s-d)) (append (mapcar '(lambda (x y) (vl-string-subst x "\|/" y)) strlst (list "[DWF6Sheet:\|/]" "DWG=\|/" "Layout=\|/" "Setup=\|/" "OriginalSheetPath=\|/" ); list ); mapcar (list "Has Plot Port=0" "Has3DDWF=0") ); append ); mapcar ); fin defun fldsd (mapcar '(lambda (i) (write-line i d-s-d)) (list "[DWF6Version]" "Ver=1" "[DWF6MinorVersion]" "MinorVer=1" ); list ); mapcar (if (listp (car lst)) (mapcar 'fldsd lst) (fldsd lst) ); if (mapcar '(lambda (i) (write-line i d-s-d)) (list "[Target]" (strcat "Type=" (itoa typ)) (strcat "DWF=" dwf) (strcat "OUT=" out) "PWD=" "[MRU block template]" "MRU=0" "[MRU Local]" "MRU=0" "[MRU Sheet List]" "MRU=0" "[AutoCAD Block Data]" "IncludeBlockInfo=0" "BlockTmplFilePath=" "[SheetSet Properties]" "IsSheetSet=FALSE" "IsHomogeneous=FALSE" "SheetSet Name=" "NoOfCopies=1" "PlotStampOn=FALSE" (strcat "ViewFile=" (if vf "TRUE" "FALSE")) "JobID=0" "SelectionSetName=" (strcat "AcadProfile=" (getvar "cprofile")) "CategoryName=" "LogFilePath=" "IncludeLayer=FALSE" "LineMerge=FALSE" "CurrentPrecision=" "PromptForDwfName=FALSE" "PwdProtectPublishedDWF=FALSE" "PromptForPwd=FALSE" "RepublishingMarkups=FALSE" "PublishSheetSetMetadata=FALSE" "PublishSheetMetadata=FALSE" "3DDWFOptions=0 1" ); list ); mapcar (close d-s-d) fil ); fin defun mkdsd Fonction GETDIR (defun GETDIR( / cdl rep) (setq cdl (vlax-create-object "Shell.Application") rep (vlax-invoke cdl 'browseforfolder 0 "Sélectionnez la branche de répertoires à traiter" 512 "")) (vlax-release-object cdl) (setq PubPath (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\")) ) ; fin defun GETDIR -
Le lieu géographique est forcément composé de 5 caractères. Les deux premiers caractères concernent le type : LC pour local, CR pour couloir, SA pour salle ... Les trois derniers caractères concernent le numéro unique par type. Chaque local a un numéro unique, chaque couloir a un numéro unique ... Mais un couloir peut être sur plusieurs niveaux : 2R-CR205, 3R-CR205, 4R-CR205 ... C'est plutôt pratique quand tu as un couloir(/escalier) en colimaçon par exemple. Donc c'est lié à la fois à la pièce mais aussi à l'espace.
-
En étant côté système le fichier génie civil existe déjà. Donc je le prends et m'adapte pour créer mes calques avec une routine lisp. Exemple : Si TOP3R-CR205-_-W existe je vais créer les calques de ma discipline : - EBT3R-CR205-LUM-E - EBT3R-CR205-LUM-T - EBT3R-CR205-ARM_COF-E - EBT3R-CR205-ARM_COF-T - EBT3R-CR205-CDC-E - EBT3R-CR205-CDC-T - ... En fait dans le calque TOP3R-CR205-_-W, je vérifie la discipline "TOP" et la description de l'entité "W", si OK, je récupère le niveau "3R" et le lieu géographique "CR205". Et puis comme on est en lisp j'en profite pour mettre une couleur et un type de ligne à chaque calque. Ca veut dire que si le calque TOP3R-CR206-_-W n'existe pas je n'aurais jamais ces calques là : - EBT3R-CR206-LUM-E - EBT3R-CR206-LUM-T - EBT3R-CR206-ARM_COF-E - EBT3R-CR206-ARM_COF-T - EBT3R-CR206-CDC-E - EBT3R-CR206-CDC-T Donc j'ai fait en sorte que le programme s'adapte à chaque situation, si le calque existe tu crées les calques de ta discipline, si le calque n'existe pas tu ne crées rien et tu passes au suivant. Donc oui, il y a plusieurs centaines de calques à gérer pour une seule discipline. Mais quand c'est le programme qui crée tous les calques c'est moins pénible que de les créer un à un.
-
C'est normalement une codification à appliquer avec ou sans lisp. Mais quand tu gères un bâtiment (1 fichier avec x niveaux), avec un lisp c'est moins long et moins source d'erreur que de nommer les calques un par un à la mano. La discipline est obligatoire chez nous car sinon c'est le foutoir surtout en synthèse. Pour le lieu géographique ça peut être : - le numéro du couloir (d'où CRxxx), - le numéro de la salle (d'où SAxxx), - le numéro du local (d'où LCxxx), - ... Le reproche qui est fait de la part des personnes qui ne travaillent pas avec 1 fichier avec x niveaux, c'est que bien souvent tu vas créer un calque juste pour un seul objet. Donc les personnes ne comprennent pas l'utilité. Or, si tout est bien séparé (discipline, code géographique, ...) tu faits ce que tu veux dans les fenêtres de présentations. Mais encore une fois, j'ai travaillé avec 1 fichiers avec x niveaux, donc cette organisation me convient. C'est quand je passe sur 1 fichier avec 1 niveau que ça me perturbe 😋
-
Il nous faut plus de données d'entrée car la pas facile de t'aider. Exemple par chez moi pour nommer un calque : [A]-[B]-[C]-[D] [A] : minimum 3 caractères avec un maximum de 5 caractères, contient la discipline (sur 3 caractères) suivi du niveau (sur 2 caractères) [B] : minimum 1 caractères avec un maximum de 5 caractères, contient le lieu géographique (sur 5 caractères) ou "_" si lieu géographique inconnu [C] : minimum 1 caractères avec un maximum de 8 caractères, contient le texte explicatif (sur maximum 8 caractères, "_" inclus) ou "_" si texte explicatif inconnu [D] : minimum 1 caractères avec un maximum de 1 caractère, contient la description de l'entité graphique (E pour objet, T pour texte, C pour cotation, H pour hachure ...) Ce qui donne : EBT-CR205-CDC-E EBT2R-SA255-EQUIP_BT-T ...
-
Garder certain objet d'une sélection
JPhil a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2020-2024
@Luna, J'utilise de plus en plus la commande "Burst" à la place de la commande "Décomposer" lorsqu'il y a des blocs. -
Faire des renvois de folio via un champ et un bloc
JPhil a répondu à un(e) sujet de Val37 dans AutoCAD 2018
Idée de renvois de folio. En présentation, un cartouche A3, un texte à la verticale à gauche et un autre à droite. 1) si le nom des présentations est "Folio 01", "Folio 02", "Folio 03", ... ou plus simplement "01", "02", "03", ... Le cartouche affiche le "Folio 02" en récupérant le nom de la présentation. Le texte à gauche affiche "Folio 01" en testant si le folio en cours est différent de "Folio 01" en faisant (strcat "Folio " (- (itoa "02") 1)) sinon ne rien afficher Le texte de droite affiche "Folio 03" en testant que la présentation "Folio 03" existe en faisant (strcat "Folio " (+ (itoa "02") 1)) sinon ne rien afficher 2) raisonnement identique en allant chercher la valeur de l'attribut du numéro de folio dans le cartouche Autre possibilité : Dans l'espace objet, dessiner autant de cadre que de folio, insérer un texte à gauche et un texte à droite dans les cadres. Utiliser la méthode 1 en utilisant des champs dynamiques Problème en vue : Lorsque tu as 2 renvois sur un même côté et/ou des renvois en bas et/ou en haut en plus des renvois gauche et/ou droite, ça devient plutôt compliqué à faire d'un point de vue automatique. -
Tu as le site de (gile) >>> ici <<< ou de didier >>> ici <<<
-
(setq dwgname (GETVAR "dwgname")) (setq lendwg (strlen dwgname)) (setq dwgname (substr dwgname 1 (- lendwg 4))) (setq pdfname (strcat (getvar "dwgprefix") dwgname "_" (getvar "ctab") ".pdf")) (command "_-EXPORT" "_PDF" "T" pdfname) En faisant ça ça fonctionne chez moi. En plus compact : (setq pdfname (strcat (getvar "dwgprefix") (substr (GETVAR "dwgname") 1 (- (strlen (GETVAR "dwgname")) 4)) "_" (getvar "ctab") ".pdf")) (command "_-EXPORT" "_PDF" "_C" "_NO" pdfname) C'est la partie ( "pdf\\" ) qui coince dans la variable pdfname.
-
Windows 10 et outlook 2007
JPhil a répondu à un(e) sujet de Olivier Eckmann dans Windows trucs et astuces
Je pense qu'il faudrait se rapprocher de Microsoft pour voir les possibilités. -
Pour l'export PDF tu peux t'inspirer de ce que j'ai fait >>> ici <<<
-
Ou BATTMAN.
-
Récupération du nom de SCU lié à un Viewport d'une présentation
JPhil a répondu à un(e) sujet de fabcad dans AutoCAD 2020-2024
Je ne sais pas si on peut récupérer le nom du SCU nommé dans une fenêtre mais je sais qu'on peut changer le SCU dans la fenêtre sans changer la vue finale. Je m'explique : Etape 1 : dans une fenêtre tu utilises un SCU nommé (ou SCU perso) en oubliant pas d'utiliser la commande "repere" afin d'avoir le rendu souhaité, Etape 2 : tu changes ton SCU nommé (ou SCU perso) en SCU général en oubliant volontairement d'utiliser la commande "repere" Etape 3: tu verrouilles la fenêtre Dans ce cas là il est impossible d'avoir une information fiable concernant le SCU utilisé. -
Données étendues avec le lisp CAT de Patrick_35
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Merci @lecrabe de me confirmer la dangerosité de cette manipulation. Le risque étant la perte d'informations si on y prend pas garde, ce qui dans mon cas peut être très grave. Merci @(gile) pour ce lisp. -
Données étendues avec le lisp CAT de Patrick_35
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Coucou @Luna, Sur la théorie, je pense avoir compris la manœuvre, c'est sur la pratique que j'ai peur. Modifier des données étendues de plusieurs documents dont plusieurs centaines de personnes se basent dessus pour faire leurs études, me fait dire "prudence prudence". -
Données étendues avec le lisp CAT de Patrick_35
JPhil a posté un sujet dans Pour aller plus loin en LISP
Est-il possible de copier en plus des attributs les données étendues d'un bloc à un autre, en se basant sur le programme CAT de Patrick_35 ? Source de l'excellent programme CAT de Patrick_35 ;;;================================================================= ;;; ;;; CAT.LSP V2.01 ;;; ;;; Copier des attributs ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun c:cat(/ att bl doc ent s sel *errcat*) ;========================================================================= ; Gestion des erreurs ;========================================================================= (defun *errcat* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (vl-load-com) (setq s *error* *error* *errcat* doc (vla-get-activedocument (vlax-get-acad-object)) ) (vla-startundomark doc) (and (setq ent (entsel "\nSélectionnez le bloc d'origine : ")) (setq ent (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-hasattributes ent) :vlax-true) (princ "\nSélectionnez les blocs destinataires") (ssget (list (cons 0 "insert") (cons 66 1))) (progn (setq att (vlax-invoke ent 'getattributes)) (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (mapcar '(lambda(a b)(vla-put-textstring a (vla-get-textstring b))) (vlax-invoke bl 'getattributes) att) ) (princ (strcat "\n" (itoa (vla-get-count sel)) " bloc(s) modifié(s).")) (vla-delete sel) ) ) (vla-endundomark doc) (setq *error* s) (princ) ) (setq nom_lisp "CAT") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) Quels sont les risques ? Merci. -
Ici Meridian de BlueCielo avec champ dynamique pour Word/AutoCAD, sinon MezzoTeam mais celui c'est plus stockage.
-
Sélection manuelle / Panneau Propriété " aucune sélection"
JPhil a répondu à un(e) sujet de Chloé17 dans AutoCAD 2019
Mon raccourcis "Restaurer les paramètres par défaut" pour AutoCAD 2020 pointe ici : Je suppose que pour AutoCAD 2022 tu devrais y retrouver le programme "AdMigrator.exe" là : -
Test contrôle d'attribut de bloc en doublon
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
En plus c'est pas comme si je ne la connaissais pas celle-là xD -
Test contrôle d'attribut de bloc en doublon
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Suite à différents essais, il faut changer (if (/= (car x) "") (strcat (car x) " au PK " (getpropertyvalue y "PKT"))) par (if (= (strcase (substr (car x) 1 3)) "CDV") (strcat (car x) " au PK " (getpropertyvalue y "PKT"))) Afin de conserver uniquement les blocs dont la valeur de l'attribut "NUMCDV" commence par "cdv ..."
