-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
[Résolu] Ajouter plusieurs sommet de polyligne à intervalle régulier
bonuscad a répondu à un(e) sujet de CTZen dans AutoCAD 2019
Salut Lecrabe C'est l'équivalent d'une commande d'édition (au même titre que PEDIT, DEPLACER, COPIER,ROTATION,ECHELLE etc..), elle ne crée pas de nouvelle entité; elle modifie celle-ci, donc OUI cela conserve les données associées -
[Résolu] Ajouter plusieurs sommet de polyligne à intervalle régulier
bonuscad a répondu à un(e) sujet de CTZen dans AutoCAD 2019
Il y a cette réponse pas très ancienne qui ressemble à ta demande -
SVP Routine 3DPOLY to 2DPOLY avec conservation Xdatas et ODs
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
Salut, Comme tu m'avais rafraîchi la mémoire lors de ce post En adaptant rapidement le lisp posté (juste changé le filtre de sélection de départ), cela donnerai ce qui suit, je n'ai pas trop testé mais ça devrait aller... (defun c:LECRABE ( / js n ent dxf_obj xd_l l_10 l_40 l_41 l_42 dxf_39 e_next dxf_next dxf_43 dxf_38 lst_data nwent tbldef) (setq js (ssget '((0 . "POLYLINE") (-4 . "&=") (70 . 8)))) (cond (js (repeat (setq n (sslength js)) (setq dxf_obj (entget (setq ent (ssname js (setq n (1- n)))) (list "*")) l_10 nil l_40 nil l_41 nil l_42 nil xd_l (assoc -3 dxf_obj) ) (if (cdr (assoc 39 dxf_obj)) (setq dxf_39 (cdr (assoc 39 dxf_obj))) (setq dxf_39 0.0) ) (setq e_next (entnext (cdar dxf_obj))) (if (zerop (boole 1 1 (cdr (assoc 70 dxf_obj)))) (setq flag_cl nil) (setq flag_cl T) ) (if (zerop (boole 1 4 (cdr (assoc 70 dxf_obj)))) (setq flag_sp nil) (setq flag_sp T) ) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 (cdr (assoc 70 dxf_next)) 16)) (setq l_10 (cons (cdr (assoc 10 dxf_next)) l_10) l_40 (cons (cdr (assoc 40 dxf_next)) l_40) l_41 (cons (cdr (assoc 41 dxf_next)) l_41) l_42 (cons (cdr (assoc 42 dxf_next)) l_42) ) ) (setq e_next (entnext e_next)) ) (setq l_10 (reverse l_10) l_40 (reverse l_40) l_41 (reverse l_41) l_42 (mapcar '(lambda (x) (cons 42 x)) (reverse l_42)) ) (if (and (equal (apply 'max l_40) (apply 'min l_40)) (equal (apply 'max l_41) (apply 'min l_41))) (setq dxf_43 (car l_40) l_40 nil l_41 nil) (setq dxf_43 nil l_40 (mapcar '(lambda (x) (cons 40 x)) l_40) l_41 (mapcar '(lambda (x) (cons 41 x)) l_41) ) ) (if (not (zerop (caddar l_10))) (setq dxf_38 (caddar l_10)) (setq dxf_38 0.0) ) (setq l_10 (mapcar '(lambda (x) (cons 10 (list (car x) (cadr x)))) l_10)) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length l_10)) (cons 70 (if (zerop (boole 1 (rem (cdr (assoc 70 dxf_obj)) 128) 1)) (boole 1 (cdr (assoc 70 dxf_obj)) 128) (1+ (boole 1 (cdr (assoc 70 dxf_obj)) 128)) ) ) (cons 38 dxf_38) (cons 39 dxf_39) ) (if (and l_40 l_41) (apply 'append (mapcar '(lambda (x10 x40 x41 x42) (append (list x10 x40 x41 x42)) ) l_10 l_40 l_41 l_42 ) ) (progn (cons 43 dxf_43) (apply 'append (mapcar '(lambda (x10 x42) (list x10 x42) ) l_10 l_42 ) ) ) ) (list (assoc 210 dxf_obj)) (if xd_l (list xd_l) '()) ) ) (if (or (numberp (vl-string-search "Map 3D" (vla-get-caption (vlax-get-acad-object)))) (numberp (vl-string-search "Civil 3D" (vla-get-caption (vlax-get-acad-object)))) ) (progn (setq lst_data nil nwent (entlast)) (foreach n (ade_odgettables ent) (setq tbldef (ade_odtabledefn n)) (setq lst_data (cons (mapcar '(lambda (fld) (cons n (cons fld (ade_odgetfield ent n fld 0)))) (mapcar 'cdar (cdr (nth 2 tbldef)))) lst_data)) ) (cond (lst_data (mapcar '(lambda (x) (ade_odaddrecord nwent (caar x)) (foreach el x (ade_odsetfield nwent (car el) (cadr el) 0 (cddr el)))) lst_data) ) ) ) ) (entdel ent) ) ) ) (princ "\n") (princ (itoa (sslength js))) (princ " 3DPolylignes converties en LWPolylignes ") (prin1) ) -
Champ qui additionne les surface d'un Xref
bonuscad a répondu à un(e) sujet de litelsousa dans AutoCAD 2018
Intéressant,Pour ceux qui utilisent des MPolygon (AutocadMap), si l'on remplace : "AcDbHatch" par "AcDbMPolygon" cela fonctionne très bien aussi; la définition est la même que pour les hachures. Merci -
Bonjour, J'avais déjà posté cela, mais je ne sais plus trop où!Cette fonction répondra t-elle à ta demande...? Essayes! Un Autocad classique suffit pour pouvoir l'utiliser. (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - +) (/ num prec) 0.5))) ) ) (defun c:Tracage ( / p1 p2 key pt_sel ss ent obj_lw param_pt new_param pt lst_pt lst_gr) (initget 1) (setq p1 (getpoint "\nPoint de depart : ") new_param nil ent nil lst_pt nil lst_gr nil ) (while (and (setq key (grread T 4 0)) (not (member key '((2 13) (2 32)))) (/= (car key) 25)) (cond ((eq (car key) 5) ;;; Récupère le point sélectionné de key par grread (setq pt_sel (osnap (list (caadr key) (cadadr key)) "_near")) ; si pt_sel existe alors (if pt_sel (progn ;;; Sélectionne la polyligne en dessous du point en cours (setq ss (ssget "_C" pt_sel pt_sel '((0 . "LWPOLYLINE")))) (if ss (setq ent (ssname ss 0))) );fin progn ) (cond ;;; si entité alors (ent ;;; Alors transformation en objet vla l'entité lwpolyligne en cours (setq obj_lw (vlax-ename->vla-object ent) pt_sel (vlax-curve-getClosestPointTo obj_lw (trans (cadr key) 1 0)) ) (cond ;;; si nouveau pt_sel alors (pt_sel (setq param_pt (vlax-curve-getParamAtPoint obj_lw pt_sel) param_pt (round param_pt 1.0) ) (cond (new_param (setq pt (vlax-curve-getPointAtParam obj_lw param_pt)) (if (and (not (eq param_pt new_param)) (not (member pt lst_pt))) (progn (setq lst_pt (cons (trans pt 0 1) lst_pt)) (setq p2 (trans pt 0 1)) (setq lst_gr (append (cons 1 (list p1 p2)) lst_gr)) (grvecs lst_gr) (setq p1 p2) ) ) ) ) (setq new_param param_pt) ) ) ) ) ) ((member key '((2 117)(2 85))) (if lst_gr (setq lst_gr (cdddr lst_gr) lst_pt (cdr lst_pt) p1 (car lst_pt) ) ) (redraw) (grvecs lst_gr) ) (T (if lst_gr (grvecs lst_gr)) ) ) ) (redraw) (cond (lst_pt (setvar "CMDECHO" 0) (command "_.pline") (foreach n lst_pt (command "_none" n)) (command "") (setvar "CMDECHO" 1) (sssetfirst nil (ssadd (entlast))) ) ) (prin1) )
-
Ajouter des vertex sur une polyligne
bonuscad a répondu à un(e) sujet de MamyTina dans Routines LISP
Bonjour, Si tes polylignes sont légères essaye ceci (Attention mal paramétrée; la fonction peut générer beaucoup de sommets, plus qu'il n'en faut.... et être très longue à répondre). Donc attention de ne pas valider par défaut au message: Ajouter un sommet tous les <1.0>?: (vl-load-com) (defun add_vtx (obj add_pt ent_name / bulg) (vla-addVertex obj (1+ (fix add_pt)) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 1)) (list (car (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) (cadr (trans (vlax-curve-getpointatparam obj add_pt) 0 ent_name)) ) ) ) ) (setq bulg (vla-GetBulge obj (fix add_pt))) (vla-SetBulge obj (fix add_pt) (/ (sin (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) (cos (/ (* 4 (atan bulg) (- add_pt (fix add_pt))) 4)) ) ) (vla-SetBulge obj (1+ (fix add_pt)) (/ (sin (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) (cos (/ (* 4 (atan bulg) (- (1+ (fix add_pt)) add_pt)) 4)) ) ) (vla-update obj) ) (defun c:AddVtx2Dist ( / js AcDoc Space interval n obj ename v_length) (princ "\nSélectionnez une polyligne.") (setq js (ssget '((0 . "LWPOLYLINE")))) (cond (js (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (initget 6) (setq interval (getdist "\nAjouter un sommet tous les <1.0>?: ")) (if (not interval) (setq interval 1.0)) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n))) ename (vlax-ename->vla-object obj) v_length 0.0 ) (while (< v_length (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename))) (if (not (equal (fix (vlax-curve-getEndParam ename)) v_length 1E-13)) (progn (add_vtx ename (vlax-curve-getParamAtDist ename v_length) obj) (setq v_length (+ interval v_length)) ) (setq v_length (+ interval v_length)) ) ) ) ) ) (prin1) ) -
Pour un MTEXT c'est le code DXF 45 qui permet de changer le décalage.Par exemple pour le dernier multi texte dessiné, cette expression va mettre le décalage à 1. (entmod (subst '(45 . 1) (assoc 45 (entget (entlast))) (entget (entlast))))
-
Bonjour, Et au lieu d'utiliser un champ, peut être que la commande RTEXT des ExpressTools t'aiderais à contourner ton problème.Prendre l'option Diesel et entrer par exemple l'expression (voir l'aide pour les autres possibilités de formatage):$(xrefs,3)
-
C'était mieux avant?... mais ça, c'était avant!
bonuscad a répondu à un(e) sujet de Demixav dans Pause café
C'est pour ça que maintenant les opérateur CAO veulent des grands écrans! A ma sortie de 3ème, j'ai voulu tenter un concours pour rentré à l'IGN (loupé: 54ème, il en prenait 50).Lors de l'inscription on nous a fait une démonstration de ce qu'on devait réaliser:Dessiner des planche de carte d'état major au tire-ligne (point tubulaire interdites! ils reconnaissaient si le dessin avait été fait au rotring). Et bien je vous jure que je ne suis jamais arrivé au résultat fait devant nous par une personne de l'IGN, tracer dix lignes de courbes de niveaux dans un espace de 1mm à MAIN LEVEE et qu'elles soient bien distinctes). Je n'ai jamais revu une telle dextérité chez un dessinateur. Autrement au début de ma carrière, j'ai bien connu le rotring et le leroy, planche cadastrale de remembrement, projet routier, levé d'intérieur...Ah les contres calques tirés à l'ammoniaque quand le calque original ne pouvait plus être gratté à la lame à rasoir sans faire un trou.... -
Fonction, routine, sous-routine ?
bonuscad a répondu à un(e) sujet de Aleck_Ultimate dans Débuter en LISP
Bonjour, Pour moi, il n'y a pas de règles précises. Mais pour ma part je suis ces conventions: Une sous fonction doit être appelée avec ses arguments et ses variables locales déclarée. (defun sous-fonction ( arg1 arg2 ... / varloc1 varloc2) .....) Pour moi c'est dans ce sens qu'elle est utile. Une fonction faisant office de commande doit être définie avec seulement ses variables globales/locales (defun C:ma-commande ( / var1 var2) ...) Donc elle ne fait pas appel à des arguments est peut être appelée directement en ligne de commande par ma-commande On peut aussi l'appeler en ligne de commande comme ceci: (C:ma-commande), si on l’appelle ainsi elle pourrait très bien avoir des arguments s'ils étaient définis. Ainsi (C:ma-commande arg1 arg2 ...) serait possible, mais pas ma-commande arg1 arg2 en ligne de commande . Bien que cela soit possible, c'est incongru de définir une fonction principale comme ceci. C'est pour ça que je dis qu'il n'y pas de règles. Une sous-fonction peut très bien être appelé en dehors d'un lisp en ligne de commande, il suffit de connaitre le nombre d'arguments et leur nature (s'il y en a, car une fonction peut très bien être sans arguments), ainsi par exemple: (sous-fonction "toto" 12345) peut être évaluée en ligne de commande si arg1 est de nature chaine et arg2 de nature entier. Comme (sous-fonction) si il n'y pas d'arguments. En dernier il y a aussi la fonction anonyme (lambda), celle ci n'est évalué qu'UNE seule fois, elle ne reste pas en mémoire elle peut avoir des arguments ou pas. Exemple: ((lambda (x y) (princ (/ (1+ (sqrt x)) y)) (prin1)) 5 2) ->1.61803, les arguments sont ici 5 et 2 si on change les arguments lors d'un appel suivant.: ((lambda (x y) (princ (/ (1+ (sqrt x)) y)) (prin1)) 7 2) -> 1.82288 pour 7 et 2 Pas trop embrouillé? -
Pour ma part, je n'ai pas chromiun d'installé, mais cela n'empêche pas que j'ai aussi plusieurs instance de firefox dans les processus. Est ce pour la même raison, je n'ai pas la réponse...Pour le plus gourmand tu as 23.6Mo et moi 356 856 Ko, donc ça à l'air de se tenir. (Sous Seven pro)
-
Je confirme, il est présent dans le monde Linux et est présenté comme alternative à Chrome (proprietaire: Google)Comme sur tous logiciel open source, bien s’assurer de le télécharger depuis le site source et vérifier le MD5 avec la clé du site officiel (petite sécurité en plus)
-
[Résolu] Conserver une variable même en éteignant le logiciel
bonuscad a répondu à un(e) sujet de Aleck_Ultimate dans Débuter en LISP
Sur ce point tu as raison! Il faut penser à les transcrire (atof) ou (atoi) pour avoir des réels ou des entiers Oui et non, si ça semble similaire, ce ne l'est pas. Un autre avantage de passer par PROPDESS est que ces variables déclarées sont accessible par les champs, ce qui facilite leur exploitation et la mise à jour automatique par quiconque sans avoir à programmer, mais c'était pas le sujet... Par contre un inconvénient des ldata est qu'elles peuvent disparaître. Comment? Bah je reconnais que c'est un peu vicieux mais possible, par exemple si on utilise sans discernement le lisp de (gile) pour faire du nettoyage: ;; RemoveAEC (gile) ;; Supprime tous les dictionnaires AEC du dessin (defun c:RemoveDictOtherACAD () (foreach p (entget (namedobjdict)) (if (and (= 3 (car p)) (not (wcmatch (cdr p) "ACAD_*")) ) (progn (princ (strcat "\n" (cdr p) " a été effacé!")) (dictremove (namedobjdict) (cdr p))) ) ) (princ) ) Là je rectifie: seule USERI et USERR sont sauvegardées. Étrangement USERS n'est pas sauvegardée. Je pense que ça vient de l'usage unique par AutoCad LT de cette variable, les deux autre ne pouvant être exploitée (Le diesel n'exploite que des chaînes) Edit: Je rajouterais que les propriétés du dessin peuvent être propagée à un autre dessin. La commande PROPULATE des ExpressTools le permet (je n'ai jamais utilisé) ou encore le lisp de LeeMac -
[Résolu] Conserver une variable même en éteignant le logiciel
bonuscad a répondu à un(e) sujet de Aleck_Ultimate dans Débuter en LISP
Je vais parler des solutions qui n'ont pas été évoquées. La plus ancienne: Utiliser les variables USERI1 àUSERI5 pour des entiers USERRx pour les réels et USERSx pour les chaines. Elles sont conservées dans le dessin, l'inconvénient et que d'autre programme utilisateur peuvent aussi utiliser ces variables et donc les modifier. (mais elles sont rarement utilisées...) Autrement une autre solution non évoquée et de passer par les propriétés du dessin, soit de manière graphique par l'onglet "Personnaliser" où l'on peut rajouter autant de clés qu'on veut. On peut les manipuler en lisp, voir l'Aide -
Inversion des textes dans les Blocs sur MIROIR
bonuscad a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2018
Bonjour, Il me semble me souvenir qu'il y a longtemps, j'avais résolu ce genre de problème en affectant en lisp un vecteur d'extrusion (0 0 -1) au texte pour le remettre d'aplomb (comme si ce texte avait mis en place dans un scu vue de dessous) Mais le mieux serait que tu mettes en lien ton bloc qu'on puisse voir... -
Bonjour, Et Ctrl+R pour passer en revue les fenêtres? Pratique surtout si elles sont imbriquées les unes dans les autres.
-
Et je dirais même plus que si on a un AutocadMap pourquoi ne pas prendre le format Json afin de bénéficier des données d'objet.Je l'ai fait pour mon département entier et au moins je peut faire des requêtes dessus. J'ai d'abord utiliser Map shaper pour convertir le format Json à un format Shape car Autocad Map ne connait pas ce format Json et ensuite avec des scripts et des lisps par ci par là, j'ai monté ma base cadastrale en une journée. Bien sur, je n'ai pas les propriétaires...
-
Oui, Mais une recherche sur google avec "isochrone en ligne" tu dois pouvoir en trouver d'autres (plus ou moins valable...)
-
C'est vrai aussi, mais que pour une version pleine, pas LT, alors que la fraction de nombre entier fonctionne aussi sur LT (enfin je crois!)
-
Dans ce cas je penserais aux variables pour que l'insertion se fasse correctement: INSUNITSDEFSOURCE INSUNITSDEFTARGET
-
Oulà!! Je dis que la ligne (setq directory "C:\Users\vpeter\Documents\DXF") Dossier qui n'existe pas chez moi! Je l'ai modifiée en par exemple (setq directory "I:\\Depart\\BD_PARCELLAIRE") Chemin qui est propre à mon poste et dossier que je veux traiter. C'est plus clair?
-
J'ai fais un copier coller de ton code, ajuster la variable directory à un de mes chemin valable (en doublant les barres inversées) et il fonctionne sur ma bécane.... Donc pas de réponse! Et pour l'autre lisp proposé, il faut un Autocad Map (ou peut être Civil) pour pouvoir l'utiliser: il fait appel à des commande propre à ces produits verticaux.
-
OK pour diviser, mais la commande échelle accepte bien les fractions (de nombres entiers seulement) donc 1/100 est valable...
-
Un http en trop dans le lien ! Autrement j'ai eu utilisé celui-ci : Application geomarketing
-
Bonjour, Pour ce qui est écrit en rouge, double les anti-slash: (barre oblique inversée :\\), ou remplace simplement par un slash (barre oblique : /) et ça devrait fonctionner
