Aller au contenu

Point centre d\'une courbe sur polyligne


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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,00

E= 100, 00

Ray.= 90,00

 

Si possible merci beaucoup!

Acadnadien

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é