-
Compteur de contenus
2 160 -
Inscription
-
Dernière visite
-
Jours gagnés
16
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bryce
-
Impossible d\'ouvrir un plan : Erreur fatale
bryce a répondu à un(e) sujet de Gottferdom dans AutoCAD LT 2008
Bonjour, Ce n'est sans doute pas possible de faire un audit ou un sauver sous si l'erreur fatale a lieu tout de suite à l'ouverture. Par contre tu peux tenter de récupérer le dessin au lieu de l'ouvrir (Fichier > Utilitaires de dessin > Récupérer). Edit: oups, je n'avais pas fait attention que le plan s'ouvrait en 2011... :question: [Edité le 22/2/2011 par bryce] -
J'ai juste corrigé le lien de DenisH, qui a du faire une mauvaise manip en postant. ;)
-
Bonsoir, Je ne vois pas trop le rapport entre le centre de contenu et la question posée... :casstet:
-
http://www.phalenecad.fr/CadXP/Block_pour_pierrevigneux.zip ;)
-
Bonjour, Ça n ne m'a pas l'air d'un problème de variable. Il faudrait peut-être tenter une réparation de l'install ?
-
Bonjour, Un petit vite fait : (defun c:FLT(/ echelle acobj doc textes texte) (setq echelle 2.5); remplacer par le facteur de largeur souhaité (vl-load-com) (setq acobj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acobj)) (princ "\Sélectionnez les textes à modifier: ") (setq textes (ssget '( (0 . "TEXT") ) )) (if textes (progn (setq textes (vla-get-activeselectionset doc)) (vlax-for texte textes (vla-put-scalefactor texte echelle) );for );progn );if textes );defun Modifier le facteur d'échelle dans la première ligne (la valeur après "setq echelle"), puis charger le lisp. La commande à taper est FLT. Sélectionner les textes à modifier, appuyer sur Entrée, c'est fait. :) Ne fonctionne que sur les TEXTES simples, pas sur les textes multilignes...
-
Bonjour, Voici le lisp de chris_mtp un peu modifié : - fonction OpenExcel intégrée directement - le fichier est créé automatiquement dans le dossier temporaire de Windows, quel qu'il soit (plutôt que dans C:/TMP >> erreur si le répertoire n'existe pas). ;;------------------------------------------------------------------------------- ;; OpenExcel - Ouvre une feuille Excel ;; Arguments : 3 ;; ExcelFile$ = Nom de fichier excel ou nil pour une nouvelle feuille ;; SheetName$ = Nom de la feuille ou nil pour non spécifié ;; Visible = T pour visible ou nil pour cachée ;; Exemples de syntaxe : ;; (OpenExcel "C:\\Temp\\Temp.xls" "Feuil2" t) = Ouvre C:\Temp\Temp.xls sur la Feuille2 en session visible ;; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Ouvre C:\Temp\Temp.xls sur la feuille courante ;; (OpenExcel nil "Parts List" nil) = Ouvre un nouveau classeur et crée une feuille "Parts List" en session cachée ;;------------------------------------------------------------------------------- (defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet) (if (= (type ExcelFile$) 'STR) (if (findfile ExcelFile$) (setq *ExcelFile$ ExcelFile$) (progn (alert (strcat "FichierExcel " ExcelFile$ " non trouvé.")) (exit) ) ) (setq *ExcelFile$ "") ) (gc) (if (setq *ExcelApp% (vlax-get-object "Excel.Application")) (progn (alert "Fermeture de toutes les feuilles.") (vlax-release-object *ExcelApp%) (gc) ) ) (setq *ExcelApp% (vlax-get-or-create-object "Excel.Application")) (if ExcelFile$ (if (findfile ExcelFile$) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$ ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (if Visible (vla-put-visible *ExcelApp% :vlax-true) ) (if (= (type SheetName$) 'STR) (progn (vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets") (setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name")))) ) (if (member SheetName$ Sheets@) (vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets") (if (= (vlax-get-property Worksheet "Name") SheetName$) (vlax-invoke-method Worksheet "Activate") ) ) (vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add" ) "Name" SheetName$ ) ) ) ) (princ) ) (defun c:aep1 (/ ss file i ent txt txt1 diam ldxf_10 len) (vl-load-com) (prompt "\nSélectionner les polylignes à lister dans fichier .xls") (setq ss (ssget '((0 . "LWPOLYLINE")))) (if (= ss nil) (progn (prompt "\nPas de polylignes sélectionnés") (exit) ) (progn (setq xls (vl-filename-mktemp "Reseau_AEP.xls")) (setq file (open xls "w")) (write-line (strcat "Nom Rue" "\t" "ØAEP" "\t" "Longueur Conduite") file) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq txt1 (car (entsel (strcat "\nSélectionner le nom de la rue de la conduite n° " (itoa (1+ i)))))) (setq txt (cdr (assoc 1 (entget txt1)))) (setq diam (cdr (assoc 8 (entget ent)))) (setq ldxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))) (setq len (vlax-curve-getDistAtParam ent (- (length ldxf_10) 1))) (write-line (strcat txt "\t" diam "\t" (rtos len 2 5)) file) (setq i (+ i 1)) ) (close file) (OpenExcel xls nil t) ) ) (prin1) ) Par contre il faudra probablement changer la méthode, car pour l'instant si on choisit plusieurs polylignes à la première étape, on ne sait pas ensuite dans quel ordre choisir les textes...
-
Merci de l'info (gile) :) Donc a priori pas le choix, il faut ouvrir chaque dessin... Je pense que si j'étais dans ton cas je passerais par un simple script, qui exécuterait pour chaque dessin à traiter les actions suivantes : - ouvrir le dessin - zoom étendu - passer dans le SCG - lancer un petit lisp qui aurait pour mission de lire un certains nombre de variables (dwgprefix, dwgname, viewctr, viewsize et/ou extmin - extmax, ...) et d'aller les écrire dans un fichier texte donné - fermer le dessin.
-
La différence de performances entre ssget et GetReferences est impressionnante... :exclam: Merci pour le partage !
-
Dans la mesure où les dessins n'ont pas forcément été enregistrés en zoom étendu et dans le SCG, ça me paraît indispensable d'ouvrir chaque dessin et d'effectuer ces opérations avant de récupérer la valeur des variables mentionnées par rebcao. C'est faisable en script + lisp, mais ça moulinerait probablement quelques heures... Peut-être qu'en VB ou autre langage il serait possible d'effectuer ces tâche un peu plus rapidement dans une instance AutoCAD "invisible", mais je ne m'y connais pas assez dans ces langages pour l'affirmer.
-
Bonjour, Qu'est-ce que tu appelles exactement le point central du dessin ? :casstet:
-
Bonjour, La commande existe au : tape GROUPE pour afficher la boîte de dialogue, ou -GROUPE pour travailler en ligne de commande. ;)
-
inserer un bloc dyn, avec attributs et annotatif polyligne3D
bryce a répondu à un(e) sujet de tge dans AutoCAD 2007
Bonjour, J'ai fait un petit lisp qui devrait répondre à ta demande : http://file.ahst.fr/get.php?id=4d604f06de71b (defun c:POLYBLOC (/ oldosmode oldcmdecho olderr doc spc pardefaut ok bloc gb poly pts pt) ;;; POLYBLOC V1.1 ;;; Insère un bloc sur chaque sommet de la polyligne sélectionnée. ;;; Le bloc doit exister dans le dessin. Il peut être annotatif et comporter des attributs. ;;; par Brice Studer - février 2011 (vl-load-com) ~~~~~~~~~ GESTION ERREURS ~~~~~~~~~ (defun initerr() (setq oldosmode (getvar "osmode")) (setq oldcmdecho (getvar "cmdecho")) (command "_.undo" "_be") (setq olderr *error*) (setq *error* trap) (setvar "cmdecho" 0) (setvar "osmode" 0) (princ) ) (defun reset() (command "_.undo" "_e") (setq *error* olderr) (setvar "osmode" oldosmode) (setvar "cmdecho" oldcmdecho) (princ) ) (defun trap(errmsg) (command nil nil nil) (princ (strcat "\nErreur: " errmsg "\n")) (command "_.undo" "_e") (setq *error* olderr) (setvar "osmode" oldosmode) (setvar "cmdecho" oldcmdecho) (princ) ) ~~~~~~~~~ (setq spc (if (or (eq AcModelSpace (vla-get-ActiveSpace (setq doc (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) ) (eq :vlax-true (vla-get-MSpace doc)) ) (vla-get-ModelSpace doc) (vla-get-PaperSpace doc) ) ) (initerr) (setq ok nil) (while (not ok) (if polyblocbloc (setq pardefaut (strcat "<" polyblocbloc ">")) (setq pardefaut "") ) (setq bloc (getstring T (strcat "\nNom du bloc à insérer (ou ? pour choisir) " pardefaut ": "))) (if (eq bloc "?") (if (setq gb (GetBlock())) (setq bloc gb) ) ) (if (eq bloc "") (setq bloc polyblocbloc) ) (if (or (tblsearch "block" bloc) gb ) (progn (setq ok T) (setq polyblocbloc bloc) ) (princ "\nBloc non trouvé !") ) );while not ok (while (not (and (setq poly (car (entsel "\nSélectionnez une polyligne: "))) (or (eq "POLYLINE" (cdr (assoc 0 (entget poly)))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget poly)))) ) ) ) (princ "\nL'objet sélectionné n'est pas une polyligne !") );while (if (setq pts (getVertices poly)) (progn (foreach pt pts (InsertBlock spc bloc pt) );foreach );progn );if pts (reset) );defun POLYBLOC ~~~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~ ;;; getVertices ;;; par Serge (http://www.cadxp.com/sujetXForum-106.htm) (defun getVertices (ename / plineGet return vertex vertexGet) (setq return nil) (cond ((or (/= (type ename) 'ENAME) (not (setq plineGet (entget ename)))) (setq return nil) ) ((= "POLYLINE" (cdr (assoc 0 plineGet))) (setq vertex (entnext ename)) (while (= "VERTEX" (cdr (assoc 0 (setq vertexGet (entget vertex))))) (setq return (cons (cdr (assoc 10 vertexGet)) return)) (setq vertex (entnext vertex)) ) (setq return (reverse return)) ) ((= "LWPOLYLINE" (cdr (assoc 0 plineGet))) (setq return (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) plineGet))) ) (t (setq return nil)) );cond return );defun getVertices ;;; InsertBlock ;;; par Lee Mac (defun InsertBlock ( Block Name Point ) (if (not (vl-catch-all-error-p (setq result (vl-catch-all-apply (function vla-insertblock) (list Block (vlax-3D-point point) Name 1. 1. 1. 0.) ) ) ) ) result ) );defun InsertBlock ;;============================================================================;; ;;; Getblock (gile) 03/11/07 ;;; Retourne le nom du bloc entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou depuis la boite ;;; de dialogue standard d'AutoCAD ;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc") (defun getblock (titre / bloc n lst tmp file what_next dcl_id nom) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst) ) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getblock:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un bloc\"") ) ";initial_focus=\"bl\";:boxed_column{ :row{:text{label=\"Sélectionner\";alignment=left;} :button{label=\">>\";key=\"sel\";alignment=right;fixed_width=true;}} spacer; :column{:button{label=\"Parcourir...\";key=\"wbl\";alignment=right;fixed_width=true;}} :column{:text{label=\"Nom :\";alignment=left;}} :edit_box{key=\"tp\";edit_width=25;} :popup_list{key=\"bl\";edit_width=25;}spacer;} spacer; ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getblock" dcl_id)) (exit) ) (start_list "bl") (mapcar 'add_list lst) (end_list) (if (setq n (vl-position (strcase (getvar "INSNAME")) (mapcar 'strcase lst) ) ) (setq nom (nth n lst)) (setq nom (car lst) n 0 ) ) (set_tile "bl" (itoa n)) (action_tile "sel" "(done_dialog 5)") (action_tile "bl" "(setq nom (nth (atoi $value) lst))") (action_tile "wbl" "(done_dialog 3)") (action_tile "tp" "(setq nom $value) (done_dialog 4)") (action_tile "accept" "(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)" ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0)) (setq what_next 1) (setq what_next 2) ) ) ((= what_next 4) (cond ((not (read nom)) (setq what_next 2) ) ((tblsearch "BLOCK" nom) (setq what_next 1) ) ((findfile (setq nom (strcat nom ".dwg"))) (setq what_next 1) ) (T (alert (strcat "Le fichier \"" nom "\" est introuvable.")) (setq nom nil what_next 2 ) ) ) ) ((= what_next 5) (if (and (setq ent (car (entsel))) (= "INSERT" (cdr (assoc 0 (entget ent)))) ) (setq nom (cdr (assoc 2 (entget ent))) what_next 1 ) (setq what_next 2) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) ;;============================================================================;; (princ "\nInsère un bloc du dessin sur chaque sommet de la polyligne sélectionnée.") (princ "\nCommande à utiliser : POLYBLOC") (princ) J'ai réutilisé une fonction écrite par Serge pour récupérer les sommets d'une polyligne, merci à lui. ;) Edit: V1.1 - correction de bug, possibilité d'entrer un nom de bloc avec espaces - ajout d'une option pour choisir un bloc dans une boîte de dialogue, en utilisant la fonction GetBlock de (gile). [Edité le 19/2/2011 par bryce] -
Bonjour, Ils sont dessinés comment ces réseaux (ligns, polylignes, une polyligne par rue...) ? Les diamètres sont indiqués comment actuellement ? Avec des textes AutoCAD ? Si tu veux de l'aide, il faudrait donner plus de détails, et si possible poster un extrait de dessin. ;)
-
$(upper,$(substr,$(getvar, dwgname),4,$(-,$(strlen,$(getvar,dwgname)),3))) ;)
-
Lisp qui détecte un ou plusieurs blocs attribut et incrémente dans l’invite définit sa localisation
bryce a répondu à un(e) sujet de lex dans Routines LISP
En attendant de pouvoir tester sur un de tes fichiers, voici déjà un lisp qui a l'air de marcher pas trop mal : http://file.ahst.fr/get.php?id=4d5daaf6e8d83 -
Je plaisantais juste... ;)
-
J'ai oublié de dire qu'on peut aussi faire un lien vers un fichier ipt depuis la boîte de dialogue Paramètres, exactement de la même manière que vers un fichier Excel. Le fait de passer par une pièce dérivée n'est donc plus une obligation depuis quelques versions d'Inventor déjà.
-
Lisp qui détecte un ou plusieurs blocs attribut et incrémente dans l’invite définit sa localisation
bryce a répondu à un(e) sujet de lex dans Routines LISP
Bonsoir, Tu me l'as envoyé comment ? :casstet: Si tu as utilisé une des adresses ci-dessus, un lien a du s'afficher après l'envoi. Il faut en faire un copier-coller dans ton message ici pour que je puisse le télécharger. ;) -
Il ne reste plus ensuite qu'à se faire greffer une barrette de RAM dans la tête pour se souvenir du nom de chacun des 854 blocs qu'on a dans sa bibliothèque ! :P ;) Pour Curcis : si tu faisais un groupe de palettes par corps d'état, plutôt qu'une seule longue palette par corps d'état ? PS: la commande TPNAVIGATE permettrait même de te faire des macros (boutons ou outils dans tes palettes) pour basculer d'un groupe à l'autre. [Edité le 17/2/2011 par bryce] [Edité le 17/2/2011 par bryce]
-
Bonjour, Si les paramètres sont définis dans un fichier Excel, c'est normal de devoir lier le fichier Excel à chaque pièce... On ne peut pas partager automatiquement des paramètres entre un ensemble et tous les composants de l'ensemble, ça passe de toutes façons par un lien vers un fichier : - soit un fichier Excel - soit un IPT qui contient les paramètres, et qu'on importe en pièce dérivée (personnellement je préfère ça à Excel).
-
Bonjour, Si c'est ce que je pense avoir compris, essaie de mettre DISPSILH à 1. ;)
-
Bonjour, En fait l'expression de PHILPHIL supprime l'extension du nom de fichier : .dwg -> 4 caractères. Si tu veux supprimer les 3 premiers caractères, c'est : $(substr,$(getvar, dwgname),4,$(-,$(strlen,$(getvar,dwgname)),3)) Le 4, c'est le caractère de début du texte à afficher (on supprime les 3 premiers, donc le 1er caractère affiché est le 4e), et le 3 à la fin c'est le nombre total de caractères supprimés. Si tu veux supprimer les 3 premiers caractères ET les 4 derniers (l'extension), c'est : $(substr,$(getvar, dwgname),4,$(-,$(strlen,$(getvar,dwgname)),7)) Et pour utiliser ces expression, il faut créer un champ de type "ExpressionDiesel" : http://nsa25.casimages.com/img/2011/02/17/110217071741507797.png
-
Bonjour, Peut-être qu'en connaissant les messages d'erreur en question, on comprendrait mieux... :P
-
Sélectionner une ligne de cotes en une seule manip ?
bryce a répondu à un(e) sujet de brunomu dans AutoCAD 2010
Ok, je vois le souci... Les cotes se comportent bizarrement sur ton dessin parce que les lignes d'attache ont une longueur nulle. Les points de définition des cotes (extrémités des lignes d'attaches) sont confondus avec les extrémités des lignes de cotes. Comme le lisp fait un polygone de capture, il attrape les points de définition des cotes... Il y a sans doute un moyen bien plus élégant de faire, mais mon niveau en lisp n'est pas suffisant pour le moment. :(
