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. Bonjour, Si je comprends bien, le vlr-object-reactor n'est pas persistant, donc ça ne marchera pas d'une session à la suivante ? A moins de marquer les objets à surveiller d'une manière ou d'une autre et de rétablir les réacteurs de surveillance au démarrage. Je crois que le sujet a été traité très récemment. Amicalement Vincent
  2. SELECTSIMILAR ne permet de sélectionner que des objets de même type. C'est dommage que cette commande soit restrictive à ce point. On aurait pu prévoir le type d'objet dans le choix de paramètres au même titre que les calques Amicalement Vincent
  3. (defun c:laysel (/ SS FILTRE I E LAY) (setq SS (ssget)) (if SS (progn (setq FILTRE '((-4 . "OR>")) ) (setq I 0) (while (< I (sslength SS)) (setq E (entget (ssname SS I))) (setq LAY (assoc 8 E)) (setq FILTRE (cons LAY FILTRE)) (setq I (+ I 1)) ) (setq FILTRE (cons '(-4 . "<OR") FILTRE)) (setq SS (ssget "_X" FILTRE)) (sssetfirst SS SS) ) ) (princ) ) Pour les versions après 2011, il y a aussi la commande Autocad SELECTSIMILAR qui permet de faire la même chose, en mieux. On peut paramétrer "similaires d'après". Par défaut, cette commande est paramétrée de façon à avoir une similitude entre "calque" et "nom". On va donc pouvoir sélectionner, par exemple, toutes les lignes d'un certain calque. Il est possible d'avoir cette commande également en menu contextuel. Clic droit après avoir sélectionné un objet, puis "sélectionner similaire" Amicalement Vincent
  4. ça vient de là Toujours pas de possibilité de définir un masque d'arrière plan dans le style de mleader, sauf erreur de ma part. Mais ce sera peut être possible un jour. amicalement Vincent
  5. Bonjour, dans la même veine, à une époque pas si lointaine, l'accrochage était toujours actif sur les hachures !!! Du coup, le risque de coter une hachure plutôt que l'arête de coffrage était très élevé. Un jour, je ne sais plus quand, une variable "osoptions" est apparue... qui permet d'accrocher les hachures ou non. Il ne faut donc pas désespérer ! Amicalement Vincent
  6. zebulon_

    organisation d'un SSGET

    Bonjour, (defun zoom_ent (e / util obj minpoint maxpoint) (setq util (vla-get-utility (vla-get-activedocument (vlax-get-acad-object)))) (setq obj (vlax-ename->vla-object e)) (vla-GetBoundingBox obj 'minpoint 'maxpoint) (setq minpoint (trans (vlax-safearray->list minpoint) 0 1)) (setq maxpoint (trans (vlax-safearray->list maxpoint) 0 1)) (command "_zoom" "_w" "_non" minpoint "_non" maxpoint) );defun un bout de code qui permet de faire un zoom sur un objet avec vla-getboundingbox (voir aide de cette fonction). Je pense que c'est préférable que de récupérer juste le premier point de la polyligne, qui n'est pas forcément celui en bas à gauche. J'imagine qu'on peut l'utiliser pour ton cas en récoltant une liste de "minpoint" à partir de la sélection de polylignes. Ensuite, on trie cette liste avec un vl-sort. (setq ptlist '((10 10) (0 0) (20 0) (0 10) (10 0) (20 10) (10 20) (20 20) (0 20))) (defun PointSort (Dir FunX FunY fuzz pl /) (if (= (strcase Dir) "X") (vl-sort pl (function (lambda (p1 p2) (cond ((equal (car p1) (car p2) fuzz) ((eval funY) (cadr p1) (cadr p2))) (t ((eval funX) (car p1) (car p2))) ) ) ) ) (vl-sort pl (function (lambda (p1 p2) (cond ((equal (cadr p1) (cadr p2) fuzz) ((eval funX) (car p1) (car p2))) (t ((eval funY) (cadr p1) (cadr p2))) ) ) ) ) ) ) ;; d'abord les x (print (PointSort "X" '< '< 1e-8 ptlist)) ;; x et y croissants (print (PointSort "X" '< '> 1e-8 ptlist)) ;; x croissant y décroissant (print (PointSort "X" '> '< 1e-8 ptlist)) ;; etc... (print (PointSort "X" '> '> 1e-8 ptlist)) ;; d'abord les y (print (PointSort "Y" '< '< 1e-8 ptlist)) (print (PointSort "Y" '< '> 1e-8 ptlist)) (print (PointSort "Y" '> '< 1e-8 ptlist)) (print (PointSort "Y" '> '> 1e-8 ptlist)) ;; x et y décroissants (princ) La fonction vl-sort ressemble à ce qu'a écrit (gile), mais je pense qu'il est préférable de rajouter une tolérance quand on compare des coordonnées de points. On a vite fait de trouver que ce n'est pas égal pour un micron de différence. Ensuite, j'ai essayé de faire une fonction un peu plus "tout-terrain" Amicalement Vincent
  7. Bonjour, en saisisant d'abord les points avec la commande getpoint (setq PT1 (getpoint "\nEntrer le premier point : ")) (setq PT2 (getpoint PT1 "\nEntrer le deuxième point : ")) Ensuite, on peut calculer le point central et, finalement, lancer la commande _insert en mettant un point à la place de l'angle 0 qui donnera l'angle entre PT1 et PT2. Mettre un point plutôt qu'un angle, ça évite de s'embêter à savoir si on est en radian, en degré ou en grades ou en Dieu sait quoi. En tout cas, les fonctions angle et polar utilisent les radians. La fonction _insert utilise l'unité définie dans les unités de dessin. Donc pas forcément des radians, on s'en doute. (setq PTC (polar PT1 (angle PT1 PT2) (/ (distance PT1 PT2) 2.0))) (command "_insert" "trait" "_non" PT1 1 1 "_non" PT2) (command "_insert" "entree" "_non" PTC 1 1 "_non" PT2) (command "_insert" "trait" "_non" PT2 1 1 "_non" (polar PT2 (angle PT1 PT2) 1)) Les "_non" c'est pour éviter d'être pollué par des accrochages aux objets et les 3 commandes angle, distance et polar sont indispensables pour bien commencer le lisp et je t'invite à consulter l'aide à leur propos. Amicalement Vincent
  8. zebulon_

    Echelle de type de ligne

    Bonjour, il y a sans doute un lisp, chargé au démarrage, qui lance un réacteur sensible au changement de présentation. voir ici ce qui pourrait expliquer le fonctionnement qui semble curieux et te crée un souci. Amicalement Vincent
  9. Bonjour (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object))) (vlax-for n (vla-get-layouts acdoc) (vlax-dump-object n)) pour afficher les propriétés des n présentations, dont l'espace objet. Amicalement Vincent
  10. zebulon_

    Créer une MLEADER en Vlisp

    Bonjour, les mleader, à l'image des cotes, sont des entités très complexes d'où le nombre phénoménal de vlax-put-property. Personnellement, je préfère faire un fichier dwg ou dwt qui contient le modèle de mleader (au 1:1) que je souhaite avoir et j'utilise le lisp (ouvrir_dessin_dbx) de patrick_35 qui permet d'ouvrir un fichier externe et d'en importer tout un tas de choses (styles de cotes, de mleader, de blocs etc...). Après je ne modifie que le facteur d'échelle du nouveau style de mleader. (defun create_mleaderstyle (ECH UNITS / MLeadName MLeadModel NOMFIC dbx dbxdic dbxMleaderStyle) (setq MleadName (strcat "CADSYS-MLEADER-" ECH)) (setq MleadModel "CADSYS-MLEADER-GABARIT") (if (not (member MLeadModel (MLeaderStyleList))) (progn (if (not (member MleadName (MLeaderStyleList))) (progn (setq NOMFIC (findfile (strcat "CADSYS-COT" UNITS ".DWG"))) (setq dbx (ouvrir_dessin_dbx NOMFIC)) (setq dbxdic (vla-item (vla-get-dictionaries dbx) "ACAD_MLEADERSTYLE" ) ) (setq dbxMleaderStyle (vla-item dbxdic MLeadModel)) (vla-put-scalefactor dbxMleaderStyle ECH) (vla-put-name dbxMLeaderStyle MleadName) (vla-CopyObjects Dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list dbxMLeaderStyle) ) (vla-item (vla-get-dictionaries AcDoc) "ACAD_MLEADERSTYLE") ) (vlax-release-object dbx) ) ) (setvar "CMLEADERSTYLE" MLeadName) ) (alert (strcat MLeadModel " présent dans le fichier")) ) ) les noms de styles sont évidemment à adapter. Je préfère cette façon de faire puisque dans le modèle dwt ou dwg on voit précisemment la "gueule" du style de mleader, puisq'il est représenté. Ensuite, il suffit que dans la version n+1 d'autocad, on te rajoute de nouvelles propriétés dans le style de mleader, pour que ton lisp devienne bancale. Sinon, pour répondre à ta question, peut-être que le bloc _tagcircle n'est pas présent dans le fichier et c'est cela qui fait planter ton lisp. Amicalement Vincent
  11. zebulon_

    Visretain

    Bonjour, un petit effet secondaire auquel je ne m'attendais pas : l'événement vlr-beginsave réagit également à la sauvegarde temporaire. Donc, si tu as mis une sauvegarde automatique toutes les 10mn, ton visretain sera remis à 1 au même interval. Amicalement Vincent
  12. zebulon_

    Visretain

    C'est vrai que ce n'est pas nécessaire, mais c'est juste pour se rendre compte quand ça agit, le setvar restant quant à lui très discret. Amicalement Vincent
  13. zebulon_

    Visretain

    finalement, je n'ai pas réussi à utiliser :vlr-beginclose correctement et j'ai opté pour :vlr-beginsave. Considérant qu'il faut sauvegarder avant de quitter... Le code ci-dessous est à charger au démarrage (le bouton "Contenu" sous la petite valise dans la boite de dialogue "charger/décharger des applications") ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-dwg-reactor "forcer visretain" '((:vlr-beginsave . SaveDwgVisretain))) (defun SaveDwgVisretain (reactor info) (if (zerop (getvar "VISRETAIN")) (progn (setvar "VISRETAIN" 1) (alert "VISRETAIN remis à 1") ) ) )
  14. zebulon_

    Visretain

    Bonjour, avec un réacteur vlr-dwg-reactor et l'événement :vlr-beginClose ? Amicalement Vincent
  15. Firefox pour moi aussi Amicalement Vincent
  16. Je vais m'orienter vers ce que propose Bruno, d'autant que, quand je sélectionne les onglets pour les publier, il doit bien se passer quelque chose au niveau du réacteur proposé ? A voir. Merci Amicalement Vincent
  17. Je me suis mal exprimé. C'est effectivement lorsque je fais un clic droit sur les onglets sélectionnés pour les publier que rien ne se passe. Je ne me sers jamais de la commande PUBLIER en dehors de ce cas Si quelqu'un a une idée pour espionner l'événement : "publier les présentations sélectionnées..." Amicalement Vincent
  18. Bonjour, j'y vois quand même un inconvénient. Il arrive de faire des présentations qu'on ne souhaite pas diffuser. Si je mets un numéro dans le nom de l'onglet, il sera compté sinon il est laissé de côté. De mon côté, je me suis dit que la numérotation des pages doit être nickel avant l'impression ou la publication. Donc, un réacteur qui épie la commande PLOT me parait convenir. ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vlr-command-reactor "modifie numero" '((:vlr-commandWillStart . StartPlot))) (defun StartPlot (calling-reactor StartCommandInfo / TheCommandStart) (setq TheCommandStart (nth 0 StartCommandInfo)) (if (= TheCommandStart "PLOT") (progn (alert "début PLOT") ) ) ) Mais quid de la commande PUBLISH ? Ce n'est pas une commande ? Car elle n'est pas transmise par le vlr-command-reactor ? Amicalement Vincent
  19. j'ai rajouté le dwg : l'insertion d'un fichier joint n'a pas fonctionné
  20. Bonjour, je fais très souvent des plans sous forme de cahiers A3, chaque page étant un onglet dont le nom est significatif de ce qu'il représente ("vue en plan", "coupe", etc...). Je numérote chaque page en rajoutant un texte en bas de la feuille 1/5, 2/5... 5/5. C'est un peu fastidieux quand on a 40 présentations et je souhaite automatiser cette "corvée". En utilisant les champs, on arrive à récupérer la variable CTAB, mais du coup les présentations se nommeraient "1", "2", "3" etc..., sans rapport avec ce qu'elles représentent. En plus, pour avoir le nombre total de pages, je ne vois pas bien comment y arriver avec un champ. L'idée est de nommer les présentations en mettant entre parenthèses le numéro de page : "vue en plan (1)", "coupe (2)" etc..., de mettre un bloc avec 2 attributs (un pour le numéro de page, un pour le nombre de page totales) sur chaque présentation et d'utiliser un programme lisp pour renseigner ces 2 attributs. Voir http://www.neufgiga.com/n/50-17/share/LNK4818521472a1be441/ pour avoir le bloc et voir l'organisation des noms d'onglets. (vl-load-com) (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 GetLayNum (LAY / P1 P2 RES) (setq P1 (vl-string-position (ascii "(") LAY)) (setq P2 (vl-string-position (ascii ")") LAY)) (if (and P1 P2) (setq RES (atoi (substr LAY (+ P1 2) (- P2 P1 1)))) ) RES ) (defun c:vl_pagi (/ ss I LNUM LLAY e LAYOUT NUM) (vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object))) (setq ss (ssget "_X" '((0 . "INSERT") (2 . "vl_pagi")))) (setq I 0) ;; boucle pour changer l'attribut "Numéro de page" (repeat (sslength ss) (setq e (ssname ss I)) (setq I (+ I 1)) (setq LAYOUT (cdr (assoc 410 (entget e)))) ;; nom de la présentation (if (setq NUM (GetLayNum LAYOUT)) (progn (setq LNUM (cons NUM LNUM)) (setq LLAY (cons e LLAY)) (modif_attrib e "P" (itoa NUM)) ) ) ) ;; boucle pour changer l'attribut "nombre de pages totale" uniquement sur les présentations avec un numéro (setq I 0) (repeat (length LLAY) (setq e (nth I LLAY)) (setq I (+ I 1)) (modif_attrib e "TP" (itoa (apply 'max LNUM))) ) (if (/= (length LLAY) (apply 'max LNUM)) (alert "Incohérence de numérotation") ) (alert (strcat (itoa (length LLAY)) " blocs modifiés")) (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) Cela répond déjà pas mal à la demande de départ, mais l'étape suivante est de rendre cela encore plus transparent pour l'utilisateur. L'utilisation d'un réacteur me semble donc s'imposer, mais lequel ? S'il faut espionner : - la création d'un nouvel onglet - la supression d'un onglet - l'insertion d'un bloc de pagination - etc... cela commence à faire beaucoup de chose. Je me dis que le plus simple est de modifier les blocs au moment d'une impression et lors d'une publication. Qu'en dites-vous ? Amicalement Vincent
  21. Bonjour, une fonction avec 3 points en arguments, dont je revendique un peu la paternité également. ;;; Clockwise-p ;;; Retourne T si les points p1 p2 et p3 tournent dans le sens horaire (defun clockwise-p (p1 p2 p3) (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14) ) une autre avec un objet et un point en argument (defun PTaDroiteObj (obj pt / PTN PM fder PT1DERIV) (if (= (type Obj) 'ENAME) (setq Obj (vlax-ename->vla-object Obj)) ) (setq PTN (vlax-curve-GetClosestPointTo obj PT)) (setq PM (vlax-curve-GetParamAtPoint obj PTN)) (setq fder (vlax-curve-getfirstderiv obj PM)) (setq PT1DERIV (mapcar '+ PTN fder)) (< (sin (- (angle PTN PT) (angle PTN PT1DERIV))) -1e-14) ) Amicalement Vincent
  22. D'autant que l'autocritique est quelque chose que l'on attend des autres, la plupart du temps. Il est rare qu'on se l'impose à soi-même. Amicalement Vincent
  23. (defun c:laysel (/ SS FILTRE I E LAY) (setq SS (ssget)) (if SS (progn (setq FILTRE '((-4 . "OR>")) ) (setq I 0) (while (< I (sslength SS)) (setq E (entget (ssname SS I))) (setq LAY (assoc 8 E)) (setq FILTRE (cons LAY FILTRE)) (setq I (+ I 1)) ) (setq FILTRE (cons '(-4 . "<OR") FILTRE)) (setq SS (ssget "_X" FILTRE)) (sssetfirst SS SS) ) ) (princ) ) un petit lisp dont je me sers assez régulièrement. Il permet, dans un premier temps, de sélectionner des objets qui désignerons le ou les calques sélectionnés. A manier avec prudence parce que cela sélectionne sur tout le fichier. Amicalement Vincent
  24. zebulon_

    FERRAILLAGE TYPE OA

    Bonjour Lili, en fouillant un peu sur le site du SETRA, on peut trouver certains documents au format pdf (ceux qui ne sont plus édités) Par exemple celui qui traite des dalles de transistions http://portail.documentation.equipement.gouv.fr/dtrf/pdf/pj/Dtrf/0000/Dtrf-0000481/DT481.pdf?openerPage=notice pour des documents plus récents, il faut payer. Mais, la DTRF (Documentation des Techniques Routières Françaises) et le SETRA proposent un abonnement qui permet de consulter leur documentation en ligne. L'abonnement, c'est de l'ordre de 1000€ par an. Mais, tu devrais pouvoir négocier un prix si c'est pour une école. On peut espérer que des organismes publics soutiennent des écoles, publiques elles aussi. Amicalement Vincent
  25. zebulon_

    FERRAILLAGE TYPE OA

    Bonjour, j'ai fait des tonnes de ferraillages d'ouvrages. Je te conseille d'acquérir ou de consulter les documents édités par le SETRA pour chaque type d'ouvrage : - le guide de conception des ponts-dalles Réf : F8926 - Ponts-cadres et portiques Réf : F9246 - Pons-Routes à poutres préfabriquées précontraintes par adhérence : F9646 - Dalles de transition des ponts routes : F8504 - Ponts-routes à tablier en poutrelles enrobées - etc... La bibliothèque du SETRA est incontournable quand on souhaite parler d'ouvrages d'art en France. Certains de ces documents sont, malgré tout, relativement anciens, notamment le document qui concerne les dalles de transitions (edition de 1984...), mais les principes restent applicables en gardant à l'esprit que les règlements de calculs ont bien évolué depuis lors. Je t'envoie des fichiers qui représentent des coffrages et ferraillages d'ouvrages en MP 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é