Aller au contenu

bryce

Membres
  • Compteur de contenus

    2 160
  • Inscription

  • Dernière visite

  • Jours gagnés

    16

Tout ce qui a été posté par bryce

  1. Bonjour, Quel serait le but ? Dans un ensemble Inventor, les composants (pièces ou sous-ensembles) sont forcément externes (équivalent des XRefs), y compris les composants de substitution. Il n'existe pas de notion de pièce "interne" à un ensemble, qui serait stockée dans le fichier iam. Donc dans l'absolu, la réponse à ta question est non. :P On peut par contre créer à partir de l'ensemble une pièce dérivée, dans laquelle chaque pièce de l'ensemble deviendrait un solide. Le résultat n'est donc plus un ensemble, mais une pièce (un ipt) multi-solides : il n'y a plus de contraintes d'assemblage, etc.
  2. Oui, il faut le faire manuellement.
  3. J'ai amélioré un peu le code, je suis passé à 40s de traitement sur le fichier exemple, au lieu de 2mn auparavant. ;)
  4. Bah oui, plus ou moins... Pour lui (AutoCAD), ce sont 2 blocs différents puisque leurs définitions sont différentes. Le fait que les états de visibilité aient des noms identiques n'est rien de plus qu'une coïncidence. Tu remarqueras qu'en collant le bloc depuis A vers B, c'est le 2e état de visibilité qui est utilisé. ;)
  5. Bonjour, http://cadxp.com/index.php?/topic/36507-fenetres/page__view__findpost__p__198769
  6. Bonjour, C'est normal car, comme l'a dit fabyan, le bloc TAG existe déjà dans le fichier A, mais la définition du bloc est différente dans les deux fichiers. Quand tu colles le bloc dans le fichier A, il utilise la définition qui existe dans ce fichier. Si tu édites le bloc dans chacun des dessins, tu verras que l'ordre des états de visibilité n'est pas le même. Si tu modifies l'ordre des états de visibilité dans B pour qu'il soit identique à A, tout rentrera dans l'ordre. ;)
  7. Je verrai, mais franchement je pense qu'il est de toutes façons préférable de procéder par "paquets" de quelques dizaines - une centaine de blocs, pour limiter les risques de passer à côté d'une erreur.
  8. Bonjour, Voici un Lisp qui devrait t'aider: (defun c:TEXT2ATT ( / plist textcolor textlayer *error* acdoc ucss filter ucsicon ucsfollow ss del tag scu blocs textes tmp ptl p1 p2 bp closest d1 d2 d dist effl atts att ) ; Dans une sélection de blocs et textes, récupère le texte le plus proche du bloc et l'injecte dans le 1er attribut. ; Brice Studer, 11/2012 (setq ; Liste des propriétés de texte à appliquer à l'attribut plist '("Alignment" "InsertionPoint" "TextAlignmentPoint" "Rotation" "TrueColor") ; Index de la couleur à appliquer aux textes traités (commenter la ligne ci-dessous pour désactiver le changement de couleur) textcolor 3 ; Nom du calque (existant ou pas) sur lequel déplacer les textes traités (commenter la ligne ci-dessous pour désactiver le changement de calque) ;textlayer "text2att_done" ) (vl-load-com) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (if ss (vla-delete ss)) (vla-put-activeucs acdoc scu) (setvar 'cmdecho 1) (setvar 'ucsicon ucsicon) (setvar 'ucsfollow ucsfollow) (vla-endundomark acdoc) (princ) ) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) ucss (vla-get-usercoordinatesystems acdoc) filter '( (0 . "INSERT,TEXT") )) (vla-startundomark acdoc) (if (cadr (ssgetfirst)) (setq ss (ssget "_I" filter)) (progn (prompt "\nSélectionnez les textes et blocs à associer ou <entrée pour tout> : ") (or (setq ss (ssget filter)) (setq ss (ssget "_A" filter)) ) ) ) (if ss (progn (initget "Oui Non") (setq del (getkword "\nEffacer les textes ? [Oui/Non] <Non>: ") del (= del "Oui") tag (strcase (getstring "\nEtiquette de l'attribut à renseigner <entrée pour le 1er>: ")) ss (vla-get-activeselectionset acdoc)) (setvar 'cmdecho 0) (setq ucsicon (getvar 'ucsicon) ucsfollow (getvar 'ucsfollow)) (setvar 'ucsicon 0) (setvar 'ucsfollow 0) (if (= "" (getvar 'ucsname)) (setq scu (vla-add ucss (vlax-3D-point (trans '(0 0 0) 1 0)) (vlax-3D-point (trans '(1 0 0) 1 0)) (vlax-3D-point (trans '(0 1 0) 1 0)) "$text2attucs")) (setq scu (vla-get-activeucs acdoc)) ) (vlax-for e ss (cond ((= (vla-get-objectname e) "AcDbBlockReference") (vla-getboundingbox e 'p1 'p2) (setq p1 (vlax-safearray->list p1) p2 (vlax-safearray->list p2) bp (mapcar '(lambda( a b ) (/ (+ a B) 2.0)) p1 p2) blocs (cons (list e bp) blocs)) ) ((= (vla-get-objectname e) "AcDbText") (command "_ucs" "_e" (vlax-vla-object->ename e)) (setq ptl (textbox (entget (vlax-vla-object->ename e))) p1 (car ptl) p2 (cadr ptl) p1 (list (car p1) (/ (+ (cadr p1) (cadr p2)) 2) 0) p2 (list (car p2) (/ (+ (cadr p1) (cadr p2)) 2) 0) p1 (trans p1 1 0) p2 (trans p2 1 0) textes (cons (list e p1 p2) textes)) ) );cond ); vlax-for (foreach b blocs (setq closest nil dist nil bp (cadr B)) (if tmp (setq textes tmp tmp nil)) (foreach te textes (setq d1 (distance bp (cadr te)) d2 (distance bp (caddr te)) d (min d1 d2)) (if (not dist) (setq dist d closest te) (if (/= dist (setq dist (min dist d))) (setq tmp (cons closest tmp) closest te) (setq tmp (cons te tmp)) ) ) );foreach texte (if (and (setq closest (car closest)) (setq atts (vlax-invoke (car B) 'getattributes)) (if (= tag "") (setq att (car atts)) (progn (foreach a atts (if (= (vla-get-tagstring a) tag) (setq att a) ) ) att ) ) ) (progn (vla-put-textstring att (cdr (assoc 1 (entget (vlax-vla-object->ename closest))))) (foreach p plist (vl-catch-all-apply 'eval (list (read (strcat "(vla-put-" p " att (vla-get-" p " closest))")))) ) (if del (setq effl (cons closest effl)) (progn (if textcolor (vla-put-color closest textcolor)) (if textlayer (entmod (subst (cons 8 textlayer) (assoc 8 (setq closest (entget (vlax-vla-object->ename closest)))) closest)) ) ) ); if del );progn );if );foreach bloc (if del (mapcar '(lambda (x) (vl-catch-all-apply 'vla-erase (list x))) effl) ) );progn if ss ) (*error* nil) ) Le programme récupère le texte le plus proche du bloc et l'injecte dans le 1er attribut. Quelques conseils d'utilisation : - gèle tous les calques sauf "CAO19-DIVERS" et "data txt" - je te conseille d'appliquer la commande en sélectionnant chaque fois quelques dizaines de blocs avec leurs textes, et en effaçant les textes au fur et à mesure. Si tu appliques la commande à tout le dessin en une fois: - ça va mouliner plusieurs minutes (la vitesse de traitement pourrait être largement optimisée, mais je n'ai pas le temps pour le moment)... => problème réglé - il y aura quelques erreurs, car parfois le texte le plus proche du bloc n'est pas le bon. Il vaut mieux dans ce cas ne pas effacer les textes, et vérifier attentivement le résultat.
  9. bryce

    plancher chauffant [résolu]

    :blink: Il m'a fallu au moins 5s avant de comprendre... :(rires forts):
  10. Bonjour, Si ce n'est pas résolu, vérifie la valeur de la variable QAFLAGS (valeur par défaut: 16).
  11. bryce

    GetName.DCL

    Bonjour, Si tu testes dans un dessin dans lequel tu as déjà utilisé GetName.lsp avant de modifier la liste, c'est normal. Essaie de taper ceci dans la ligne de commande avant de relancer la commande: (vlax-ldata-delete "Pline_block" "Name")
  12. bryce

    [Résolu] calque DefPoints

    Bonjour, Le calque Defpoints n'est-il pas tout simplement verrouillé ?
  13. Il faut le zipper. ;)
  14. bryce

    bibliothèque en lecture seule

    Le plus simple je pense est de faire un "prêt à emporter" de l'ensemble (équivalent du Etransmit d'AutoCAD), afin de dupliquer tous les ipt.
  15. bryce

    bibliothèque en lecture seule

    Probablement pour éviter des modifications intempestives quand la même bibliothèque est partagée par plusieurs projets... :unsure: Dans les paramètres du projet, il suffit de faire un clic droit sur "Utiliser la bibliothèque des styles" pour passer en lecture-écriture. ;)
  16. bryce

    mesurer un angle

    La commande Distance (Outils > Renseignements, barre d'outils Renseignements, ou DI au clavier), l'ancêtre de MEASUREGEOM (qui n'existe que depuis la 2010 il me semble), permet de mesurer la distance, le delta X, delta Y et l'angle. ;)
  17. bryce

    Module TUYAU ?! où es tu ???

    Bonjour, Effectivement ça doit venir de la version d'Inventor. Je ne connais pas la suite Factory, mais j'ai une licence Product Design Suite Premium, avec Inventor "non pro". Sur la version 2012, le module Tubes et tuyaux n'était pas présent. Par contre sur la 2013 il y est. Je ne pense pas qu'on puisse acheter le module seul, le plus simple serait sans doute de faire une mise à jour vers la 2013. C'est pour un client je suppose, il n'a pas la souscription ?
  18. Bonjour, Pourrais-tu poster un morceau de dessin en exemple ?
  19. bryce

    Description de calque

    En script, l'idée d'Eric est de créer un calque "bidon" avec une description, avant de remettre toutes les descriptions à 0. Ainsi on est sûr que le message de confirmation pour la modification de la description va s'afficher, et on peut le prévoir dans le script. Il suffit ensuite de purger ce calque inutile, puis de renseigner les descriptions des calques, en sachant qu'il n'y aura plus de demande de confirmation qui ferait dérailler le script. Exemple: ; On crée un calque bidon _-layer _n "calquebidon" ; on change sa description _d calque bidon "calquebidon" ; puis on vide les descriptions de tous les calques _d * ; on répond à la demande de confirmation, et on termine la commande. _y ; On purge le calque bidon. _-purge _la "calquebidon" _n ; On renseigne les bonnes descriptions des calques. _-layer _d description du calque 0 "0" _d description du calque A "calque A" _d description du calque B "calque B" _d description du calque C "calque C" ;fin
  20. bryce

    Description de calque

    Bien vu ! :D
  21. Un p'tit Lisp vite fait qui je l'espère te dépannera : (defun c:LUM ( / layer block scale acdoc ms filter ss pt1 pt2 pt nb ) (setq block "Luminaire") ; nom du bloc de remplacement (setq scale 1.0) ; échelle d'insertion (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) ms (vla-get-modelspace acdoc) filter '( (0 . "LWPOLYLINE") )) (if (cadr (ssgetfirst)) (setq ss (ssget "_I" filter)) (progn (prompt "\nSélectionnez les polylignes à remplacer : ") (setq ss (ssget filter)) ) ) (if (and ss (or (tblobjname "BLOCK" block) (setq block (findfile (strcat block ".dwg"))))) (progn (setq ss (vla-get-activeselectionset acdoc)) (vlax-for p ss (vla-getboundingbox p 'pt1 'pt2) (setq pt1 (vlax-safearray->list pt1) pt2 (vlax-safearray->list pt2)) (setq pt (vlax-3D-point (mapcar '(lambda( p1 p2 ) (/ (+ p1 p2) 2.0)) pt1 pt2))) (setq nb (vla-insertblock ms pt block scale scale scale 0.0)) (vla-delete p) ) (setq ss nil) );progn ) (princ) ) PS: petite modif du calcul du point d'insertion...
  22. Bonjour, Le luminaire est représenté par une seule polyligne ? Ça ressemble à quoi ? :unsure:
  23. bryce

    Description de calque

    Très bonne idée en effet. Mais si aucun des calques n'a de description au départ, ça fera planter le script... Voici un autre Lisp, qui va directement chercher les descriptions dans un fichier DWT: (defun opendbx(dwg / dbx) ; par Patrick_35 (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx dwg))) nil dbx ) ) (defun c:LAYDESC ( / template f dbxlayers dbxl l ) ; Nom du gabarit contenant les descriptions de calques (setq template "test.dwt") (vl-load-com) (if (setq f (opendbx (strcat (getenv "TemplatePath") "\\" template))) (progn (setq dbxlayers (vla-get-layers f)) (vlax-for dbxl dbxlayers (if (setq l (tblobjname "LAYER" (vla-get-name dbxl))) (progn (setq l (vlax-ename->vla-object l)) (vla-put-description l (vla-get-description dbxl)) ) ) ) (vlax-release-object f) ) ) (princ) )
  24. bryce

    Description de calque

    Bonjour, Avant de proposer un Lisp, j'ai essayé un script avec la commande _-layer et l'option _d. Ça fonctionne si le calque n'a pas encore de description, sinon il y a une étape supplémentaire pour confirmer la modification, ce qui fait "dérailler" le script...
  25. bryce

    Description de calque

    Bonsoir, Comme tu as déjà essayé beaucoup de choses, on dirait qu'il ne reste plus que le Lisp... <_< Voici un exemple qui irait piocher les descriptions dans un fichier texte : (defun c:LAYDESC ( / sep f l flst i lay descr ) ; Caractère de séparation entre le nom de calque et la description dans le fichier texte: (setq sep ";") (vl-load-com) (setq flst '() f (getfiled "" "" "txt;csv;prn" 4)) (if (and f (setq f (open f "r"))) (progn (while (setq l (read-line f)) (setq flst (cons l flst)) ) (close f) (setq flst (reverse flst)) ) ) (if flst (foreach l flst (setq i (vl-string-search sep l) lay (substr l 1 i) descr (substr l (+ i 2))) (if (setq lay (tblobjname "LAYER" lay)) (progn (setq lay (vlax-ename->vla-object lay)) (vla-put-description lay descr) (princ (strcat "\nDescription du calque " (vla-get-name lay) " modifiée.")) ) ) );foreach ) (princ) ) Structure du fichier txt: 0;description du calque 0 calque A;description du calque A calque B;description du calque B calque C;description du calque C
×
×
  • 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é