-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
bonuscad a gagné pour la dernière fois le 24 janvier
bonuscad a eu le contenu le plus aimé !
Contact Methods
-
AIM
1
-
Website URL
http://bonuscad.perso.sfr.fr/
bonuscad's Achievements
-
Bonjour, Ces données ne sont pas publique. Ceci pour éviter que n'importe qui puisse connaître le patrimoine d'une personne. Sans connaître les démarches a effectuer, il me semble qu'il faut obtenir une accréditation en justifiant pourquoi tu as besoin de ces données. Une fois obtenue tu auras alors un compte pour pouvoir accéder à celles-ci.
-
Tout dépend du contexte, ce que tu ne décrit pas! Est-ce, par exemple de la voirie de lotissement ou des voies de circulation du domaine public. Pour des voies du domaine public, il y a des règles à respecter. Pour des voies à grande circulation on utilise des alignement droit, des courbes et très souvent (pour le confort de l'usager) des courbes à rayon progressif appelées clothoïde. Ces dernières permettent ainsi au conducteur d'avoir un mouvement graduel sur le volant et d'introduire une variation du dévers. Les paramètres dépendent de la vitesse de référence de la voie: autoroute, voie express, nationale, départementale, voie ferrée.... La force centripète avec le dévers peut éviter une sortie de route en cas de verglas notamment. On peut déroger à ces règles en milieu difficile, par exemple en zone de montagne. Le profil en long ou carrefour peut aussi influencer le choix de la courbe (question de visibilité) En tout cas les Splines ne font pas du tout partie de la constitution d'un axe en plan. Donc a minima alignement droit et courbe, dans ce cas la variation de dévers se fera de préférence dans l'alignement droit pour avoir un dévers unique dans la courbe (si la longueur de l'alignement droit le permet, autrement on peut mordre sur une partie de la courbe) Ça reste un métier, on ne l'invente pas. Trouve de la documentation si tu n'as aucune connaissance (ICTARN ICTAAL)
-
Bonjour, Ça ne me rajeunie pas, cette routine date de longtemps (Autocad 2002) Depuis j'avais réécris complètement le code et proposé celui-ci sur CadXp. Malgré qu'il s’appelle Talus3D, celui peut produire aussi des talus avec des entités en 2D. Il n'y a plus de boite de dialogue (.dcl) ni de fichier de cliché (.slb). Voici le lien sur le site TALUS3D.lsp
-
Bonjour, Un sujet similaire. Le code proposé dans ce lien peut être facilement adaptable selon tes besoins mais il faut en savoir un peu plus...
-
résolu Changer le calque de courbes de niveau selon leurs altitudes
bonuscad a répondu à un(e) sujet de Nicky dans LISP et Visual LISP
Bonjour, Je t’ai répondu ICI. Je remet ici ma proposition en ayant amélioré le code: établissement du calque avec sa couleur et affectation de l'élévation avec les décimales arrondies aux polylignes (tant qu'à faire) https://www.cadtutor.net/forum/topic/92684-change-contour-line-layer-according-to-altitude/?do=findComment&comment=654523 (defun c:MAJCL ( / ss l c n dxf_ent elev nam_lay) (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (8 . "Terrain - Cont. - Contours")))) (cond (ss (setq l '(0.5 1.0 2.0 5.0 10.0 25.0 50.0 100.0) c '(121 51 7 241 211 253 91 141) ) (repeat (setq n (sslength ss)) (setq dxf_ent (entget (ssname ss (setq n (1- n)))) elev (read (rtos (cdr (assoc 38 dxf_ent)) 2 1)) ) (mapcar '(lambda (x) (if (and (zerop (rem elev (car x))) (null (assoc 62 dxf_ent))) (progn (setq nam_lay (strcat "_NB-MajorLine_" (if (eq (car x) (fix (car x))) (rtos (car x) 2 0) (rtos (car x) 2 1)))) (if (not (tblsearch "LAYER" nam_lay)) (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 nam_lay) (cons 70 0) (cons 62 (cdr x)) (cons 370 -3) (cons 6 "Continuous") ) ) ) (setq dxf_ent (subst (cons 8 nam_lay) (assoc 8 dxf_ent) dxf_ent ) dxf_ent (subst (cons 38 elev) (assoc 38 dxf_ent) dxf_ent ) ) (entmod dxf_ent) ) ) ) (mapcar 'cons l c) ) ) ) ) ) -
[Challenge] Extraire les nombres d'une chaîne de caractères
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Excusez, mais je veux réagir brièvement à ce ce sujet. l'I.A. est pour moi du même acabit que les calculateur automobile. Merci le mécano de mes deux, c'est la pompe de gavage et c'est pas le même prix! (vécu) Je vous laisse réfléchir aux diagnostiques de ces "intelligences" et celui du pseudo mécanicien aussi. Bien à vous. -
[Challenge] Extraire les nombres d'une chaîne de caractères
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Quand (gile) m'a fait remarqué que je devais enlever le caractère /, je me suis dit qu'il serait bien de le conserver pour lire dans le système impérial et fractionnaire. Mais malheureusement je me suis heurté à la lecture du caractère du pouce (") qui m'a posé problème: le lisp utilisant ce caractère pour encadrer une chaîne... Du coup j'ai laissé tomber rapidement !... @VDH-Bruno Bonne fête à toi aussi 😁 -
Rotation d'attributs de blocs, selon les polylignes les plus proches
bonuscad a répondu à un(e) sujet de Kilian336 dans AutoCAD 2019
Pour info il y a une discussion similaire sur le forum Autodesk et l'utilisateur à soulevé un problème, que je pense avoir résolu. Je l'adapte à ma proposition faite ici, essaye cette version... (defun c:test ( / ss dfzz count n progress i ent dxf_ent pt_ins ss_pl tmp j ent_pl pt prm a_ref deriv alpha n_ent dxf_next) (setq ss (ssget '((0 . "INSERT") (2 . "TCPOINT")))) (cond (ss (if (zerop (getvar "USERR1")) (setvar "USERR1" 1E-02) (getvar "USERR1")) (initget 4) (if (not (setq dfzz (getdist (strcat "\nRayon de recherche? <" (rtos (getvar "USERR1") 2 2) "> : ")))) (setq dfzz (getvar "USERR1")) (setvar "USERR1" dfzz) ) (setq count 0 progress (setq n (sslength ss)) i 0 ) (acet-ui-progress-init "Progression:" progress) (repeat n (setq ent (ssname ss (setq n (1- n))) dxf_ent (entget ent) pt_ins (cdr (assoc 10 dxf_ent)) ss_pl (ssget "_C" (trans (mapcar '- pt_ins (list dfzz dfzz 0.0)) 0 1) (trans (mapcar '+ pt_ins (list dfzz dfzz 0.0)) 0 1) '((0 . "LWPOLYLINE"))) ) (cond ((and ss_pl (> (sslength ss_pl) 1)) (setq tmp (ssadd) l_d nil) (repeat (setq j (sslength ss_pl)) (setq ent_pl (ssname ss_pl (setq j (1- j))) l_d (cons (cons (distance pt_ins (vlax-curve-getClosestPointToProjection ent_pl pt_ins '(0 0 1) nil)) ent_pl ) l_d ) ) ) (ssadd (cdr (assoc (apply 'min (mapcar 'car l_d)) l_d)) tmp) (setq ss_pl tmp) ) ) (acet-ui-progress-safe (setq i (1+ i))) (cond ((and ss_pl (eq (sslength ss_pl) 1)) (setq ent_pl (ssname ss_pl 0) pt (vlax-curve-getClosestPointToProjection ent_pl pt_ins '(0 0 1) nil) prm (vlax-curve-getParamAtPoint ent_pl pt) a_ref (atan (/ (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))) deriv (vlax-curve-getfirstderiv ent_pl prm) alpha (if deriv (atan (cadr deriv) (car deriv)) 0.0) alpha (rem (+ (* 2 pi) alpha) (* 2 pi)) alpha (if (and (> (- alpha a_ref) (* 0.5 pi)) (<= (- alpha a_ref) (* pi 1.5))) (+ pi alpha) alpha ) n_ent ent ) (while (/= (cdr (assoc 0 (setq dxf_next (entget (entnext n_ent))))) "SEQEND") (if (eq (cdr (assoc 2 dxf_next)) "ALT") (progn (entmod (subst (cons 50 alpha) (assoc 50 dxf_next) dxf_next ) ) (setq count (1+ count)) ) ) (setq n_ent (cdar dxf_next)) ) ) ) ) (acet-ui-progress) ) ) (princ (strcat "\n" (itoa count) " Blocs TCPOINT ont leur attribut ALT pivoté sur " (itoa (sslength ss)) " sélectionnés.")) (prin1) ) -
Rotation d'attributs de blocs, selon les polylignes les plus proches
bonuscad a répondu à un(e) sujet de Kilian336 dans AutoCAD 2019
@Kilian336 Effectivement il manquait quelques caractères en fin de code, j'ai rectifié le code dans le post concerné, recharge ce code. Désolé de ce mauvais copié-collé... -
[Challenge] Extraire les nombres d'une chaîne de caractères
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
@(gile) Exact! J'ai modifié le post initial pour inclure cette robustesse (ligne 6) @didier Je pense que c'est (eval) et (read) qui te perturbe. (read) avec l'exemple va me retourner: (SETQ RSLT (LIST 25.4 12.7 -42)) pour valider la variable RSLT il faut évaluer l'expression, ce à quoi sert la fonction (eval): si rslt n'était pas déclaré en variable locale, !rslt en ligne de commande te renverrai sa valeur. On peut aussi faire cela avec une expression lisp écrite dans un fichier texte avec (read-line) C'est aussi à travers ce procédé que l'on pourrait rendre le lisp "intelligent" (notez les guillemets) pour qu'il écrive sont propre code en construisant ses propres variables selon certaines conditions. -
[Challenge] Extraire les nombres d'une chaîne de caractères
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
En effet, Ma participation, mais je m'attend à une fonction récursive de ta part. (defun extraireNombres (str / l rslt) (setq l (mapcar '(lambda (x) (if (and (> x 44) (< x 58) (/= x 47)) x 32) ) (vl-string->list str) ) l (mapcar '(lambda (x y) (if (not (= x y 32)) x) ) l (append (cdr l) '(32)) ) l (vl-remove-if-not '(lambda (x) (eq (type x) 'INT) x) l) l (mapcar '(lambda (x) (if (not (eq x 32)) x (list nil))) l) ) (eval (read (strcat "(setq rslt (list " (apply 'strcat (mapcar '(lambda (x) (if (not (listp x)) (chr x) " ")) l)) "))"))) ) (extraireNombres "Longueur = 25.4mm Largeur = 12.7mm Quantité = -42") -
Rotation d'attributs de blocs, selon les polylignes les plus proches
bonuscad a répondu à un(e) sujet de Kilian336 dans AutoCAD 2019
Ma proposition! Cela doit tourner les attributs en fonction de la polyligne, en conservant la lecture suivant le scu courant. Tu peux sélectionner l'ensemble des blocs TCPOINT, mais comme le traitement peut être un peu long, j'ai mis une barre de progression. (defun c:test ( / ss dfzz count n progress i ent dxf_ent pt_ins ss_pl ent_pl pt prm a_ref deriv alpha n_ent dxf_next) (setq ss (ssget '((0 . "INSERT") (2 . "TCPOINT")))) (cond (ss (if (not dfzz) (setvar "USERR1" 1E-02)) (initget 4) (if (not (setq dfzz (getdist (strcat "\nRayon de recherche? <" (rtos (getvar "USERR1") 2 2) "> : ")))) (setq dfzz (getvar "USERR1")) (setvar "USERR1" dfzz) ) (setq count 0 progress (setq n (sslength ss)) i 0 ) (acet-ui-progress-init "Progression:" progress) (repeat n (setq ent (ssname ss (setq n (1- n))) dxf_ent (entget ent) pt_ins (cdr (assoc 10 dxf_ent)) ss_pl (ssget "_C" (trans (mapcar '- pt_ins (list dfzz dfzz 0.0)) 0 1) (trans (mapcar '+ pt_ins (list dfzz dfzz 0.0)) 0 1) '((0 . "LWPOLYLINE"))) ) (acet-ui-progress-safe (setq i (1+ i))) (cond ((and ss_pl (eq (sslength ss_pl) 1)) (setq ent_pl (ssname ss_pl 0) pt (vlax-curve-getClosestPointToProjection ent_pl pt_ins '(0 0 1) nil) prm (vlax-curve-getParamAtPoint ent_pl pt) a_ref (atan (/ (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))) deriv (vlax-curve-getfirstderiv ent_pl prm) alpha (atan (cadr deriv) (car deriv)) alpha (rem (+ (* 2 pi) alpha) (* 2 pi)) alpha (if (and (> (- alpha a_ref) (* 0.5 pi)) (<= (- alpha a_ref) (* pi 1.5))) (+ pi alpha) alpha ) n_ent ent ) (while (/= (cdr (assoc 0 (setq dxf_next (entget (entnext n_ent))))) "SEQEND") (if (eq (cdr (assoc 2 dxf_next)) "ALT") (progn (entmod (subst (cons 50 alpha) (assoc 50 dxf_next) dxf_next ) ) (setq count (1+ count)) ) ) (setq n_ent (cdar dxf_next)) ) ) ) ) (acet-ui-progress) ) ) (princ (strcat "\n" (itoa count) " Blocs TCPOINT ont leur attribut ALT pivoté sur " (itoa (sslength ss)) "sélectionnés.")) (prin1) ) -
@didier Rassure toi, j''ai tâtonné avant de trouver cette solution, j'ai essayé d'abord avec l'activeX mais choux blanc: pas de propriété de rotation (dump renvoie une erreur) En observant le comportement des code DXF 10 et 15 lors de rotation j'en ai déduit que je pourrais peut âtre obtenir l'angle. Cela concerne donc bien le bloc, d'ailleurs mon code ne fonctionne pas avec un style de multileader par défaut. La méthode est empirique, mais bon cela répond au besoin ponctuel...
-
Avec ceci? ((lambda ( / ss ent dxf_ent) (while (not (setq ss (ssget "_+.:E:S" '((0 . "MULTILEADER")))))) (redraw (setq ent (ssname ss 0)) 3) (setq dxf_ent (entget ent)) (print (angtos (angle (cdr (assoc 10 dxf_ent)) (cdr (assoc 15 dxf_ent))) (getvar "AUNITS") 4)) (redraw ent 4) (prin1) ))
-
Numerotation des entites en sautant 1 chiffre
bonuscad a répondu à un(e) sujet de Nicokarmann dans Covadis
@didier Je suis d'accord avec toi que c'est pénible à lire. Mais si je fais comme cela, et que cela permet à ceux qui ne ne sont pas inscrits d'avoir accès au code. Mon but étant le partage, et que n'importe qui peut s'approprier le code et s'en inspirer pour l'améliorer pour répondre à son besoin. Je considère que je ne suis pas un gourou et que je peut faire des erreurs et que des personne puisse les corriger. Merci de m'excuser!
