-
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_
-
Bonjour, Je ne peux que répéter ce qui a déjà été dit par GER-onimo. Amicalement Vincent
-
Bonjour, On avait déjà parlé d'un _qsave MILIEU ici. Milieu de quoi, on ne sait pas ! Maintenant, avec la version 2010, j'ai de temps en temps un autre message "_qsave Impossible de transmettre le fichier de dessin sélectionné." Transmettre quel fichier ? A qui ? Pour le mettre où ? Mystère ... :casstet: En plus, c'est un phénomène aléatoire et pour trouver ce qui le déclenche ce n'est pas évident. En tout cas, le fichier s'enregistre bien, malgré le message d'erreur, dont le contenu porterait plutôt à me rendre inquiet. Suis-je le seul à avoir cela ? Amicalement Vincent
-
Bonjour, _lengthen qui renseigne aussi la variable PERIMETER. Effectivement, pour ceux qui ne veulent pas utiliser le vlisp, c'est une option à retenir, avec la commande LISTE. Cette dernière est plus "bavarde" que _lengthen et elle renseigne aussi la variable PERIMETER. Amicalement Vincent
-
Bonjour, j'ai voulu obtenir une longueur d'une polyligne en utilisant la commande AIRE Objet. Quand la polyligne "papillonne" (quand 2 segments se croisent), la commande plante et renvoie le message suivant : En prime, on a une utilisation impropre du mot "air" et on a un adjectif mal accordé ;). Bientôt on aura Autocad version SMS. La commande LISTE, par contre, arrive a nous renseigner sur la longueur. En soi, ce n'est pas bien grave, mais ceux qui utilisent la commande AIRE dans un lisp pour récupérer la longueur dans la variable PERIMETER vont avoir des cas où cela ne marche pas. A la place de (command "_area" "_e" e) (setq PERI (getvar "PERIMETER")) ce serait mieux d'utiliser : (setq PERI (vla-get-length (vlax-ename->vla-object e))) Amicalement Vincent
-
Intersection droite/cercle droite/droite
zebulon_ a répondu à un(e) sujet de zebulon_ dans Routines LISP
Bonjour, Bel échange, comme on dirait au tennis. ;) (defun IntersCirc (p1 p2 d1 d2 / d0) de (Gille) ressemble pas mal sur le principe au (defun intersCC (PT1 R1 PT2 R2 / RES D DC A H), à part que j'utilise la fonction ATAN (qui est disponible) plutôt que ACOS (qui curieusement ne l'est pas). Tout cela pour dire que nous ne remercierons jamais assez celui qui a été assez génial pour inventer la fonction polar Amicalement Vincent -
Bonjour, Intersection droite/droite, on sait faire avec la fonction inters le but du jeu est de trouver, s'il(s) existe(nt), les intersections entre une droite et un cercle, et entre 2 cercles. Les droites sont définies par 2 points et les cercles sont définis par leur centre et leur rayon et sont sur le même plan. Une première méthode consiste à tracer les droites et les cercles, puis d'utiliser la méthode (vlax-invoke OBJ1 'IntersectWith OBJ2 acExtendBoth) puis d'effacer les objets créés. Mais je voulais trouver les solutions sans dessiner puis effacer et avoir 2 fonctions (intersDC PT1 PT2 PTC R) ;; intersection droite cercle (intersCC PT1 R1 PT2 R2) ;; intersection cercle cercle Voilà ce que cela peut donner (defun intersDC1 (PT1 PT2 PT3 R / RES P1 P2 x1 x2 y1 y2 a b AF BF CF D xa ya xb yb) ;; intersection droite cercle de façon analytique ;; origine sur le centre du cercle, cela simplifie... (setq P1 (mapcar '- PT1 PT3)) (setq P2 (mapcar '- PT2 PT3)) ;; déterminer les valeurs de x1, y1 ... (setq x1 (car P1) x2 (car P2) y1 (cadr P1) y2 (cadr P2) ) ;; y = ax+b : trouver a et b (setq a (/ (- y1 y2) (- x1 x2))) (setq b (- y1 (* a x1))) ;; en substituant équation droite dans équation cercle on obtient ;; (1+a²)x² + 2abx + b² - R² = 0 ;; ce qui nous donne une belle équation du 2nd degré ;; AF*x + BF*x + CF (setq AF (+ 1 (* a a))) (setq BF (* 2 a b)) (setq CF (- (* b b) (* R R))) (setq D (- (* BF BF) (* 4 AF CF))) ;; trouver le (ou les) point(s) d'intersection (cond ((and (> D -1e-7) (< D 1e-7)) ;; D=0 racine double (setq xa (/ BF (* -2 AF))) (setq ya (+ (* a xa) b)) (setq RES (list (mapcar '+ (list xa ya) PT3))) ) ((> D 0) ;; 2 racines distinctes (setq xa (/ (+ (sqrt D) BF) (* -2 AF))) (setq ya (+ (* a xa) b)) (setq xb (/ (- (sqrt D) BF) (* 2 AF))) (setq yb (+ (* a xb) b)) (setq RES (list (mapcar '+ (list xa ya) PT3) (mapcar '+ (list xb yb) PT3))) ) (T (setq RES nil)) ;; pas de racine ) RES ) ;; avec polar c'est quand même plus facile !!! (defun intersDC (PT1 PT2 PT3 R / RES ANG PT4 H) ;; intersection droite cercle de façon polaire (setq ANG (angle PT1 PT2)) (setq PT4 (polar PT3 (+ ANG (/ pi 2)) 1.00)) (setq PT4 (inters PT1 PT2 PT3 PT4 nil)) (setq H (distance PT3 PT4)) (setq DC (- R H)) (cond ((and (> DC -1e-7) (< DC 1e-7)) ;; droite et cercle tangents : 1 solution (setq RES (list PT4)) ) ((> DC 0) ;; 2 solutions (setq A (sqrt (- (* R R) (* H H)))) (setq RES (list (polar PT4 (+ ANG PI) A) (polar PT4 ANG A) ) ) ) (T (setq RES nil)) ;; pas de solution ) RES ) (defun intersCC (PT1 R1 PT2 R2 / RES D DC A H) ;; intersection cercle cercle de façon polaire (setq D (distance PT1 PT2)) (setq DC (- (+ R1 R2) D)) (cond ((and (> DC -1e-7) (< DC 1e-7)) ;; 2 cercles tangents : 1 solution (setq RES (list (polar PT1 (angle PT1 PT2) R1))) ) ((> DC 0) ;; 2 solutions (setq A (/ (+ (* R1 R1) (* R2 R2 -1) (* D D)) (* 2 D))) (setq H (sqrt (- (* R1 R1) (* A A)))) (setq ALPHA (atan (/ H A))) (setq RES (list (polar PT1 (+ (angle PT1 PT2) ALPHA) R1) (polar PT1 (- (angle PT1 PT2) ALPHA) R1))) ) (T (setq RES nil)) ;; pas de solution ) RES ) (defun c:inters1 () (setq PT1 (getpoint "\nPremier point de la droite : ")) (setq PT2 (getpoint PT1 "\nDeuxième point de la droite : ")) (setq PT3 (getpoint "\nCentre du cercle : ")) (setq R (getdist PT3 "\nValeur du rayon : ")) (intersDC PT1 PT2 PT3 R) ) (defun c:inters2 () (setq PT1 (getpoint "\nCentre du 1er cercle : ")) (setq R1 (getdist PT1 "\nValeur du 1er rayon : ")) (setq PT2 (getpoint "\nCentre du 2ème cercle : ")) (setq R2 (getdist PT2 "\nValeur du 2ème rayon : ")) (intersCC PT1 R1 PT2 R2) ) Amicalement Vincent
-
C'était une boutade. C'est effectivement mieux de ne pas être sectaire et de choisir la méthode la plus appropriée au cas à traiter. Approprié peut évidemment prendre plusieurs significations : au mieux de ses connaissances, ce qui s'écrit le plus facilement, ce qui est le plus rapide d'exécution etc ... Tout dépend du contexte. Amicalement Vincent
-
Bonjour, J'adopte cette méthode étant donné que grdraw est vraiment très limité. Merci pour le tuyau. Par contre, j'ai une petite question : tu utilises un entmakex, alors que tu es un fan des vla-etcetera. J'en conclue que ça ne marche pas avec les fonctions vla ? Fausse conclusion, ça marche aussi avec des vla-add et vla-delete. Amicalement Vincent [Edité le 17/3/2009 par zebulon_]
-
Réseau au pas triangulaire
zebulon_ a répondu à un(e) sujet de nicolas2 dans Pour aller plus loin en LISP
C'est un jeu ? Celui qui devine où travaille Nicolas2 gagne une visite guidée de la centrale de Flamanville ? Pour moi, ça ressemblait plus à une coupe d'un câble de précontrainte, si les cercles avaient été tangents. Tout ça pour dire que ce n'est pas une tare que de travailler pour AREVA. Il y en a beaucoup qui participent à ce forum (dont moi) qui bossent dans le domaine de la route. Et on ne les montre pas du doigt en disant : "oh le méchant constructeur de route qui fait diminuer les surfaces cultivables et augmenter le CO²". On devrait ? Dans ce cas, éteignez vos ordinateurs, ils utilisent de la méchante énergie nucléaire. Vendez vos voitures : vive le tram, le vélo et la marche à pied. Je ne suis pas un fervent défenseur de l'énergie nucléaire, au contraire, je considère cela comme si on faisait voler un avion sans savoir le faire atterrir. On fait vachement confiance aux générations futures pour régler le problème des déchets. Mais le problème est bien complexe et ce n'est pas moi qui trouverais la solution. L'argument qui prétend que l'énergie nucléaire est une réponse à l'effet de serre est aussi peu crédible que celui qui prétend que l'énergie fossile est une réponse aux déchets nucléaires. Le débat est lancé... Amicalement Vincent -
Mortel... c'est la 1ère fois qu'on qualifie mon boulot de mortel :) J'ai déjà tout eu, depuis "nul" jusqu'à "très bien", mais jamais "mortel". Je kiffe trop "mortel". Amicalement Vincent
-
nentsel, blocs et xrefs
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Entre temps, j'ai trouvé un code dxf 330 qui indique "l'objet propriétaire". Donc quand on sélectionne un attribut de bloc ou alors un vertex d'une polyligne 3D, on peut aller à la pêche aux informations avec ce code dxf 330 pour trouver le bloc propriétaire de l'attribut ou la polyligne 3d propriétaire du sommet. (defun c:?? () (setq e (nentsel)) (if e (progn (setq a (entget (car e))) (setq TP (cdr (assoc 0 a))) (setq MSG (strcat TP "\nCalque : " (cdr (assoc 8 a)))) (cond ((= TP "ATTRIB") (setq OWNER (cdr (assoc 330 a))) (setq a (entget OWNER)) (setq MSG (strcat MSG "\n\ndans BLOC : " (cdr (assoc 2 a)) "\nCalque : " (cdr (assoc 8 a)))) ) ((= TP "VERTEX") (setq OWNER (cdr (assoc 330 a))) (setq a (entget OWNER)) (setq MSG (strcat MSG "\n\ndans POLYLIGNE 3D\nCalque : " (cdr (assoc 8 a)))) ) ) (if (> (length e) 2) ;; complexe (progn (setq lnested (car (reverse e))) (foreach enested lnested (setq nested (entget enested)) (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 nested)))) (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4) ; c'est une xref (setq MSG (strcat MSG "\n\ndans XREF : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested)))) (setq MSG (strcat MSG "\n\ndans BLOC : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested)))) ) ) ) ) (alert MSG) ) ) (princ) ) Amicalement Vincent -
Bonjour, ces derniers temps, mon boulot consiste à faire des plans de synthèse sur un projet de voirie tramway. C'est à dire que je récolte les plans des différents intervenants que je dois superposer pour mettre en évidences les éventuelles incohérences. Donc, cela va sans dire que j'utilise la xref de façon presque exclusive et je ne fais que geler les calques qui ne nous intéressent pas. Pas trop technique comme boulot, mais ce n'est pas le sujet. J'ai remarqué que, de temps à autre, la commande GELCALQUE ou _layfrz avait quelques difficultés à fonctionner sur des éléments de xrefs. Non pas lorsque les éléments de la xrefs sont des objets simples comme des lignes, des arcs, des cercles... Mais lorsque qu'on clique sur un élément d'un bloc contenu dans une xref il arrive souvent qu'on gèle le calque 0. Ceci s'explique par le fait que celui qui a fabriqué le bloc a mis les éléments qui le constituent sur un (ou plusieurs) calque(s) et a laissé le bloc lui-même sur le calque 0. C'est pas bien !!! Mais bon, c'est comme ça et je ne vais pas aller tirer les oreilles individuellement à chacun. Mais comme je ne veux pas ouvrir le fichier xref à chaque fois pour voir comment c'est fabriqué à l'intérieur, je me suis intéressé à la fonction (nentsel). J'ai vu des sujets de (Gilles) Patrick35 et de Bonuscad traitant de la matrice de transformation renvoyée par (nentsel), mais ce n'est pas ce qui m'intéressait. Revenons à (nentsel), de quoi s'agit-il ? En gros, c'est une fonction qui permet de sélectionner un objet. Si cet objet n'est pas complexe (bloc ou xref), (nentsel) renvoie les mêmes information que (entsel) : à savoir une liste de 2 éléments. ( < Nom d'entité: 7e691180 > (16.1544 -5.28676 0.0) ) le nom de l'entité et le point de sélection. Par contre, lorsque l'objet sélectionné est un composant d'un bloc ou d'une xref, nentsel retourne une liste comprenant 4 éléments (sauf lorsqu'on clique sur un attribut, ou on récupère directement l'objet ATTRIB. Un peu comme quand on clique sur un objet POLYLIGNE 3D ou on récupère directement l'objet VERTEX) Les 4 éléments de la liste sont les suivants : ( < Nom d'entité: 7e6bc0b0 > (2.29229 10.1415 0.0) ((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0) (0.0 10.0 0.0)) (< Nom d'entité: 7e6bc0c8 > < Nom d'entité: 7e691178 >) ) Le premier élément de la liste et l'objet sélectionné le 2ème élément de la liste, le point cliqué le 3ème élément la matrice de transformation Objet à Général et le quatrième, une liste du ou des blocs imbriqués contenant l'objet sélectionné. C'est ce quatrième élément de la liste qui m'a donc intéressé. Dans l'exemple ci-dessus, il s'agit d'un bloc dans une xref. L'objet du lisp est de donner une sorte de hiérarchie des calques. L'objet lui-même est sur tel-calque, le bloc dont il fait partie est sur tel autre... la xref sur tel autre. (defun c:?? () (setq e (nentsel)) (setq a (entget (car e))) (setq MSG (strcat (cdr (assoc 0 a)) "\nCalque : " (cdr (assoc 8 a)))) (if (> (length e) 2) ;; complexe (progn (setq lnested (car (reverse e))) (foreach enested lnested (setq nested (entget enested)) (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 nested)))) (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4) ; c'est une xref (setq MSG (strcat MSG "\n\ndans xref : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested)))) (setq MSG (strcat MSG "\n\ndans bloc : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested)))) ) ) ) ) (alert MSG) (princ) ) Il faudrait encore traiter le cas particulier des attributs. Amicalement Vincent PS : je viens de m'apercevoir que l'affichage des codes conserve les indentations données par l'auteur du code. Merci à celui qui s'est donné cette peine [Edité le 10/2/2009 par zebulon_]
-
Bonjour, Si tu travailles dans un bureau d'études, tu dis à ton patron qu'il te faut un minimum de textes règlementaires pour faire ton boulot. Ensuite, quand tu lui auras suffisamment cassé les... pieds, il consentira à t'octroyer généreusement un budget pour acquérir quelques bouquins au SETRA et quelques normes à l'AFNOR. C'est pas la mort non plus... Au sujet de ta question, tu pourras regarder à la page 31 du guide technique GC du SETRA (barrière de niveau N en accotement - Aménagement en TPC), La question est de savoir ce qu'est un dispositif d'ancrage classique... Le GCDF est une barrière de sécurité de niveau N, comme la glissière de sécurité classique, destiné à retenir des véhicules légers (type berline de 900 à 1500 kg). Le GCDF possède le même type de platine que la glissière classique. Les ancrages GCDF et GS sont donc similaires. Ci-joint la circulaire relative au GCDF et dont la figure 10 indique les pièces d'ancrages et on pourrait s'inspirer du type d'ancrage, issu des spécifications SETRA citées ci-dessus, à la page 155. http://img396.imageshack.us/img396/9599/ancrageug8.jpg Il y a d'autres types d'ancrages (système LPA et système LNA qui sont des longrines coulées sur l'étanchéité, ancrées ou non), mais ils semblent peu adaptés au GCDF puisque ce dernier est directement implanté en rive du tablier. C'est pourquoi je te renvoie à ce qui se fait pour des glissières implantées en TPC. Amicalement Vincent [Edité le 13/1/2009 par zebulon_]
-
Bonjour, qui ne dit mot... je suppose donc que notre ami kalaat a trouvé son bonheur ? Peut-être qu'un jour, il reviendra nous rendre visite quand il aura à mettre en œuvre des BN1, BN2 ou autres BN4. D'ici là, j'en profite pour remercier le SETRA pour la qualité de ses publications et j'encourage chacun d'entre vous qui intervenez dans le domaine de l'infrastructure à s'y intéresse. Amicalement Vincent
-
Voilà. L'intégralité de ces documents est disponible au bureau de vente des publications du SETRA au 46, avenue Aristide Briand BP100 92223 Bagneux Cedex (tél : 01.46.11.31.53) http://www.setra.equipement.gouv.fr/ Bureau-des-ventes.SETRA@equipement.gouv.fr Je t'invite à acquérir la collection du guide technique GC (garde-corps, Barrières de niveau H2 ou H3 pour la retenue des poids lourds, Barrières de niveau N en accotement et Aménagement en TPC). Tu auras tous les détails (géométrie, fixation etc...) Tu trouveras des fichiers dwg ici . Je n'ai jamais utilisé le GC S7, je ne l'ai donc pas en dwg. Mais il n'est pas trop compliqué à redessiner à partir du jpg. Amicalement Vincent
-
Le garde-corps S7 http://img396.imageshack.us/img396/5241/59761585zw9.jpg
-
Le garde corps S8 http://img255.imageshack.us/img255/7622/53402559zr2.jpg
-
Bonjour, le gcdf ressemble à cela : http://img387.imageshack.us/img387/6218/gcdflg0.jpg Amicalement Vincent
-
vlax-curve-getfirstderiv
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Merci pour le fil concernant les groupes. Amicalement Vincent -
vlax-curve-getfirstderiv
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
En poussant un peu tout cela et, sans se forcer à écrire 15 pages de code, on peut faire une petite routine qui dessine des barbules de talus. (defun cs:line (PO PF / AcDoc Space) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-addLine Space (vlax-3d-point PO) (vlax-3d-point PF) ) ) (defun cs:xline (BASEPOINT DIRVEC / AcDoc Space) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-addxLine Space (vlax-3d-point BASEPOINT) (vlax-3d-point DIRVEC) ) ) (defun coord->list (L / RES I) (setq I 0) (repeat (/ (length L) 3) (setq RES (cons (list (nth I L) (nth (+ I 1) L) (nth (+ I 2) L)) RES)) (setq I (+ I 3)) ) (reverse RES) ) (defun nearestpt (L PT / LMIN E TMP RES) (while L (setq E (car L)) (setq L (cdr L)) (setq TMP (distance E PT)) (if (or (not LMIN) (< TMP LMIN)) (progn (setq LMIN TMP) (setq RES E) ) ) ) RES ) ;;; créer un groupe avec les adresses d'éléments contenus dans LST ;;; (defun makegrp (LST DESC / EN) (command "_.-group" "_create" "*" DESC) (foreach EN LST (command EN)) (command "") ) (defun c:talus (/ AcDoc CHEM CHEMB PAS NB RAP LCHEM PK IB PM PT FDER PTDERIV PTG XLINE LPTB LN LGR) (setvar "CMDECHO" 0) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-StartUndoMark AcDoc) ;; saisir les éléments de construction (setq CHEM (vlax-ename->vla-object (car (entsel "\nHaut talus : ")))) (setq CHEMB (vlax-ename->vla-object (car (entsel "\nBas talus : ")))) (setq PAS (getdist "\nPas : ")) (setq NB (getint "\nNombre de petits traits : ")) (setq RAP (getdist "\nRapport longueur petit trait / grand trait : ")) ;; calculer la longueur du chemin (setq LCHEM (vlax-curve-getDistAtPoint CHEM (vlax-curve-getEndPoint CHEM))) (setq PK 0) (setq IB 0) (while (< PK LCHEM) ;; déterminer le paramètre au pk courant (setq PM (vlax-curve-getParamAtDist CHEM PK)) ;; déterminer le point au pk courant (setq PT (vlax-curve-getPointAtDist CHEM PK)) ;; déterminer la dérivée première (setq FDER (vlax-curve-getfirstderiv CHEM PM)) ;; déterminer le point qui construit la tangente à la courbe au point PT (setq PTDERIV (mapcar '+ PT FDER)) ;; déterminer un point perpendiculaire à PT à une distance 1.00 (setq PTG (polar PT (+ (angle PT PTDERIV) (/ pi 2)) 1.00)) ;; tracer la xline (setq xline (cs:xline PT PTG)) (setq LPTB (coord->list (vlax-invoke xline 'IntersectWith CHEMB acExtendNone))) ;; ne prendre qu'un seul point, le plus proche (if (setq PTB (nearestpt LPTB PT)) (progn ;; tracer la ligne (if (= IB 0) (setq LN (cs:line PT PTB)) (setq LN (cs:line PT (polar PT (angle PT PTB) (* RAP (distance PT PTB))))) ) ;; rajouter à la liste de groupe (setq LGR (cons (vlax-vla-object->ename LN) LGR)) ) ) (setq IB (+ IB 1)) (if (= IB NB) (setq IB 0) ) (vla-delete xline) ;; passer au pk suivant (setq PK (+ PK PAS)) ) (makegrp LGR "Talus") (vla-endundomark AcDoc) (princ) ) Faut encore que je trouve comment créer des groupes sans utiliser command Amicalement Vincent [Edité le 8/12/2008 par zebulon_] -
vlax-curve-getfirstderiv
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
J'ai schouffé... Ouf, on va dire que c'était une question "philosophique" et que je vais en rester là. Amicalement Vincent -
Bonjour, ce sujet pour, d'une part, exprimer tout le bien que je pense des fonctions vlax-curve et, d'autre part revenir sur vlax-curve-getfirstderiv en particulier. On a déjà parlé de cette fonction ici et là et surement ailleurs, mais je dois avouer que les exemples donnés étaient trop compliqués pour moi et j'aimerais vous proposer quelque chose de plus simple. L'idée, c'est de partir d'un chemin (polyligne ou autre ...), de donner un pas (PAS) et un décalage (D). L'objectif est de tracer des perpendiculaires de longueur 2xD le long du chemin à chaque PAS. http://img368.imageshack.us/img368/9885/perpchemts1.jpg (defun cs:line (PO PF / AcDoc Space) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-addLine Space (vlax-3d-point PO) (vlax-3d-point PF) ) ) (defun c:perpchem () ;; saisir les éléments de construction (setq CHEM (vlax-ename->vla-object (car (entsel "\nChemin : ")))) (setq D (getdist "\nDécalage : ")) (setq PAS (getdist "\nPas : ")) ;; calculer la longueur du chemin (setq LCHEM (vlax-curve-getDistAtPoint CHEM (vlax-curve-getEndPoint CHEM))) (setq PK 0) (while (< PK LCHEM) ;; déterminer le paramètre au pk courant (setq PM (vlax-curve-getParamAtDist CHEM PK)) ;; déterminer le point au pk courant (setq PT (vlax-curve-getPointAtDist CHEM PK)) ;; déterminer la dérivée première (setq FDER (vlax-curve-getfirstderiv CHEM PM)) ;; déterminer le point qui construit la tangente à la courbe au point PT (setq PTDERIV (mapcar '+ PT FDER)) ;; déterminer les points perpendiculaires à PT à une distance D (setq PTG (polar PT (+ (angle PT PTDERIV) (/ pi 2)) D)) (setq PTD (polar PT (- (angle PT PTDERIV) (/ pi 2)) D)) ;; tracer la ligne (cs:line PTD PTG) ;; passer au pk suivant (setq PK (+ PK PAS)) ) (princ) ) Mon problème était que la fonction vlax-curve-getfirstderiv renvoie un vecteur, dont je ne savais pas trop quoi faire. Finalement, j'ai fait une bête addition et ça a l'air de marcher. L'autre question "philosophique" que je me pose au sujet des fonctions vlax-curve est la nature du paramètre param qui est renvoyé ou demandé par certaines de ces fonctions. C'est quoi, au juste, ce param ? Amicalement Vincent [Edité le 8/12/2008 par zebulon_]
-
Clairement, la réponse est non. Il n'y a qu'à regarder les profilés H : à partir du modèle 300 la dimension b de largeur de semelle n'augmente plus et reste à 300. Donc un HEB300 a une semelle de 300 et un HEB600 aussi alors qu'il est 2 fois plus haut. L'idée du facteur d'échelle semble peu exploitable Amicalement Vincent
-
Salut Bred, Tu récupères les fichiers UAP.dat et UPN.dat. Malgré l'extension, ce ne sont que des fichiers txt qu'on peut éditer avec ce qu'on veut. Amicalement Vincent
-
Bonjour, je savais bien qu'il allait manquer quelque chose ;) Voilà, le fichier upn.dat a été rajouté. Concernant la qualité de programmation du lisp, il faut vous avouer que je n'ai jamais eu la curiosité de regarder comment s'était écrit. Je ne suis qu'un utilisateur occasionnel (et satisfait) puisque le plus souvent je fais du béton armé. Concernant votre discussion à propos des unités utilisées par les uns et les autres, je dirais que chacun fait selon la "tradition" de son métier et il est extrêmement difficile de bousculer les petites habitudes de chacun sans provoquer au minimum des étincelles... voire plus. MAIS, parce qu'il y a un MAIS, combien de fois je reçois des fichiers (de géomètre ou de tracé routier parce que mon métier veut que je travaille beaucoup avec ce genre de fichiers) qui est dessiné en mètres et où les unités des dessins sont en millimètres (sans doute parce que le dwt par défaut est en millimètre). Ce n'est quand même pas difficile de changer les unités de dessin pour les faire correspondre aux unités réellement utilisées dans le fichier. Tous ceux qui, comme moi, utilisent ces fichiers en xref s'en porterons mieux à l'avenir. Désolé pour ce petit coup de gueule qui n'a pas de rapport avec le sujet... ;) Amicalement Vincent
