Aller au contenu

Messages recommandés

Posté(e)

Bonjours, j'aimerrai dessinner des polyligne avec une certaine épaisseur et un ou des arc qui servirons de rayon de courbure.

Je m'explique, je suis dessinateur en stabilité (coffrage et ferrailage) et donc je voudrais améliorer ma productivité.

Pour l'instant je faits les polyligne avec la commande de AUTOCAD, mais cela me prends un peu trop de temps et donc si quelqu'un peus m'aider voir meme me donner les codes lisp.

Merci d'avance.

Posté(e)

Salut,

 

Il me sembe que le plus simple pour programmer les propriétés d'une polyligne, c'est d'utiliser entmake

 

Certains codes sont facultatifs, les valeurs par défaut sont les valeurs courantes (calque, couleur, élévation, direction d'extrusion, espace, fenêtre, couleur ...).

Vois les codes DXF dans l'aide aux développeurs >> Références DXF >> Section ENTITES

 

Un exemple pour créer une polyligne à 3 sommets de largeur constante :

(entmake
 (list	'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
(cons 8 . Calque)		; Nom du calque (facultatif)
'(100 . "AcDbPolyline")
'(90 . 3)			; nombre de sommets
'(70 . 1)			; ouverte (0) ou fermée (1)
(cons 38 elev)			; élévation (facultatif)
(cons 43 larg)			; largeur constante (facultatif)
(cons 10 pt1)			; premier sommet
(cons 42 courb1)		; courbure (facultatif)
(cons 10 pt2)			; deuxième sommet
(cons 42 courb2)		; courbure (facultatif)
(cons 10 pt3)			; troisième sommet
(cons 42 courb3)		; courbure (facultatif)
(cons 210 zdir)			; direction d'extrusion (facultatif)
 )
) 

 

Si les largeurs sont différentes entre les sommets :

(entmake
 (list	'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
(cons 8 . Calque)		; Nom du calque (facultatif)
'(100 . "AcDbPolyline")
'(90 . 3)			; nombre de sommets
'(70 . 1)			; ouverte (0) ou fermée (1)
(cons 38 elev)			; élévation (facultatif)
(cons 10 pt1)			; premier sommet
(cons 40 dep1)			; largeur de départ
(cons 41 fin1)			; largeur de fin
(cons 42 courb1)		; courbure (facultatif)
(cons 10 pt2)			; deuxième sommet
(cons 40 dep2)			; largeur de départ (facultatif)
(cons 41 fin2)			; largeur de fin (facultatif)
(cons 42 courb2)		; courbure (facultatif)
(cons 10 pt3)			; troisième sommet
(cons 40 dep3)			; largeur de départ (facultatif)
(cons 41 fin3)			; largeur de fin (facultatif)
(cons 42 courb3)		; courbure (facultatif)
(cons 210 zdir)			; direction d'extrusion (facultatif)
 )
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci pour l'aide mais je ne veus pas faire un polyligne en 3d mais en 2d .

Ce que je veus dire c'est qu'avec 1 fichier lisp, je peus dessiner une poliligne qui a la forme d'un etrier ou d'une droite par exemple

Posté(e)

Il s'agit bien de polylignes 2D (lwpolyline)

 

Essaye ça :

 

(entmake
 (list	'(0 . "LWPOLYLINE") 
       '(100 . "AcDbEntity") 
       '(100 . "AcDbPolyline")
'(90 . 4)			; nombre de sommets
'(70 . 0)			; ouverte (0) ou fermée (1)
'(43 . 3)			; largeur constante
'(10 0.0 0.0 0.0)		; premier sommet
'(42 . 0.0)                  ; courbure
       '(10 0.0 10.0 0.0)	; deuxième sommet
'(42 . -1)			; courbure
'(10 10.0 10.0 0.0)		; troisième sommet
'(42 . 0.0)			; courbure
'(10 10.0 0.0 0.0)		; quatrième sommet    
 )
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ce code trouvé ICI

 

Je pense que tu aurais le corps principal d'une fonction pour t'inspirer sur le dessin du ferraillage

(defun c:test (/ A D D0 E EN GR LST LST1 LST2 PT)
 ;;by ElpanovEvgeniy at theswamp.org
 ;;change very little by qjchen

 ;; The last changes 
 ;; The task (3) is solved
 
 (setq pt (getpoint "\nthe steel start point:"))
 (setq
   en
        (entmakex
          '((0 . "LWPOLYLINE")
            (100 . "AcDbEntity")
            (67 . 0)
            (410 . "Model")
            (8 . "0")
            (62 . 1)
            (100 . "AcDbPolyline")
            (90 . 5)
            (70 . 0)
            (43 . 10.0)
            (38 . 0.0)
            (39 . 0.0)
            (10 50.0 20.0)
            (42 . 0.0)
            (10 0. 20.0)
            (42 . 1.0)
            (10 0. 0.0)
            (42 . 0.0)
            (10 0.0 0.0)
            (42 . 1.0)
            (10 0.0 20.0)
            (42 . 0.0)
            (10 -50. 20.0)
            (42 . 0.0)
            (210 0.0 0.0 1.0)
           )
        ) ;_  entmakex
   lst1 '((50. 20.)
          (0. 20.)
          (0. 0.)
         )
   lst2 '((0. 0.)
          (0. 20.)
          (-50. 20.)
         )
   e
        (reverse (vl-member-if
                   (function
                     (lambda (x)
                       (= (car x) 39)
                     ) ;_  lambda
                   ) ;_  function
                   (reverse (entget en))
                 ) ;_  vl-member-if
        ) ;_  reverse
 ) ;_  setq
 (while (= (car (setq gr (grread nil 5 1))) 5)
   (setq a (angle pt (cadr gr))
         d (distance pt (cadr gr))
   ) ;_  setq
   (setq
     lst (append
           (mapcar
             (function
               (lambda (p)
                 (list
                   (+ (* (car p) (cos a))
                      (* (cadr p) (- (sin a)))
                      (car pt)
                   ) ;_  list
                   (+ (* (car p) (sin a))
                      (* (cadr p) (cos a))
                      (cadr pt)
                   ) ;_  list
                 ) ;_  list
               ) ;_  lambda
             ) ;_  function
             lst1
           ) ;_  mapcar
           (mapcar
             (function
               (lambda (p)
                 (list
                   (+ (* (+ d (car p)) (cos a))
                      (* (cadr p) (- (sin a)))
                      (car pt)
                   ) ;_  list
                   (+ (* (+ d (car p)) (sin a))
                      (* (cadr p) (cos a))
                      (cadr pt)
                   ) ;_  list
                 ) ;_  list
               ) ;_  lambda
             ) ;_  function
             lst2
           ) ;_  mapcar
         ) ;_  append
   ) ;_  setq
   (entmod
     (append
       e
       (list
         (cons 10 (car lst))
         '(42 . 0.)
         (cons 10 (cadr lst))
         '(42 . 1.)
         (cons 10 (caddr lst))
         '(42 . 0.)
         (cons 10 (cadddr lst))
         '(42 . 1.)
         (cons 10 (nth 4 lst))
         '(42 . 0.)
         (cons 10 (nth 5 lst))
         '(42 . 0.)
       ) ;_  list
     ) ;_  append
   ) ;_  entmod
 ) ;_  while
 (setq
   pt   (mapcar (function -) (cadr lst) (caddr lst))
   a    (angle (caddr lst) (cadr lst))
   d0   (distance (cadr lst) (caddr lst))
   lst1 (list (car lst) (cadr lst) (nth 4 lst) (nth 5 lst))
   lst2 (list (caddr lst) (cadddr lst))
 ) ;_  setq
 (setq en (entmakex (entget en)))
 (while (= (car (setq gr (grread nil 5 0))) 5)
   (setq d (polar pt
                  a
                  (-
                    (distance (cadr gr)
                              (vlax-curve-getClosestPointTo
                                en
                                (cadr gr)
                              ) ;_  vlax-curve-getClosestPointTo
                    ) ;_  distance
                    d0
                  ) ;_  -
           ) ;_  polar
   ) ;_  setq
   (setq
     lst (append
           (mapcar
             (function
               (lambda (p)
                 (list
                   (+ (car p)
                      (car d)
                   ) ;_  list
                   (+ (cadr p)
                      (cadr d)
                   ) ;_  list
                 ) ;_  list
               ) ;_  lambda
             ) ;_  function
             lst1
           ) ;_  mapcar
           (mapcar
             (function
               (lambda (p)
                 (list
                   (- (car p)
                      (car d)
                   ) ;_  list
                   (- (cadr p)
                      (cadr d)
                   ) ;_  list
                 ) ;_  list
               ) ;_  lambda
             ) ;_  function
             lst2
           ) ;_  mapcar
         ) ;_  append
   ) ;_  setq
   (entmod
     (append
       e
       (list
         (cons 10 (car lst))
         '(42 . 0.)
         (cons 10 (cadr lst))
         '(42 . 1.)
         (cons 10 (nth 4 lst))
         '(42 . 0.)
         (cons 10 (nth 5 lst))
         '(42 . 1.)
         (cons 10 (caddr lst))
         '(42 . 0.)
         (cons 10 (cadddr lst))
         '(42 . 0.)
       ) ;_  list
     ) ;_  append
   ) ;_  entmod
 ) ;_  while
 (princ)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Tu dois le connaitre ce chinois vu que tu fréquente le site ? ;)

 

Très "branché" "TheSwamp", il y a des Russes !, des Chinois !, et ... des Francais ! .....:o

 

Un truc que j'ai bien aimé de ce chinois, est une fractale (avec l'aide des membres) pour dessinner des vegétaux en 2D.

Il sont vraiment joli et pourrait servir pour rajouter dans une biblio pour du paysager.

 

Voir TheSwamp pour le code.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je vous remercie pour vos truc, mais ce n'est pas vraiment ce que je cherche.

En fait ce que je cherche a faire, c'ait une routine en lisp ou en vba qui me servirai a dessiner mes barres d'armature a une distance bien précise que je choisirrai et d'une épaisseur que je choisirai aussi.

Posté(e)

Re,

 

Je donnais juste un exemple, tu peux bien sûr choisir les valeurs que tu veux.

 

dans la liste entmake,

- pour chaque sommet de la polyligne :

(10 [surligneur]0.0 0.0 0.0[/surligneur]) ; les coordonnées x y z que tu veux,

ou :

(cons 10 [surligneur]pt[/surligneur]) ; où pt est une variable qui contient les coordonnées que tu veux.

 

- pour l'épaisseur constante :

(43 . [surligneur]3.0[/surligneur]) ; l'épaisseur que tu veux

ou

(cons 43 [surligneur]ep[/surligneur]) ; où ep est une variable qui contient l'épaiseur que tu veux.

 

- pour la courbure :

(40 . [surligneur]-1.0[/surligneur]) ; la courbure que tu veux,

ou :

(cons 42 bulge) ; où bulge est une variable qui contient la courbure que tu veux.

 

pour la courbure, le bulge correspond à la tangente du quart de l'angle de l'arc (α sur l'image), le bulge est positif si l'angle de l'arc est décrit dans le sens trigonométrique négatif sinon.

 

http://img55.imageshack.us/img55/5571/sanstitrets4.png

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 semaines après...
Posté(e)

Salut cedwit,

........servirai a dessiner mes barres d'armature a une distance bien précise que je choisirrai et d'une épaisseur que je choisirai aussi

Si tes épaisseurs sont connus, si ce sont toujours les même, 0.10, 0.12, 0.15, 0.18 ou 0.20..... Tu peut te faire des menus...

 

Tu lance la commande "_.pline", puis, grace à une ligne dans le menu, tu dicte à AutoCAD quel va être ton sommet :

épaisseure de début du segment : 0.12

épaisseur de fin du segment : 0.20

 

Celà fonctionne seulement si toutes tes épaisseurs sont communes (si tu utilises toujours les mêmes)... J'ai déjà des commandes (pour une interpolation de Z) dans un menu... C'est super simple et super rapide à utiliser...

 

Je ne sais pas si tu y avais penser...

 

Voilà...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é