-
Compteur de contenus
1 489 -
Inscription
-
Dernière visite
-
Jours gagnés
19
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par zebulon_
-
c'est normal, puisque la variable I n'évolue pas dans la boucle repeat. Dans cette ligne de code : (setq pol (ssname spol (1+ i)) I vaut toujours 0, donc (ssname spol (1+ i)) pointera toujours sur le 2ème élément du jeu de sélection. S'il ce 2ème élément a été effacé à la première itération par la commande ERASE qu'on trouve un peu plus loin dans le code, ça va forcément se planter puisque (ssname splo (1+ i) pointera vers une entité effacée. Il faut donc écrite (setq pol (ssname spol i) i (+1 i) ... ... ) afin de prendre tour à tour chaque élément de spol Amicalement Vincent
-
Bonjour, on peut créer directement une délimitation inversée avec la commande XDELIM Mais ce n'est valable, par rapport à la méthode proposée par didier, que s'il n'y a qu'une seule zone à cacher. Il n'y a qu'un seul contour de délimitation par xref, on ne peut donc pas mettre un petit rectangle par ci, un autre par là et un troisième ailleurs. Si la situation est plus complexe, il faut passer par une polyligne complexe décrite par didier. Amicalement Vincent
-
oui, mais là on parle d'ouvrage neuf. Cela fait quelques années que je réalise des plans d'ouvrages neufs et je n'ai jamais eu à indiquer un repère IGN à mettre en place sur ces ouvrages. Alors que la pose de repères de nivellement figure toujours au marché. J'en conclue que la pose d'un repère IGN neuf dépend directement de l'IGN. Pour les marchés de réparation, où il peut y avoir dépose et repose, c'est évidemment différent. Merci de nous avoir indiqué la procédure à suivre dans ce cas précis. Amicalement Vincent
-
Masque d\'arrière plan - ligne de repère multiple
zebulon_ a répondu à un(e) sujet de zebulon_ dans AutoCAD 2010
Celui qui trouve recevra des chocolats du fauxsuisse, ou des fauxchocolats suisses, c'est selon... Blague à part, je ne sais pas non plus où ça se définit, si ça se définit. Pour les cotes, c'est d'ailleurs le même problème. Amicalement Vincent -
Bonjour, ici tu trouveras quelque chose qui ressemble Amicalement Vincent
-
Le tablier oui. Les appuis beaucoup moins, ou alors l'ouvrage est bien malade. Les "petits" repères de nivellement dont je parle sont mis en place à la construction de l'ouvrage à des fins de contrôle, comme le précise à juste titre Geo34. Les repères de nivellement NGF, c'est autre chose et, à ma connaissance, il sont mis en place sous la responsabilité de l'IGN et non du maître d'ouvrage. Amicalement Vincent
-
Masque d\'arrière plan - ligne de repère multiple
zebulon_ a répondu à un(e) sujet de zebulon_ dans AutoCAD 2010
Bonjour, l'utilisation du réacteur est un pis-aller. Ce serait quand même plus logique de pouvoir définir le masque d'arrière plan dans le style de ligne de repère multiple. On sait le faire avec des cotes, alors pourquoi pas avec des lignes de repère multiple, voire des styles de texte ? Quoique, avec les cotes on sait rajouter facilement au style de cote une couleur de remplissage "Arrière-plan", mais je ne vois pas non plus où on peut définir un facteur de décalage ? Étant donné que le décalage par défaut pour les cotes est convenable, on ne va pas se casser la tête à trouver comment ça se paramètre, pour autant que c'est possible. Amicalement Vincent -
Bonjour, je ne sais pas s'il y a une norme en matière de repère de nivellements sur OA. Habituellement, on met en place : - Sur tablier ou traverse : sur chaque trottoir au droit des appuis et milieu de travée - Sur appui : 2 par pile, culée ou piédroit (sur les parements visibles) Le repère de nivellement en lui même est un "clou" en acier inoxydable dont les formes peuvent varier. Le modèle utilisé sur les ouvrages des LGV est un clou dont la pointe de diamètre 11mm, de longueur 70mm est noyée dans le béton. La tête arrondie qui ressort du béton fait 15mm de diamètre et 8mm de haut. Amicalement Vincent
-
Bonjour, C'est un sujet qui a déjà été abordé ici . La solution consiste, en gros, à modifier chaque ligne de repère multiple une fois qu'elle est créée. Cela ne me satisfait pas. Je préférerais définir un masque d'arrière plan dans le style de repère multiple et avoir ce masque une fois pour toute. Mais, j'ai beau regarder dans le gestionnaire des styles de repère multiple, je n'ai trouvé aucun endroit où j'aurai pu activer la transparence de l'arrière-plan (comme on sait le faire facilement avec un style de cote) Pourtant, quand on regarde les codes DXF dans les Codes de groupe de données contextuelles de style de ligne de repère multiple, on trouve ces codes dxf : 91 Couleur d'arrière-plan texte 92 Transparence de l'arrière-plan texte 291 Couleur d'arrière-plan texte activée? 292 Remplissage d'arrière-plan texte activé? J'en conclue qu'il est possible de définir un style de repère multiple avec une couleur d'arrière-plan texte activé, puisqu'il y a le code dxf correspondant. :exclam: Comment sont définis les styles de lignes de repère multiple ? On ne les trouve pas, comme les style de cotes, dans une table. Il faut aller les chercher dans un dictionnaire. (setq dic (vla-item (vla-get-dictionaries acdoc) "ACAD_MLEADERSTYLE")) puis un style contenu dans dic (setq mlstyle (vla-item dic "standard")) Là, on se dit qu'avec (vlax-dump-object mlstyle), on va trouver quelque chose qui correspond à TextBackGround... mais, non, on fait choux blanc. Donc, j'ai essayé de passer par les codes dxf, mais c'est pas mieux. Comme je n'arrive pas à définir les choses en amont, j'essaye de modifier les choses en aval avec un réacteur. J'ai rajouté les textes dans le réacteur, afin de leur appliquer un masque également. ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-command-reactor "Masque texte" '((:vlr-commandEnded . EndMtextMleader))) (defun EndMtextMleader (calling-reactor endcommandInfo / thecommandend enam elst obj d) (setq thecommandend (nth 0 endcommandInfo)) (setq enam (entlast)) (setq obj (vlax-ename->vla-object enam)) (setq d 1.15) ;; valeur de l'offset (cond ((= thecommandend "MTEXT") (if (eq (vla-get-backgroundfill obj) :vlax-false) (progn ;; changer backgroundfill à vrai (vla-put-backgroundfill obj :vlax-true) ;; entmod offset (setq elst (entget enam)) (entmod (subst (cons 45 d) (assoc 45 elst) elst ) ;_ subst ) ;_ entmod ) ;_ progn ) ;_ if ) ((= thecommandend "MLEADER") (if (eq (vla-get-TextBackgroundFill obj) :vlax-false) (progn ;; changer backgroundfill à vrai (vla-put-TextBackgroundFill obj :vlax-true) ;; entmod offset (setq elst (entget enam)) (entmod (subst (cons 141 d) (assoc 141 elst) elst ) ;_ subst ) ;_ entmod ) ;_ progn ) ;_ if ) ) ;_ cond ) Amicalement Vincent
-
Bonjour, il y a une boucle while dont le but est de parcourir les éléments du jeu de sélection sell les uns après les autres, par le biais de ssname. Mais, à l'intérieur de la boucle while, le jeu de sélection sell est modifié par un ssdel. Donc, à chaque ssdel, le jeu de sélection est amputé d'un élément et, au bout d'un moment, le compteur pointe au-delà du nombre de membres du jeu de sélection. Ce qui revient, en quelque sorte, à couper la branche sur laquelle on est assis. Quand on veut parcourir un jeu de sélection, il vaut mieux créer une liste ou jeu de sélection dans lequel on met tout ce qui nous intéresse, sans toucher au jeu de sélection d'origine en cours de route, et exploiter le nouveau jeu de sélection (ou liste) par la suite. (defun C:selblatt () (setq sel1 (ssget)) (if sel1 (progn (setq compteur 0) (setq sel2 (ssadd)) (repeat (sslength sel1) (setq entite (ssname sel1 compteur)) (setq blatt (cdr (assoc 66 (entget entite)))) (if blatt (ssadd entite sel2) ) (setq compteur (1+ compteur)) ) ) ) ) Par ailleurs, dans ce qu'il y a ci-dessus, on ne vérifie pas si le code dxf 66 provient d'un bloc. Il se pourrait très bien que d'autres types d'entités utilisent également ce code pour désigner autre chose que le "drapeau attributs suivent". Je connais au moins un type d'entité qui utilise ce code : la polyligne (pas la lwpolyline) où le code 66 signifie "drapeau sommets suivent". Alors, soit il faut utiliser à la source les possibilités de filtres de ssget, comme le suggère très justement bonuscad, soit faire un test par la suite et s'assurer qu'il s'agit bien d'une entité de type INSERT. Il va sans dire que la première méthode est bien plus efficace. Amicalement Vincent
-
Bonjour, pour Autodesk Architectural Desktop 2004, j'ai la valeur suivante : "http://www.autodesk.com/archdesktop" Amicalement Vincent
-
Merci, j'avais déjà fait quelque chose de semblable. J'ai fait un ssget des cotes ordonnées, j'ai pris le "measurement" de la cote, je l'ai transformé en texte, pour rajouter le "+" à l'endroit qui va bien et j'ai réinjecté cette valeur dans "textoverride" Ce que je regrette, c'est que ce ne soit plus une cote, avec les avantages qu'elle comporte : à savoir qu'elle est associative. Là, j'ai l'équivalent d'une cote forcée et on sait bien que ce n'est pas très bon. Amicalement Vincent PS : pour poster quelque chose, il faut avoir une sacrée patiente. Ce n'est que chez moi ?
-
Bonjour, Voilà mon soucis : j'ai coté des PK (points kilométriques) de files d'appuis d'un ouvrage en utilisant la cote ordonnée x. Cela me donne des valeurs du genre 368689.85, mais l'AMO souhaite que la cote soir écrite sous cette forme 368+689.85. J'ai donc cherché un séparateur de milliers dans les styles de cotes, malheureusement en vain. L'idée d'utiliser un préfixe de cote "368+" n'est pas non plus la bonne : l'ouvrage est trop long et cela peut être 367+ ou 369+ Tant pis, je vais me faire un lisp qui m'écrit un texte qui correspond à l'ordonnée x avec le format souhaité par l'AMO. Ce ne sera plus une cote et c'est dommage, à moins que vous ayez une idée ? Amicalement Vincent
-
Bonjour, Voilà mon soucis : j'ai coté des PK (points kilométriques) de files d'appuis d'un ouvrage en utilisant la cote ordonnée x. Cela me donne des valeurs du genre 368689.85, mais l'AMO souhaite que la cote soir écrite sous cette forme 368+689.85. J'ai donc cherché un séparateur de milliers dans les styles de cotes, malheureusement en vain. L'idée d'utiliser un préfixe de cote "368+" n'est pas non plus la bonne : l'ouvrage est trop long et cela peut être 367+ ou 369+ Tant pis, je vais me faire un lisp qui m'écrit un texte qui correspond à l'ordonnée x avec le format souhaité par l'AMO. Ce ne sera plus une cote et c'est dommage, à moins que vous ayez une idée ? Amicalement Vincent
-
Je n'ai pas de chef BE, je suis indépendant. Je constate juste que, quel que soit mon client, leur charte graphique est immuable et a été fixée du temps de la version 12. On a beau leur dire, rien n'y fait. C'est coulé dans le bronze et il ne faut surtout rien changer. Il m'arrive donc fréquemment de passer outre leur charte graphique, quand je l'estime nécessaire. quitte à me faire taper un peu sur les doigts. Amicalement Vincent
-
Bonjour, Pas tout à fait d'accord. Cela dépend de la précision qu'on lui demande. En ouvrages d'art, on demande la précision du mm aux maçons. Je me dois donc de leur fournir des plans avec des cotes au mm. ce qui compte, à mon avis, c'est de rester homogène dans les unités de cotation. Coter tantôt en m, tantôt en cm sur le même plan : c'est ça que je ne trouve pas bon, parce qu'on se complique la vie pour pas grand chose. cela dépend où. Dans un bon nombre de bureaux d'études, ces choses là sont quand même un peu cadrées (nom de calques imposés, styles de texte et styles de cotes également, le ctb aussi, etc...), pour justement éviter que chacun fasse sa tambouille et qu'on puisse travailler un minimum ensemble. Mais, il est évident que si rien n'est imposé, chacun fera ce qui lui plait et aura forcément une méthode meilleure que son voisin. Donc, c'est bien d'imposer. Le revers de la médaille est que les bureaux d'études ont imposé quelque chose à un instant T et, qu'entre temps, Autocad a un peu évolué, mais on ne tient pas compte de ces évolutions parce que ce n'est pas prévu par la "charte graphique" (lignes de repères multiples, styles de calques etc...) qui reste immuable. Amicalement Vincent
-
sans doute pour pouvoir être conforme à une ancienne (et mauvaise) habitude qui à cours dans les métiers du bâtiment et qui consiste à coter en mètres celles qui sont supérieures à 1m et en cm celles qui sont inférieures à 1m. On en a déjà parlé et je continue à trouver cette "règle" complètement idiote. Personnellement, je cote tout en mm. Le mm étant la précision qui m'est demandée - on ne me demande pas 1/10 ou de 1/100 de mm - je n'ai que des cotes avec des valeurs entières. Pour lili2006, il y a une autre méthode pour supprimer la virgule qui consiste à appliquer un facteur d'échelle de 100 (si on travaille en m pour obtenir de cm) puis fixer la précision à 0 chiffres après la virgule. On aura des cotes en cm pour un fichier en m, avec une précision du cm. Personnellement, je fais quelque chose de similaire, avec un facteur de 1000 (je travaille en m et je cote en mm), avec 0 chiffres après la virgule. J'ai des cotes en mm pour un fichier en m, avec la précision du mm. Donc pas de virgules nulle part et donc, a fortiori, pas de 0 à supprimer ni avant ni après. Amicalement Vincent
-
Bonjour, Le bout de code que j'ai donné l'a été à titre d'exemple. Seg1 et Seg2 sont des variables et tu peux, comme on peut s'y attendre pour des variables, y mettre ce que tu veux et à partir de ce que tu veux. En l'occurrence, il vaut mieux y mettre des adresses du genre < Nom d'entité: 6c56d208 >, d'où qu'elles viennent. Sinon la commande _fillet risque fort de se planter. Par ailleurs, seg1 et seg2 ont été nommés selon mon humeur du moment, tu es libre de les baptiser autrement : une deuxième propriété des variables. Amicalement Vincent PS : une petite remarque au sujet de la commande _fillet et son équivalent lisp (command "_fillet"...) : dans les anciennes versions, la commande _fillet se terminait quand on spécifiait une valeur de rayon et il fallait relancer la commande pour faire le raccord avec le rayon défini précédemment. Maintenant, on peut donner la valeur du rayon sans sortir de la commande. On peut donc se dire qu'on peut écrire en lisp : (command "_fillet" "_r" "100" seg1 seg2) Eh bien non... quand on définit le rayon du congé de raccordement en lisp, on quitte la commande, comme dans les anciennes versions. [Edité le 20/5/2010 par zebulon_]
-
Bonjour, la commande _fillet demande de sélectionner un segment puis un second. Il n'y a pas besoin de valider comme lorsqu'il y a un "choix des objets" et les "" ne sont donc pas nécessaires. D'autre part, il y a la variable FILLETRAD qui est peut être plus facile à gérer pour changer la valeur du rayon que la commande "_fillet" (defun c:testfillet (/ seg1 seg2 oldfilletrad) (setq seg1 (car (entsel "\nsegment 1 : "))) (setq seg2 (car (entsel "\nsegment 2 : "))) (setq oldfilletrad (getvar "filletrad")) ;; mettre de côté la valeur actuelle du rayon de congé (setvar "filletrad" 100) ;; fixer le rayon du congé de raccordement à la valeur souhaitée (command "_fillet" seg1 seg2) ;; faire la raccord (setvar "filletrad" oldfilletrad) ;; remettre la valeur d'origine (princ) ) Amicalement Vincent
-
Créer un jeu de sélection de tous les blocks contenus dans un polygone
zebulon_ a répondu à un(e) sujet de karym dans Débuter en LISP
Un petit coup de boundingbox pour zoomer sur la polyligne, ça devrait le faire. J'ai modifié le message ci-dessus. Amicalement Vincent -
Créer un jeu de sélection de tous les blocks contenus dans un polygone
zebulon_ a répondu à un(e) sujet de karym dans Débuter en LISP
Re, j'ai changé le lisp pour que cela réponde aux demandes pertinentes de lili... et pour corriger une grossière erreur : il fallait changer les coordonnées générales obtenues par vlax-get coordinates en coordonnées locales avant de les injecter dans (ssget). Sinon, le lisp ne fonctionne bien qu'en SCG. Amicalement Vincent -
Créer un jeu de sélection de tous les blocks contenus dans un polygone
zebulon_ a répondu à un(e) sujet de karym dans Débuter en LISP
avec un (sssetfirst nil ss) en utilisant les possibilités de filtrage du ssget (setq ss (ssget "_WP" lst '((0 . "INSERT") (2 . "NOM_DU_BLOC")))) et il faudrait cliquer au préalable sur un "représentant" des blocs qu'on voudrait comptabiliser pour en récupérer son nom et pouvoir l'injecter dans ssget. Est-ce que j'ai bien compris la demande ? Amicalement Vincent -
Créer un jeu de sélection de tous les blocks contenus dans un polygone
zebulon_ a répondu à un(e) sujet de karym dans Débuter en LISP
(defun listpt (ptsList / NewList I) (setq I 0) (repeat (/ (length ptsList) 2) (setq NewList (cons (trans (list (nth I ptsList) (nth (+ I 1) ptsList)) 0 1) NewList)) (setq I (+ I 2)) ) (reverse NewList) ) (defun modif_attrib (E ETIQ VALEUR / LATT ATT) (setq LATT (vlax-invoke E 'getAttributes)) (foreach ATT LATT (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ)) (vla-put-TextString ATT VALEUR) ) ) ) (defun zoom_ent (obj / util obj minpoint maxpoint) (setq util (vla-get-utility (vla-get-activedocument (vlax-get-acad-object) ) ) ) (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 c:selbloc (/ e lst ss NB BL BLMODEL) (vl-load-com) (setq e (entsel "\nSaisir polyligne :")) (if e (progn (setq e (vlax-ename->vla-object (car e))) (if (= "AcDbPolyline" (vla-get-Objectname e)) (progn (setq BLMODEL (entsel "\nSaisir bloc à compter : ")) (if BLMODEL (progn (setq BLMODEL (vlax-ename->vla-object (car BLMODEL))) (if (= (vla-get-objectname BLMODEL) "AcDbBlockReference") (progn (zoom_ent e) (setq NOMBL (vla-get-name BLMODEL)) (setq lst (listpt (vlax-get e 'coordinates))) (setq ss (ssget "_WP" lst (list '(0 . "INSERT") (cons 2 NOMBL)) ) ) (if ss (progn (setq NB (sslength ss)) (sssetfirst nil ss) ) (setq NB 0) ) (alert (strcat "Il y a " (itoa NB) " blocs " NOMBL)) (setq bl (entsel "\nSélectionner le bloc BLK-QTE : ")) (if bl (progn (setq bl (vlax-ename->vla-object (car bl))) (if (= (vla-get-objectname bl) "AcDbBlockReference") (modif_attrib bl "ATT-QTE" NB) ) ) ) ) ) ) ) ) ) ) ) (princ) ) Amicalement Vincent [Edité le 11/5/2010 par zebulon_] -
Créer un jeu de sélection de tous les blocks contenus dans un polygone
zebulon_ a répondu à un(e) sujet de karym dans Débuter en LISP
Bonjour, le polygone a choisir est une polyligne 2d ? Si oui, peut-on se contenter de récupérer les sommets pour faire le ssget ou est-il possible qu'il y ait des segments courbes ? Amicalement Vincent -
Bonjour, comme le disant Bonuscad, OSMODE est un code binaire qui est défini comme décrit dans l'aide : Donc le 33 = 32 + 1, donc INTersection et EXTREmité Amicalement Vincent
