Aller au contenu

ARTBD


Messages recommandés

Posté(e)

Bonsoir à toutes et tous,

 

Est-il "facilement" envisageable d'avoir également l'option de dessiner les arcs de raccordements et tangentes

comme ceci ?

 

http://img.ahst.fr/data/images/artbd1.jpg

 

(Actuellement, quand j'ai besoin, je redessine par dessus, mais la précision ne me semble guère au rendez-vous,...).

 

De plus, je serai intéressé pour avoir les résultats en gon (grades),

 

Sur ce ]fichier (et sur d'autres tests, il semble que l'angle au sommet soit toujours fx, j'ai pourtant bien repris la dernière version,..), quelqu'un pourrait confirmer SVP ?

 

Je n'avais jamais remarqué au préalable,...:o

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

il semble que l'angle au sommet soit toujours faux

 

Effectivement suivant l'état de ANGDIR et ANGBASE on obtient pas forcément l'angle intérieur des tangentes (mais l'angle n'est pas vraiment faux, c'est une valeur complémentaire)

 

Donc en tenant compte de ta remarque et de tes désirs, une version dédiée ;)

 

(vl-load-com)
(defun c:ARTDB ( / js n AcDoc Space ename obj pr nb typ_obj oldim oldlay a_base a_dir
pt_start pt_end pt_cen rad alpha pt_vtx dist_start dist_end seg_len seg_bulge)
 (defun grdraw-id_arc ( / oldcolor)
   (setq oldcolor (getvar "CECOLOR"))
   (setvar "CECOLOR" "3")
   (command "_.line" "_none" (trans pt_start 0 1) "_none" (trans pt_vtx 0 1) "")
   (command "_.line" "_none" (trans pt_vtx 0 1) "_none" (trans pt_end 0 1) "")
   (setvar "CECOLOR" "5")
   (command "_.line" "_none" (trans pt_start 0 1) "_none" (trans pt_cen 0 1) "")
   (command "_.line" "_none" (trans pt_cen 0 1) "_none" (trans pt_end 0 1) "")
   (setvar "CECOLOR" "2")
   (command "_.line" "_none" (trans (polar pt_cen (angle pt_cen pt_vtx) (abs rad)) 0 1) "_none" (trans pt_vtx 0 1) "")
   (setvar "CECOLOR" oldcolor)
 )
 (defun add_mt_arc ( / ins_txt h_t)
   (initget 9)
   (setq ins_txt (getpoint (trans pt_cen 0 1) "\nPoint d'insertion des informations de l'arc?: "))
   (initget 6)
   (setq h_t (getdist ins_txt (strcat "\nTaille du texte <" (rtos (getvar "textsize")) ">: ")))
   (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t))
   (vla-addMtext Space
     (vlax-3d-point (trans ins_txt 1 0))
     0.0
     (strcat
       "{\\fArial Narrow|b0|i0|c0|p34;"
       "A = " (angtos (- pi (* 2 alpha)) (getvar "LUNITS") 4)
       "\\PR = " (rtos rad 2 3)
       "\\PT = " (rtos (distance pt_start pt_vtx) 2 3)
       "\\PD = " (rtos seg_len 2 3)
       "\\PB = " (rtos (- (distance pt_cen pt_vtx) (abs rad)) 2 3)
       "}"
     )
   )
   (entmod
     (append
     (vl-remove-if
       (function
         (lambda (x)
           (or (member (car x) '(90 63 421 45))
             (< 419 (car x) 440)
           )
         )
       )
       (entget (entlast))
     )
     (list
       '(90 . 1)
       '(63 . 41)
       '(421 . 16770196)
       '(45 . 1.5)
     )
     )
   )
   (entupd (entlast))
 )
 (princ "\nSélectionner des Arcs/PolyArcs .")
 (setq
   js
   (ssget
     '((-4 . "        (-4 . "          (0 . "POLYLINE")
         (-4 . "            (-4 . "&") (70 . 126)
         (-4 . "NOT>")
       (-4 . "AND>")
       (0 . "LWPOLYLINE,ARC")
       (-4 . "OR>"))
   )
   n -1
 )
 (cond
   (js
     (setq
       AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
       Space
         (if (= 1 (getvar "CVPORT"))
           (vla-get-PaperSpace AcDoc)
           (vla-get-ModelSpace AcDoc)
         )
       nb 0
     )
     (cond
       ((null (tblsearch "LAYER" "Info ARTDB des Arcs"))
         (vlax-put (vla-add (vla-get-layers AcDoc) "Info ARTDB des Arcs") 'Color "5")
       )
     )
     (setq
       oldim (getvar "dimzin")
       oldlay (getvar "clayer")
       a_base (getvar "ANGBASE")
       a_dir (getvar "ANGDIR")
     )
     (setvar "dimzin" 0) (setvar "clayer" "Info ARTDB des Arcs")
     (setvar "ANGBASE" 0) (setvar "ANGDIR" 0)
     (repeat (sslength js)
       (setq
         ename (ssname js (setq n (1+ n)))
         obj (vlax-ename->vla-object ename)
         pr -1
         nb 0
       )
       (setq typ_obj (vla-get-ObjectName obj))
       (if (eq typ_obj "AcDbArc")
         (progn
           (setq
             pt_start (vlax-get obj 'StartPoint)
             pt_end (vlax-get obj 'EndPoint)
             pt_cen (vlax-get obj 'Center)
             rad (vlax-get obj 'Radius)
             alpha (* (vlax-get obj 'TotalAngle) 0.5)
             seg_len (vlax-get obj 'ArcLength)
             pt_vtx (polar pt_cen (+ (vlax-get obj 'StartAngle) alpha) (+ rad (* rad (1- (/ 1 (cos alpha))))))
             nb (1+ nb)
           )
           (grdraw-id_arc)
           (add_mt_arc)
         )
         (repeat (fix (vlax-curve-getEndParam obj))
           (setq
             dist_start (vlax-curve-GetDistAtParam obj (setq pr (1+ pr)))
             dist_end (vlax-curve-GetDistAtParam obj (1+ pr))
             pt_start   (vlax-curve-GetPointAtParam obj pr)
             pt_end (vlax-curve-GetPointAtParam obj (1+ pr))
             seg_len (- dist_end dist_start)
             seg_bulge (vla-GetBulge obj pr)
           )
           (if (not (zerop seg_bulge))
             (progn
               (setq
                 rad (/ seg_len (* 4.0 (atan seg_bulge)))
                 alpha (+ (angle pt_start pt_end) (- (* pi 0.5) (* 2.0 (atan seg_bulge))))
                 pt_cen (polar pt_start alpha rad)
                 pt_vtx (polar pt_start (- alpha (* pi 0.5)) (* rad (/ (sin (* 2.0 (atan seg_bulge))) (cos (* 2.0 (atan seg_bulge))))))
                 alpha (if (< (* 2.0 (atan seg_bulge)) 0) (- pi (* 2.0 (atan seg_bulge))) (* 2.0 (atan seg_bulge)))
                 nb (1+ nb)
               )
               (grdraw-id_arc)
               (add_mt_arc)
             )
           )
         )
       )
     )
     (setvar "dimzin" oldim) (setvar "clayer" oldlay)
     (setvar "ANGBASE" a_base) (setvar "ANGDIR" a_dir)
   )
 )
 (prin1)
)

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

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é