pierrevigneux Posté(e) le 11 mars 2010 Posté(e) le 11 mars 2010 Bonjour à tous! Je cherche une routine, qui cotes les pts centre des rayons sur une polyligne en y insérant un bloc soit une + ou un pt rond avec une croix et coter la résultante en YX ou Nord ESt Merci ! Acadnadien
bonuscad Posté(e) le 11 mars 2010 Posté(e) le 11 mars 2010 Bonjour, Essayes ceci, ça utilise la cotation ordonnée (le style de cotation est supposé bien réglé a ton dessin) (vl-load-com) (defun c:Dim_PolyCenArc ( / js ename obj pr pt_sel seg_bulge pt_cen) (princ "\nSélectionner une polyligne.") (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nCe n'est pas une LWPolyLine!") ) (setq ename (ssname js 0) obj (vlax-ename->vla-object ename) pr -0.5 ) (command "_.undo" "_begin") (repeat (fix (vlax-curve-getEndParam obj)) (setq pt_sel (vlax-curve-GetPointAtParam obj (setq pr (1+ pr))) seg_bulge (vla-GetBulge obj (- pr 0.5)) ) (if (not (zerop seg_bulge)) (command "_.dimordinate" "_none" (setq p_cen (osnap (trans pt_sel 0 1) "_cen")) "_none" (polar p_cen 0 (getvar "dimtxt")) "_.dimordinate" "_none" p_cen "_none" (polar p_cen (* pi 0.5) (getvar "dimtxt")) ) ) ) (command "_.undo" "_end") (prin1) ) [Edité le 11/3/2010 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 12 mars 2010 Auteur Posté(e) le 12 mars 2010 M'erci beaucoup bonuscad Searait'il possible d'y insérer un petit bloc, genre une croix ?Ou même un bloc borne?À son point d'insertion. Merci encore de ta rapidité de réponse @+ [Edité le 12/3/2010 par pierrevigneux] Acadnadien
pierrevigneux Posté(e) le 15 mars 2010 Auteur Posté(e) le 15 mars 2010 Bonjour à tous !J'aimerais pouvoir modifier la commande Dim_polycenarc Avec les dim ça prend trop de place dans mon dessin.et j'ai essayé, mais en vain, je n'y arrive pas.Je souhaiterais "lister " les coordonnées Nord et Est en plus avoir le point rayon.le tout alignés comme suit:N= 100,00E= 100, 00Ray.= 90,00 Si possible merci beaucoup! Acadnadien
pierrevigneux Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 Bonjour!Question comment attrribuer une sous-routine à l'intérieur d'un lisp et à quel endroit doit-on la définir? Merci ! Acadnadien
(gile) Posté(e) le 17 mars 2010 Posté(e) le 17 mars 2010 Salut, Une 'sous-routine' est une définition de fonction LISP qui s'utilise comme les fonctions LISP natives. On peut la définir localement (à l'intérieur de la routine appelante et déclarée localement) pour qu'elle ne soit pas accessible hors la routine appelante (pour éviter les conflits). Dans ce cas la définition de la routine doit être placée avant son appel dans le code. On peut la définir à l'extérieur de la fonction appelante (dans le même fichier ou dans un autre), dans ce cas il faut qu'elle soit chargée avant. Prenons comme exemple la fonction mathématique cosinus. En LISP, elle est implémentée sous le nom cos et requiert un argument : un nombre qui est l'expression d'un angle en radians et retourne le sinus de cet angle.La fonction inverse arc cosinus n'est pas implémentée, on peut la définir avec defun, il faudra lui fournir un argument : un nombre entre -1 et 1 et elle retournera l'angle (en radians) dont le nombre (argument) est le cosinus :;; ACOS ;; Retourne l'arc cosinus du nombre ;; Argument ;; num : un nombre compris entre -1 et 1 (defun ACOS (num) (cond ((equal num 1 1e-9) 0.0) ((equal num -1 1e-9) pi) (( (atan (sqrt (- 1 (expt num 2))) num) ) ) )L'argument de la fonction acos (num) doit être un nombre, sinon la fonction retournera une erreur (comme une fonction prédéfinie.Si le nombre n'est pas compris entre -1 et 1 (à 1e-9 près à cause des imprécisions de calcul bien connues...) la fonction retourne nil, sinon elle retourne l'angle.De la même manière, on peut définir une fonction qui retourne le carré d'un nombre num (ce nombre est l'argument de la fonction).;; SQR ;; Retourne le carré d'un nombre ;; Argument ;; num : un nombre (defun SQR (num) (* num num) )Si elle sont chargées, on peut appeler ces fonctions dans une autre, par exemple une fonction qui retourne l'angle défini par trois points (théorème d'Al Kashi). Il faudra donc fournir à cette nouvelle fonction 3 points (les arguments de la fonction).;; ANGLE_3PTS ;; Retourne l'angle (radians) défini par son sommet et deux points. ;; L'angle retourné est toujours positif et inférieur à pi radians. ;; Arguments ;; som : le sommet de l'angle (point) ;; p1 et p2 : deux points définissant le secteur angulaire (defun ANGLE_3PTS (som p1 p2 / d1 d2 d3) (setq d1 (distance som p1) d2 (distance som p2) d3 (distance p1 p2) ) (if (and ( (ACOS (/ (+ (SQR d1) (SQR d2) (- (SQR d3))) (* 2 d1 d2) ) ) ) ) On peut ainsi se constituer une bibliothèque de routines qui s'ajoutent aux fonctions LISP prédéfinies. Si on veut 'limiter la portée des fonction acos et sqr, on les définit localement dans angle_3pts :;; ANGLE_3PTS (defun ANGLE_3PTS (som p1 p2 / acos sqr d1 d2 d3) ;; ACOS (defun ACOS (num) (cond ((equal num 1 1e-9) 0.0) ((equal num -1 1e-9) pi) (( (atan (sqrt (- 1 (expt num 2))) num) ) ) ) ;; SQR (defun SQR (num) (* num num) ) ;; Fonction principale (setq d1 (distance som p1) d2 (distance som p2) d3 (distance p1 p2) ) (if (and ( (ACOS (/ (+ (SQR d1) (SQR d2) (- (SQR d3))) (* 2 d1 d2) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 Merci Gile pour tes réponse je vais essayer de les mettre en pratique.A+ Acadnadien
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant