Aller au contenu

Olivier Eckmann

Membres
  • Compteur de contenus

    2 348
  • Inscription

  • Dernière visite

  • Jours gagnés

    119

Tout ce qui a été posté par Olivier Eckmann

  1. Bonjour, avec PICKSTYLE à 0, je peux sélectionner une hachure associative sans son contour. Ou alors je n'ai pas compris la question. Olivier
  2. Bonjour, Les XDatas sont effectivement AutoCAD pure, elles ne sont pas lisibles directement dans les propriétés. Par contre dans le menu Express / Tools / List Object xData, il existe la commande "XDLIST" qui permet de consulter en ligne de commande ces xdatas. De plus FME lit les xdatas AutoCAD pour les convertir dans d'autres formats. Patrice avait aussi donné un programme permettant de convertir les xdatas en OD, donc à passer ensuite si on veut convertir en données exploitables par Map lors de l'export par ex. "Txt2Lin" est le nom de l'application enregistrée. En effet les XDatas ne sont pas stockées comme cela au hasard, elle sont regroupées par Application, ce qui permet à plusieurs programmes de stocker des informations différentes sur un même objet, sans se mélanger les pinceaux. J'ai dû choisir un nom d'appli pour stocker mes xDatas. Concernant la reconnaissance automatique du texte ou bloc à proximité, comme je travaille par calque ça devrait passer, par ex si on a le diamètre écrit le long d'une poly représentant une cana ça doit le faire. Maintenant c'est sûr que si tu as 4 textes différents Diamètre, Pente, Longueur, Matériau tous dans le mêmes calques et tous à proximité de ta polyligne, ça va devenir plus dur. Olivier
  3. Bonjour, une petite variante permettant de rechercher automatiquement un texte ou un bloc avec attribut à proximité d'une polyligne et ajout des infos Texte ou attribut en xdata sur la polyligne (defun C:XdInfo2Poly () (vl-load-com) (if (not (tblsearch "APPID" "Txt2Lin")) (regapp "Txt2Lin")) (if (and (setq oPoly (car (entsel "\nSélectionner une polyligne : "))) (= "LWPOLYLINE" (cdr (assoc 0 (entget oPoly)))) (setq oInfo (car (entsel "\nSélectionner un texte ou bloc (avec attribut) : "))) (or (= "TEXT" (cdr (assoc 0 (entget oInfo)))) (and (= "INSERT" (cdr (assoc 0 (entget oInfo)))) (= 1 (cdr (assoc 66 (entget oInfo)))) ) ) (setq dDistMax (getreal "\nDistance de recherche maxi : ")) ) (progn (setq JeuPoly (ssget "x" (list (cons 0 "LWPOLYLINE") (cons 8 (cdr (assoc 8 (entget oPoly))))))) (if (= "TEXT" (cdr (assoc 0 (entget oInfo)))) (setq JeuInfo (ssget "x" (list (cons 0 "TEXT") (cons 8 (cdr (assoc 8 (entget oInfo))))))) (setq JeuInfo (ssget "x" (list (cons 0 "INSERT") (cons 8 (cdr (assoc 8 (entget oInfo)))) (cons 2 (cdr (assoc 2 (entget oInfo))))))) ) (setq I 0) (setq lsInfos nil) (repeat (sslength JeuInfo) (setq lsInfo nil) (setq oInfo (ssname JeuInfo I)) (setq I (1+ I)) (setq PT (cdr (assoc 10 (entget oInfo)))) (if (= "TEXT" (cdr (assoc 0 (entget oInfo)))) (setq lsInfo (append lsInfo (list (cdr (assoc 1 (entget oInfo)))))) (progn (while (/= "SEQEND" (cdr (assoc 0 (entget (setq oInfo (entnext oInfo)))))) (setq lsInfo (append lsInfo (list (list (cdr (assoc 2 (entget oInfo))) (cdr (assoc 1 (entget oInfo))))))) ) ) ) (setq lsInfo (append (list PT) lsInfo)) (setq lsInfos (append lsInfos (list lsInfo))) ) (setq ss (ssadd)) (setq I 0) (repeat (sslength JeuPoly) (setq oPoly (ssname JeuPoly I)) (setq I (1+ I)) (setq oVlaPoly (vlax-ename->vla-object oPoly)) (setq dDistMin 100000000.0) (setq lsInfoPro nil) (foreach lsInfo lsInfos (setq ptPro (vlax-curve-getClosestPointTo oPoly (car lsInfo))) (setq dDist (distance (car lsInfo) ptPro)) (if (< dDist dDistMin) (setq lsInfoPro lsInfo dDistMin dDist) ) ) (if (< dDistMin dDistMax) (progn (setq lsXdata nil) (if (listp (car (setq lsInfo (cdr lsInfoPro)))) (progn (foreach sInfo lsInfo (setq lsXdata (append lsXdata (list (cons 1000 (car sInfo))))) (setq lsXdata (append lsXdata (list (cons 1000 (cadr sInfo))))) ) ) (progn (setq lsXdata (append lsXdata (list (cons 1000 "TEXT")))) (setq lsXdata (append lsXdata (list (cons 1000 (car lsInfo))))) ) ) (setq lsXdata (cons "Txt2Lin" lsXdata) ) (setq lsXdata (list (list -3 lsXdata)) ) (entmod (append (entget oPoly) lsXdata)) ) (ssadd oPoly ss) ) ) (if (> (sslength ss) 0) (sssetfirst nil ss)) ) ) ) On sélectionne une polyligne (et toutes les polylignes du même calque seront traitées), on sélectionne un texte ou un bloc (et tous les textes de même nom de calque, ou tous les blocs de même nom de calque et de même nom de bloc seront traités), puis on saisit un distance de recherche maxi. Pour chaque polyligne, - la valeur du texte le plus proche (si inférieur à la distance max) est copiée en xdata sur la polyligne application "Txt2Lin" puis l'info "TEXT", et la valeur du texte - les valeurs des attributs du bloc le plus proche (si inférieur à la distance max) sont copiées en xdata sur la polyligne application "Txt2Lin" puis l'étiquette du 1er attribut, et sa valeur puis l'étiquette du 2eme attribut, et sa valeur ... Les poly n'ayant pas de texte à proximité sont mises en surbrillance à la fin du progarmme. Les infos écrites sur chaque polyligne sont consultables par la commande XDLIST Olivier
  4. Sous Windows 7, j'utilise "Microsoft Expression Encore 4" la version gratuite (pas Pro). Il est composé de 2 logiciel: - une partie "Capture Screen" qui permet de "filmer" ce qui se passe à l'écran. La version gratuite est limitée à 10 minutes par enregistrement. - Ensuite on transfère la ou les captures dans le 2nd composant (montage) qui permet de couper, assembler, ajouter du son, puis de transformer ça en WMV. Les vidéos sont un peu lourdes, mais de bonne qualité. L'avantage, c'est que l'utilisateur peut voir la vidéo, l'arrêter, faire la manip dans le soft, continuer la vidéo ou revenir en arrière si il a oublié un truc. Olivier
  5. Bonjour, Je m'excuse si j'ai donné l'impression d'être "cassant", mais ce n'était pas le but. Pour avoir rédigé des doc de logiciel et de formation pendant 15 ans, je sais que c'est très difficile. Pour les doc internes maintenant je ne pratique plus que par vidéo, c'est plus simple qu'un document à lire. Olivier
  6. Bonjour, En général, lorsque je m'adresse à des utilisateurs "basique" (sans être péjoratif) je rédige la doc plutôt dans l'approche FAQ que rédactionnelle. En gros il faut se poser la question "qu'est ce que la personne veux faire? Lui donner une et une seule solution" Par ex dans la 1ère page tu parles de version de DWG 2012 qui pourra ouvrir les versions précédentes mais pas les suivantes. Pour un utilisateur, il ne sait pas ce que ça veut dire, et surtout il ne veut pas savoir. L'utilisateur fait un double-clic pour ouvrir le fichier et veut le voir. Personnellement, je remplacerais cette page par 2 infos: - le lancement du logiciel est lourd et prend un certain temps, donc être patient au moins 20-30s avant de s'acharner sur le double-clic. C'est bête comme info, mais ça évitera de saturer la machine pour rien. - montrer une capture d'écran du message affiché si le fichier est trop récent et expliqué ce qu'il faut faire: - demander une version DWG plus ancienne au fournisseur - ou bien plus simple demander la mise à jour du logiciel DWGTrueView au service info D'une manière générale, il faut donner une et une seule solution pour une tâche donnée, en principe la plus simple, même si ce n'est pas la plus productive ou celle que l'on choisirait dans AutoCAD. Par ex pour ouvrir un fichier, c'est un double clic sur le fichier (même si je l'interdis formellement aux utilisateurs d'AutoCAD) Pour la gestion des calques, on affiche le gestionnaire et on fait tout avec le gestionnaire, ou bien on fait tout avec le ruban, mais on évite de mélanger les 2 modes de saisie pour intervenir sur les mêmes objets. Ne pas parler des éléments inutiles : - verrouiller un calque, ça ne sert à rien dans le TrueView puisque les objets ne sont pas modifiables. Donc autant ne pas en parler. Sur la forme, relire les textes et vérifier l'orthographe (lettre permutée ou manquante); je sais que je vais passer pour un vieux pénible, mais c'est important de fournir un texte correct même dans un environnement technique. Ce n'est que mon point de vue, mais la rédaction de doc est une tâche un peu "ingrate" et très difficile à réaliser, donc bon courage. Olivier
  7. Olivier Eckmann

    variable systheme

    Bonjour, en ligne de commande, taper MODIFVAR <Entrée> ? <Entrée> * <Entrée> et tu auras toutes le variables avec leur valeur (hors variables d'environnement) Olivier
  8. Salut Gilles, merci beaucoup ça fonctionne nickel maintenant. Olivier
  9. Salut Gilles, je modère un peu mon enthousiasme. Ca fonctionne bien graphiquement, mais lorsque je lance un _AUDIT juste après la commande, j'ai un message d'erreur. Sur un bloc simple, pas de souci, mais sur mon bloc dynamique, le Contrôle détecte un dictionnaire d'extension partagé entre le bloc source et la copie. Comme si le DeepClone n'avait pas complètement cloné tout les objets dépendants. D'ailleurs si j'essaie de modifier les propriétés du clone (par ex la rotation) par l'OPM, ça ne fonctionne pas tout de suite, je suis obligé de lancer un REGEN pour voir le résultat. Je fais faire le test du DeepClone à partir de la database au lieu de l'objet lui-même, je verrais si ça fonctionne mieux. Olivier
  10. Salut Gilles, Merci pour le code, ça fonctionne. En fait le deepclone ajoute bien à la database, mais pas à la transaction et j'avais oublié de l'ajouter aussi donc les manip sur la transaction ne faisait rien. En remettant la ligne tr.AddNewlyCreatedDBObject(clone, true); juste après le DeepClone, tout fonctionne nickel. Olivier
  11. Bonjour, Je reprends le sujet car j'ai un besoin similaire : sélection d'un bloc existant, puis boucle de drag pour positionner des clones le long d'une polyligne, Mais 2 problèmes persistent : 1. L'objet que je veux cloner est un bloc dynamique. Le pb est que sur l'objet cloné, les propriétés dynamiques ne sont pas reportées. D'après ce que j'ai lu, le clonage permet d'obtenir un clone graphique (les références Hard/Soft pointeur ne sont pas clonées) donc si je modifie la source, les clones sont aussi modifiés. Ca pourrait être intéressant, mais dans mon cas je voudrais des clones indépendants. Il semblerait qu'il faille utiliser le DeepClone au lieu de Clone mais les seuls exemples que j'ai pu trouvé se font à partir de la Database donc le clone complet est ajouté automatiquement à la database (je pourrais le détruire si je n'en ai pas besoin), je n'ai pas réussi à faire le DeepClone à partir de l'objet lui-même. De plus bien que je le modifie dans le Jig (je le vois bien à l'écran), ses informations de position/rotation ne sont pas conservées. Les blocs sont tous superposés sur mon bloc source. 2. Si je garde l'option Clone uniquement (pas DeepClone), les différentes positions que je clique à l'écran créent bien plusieurs blocs, mais les blocs n'apparaissent pas à l'écran en temps réel, mais seulement lorsque je ferme ma transaction. J'ai essayé d'insérer une seconde transaction pour ajouter le clone à la database, mais pas mieux. J'espère avoir été assez clair, sinon je mettrais le bout de code correspondant. Merci Olivier
  12. Bonsoir, Les définitions d'attribut n'ont pas vocation à être présent dans un dessin. Ce ne sont que des objets intermédiaires qui doivent être intégrés dans une définition de bloc. En effet, bien qu'une définition d'attribut puisse posséder une étiquette quelconque (par exemple le diamètre) donc visible dans le fichier, lorsque l'on insère ce fichier en Xref, elle disparait. En effet une xref est considérée comme un bloc donc les définitions d'attributs deviennent des attributs non renseignés donc sans graphisme => invisible. La seule solution consiste effectivement à substituer ces définitions par des textes. Ci-joint un petit lisp récupéré sur le site de Lee Mac (defun c:AttDef2Text ( / ss ) ;; © Lee Mac ~ 01.06.10 (vl-load-com) (if (setq ss (ssget "_:L" '((0 . "ATTDEF")))) ( (lambda ( i / e o ) (while (setq e (ssname ss (setq i (1+ i)))) (if ( (if (and (vlax-property-available-p (setq o (vlax-ename->vla-object e)) 'MTextAttribute) (eq :vlax-true (vla-get-MTextAttribute o))) MAttDef2MText AttDef2Text ) (entget e) ) (entdel e) ) ) ) -1 ) ) (princ) ) (defun AttDef2Text ( eLst / dx74 dx2 ) ;; © Lee Mac ~ 01.06.10 (setq dx74 (cdr (assoc 74 eLst)) dx2 (cdr (assoc 2 eLst))) (entmake (append '( (0 . "TEXT") ) (RemovePairs '(0 100 1 2 3 73 74 70 280) eLst) (list (cons 73 dx74) (cons 1 dx2) ) ) ) ) (defun MAttDef2MText ( eLst ) ;; © Lee Mac ~ 01.06.10 (entmake (append '( (0 . "MTEXT") (100 . "AcDbEntity") (100 . "AcDbMText") ) (RemoveFirstPairs '(40 50 41 7 71 72 71 72 73 10 11 11 210) (RemovePairs '(-1 102 330 360 5 0 100 101 1 2 3 42 43 51 74 70 280) eLst) ) (list (cons 1 (cdr (assoc 2 eLst)))) ) ) ) (defun RemoveFirstPairs ( pairs lst ) ;; © Lee Mac (defun foo ( pair lst ) (if lst (if (eq pair (caar lst)) (cdr lst) (cons (car lst) (foo pair (cdr lst))) ) ) ) (foreach pair pairs (setq lst (foo pair lst)) ) lst ) (defun RemovePairs ( pairs lst ) ;; © Lee Mac (vl-remove-if (function (lambda ( pair ) (vl-position (car pair) pairs) ) ) lst ) )
  13. Bonjour, Vu le message en haut du log, tu t'es connecté en mode anonyme, donc c'est normal que tu ne vois rien. Essaie de te déconnecter, puis te reconnecter en retapant tes identifiants et mot de passe. Olivier
  14. Bonjour, Pour pouvoir utiliser une échelle dans un carroyage, il n'est pas nécessaire de créer le dossier sur le disque dur. Il suffit de la créer dans les options de Covadis, même si elle pointe par défaut sur le répertoire nommé "Nouveau répertoire" qui n'existe pas, elle apparaîtra dans la liste des échelles dispo pour le carroyage. Cependant, si on veut utiliser cette échelle personnalisée pour l'affecter à un dessin et insérer des blocs, habiller..., il est nécessaire de créer le dossier sur le DD, Mais pour remplir ce dossier avec des symboles mis à l'échelle et pas seulement recopiés depuis un échelle "proche", il existe une commande Covadis qui fait le boulot: ECHCOPY Cette commande, demande l'échelle de départ, puis l'échelle d'arrivée. Les fichiers de symboliques linéaires SYL, SYB, SYM sont recopiés tels quels puisqu'ils sont définis en mm papier. Pour les symboles, chaque bloc (dwg) du dossier de l'échelle d'origine est inséré dans le dessin courant (utilisé un dessin vierge pour lancer cette commande), puis décomposé, puis Covadis applique un facteur d'échelle égal au rapport inverse des échelles, puis exporte ce graphisme redimensionné en tant que nouveau bloc dans le répertoire d'arrivée. Et ainsi de suite pour touts les blocs du dossier de l'échelle de départ. Olivier
  15. Bonjour, Dans le cas d'un script, l’intérêt de passer par MAP est que l'on s'affranchit de 2 problèmes potentiels: - ouvrir le dessin => que se passe-t-il s'il y a un message à l'ouverture (shx manquant, purge échelle d'annotation, applicatif (macro) quelconque qui affiche un message...) - sélection graphique => vérifier que l'on est en Espace objet, activer et libérer tous les calques, SCU..., un objet non graphique ne sera pas sélectionné. Avec MAP, le dessin n'est pas ouvert dans l'éditeur car la requête est exécutée sur la database, uniquement sur l'espace objet et indépendamment des calques, SCU et graphismes des objets. D'autre part, s'il faut une requête plus élaborée qu'un simple rectangle, il suffit de la construire avec l'éditeur de MAP, puis de la sauvegarder en QRY. Tu n'as pas à mettre les mains dans le "cambouis" du Lisp pour construire ton filtre de requête, et le test que l'on rajoute à la fin vérifie toujours la même chose. D'autre part, le fait de passer par un SaveAs plutôt que par Copy (sous DOS) change la date et l'heure du DWG, ainsi que sa version, Cependant le Saveas s'affranchit des chemins de noms longs ou avec espace qui peuvent poser problème à la commande Copy. Ceci dit, la solution graphique portant sur le dessin courant reste une solution très intéressante, plus simple et indépendante du moteur MAP. Olivier
  16. Bonjour, Si tu crées une requête et que tu l'enregistre en requête externe, tu obtiens un fichier QRY que tu peux ouvrir avec le bloc-note (en fait c'est un enchaînement de commande Lisp) (setq ade_cmddia_before_qry (getvar "cmddia")) (setvar "cmddia" 0) (mapcar 'ade_dwgdeactivate (ade_dslist)) (setq ade_tmpprefval (ade_prefgetval "ActivateDwgsOnAttach")) (ade_prefsetval "ActivateDwgsOnAttach" T) (setq dwg_id(ade_dsattach "C:\\DONNEES\\Dessin2.dwg")) (ade_prefsetval "ActivateDwgsOnAttach" ade_tmpprefval) (ade_qryclear) (ade_qrysettype "draw") (ade_qrydefine '("" "" "" "Location" ("window" "crossing" (1534000.000000 8224000.000000 0.000000)(1578000.000000 8272000.000000 0.000000))"")) (ade_qrysetaltprop nil) (ade_qryexecute) (setvar "cmddia" ade_cmddia_before_qry) il suffit que tu ajoutes à la fin le test sur la présence d'objet ou pas dans l'espace objet ; test si objet dans l'espace Objet (if (ssget "x" (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (command "sh" "copy C:\\DONNEES\\Dessin2.dwg c:\\DONNEES\\Dedans\\Dessin2.dwg") ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (command "sh" "copy C:\\DONNEES\\Dessin2.dwg c:\\DONNEES\\Dehors\\Dessin2.dwg") ) A partir de là il suffit de scripter une boucle en remplacant DESSIN2.DWG par chacun des noms de tes DWG du dossier Si tu n'y parviens pas, tu peux m'envoyer un MP, on peut te développer ça. Olivier
  17. Bonjour, je pense que le problème est plus lié à Windows 7 qui bloque (freeze) beaucoup plus vite l'application qui bouffe tout le CPU alors qu'un ancien Windows XP continuait à rafraîchir régulièrement. Olivier
  18. Bonjour, et en ajoutant un wipeout dans le bloc pour masquer ce qui se trouve sous le bloc. Olivier
  19. Bonjour, SCUDynamique activé peut-être? Olivier
  20. Dans l'éditeur de bloc, est-ce que le bloc possède un nom qui commence par *A ou *U Olivier
  21. Bonjour, est-ce que par hasard le bloc ne serait pas un bloc anonyme? Olivier
  22. Olivier Eckmann

    Fichier trop lourd ?

    Bonjour, la variable BLIPMODE correspond à la commande MARQUES cette variable n'est plus accessible directement, mais bien par la commande lisp : setvar Est-ce qu'il n'y aurait pas un problème de Z sur le dessin ou sur la camera? - faire une vue de face pour voir si c'est cohérent en Z - vérifier la variable TARGET si le Z n'est pas complètement farfelu. Olivier
  23. Bonjour, Un peu plus de détail sur les problèmes. Couleur? 2D? 3D? artéfact? Olivier
  24. Salut Patrice, ça corrige le problème de lancement des commandes qui ne fonctionnaient qu'une seule fois. Par contre ça ne corrige toujours pas le pb d'édition des motifs de hachures par la fenêtre des propriétés. La réponse du support Autodesk pour contourner le problème consiste à : 1. Lancer la commande MPFILL pour choisir le bon motif. 2. Créer un polygone avec le remplissage précédemment défini. 3. Utiliser la commande "Copier Propriétés" pour appliquer le bon remplissage sur les polygones sélectionnés. C'est pas cool du tout. Olivier
  25. Bonjour, avec le fichier, voilà pour mon MAP 2012 Wireframe : 31499.412438 ms Wireframe : 5.777886 fps Hidden Line : 52400.440287 ms Hidden Line : 3.473253 fps Flat Shaded : 39833.968790 ms Flat Shaded : 4.568965 fps Gouraud Shaded : 44000.878008 ms Gouraud Shaded : 4.136281 fps MAP 2013 Wireframe : 31380.552976 ms Wireframe : 5.799770 fps Hidden Line : 51575.804242 ms Hidden Line : 3.528786 fps Flat Shaded : 40537.501347 ms Flat Shaded : 4.489670 fps Gouraud Shaded : 45098.209603 ms Gouraud Shaded : 4.035637 fps i7 2GHz et Quadro3000M Olivier
×
×
  • 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é