Aller au contenu

zebulon_

Membres
  • Compteur de contenus

    1 489
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par zebulon_

  1. j'ai aussi fait dans le "prosaïque", sauf qu'avec l'angle, j'ai fait un sinus, cela évite le 2*k*pi. (setq x (sin (- (angle a p) (angle a b)))) Si on trouve 0, c'est aligné. > 0 c'est à droite. < 0 c'est à gauche (ou le contraire ;) je n'ai pas testé) Amicalement Zebulon_
  2. Bonjour, j'avais fait quelque chose comme ça il y a quelques temps ici Amicalement Zebulon_
  3. Bonjour à tous ceux qui ne font pas le pont. Ma question se rapporte à l'extraction d'attributs avec la commande extattbe. J'ai plusieurs occurrences d'un bloc dans un fichier et je souhaite faire un tableau qui récapitule les points d'insertion de ces blocs. (un tableau d'implantation X,Y) Jusque là, c'est facile. Là où je coince c'est que je ne peux à aucun moment définir un format bien particulier à ma colonne (j'aimerais 3 chiffres après la virgule), et donner un facteur de conversion (j'aimerais multiplier par 0.001, parce que j'ai un fichier en mm et je souhaite afficher les résultats en mètre). Enfin, je n'ai pas trouvé. Une fois que le tableau est fait, on peut modifier le format de la cellule et donner un facteur de conversion. Mais, comme il s'agit d'une modification manuelle, elle sera perdue à la prochaine mise à jour de la table d'extraction. Donc, pas bien ... Si quelqu'un à une idée ??? Amicalement Zebulon
  4. Ben voilà pour récupérer les données, tu peux essayer ceci. (setq elist (entget (car (entsel)) '("COVAMETRE"))) tu cliques sur une polyligne et cela t'affiche les données qui sont dedans. elle ressemblera à quelque chose comme ça ((-1 . ) (0 . "LWPOLYLINE") ...... (-3 ("COVAMETRE" (1000 . "La") (1040 . 0.8) (1000 . "Ht") (1040 . 1))))) C'est surtout la fin de la liste qui nous intéresse, après le -3 ("COVAMETRE" etc... Pour extraire de la liste uniquement les xdatas, tu fais (setq exlist (assoc -3 elist)) tu auras : (-3 ("COVAMETRE" (1000 . "La") (1040 . 0.8) (1000 . "Ht") (1040 . 1)) Puis pour virer le -3 (setq thexdata (car (cdr exlist))) pour obtenir ("COVAMETRE" (1000 . "La") (1040 . 0.8) (1000 . "Ht") (1040 . 1) Maintenant, tout dépend de la logique de COVAMETRE. Est-ce que c'est toujours dans cet ordre ou de temps en temps ça peut être ("COVAMETRE" (1000 . "Ht") (1040 . 1) (1000 . "La") (1040 . 0.8) voire ("COVAMETRE" (1000 . "Ph") (1040 . 2) (1000 . "La") (1040 . 0.8) (1000 . "Ht") (1040 . 1) Si c'est le premier cas, il suffit de piocher le 3 ème élément de la liste (plutôt le 2ème parce qu'on commence à compter à 0) pour avoir Largeur et le 4ème pour la hauteur. (setq LARGEUR (cdr (nth 2 thexdata))) (setq HAUTEUR (cdr (nth 4 thexdata))) S'il y a des chances que l'ordre soit différent, il faut être plus prudent. Si on regarde un peu de plus près, on s'aperçoit qu'il y a toujours une sorte de clé ("Ht" ou "La") immédiatement suivie de la valeur correspondante. L'idée est d'utiliser la fonction member (member '(1000 . "La") thexdata) donne ((1000 . "La") (1040 . 0.8) (1000 . "Ht") (1040 . 1)) (member '(1000 . "Ht") thexdata) donne ((1000 . "Ht") (1040 . 1)) et là on est sur que c'est toujours le 2ème de la liste qui nous intéresse (setq LARGEUR (cdr (car (cdr (member '(1000 . "La") thexdata))))) (setq HAUTEUR (cdr (car (cdr (member '(1000 . "Ht") thexdata))))) puis tu injectes ça dans le lisp de Giles. N'oublie pas de transformer les valeurs ci dessus en textes avec rtos avant de les balancer dans des attributs. Amicalement Zebulon_
  5. Alfred Einstein est un grand musicologue allemand et il est effectivement un cousin éloigné d'Albert (cousin du 6ème degré). C'est pas des vannes, en plus. pour ce qui est des xdatas, il faut d'abord regarder comment elles sont foutues. Là le plus simple c'est d'utiliser le menu express. Express/tools/list object xdata puis tu sélectionnes une polyligne avec xdata pour que cela t'affiche quelque chose comme ça Dans ton cas, je pense que la "regapp" (registered application name) sera COVADIS et après une série de code dans lesquels il faudra que tu nous dises ce qu'il faut extraire. Le mieux c'est de coller cette liste dans ta réponse en spécifiant ce qui t'intéresse. Amicalement Zebulon_
  6. Alfred Einstein, c'est un cousin d'Albert, le prix Nobel ? Plus sérieusement, il faut se demander s'il est opportun de copier dans des attributs, des données qui sont contenues dans des xdata. La redondance est à éviter le plus possible. Si tu mets des données dans les attributs, à quoi te servent les mêmes données en xdata ? Sinon, pour les xdata, regarde ici,tu y trouveras une bibliothèque de fonctions qui gèrent les xdatas Tu peux aussi regarder là pour comprendre comment c'est foutu, les xdatas. Amicalement Zebulon_
  7. zebulon_

    aclt.pgp ?

    Pour le menu express, tu cliques à droite dans la partie grisée du menu. S'il y a un rubrique EXPRESS, c'est qu'il est installé. Il devrait aussi y avoir une rubrique express dans la barre de menu. C'est là dedans que tu trouveras tools/command alias editor. Si c'est pas installé, tu prends ton cd d'installation d'autocad et tu l'installes. Pour ce qui est de la commande GROUPE, elle permet de grouper et de dégrouper. Elle ne se trouve, à ma connaissance, dans aucune barre d'icônes. Amicalement Zebulon_
  8. zebulon_

    aclt.pgp ?

    ça c'est curieux. Le chemin devrait être : c:\documents and settings\nom d'utilisteur\application data\Autodesk\Autocad 2006\R16.0\fra\support\acad.pgp Sinon, va voir avec celui qui te l'a installé. Il y a peut être une combine ? Et puis, c'est bien connu : "en cas de problème, veuillez contacter votre administrateur de réseau..." ;) Amicalement Zebulon_
  9. zebulon_

    aclt.pgp ?

    bonjour, si je comprend bien, tu n'utilises plus une version LT mais une version Autocad 2006. Dans ce cas, le fichier pgp s'appelle AutoCAD.pgp. Si tu as installé les outils EXPRESS, regarde aussi dans la rubrique tools/Command Alias Editor. Ce qui te permettra de changer le fichier pgp sans l'éditer avec bloc note. Amicalement Zebulon_
  10. bonjour, avec ssget, ça marche. Je ne connaissais pas la fonction ssnamex. Elle n'est pas dans mon bouquin lisp où on passe de (ssmemb) à (ssname) puis tout de suite à (strcase). Tu me diras, c'est normal, c'est le manuel de programmation de la version 12. C'est parfait. Il y a juste le message d'invite "choix des objets" qui devrait être "choix de l'objet" compte tenu de l'option "_:S". Mais là j'en demande de trop. ;) Et puis, comme c'est un ssget, je peux filtrer par la même occasion. Amicalement Zebulon_ [Edité le 16/5/2007 par zebulon_]
  11. Salut, Cela fait qqes temps que j'ai installé le Service Pack 2 Amicalement Zebulon_
  12. Je préférais aussi la touche Ctrl, c'était plus simple. Mais, ça ne change rien au fait que la sélection cyclique (obtenue avec shift + espace dans la 2007) et utilisée avec (entsel) renvoie les coordonnées de l'origine et pas celle du point cliqué. Mon problème est celui là, christian. Il n'est pas de savoir comment obtenir une sélection cyclique sur la 2007. Je crois simplement que c'est un bug. Amicalement Zébulon_ [Edité le 15/5/2007 par zebulon_]
  13. Bonjour, un truc tout bête : quand je fais (setq p (entsel)) et que je sélectionne un objet cela me renvoie : Choix de l'objet: (< Nom d'entité: 7ef94080> (1440.41 799.437 0.0)) Donc, le nom de l'entité sélectionnée et les coordonnées du point cliqué. Jusque là rien à dire. Là où ça se gâte, c'est quand on sélectionne l'objet en activant un cycle pour la sélection de l'objet. Cela me renvoie : Choix de l'objet: < Cycle activé> < Cycle désactivé>(< Nom d'entité: 7ef94080> (0.0 0.0 0.0)) Surprise : ai-je cliqué pile à l'origine ? Non, mais il faut croire que dans le cas d'une sélection par cycle activé, entsel renvoie toujours (0.0 0.0 0.0) :casstet: Ceci se produit sur la version 2007. J'ai fait la même opération sur une version 2004 et là je récupère les bonnes coordonnées Choix de l'objet: < Cycle activé> < Cycle désactivé>(< Nom d'entité: 7efbb0f8> (24943.8 21756.4 0.0)) Bizarre non ? Amicalement Zébulon_
  14. zebulon_

    miroirs blocs dynamiques

    Je ne veux pas être pessimiste, mais je me méfie des nouveautés ;). Et puis je n'ai toujours pas reçu la version 2008. M'auraient-ils oublié ? Amicalement Zebulon_
  15. zebulon_

    miroirs blocs dynamiques

    c'est dommage... on peut appeler ça un bug ? Du même tonneau : certains blocs dynamiques, quand je les copie, il y a des éléments graphiques du bloc dynamique qui disparaissent. Et là aussi, seulement quand les unités source et destination diffèrent. Comme je suis obligé de travailler tantôt en m, tantôt en mm et tantôt en cm (suivant le client), cette histoire ne m'arrange pas vraiment :mad: Pas pour moi. Quelqu'un peut se charger de dire à Autodesk qu'il y a un ver dans le fruit au niveau des blocs dynamiques ? Ou bien de me dire comment on fait pour leur signaler un tel dysfonctionnement ? Des fois que je tomberai sur un âme charitable qui réparerai ce petit bug pour la version 2012 ! :casstet: Cela me rappelle les hachures dégradées de la version 2004. Super intéressant, très joli, mais impossible à imprimer. Du coup, on ne s'en sert plus. Moralité : il faut laisser murir les nouvelles fonctionnalités pendant 2 ou 3 versions avant de songer à vouloir s'en servir... ;) et laisser les autres utilisateurs essuyer les plâtres. :cool: Amicalement Zebulon_
  16. zebulon_

    enregistrement de INSUNITS

    où avais-je la tête :)
  17. zebulon_

    enregistrement de INSUNITS

    Euuh non. Tu mets tes blocs dans l'unité que tu veux. Si tu travailles tout le temps en mètre, autant les définir en mètre. Si ton fichier de travail est en m, le rapport sera de 1. Et si un jour, ton fichier de travail doit être en mm, le rapport sera de 1000. Et quand tu reçois un fichier d'architecte en cm, tu l'ouvres et tu lui colle une unité en cm et après ça se passera mieux pour les xrefs. Et quand tu hérite d'une bibliothèque de blocs "sans unité", tu peux changer la variable insunitsdefsource pour que le rapport se fasse tout seul. Fait quelques essais avant de partir dans un sens ou dans l'autre. Le fait de préciser l'unité est trop souvent omis, mais c'est très important quand on travaille dans un environnement avec des unités de travail différentes. Sur le même projet, l'archi travaille en cm, le topographe en mètre et l'ingénieur en mm et tout ça doit pouvoir cohabiter sans trop bousculer les habitudes des uns et des autres... si chacun se donne la peine de préciser ses unités dans ses fichiers. C'est parce qu'elles doivent dater de la version 12 et ils ne se sont jamais donné la peine de les mettre à jour. Amicalement Zebulon_
  18. zebulon_

    enregistrement de INSUNITS

    Si ça ne marchait pas, tu m'aurais déjà entendu râler. Il y a 3 cas de figure : - les unités sont définies à la fois dans le fichier source et le fichier cible. Le rapport d'échelle se calcule tout seul - le fichier source est sans unité et le fichier cible possède une unité. Autocad donne au fichier source l'échelle qu'il trouve dans la variable insunitsdefsource - le fichier source possède une unité, mais pas le fichier cible. Autocad fait de même pour le fichier cible mais avec insunitsdeftarget. Les 2 derniers cas pouvant se cumuler. C'est assez rigolo : vous définissez un fichiers "sans unités", vous mettez insunitsdeftarget à 4 et insunitsdefsource à 6 et vous insérez un bloc également "sans unité". Et c'est là qu'on se pose 1000 questions de savoir pourquoi le bloc est 1000 fois trop grand ou 1000 fois trop petit. Si tout le monde défini correctement ses unités de travail dans ses fichiers et ses blocs, cette galère sera finie. Amicalement Zébulon_
  19. zebulon_

    enregistrement de INSUNITS

    oui Sauf que quand tu travailles dans un fichier "sans unités", c'est toi qui te dis dans ta tête que 1 unité c'est 1 mètre. Maintenant, mettons que tu reçois un fichier de quelqu'un d'autre, qui travaille aussi "sans unité", mais lui dans sa tête il se dit que 1 unité c'est 1 mm (pourquoi pas, admettons que c'est un mécanicien). Et là tu veux insérer ce fichier en xref ou comme un bloc et il sera 1000 fois trop grand. Et tu ralera après ce con de mécanicien qui ne pense pas dans sa tête comme toi. Il ne peut pas travailler en mètre comme moi ? Et non. Pour lui 1 mètre c'est 1000 unités. Pour mettre tout le monde d'accord, Autodesk a justement rajouté cette notion d'unité. Si tu définis tes unités en m et le mécanicien les siennes en mm, c'est autocad qui fera le rapport d'echelle automatiquement, dans un sens comme dans l'autre. Pour moi, tantôt on me demande que 1 unité = 1m, tantôt 1 unité = 1mm en fonction du client. Mettons que je travaille pour un client qui souhaite que 1 unité = 1 mètre. De mon côté, j'ai défini mes blocs en définissant que 1 unité = 1 mm. Si j'ai bien réglé mes insunits, cela donne ceci http://img293.imageshack.us/img293/7571/insertrj2.jpg Et, sans rien faire de plus, autocad applique un facteur d'echellle de 0.001. Pour ce qui est des mises en pages dans l'espace papier, là je suis toujours en mm et je modifie le facteur d'échelle des fmult. Une fmult au 1:100 - avec un espace objet en mètre aura un facteur d'echelle de 1000/100xp - avec un espace objet en mm 1/100xp Amicalement Zebulon_ [Edité le 3/5/2007 par zebulon_]
  20. zebulon_

    Sacré échange !

    Je vois un autre problème... c'est l'âge du capitaine, ou plutôt de la capitaine. Parce qu'à 54 ans, Mme Royal a de forte chances d'être ménopausée. C'est un peu mufle de le dire, mais c'est comme ça. Bon, je suis pas toubib et il y a eu des précédents. Abraham a bien eu un fils de Sarah alors que celle ci était nonagénaire, ménopausée et, de surcroit, ne couchait plus avec son mari. Soyons optimistes. La France a survécu à tellement de désastres. Cette élection n'est qu'un péripétie. Et puis ça pourrait être pire, il y en a bien qui ont George Deubeliou Bush comme président. Et qui se souvient du joli mois de mai 1981 ? Une partie de la France faisait la fête. Pour une autre, c'était la fin du monde et elle avait peur pour son argent. A tel point que les banquiers suisses ont croulé sous les fonds venus de France... Et le temps passe, et qui s'en souvient ? Et puis, les chiens aboient et la caravane passe... Aujourd'hui, dans toutes les villes, on trouve des avenues, des rues, des places François Mitterrand. Dans 20 ou 30 ans, on aura peut-être une Avenue Sarkozy ou une Place Royal, qui sait ? Il y a déjà des Place Royale un peu partout. Suffirait d'enlever le e à la fin. Amicalement Zébulon_
  21. si c'est pour niveler une élévation, j'utilise une cote ordonnée Y plutôt qu'un bloc dynamique, parce que je l'utilisais déjà alors que les attributs avec champs dynamiques n'étaient qu'un vague projet dans l'esprit d'un des développeurs de chez Autodesk. la commande COTORD, donne une cotation en ordonnée X ou Y en fonction du scu local. Et comme c'est une cote, elle est dynamique par nature. Amicalement Zebulon_
  22. zebulon_

    accrochage objets

    Le rayon d'action de l'accrochage aux objets correspond à la taille du curseur carré. Paramétrable dans outils, options, dessin. Dans les paramètres AutoSnap, tu peux aussi activer "Affichage du curseur carré AutoSnap" ce qui permet de mieux visualiser. Il y a aussi la touche F3 qui active ou désactive l'Accrobj. Ce serait effectivement bien d'avoir une touche qui bascule localement l'accrobj, un peu comme la touche shift pour le mode ortho. Mais je ne sais pas si ça existe. Amicalement Zebulon_
  23. zebulon_

    enregistrement de INSUNITS

    Pas de soucis chez moi. Version 2007. C'est ce que je pensais aussi, pendant un moment, mais, c'est parce que je ne savais pas bien me servir des unités que je pensais comme ça. Et aussi, parce que j'ai débuté sur une version où il n'était pas encore question d'unités, alors les nouveautés on s'en méfie... Maintenant, mon avis est de dire que c'est dommage de penser comme ça, lili2006. Pour ma part, je travaille pour plusieurs clients qui me demandent pour les uns de travailler en m, pour d'autres en mm, pour d'autres encore en cm. Une question de "charte graphique", comme ils disent. Si je veux travailler pour eux, faut que je m'adapte. Pas le contraire, malheureusement ;) Donc, je suis bien content d'avoir une bibliothèque de blocs définis AVEC des unités puisqu'ils se mettent tout de suite au bon facteur d'échelle en fonction du INSUNITS du fichiers de travail. Pour LUDWIG, il y a peut être quelque chose qui ne va pas dans acad2008doc.lsp ? Amicalement Zebulon_
  24. zebulon_

    insérer un bloc

    Ah pardon, j'avais mal compris. Comme on en est tous là à repomper à droite à gauche, j'en conclue que c'est encore cette manière qui est la meilleure pour apprendre. j'ai toujours fait comme ça. Je me souviens de mon premier entretien d'embauche, mon patron de l'époque m'a dit : Sur le coup, je me suis qu'il se fout de moi. Mais, à la longue, je dois reconnaitre qu'il avait raison. ;) Sinon, j'ai remplacé scl_upd par (setq SCALE (vla-get-InsUnitsFactor REF)) (setq INSPT (vla-get-InsertionPoint REF)) (vla-ScaleEntity REF INSPT SCALE) et là je n'ai pompé sur personne ;) Cela à l'avantage de ne pas gérer une liste d'unités. InsUnitsFactor se met tout seul à la bonne valeur lors de l'insertion, alors autant en profiter. Exemple : j'ai défini un bloc en mm que j'insère avec vla-insertblock dans un fichier en m, cela donne ceci ce sont donc ces valeurs 1000.0 qu'il s'agit de mettre à 1000.0*0.001, ce que j'ai fait avec vla-scaleEntity Amicalement Zebulon_
  25. zebulon_

    insérer un bloc

    Donc, pas du tout avec les vl-catch-all-error puisqu'il suffit de regarder dans la liste de nom de blocs avec un vlax-for... Voilà ce que ça donne. (defun modif_attrib (E ETIQ VALEUR / LATT ATT) (if (= (type E) 'ENAME) (setq E (vlax-ename->vla-object E)) ) (setq LATT (vlax-invoke E 'getAttributes)) (foreach ATT LATT (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ)) (vla-put-TextString ATT VALEUR) ) ) ) (defun block_list (F / b bn tl) (vlax-for b (vla-get-blocks F) (if (= (vla-get-islayout b) :vlax-false) (setq tl (cons (strcase (vla-get-name b)) tl)) ) ) (reverse tl) ) (defun insert_block (NOM BIBLIO PT ECHX ECHY ECHZ ROT LISTEATT / AcDoc SPACE REF LATT UCSZDIR Util INSPT SCALE Dbx RESULT) (setq NOM (strcase NOM)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq Util (vla-get-utility AcDoc)) (setq UCSZDIR (trans '(0 0 1) 1 0 T)) (setq ROT (+ ROT (vla-AngleFromXAxis util (vlax-3d-point '(0 0 0)) (vlax-3d-point (trans (getvar "UCSXDIR") 0 ucszdir))))) ;; si le bloc n'existe pas dans le fichier, je le copie à partir d'un fichier bibliothèque (if (not (member NOM (block_list AcDoc))) (if (setq BIBLIO (findfile BIBLIO)) (progn (setq Dbx (ouvrir_dessin_dbx BIBLIO)) (if (member NOM (block_list Dbx)) (progn (vla-CopyObjects Dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list (vla-item (vla-get-blocks Dbx) NOM)) ) (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) ) (vlax-release-object dbx) ) ) ) ) ) ;; j'insère le bloc toujours à partir du header. (if (setq RESULT (car (member NOM (block_list AcDoc)))) (progn (if (zerop (vla-get-ActiveSpace AcDoc)) (setq SPACE (vla-get-PaperSpace AcDoc)) (setq SPACE (vla-get-ModelSpace AcDoc)) ) (setq REF (vla-InsertBlock SPACE (vlax-3d-point (trans PT 1 0)) NOM ECHX ECHY ECHZ ROT ) ) (setq SCALE (vla-get-InsUnitsFactor REF)) (setq INSPT (vla-get-InsertionPoint REF)) (vla-ScaleEntity REF INSPT SCALE) ;; mise à jour des attributs (foreach LATT LISTEATT (modif_attrib REF (car LATT) (cadr LATT)) ) ) ) ;; renvoie le nom du bloc inséré ou nil si non trouvé RESULT ) Mais il y a un truc que je n'ai toujours pas pigé : pourquoi faut-il faire le vla-scaleEntity :casstet: Amicalement Zebulon_
×
×
  • 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é