-
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
-
Pour information, je dirais que (je suis avec Win10 sur un i7, 8 Go de ram seulement) avec un SSD Samsung EVO. Si malgré tout le SSD fonctionne avec Windows 10, le software fourni: Samsung Magician n'est pas compatible avec Windows 10, ou du moins bridé. Ce soft permet d'optimiser les accés de lecture et d'écriture du SSD; les performance sont nettement accrues. Sous Windows 10 après une opération de "geek" (modification de la base de registre), je suis arrivé à rendre ce soft pleinement fonctionnel pour rendre les performances maximun mais Samsung n'a toujours pas réagi pour proposer une mise à jour. J'ai eu quelques problèmes avec Autocad et l'update vers Windows 10, je me suis résoulu à refaire une installation vierge de windows 10 (avec repartionnement du disque) pour qu'Autocad refonctionne (l'update fout le bazard avec quelque softs installé sous seven), donc PRUDENCE... Ces problèmes résolus, cela fonctionne à merveille, très réactif.
-
Bonjour, bonsoir à tous. Pour ceux qui n'auraient pas encore l'info, avant de faire une "co...ie"! Un malware nommé "locky" se propage ces dernier temps par courriel avec piéce jointe. Pas forcément détecté par les anti-virus, les dégâts ne sont pas a négliger, car il se propage facilement dans un réseau privé et mets toutes les données (les vôtres et celles des autres) dont vous avez accès en péril. Voir ce lien officiel Et celui-ci par exemple pour des infos plus techniques. N'hesitez pas à faire circuler l'info et de mettre vos données importantes en lieu sûr. RAPPEL: Le meilleur anti-virus est celui qui est entre la chaise et le clavier.
-
Modifier le facteur de convertion des champs automatiquement
bonuscad a répondu à un(e) sujet de Steven dans AutoCAD 2016
Ha bon! cela ne t'affiche pas la syntaxe du champ dans une boite de dialogue? En fait j'avais rapidement essayé d'aller plus loin, mais j'ai l'impression qu'il faudrait effacer le champ pour en recréer un identique à nouveau avec le terme modifié à sa convenance car l'essai de mise à jour du champ n'a pas fonctionné (ou je ne sais pas faire). -
Comme je me sens un peu réponsable de cet état de fait et je m'en excuse. (J'aurais mieux fais d'ouvrir un nouveau fil pour m'épencher...) Ma réponse bien qu'allant dans le sens d'Olivier, ne te visait pas particulièrement. C'est vrai qu'Olivier s'est emballé un peu vite. Cependant je n'enlève rien à ce que j'ai dit, je pourrais donner de multiples exemples, mais les recherches me feraient perdre un temps fou. Donc au lieu de discuter sur ce propos je vais continuer dans ma voie, c'est à dire de me faire de plus en plus discret sur les réponses, quitte à disparaitre définitivement sans lacher du venin qui fait tourner au vinaigre les discussions. Car si L'inverse est vrai aussi! Car au final je reste bien libre de répondre ou non, donc si je ne suis pas sastifait: bye bye! Etant versé dans le dévellopement lisp, il faut comprendre aussi que ce dommaine demande plus d'énergie, de réflexion et de temps pour répondre à une demande. Des demandes peuvent prendre jusqu'à plusieurs heures et ça, j'ai l'impression que les initiateurs des demandes n'en n'ont pas toujours concience, et forcément ça démotive beaucoup plus que pour une réponse banale qui a pris 3 minutes de rédaction. J'en profite quand même pour remercier ceux qui me répondent sous ces termes. Ca fait très plaisir..., même si moi j'en ai perdu!
-
C'est vrai que ce genre de comportement est de plus en plus fréquent. Je ne compte plus les réponses que j'ai pu faire est qui sont rester "lettre morte" ici ou ailleurs... C'est ce qui fait que je m'éloigne de plus en plus à la participation des forums. Pour moi c'est un manque de respect du temps que j'ai pu consacrer et du dénigrement de l'investissement personnel (heureusement qui n'est pas perdu pour moi...). Après tout le partage n'est pas un dut! C'est le monde "kleenex"; on prend, on jette! sans autres considérations.
-
Si MAINLEV te convient bien, je ne cherche pas à améliorer la fonction GRASS. Le désaventage de mainlev est que l'incrémentation est relativement régulière à moins d'avoir des accélération subite du curseur, ce qui n'est pas trop évident au niveau de la maitrise des directions... Par contre grass ne marche pas bien pour des directions proche de la verticale (à l'origine c'est pour simuler de l'herbe sur un plan proche de l'horizontale), il faudrait revoir le code en profondeur. Je pense que Mainlev ne va pas si mal, mais ça demande une certaine dextérité sur la mainiement de la souris pour avoir un effet aléatoire... ou alors avoir un dessinateur atteint de la maladie de Parkinson.
-
Ce qui donnerait en faisant une modification rapide (sans ENTMAKE) pour faire une polyligne. (defun rn ( / md mx nc) (if (not sd) (setq sd (getvar "DATE"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md) ) (/ sd md) ) (defun c:GRASS ( / sp ep gh dn dx an p1 p2 p3 p4 p5 sd) (initget 9) (setq sp (trans (getpoint "\nPoint de départ de l'herbe: ") 1 0)) (initget 41) (setq ep (trans (getpoint (trans sp 0 1) "\nPoint final de l'herbe: ") 1 0)) (initget 6) (setq gh (getdist "\nHauteur approximative de l'herbe <2.5>: ")) (if (not gh) (setq gh 2.5)) (initget 6) (setq dn (getint "\nFacteur de densité de 1à 6 <3>: ")) (if (or (not dn) (> dn 6)) (setq dn 3)) (setq dx (distance sp ep) an (angle sp ep) p1 sp p2 sp ) (setvar "CMDECHO" 0) (command "_.pline" "_none" (trans sp 0 1)) (while (< (distance p2 sp) dx) (setq p2 (polar p1 an (/ (+ (rn) (/ gh 2)) dn)) p3 (polar p2 (* pi 0.5) (* gh (rn))) p4 (polar p3 (* pi 0.6) (* gh (rn))) p5 (polar p4 (* pi 0.4) (* gh (rn))) ) ;(entmake (append '((0 . "LINE")) (list (cons 8 (getvar "clayer"))) (list (cons 10 p3) (cons 11 p5)))) (command "_none" (trans p3 0 1)) (setq p1 p2) ) (command "_none" (trans ep 0 1) "") (setvar "CMDECHO" 1) (princ) )
-
Bonjour, Un truc à ma disposition (qui n'est pas de moi), qui se rapproche de ton souhait. Ca peut être une base de départ... ; GRASS.LSP ; Realistic Grass for Elevations ; (c)1994, Watson Kilbourne ; Draws row of grass with random height, ; spacing and angle in elevation ; Random number generator, from 0.000 to 0.999 (defun rn ( / md mx nc) (if (not sd) (setq sd (getvar "DATE"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md) ) (/ sd md) ) (defun c:GRASS ( / sp ep gh dn dx an p1 p2 p3 p4 p5 sd) (initget 9) (setq sp (trans (getpoint "\nPoint de départ de l'herbe: ") 1 0)) (initget 41) (setq ep (trans (getpoint (trans sp 0 1) "\nPoint final de l'herbe: ") 1 0)) (initget 6) (setq gh (getdist "\nHauteur approximative de l'herbe <2.5>: ")) (if (not gh) (setq gh 2.5)) (initget 6) (setq dn (getint "\nFacteur de densité de 1à 6 <3>: ")) (if (or (not dn) (> dn 6)) (setq dn 3)) (setq dx (distance sp ep) an (angle sp ep) p1 sp p2 sp ) (while (< (distance p2 sp) dx) (setq p2 (polar p1 an (/ (+ (rn) (/ gh 2)) dn)) p3 (polar p2 (* pi 0.5) (* gh (rn))) p4 (polar p3 (* pi 0.6) (* gh (rn))) p5 (polar p4 (* pi 0.4) (* gh (rn))) ) (entmake (append '((0 . "LINE")) (list (cons 8 (getvar "clayer"))) (list (cons 10 p3) (cons 11 p5)))) (setq p1 p2) ) (princ) )
-
Modifier le facteur de convertion des champs automatiquement
bonuscad a répondu à un(e) sujet de Steven dans AutoCAD 2016
J'avais récupérer (je ne sais plus où!) ce petit bout de code. A partir de ça, je pense que la mise en oeuvre ne serait pas compliqué (si on ne doit pas aller chercher dans des blocs!), mais je n'ai pas envie de m'y coller... <_< (defun c:getfielentities ( / ent obj) (cond ((setq ent (entsel)) (setq obj (vlax-ename->vla-object (car ent))) (if (vlax-method-applicable-p obj "FIELDCODE") (alert (vlax-invoke-method obj "FIELDCODE")) ) ) ) (prin1) ) -
Tu changes simplement (rtos (- (read string1) (read string2)) 2 2) en (strcat "d=" (rtos (* 1000.0 (- (read string1) (read string2))) 2 0)) Non j'ai pris le style standard, mais tu peux remplacer (list 5 (getvar "TEXTSIZE") 5 "Standard" (getvar "CLAYER") 0.0 0) par (list 5 (getvar "TEXTSIZE") 5 (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 0 Pour le 5 (le premier) tu peux aussi changer
-
Bonjour, Une première approche vite faite. (vl-load-com) (defun c:diff_texte ( / AcDoc Space e1name e2name string1 string2 nw_obj key) (defun sel_onlyText (msg / js) (princ msg) (while (not (setq js (ssget "_+.:E:S:N" (list (cons 0 "*TEXT,MULTILEADER,ATTRIB,INSERT,DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (vlax-ename->vla-object (cadar (ssnamex js 0))) ) (defun getvalue_text (ename) (cond ((vlax-property-available-p ename 'TextString) (vlax-get ename 'TextString)) ((vlax-property-available-p ename 'TextOverride) (if (eq (vlax-get ename 'TextOverride) "") (strcat (vlax-get ename 'TextPrefix) (rtos (vlax-get ename 'Measurement) (vlax-get ename 'UnitsFormat) (vlax-get ename 'PrimaryUnitsPrecision)) (vlax-get ename 'TextSuffix)) (vlax-get ename 'TextOverride) ) ) ) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq e1name (sel_onlyText "\nSélectionner le 1er texte: ") string1 (getvalue_text e1name) e2name (sel_onlyText "\nSélectionner le 2ème texte: ") string2 (getvalue_text e2name) ) (cond ((and string1 string2) (setq nw_obj (vla-addMtext Space (vlax-3d-point (getvar "VIEWCTR")) 0.0 (rtos (- (read string1) (read string2)) 2 2) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'BackgroundFill) (list 5 (getvar "TEXTSIZE") 5 "Standard" (getvar "CLAYER") 0.0 0) ) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (vlax-put nw_obj 'InsertionPoint (trans (cadr key) 1 0)) ) ) ) ) ) (prin1) )
-
Inscription Nouveau User ?
bonuscad a répondu à un(e) sujet de lecrabe dans CADxp, comment ça marche?
Je donne un lien d'un utilisateur qui ne peut s'inscrire sur CADXp. Je le fais à sa place (of course), il révèle qu'il a utilisé yahoo et gmail. le lien -
L'astuce pour la syntaxe du nom d'un bloc dynamique dans un filtre est d'utiliser le symbole quote inversé (AltGr+7) Ce qui donnerai: (setq ss (ssget "_X" (list '(0 . "INSERT") '(2 . "`*U*")(cons 410 (getvar "ctab"))))
-
Polyligne + "XDATA"
bonuscad a répondu à un(e) sujet de rebcao dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, Ce que j'utilise pour transcrire des OD de Map vers des XData. Cependant cette procédure ne peut être faite que sous une version Map. Une fois fait, les XData pourront être lues depuis une version classique Le code: (defun C:MyOD2XD ( / LstTable Jeu I iNbJeu Elt EltLstTable iEltLst iNbEltLst EltTable oTableDef sNomTable exdata oLstChamp iChamp iNbChamp sNomChamp sTypeChamp sValChamp exdata newent) (setq LstTable (ade_odtablelist)) (setq Jeu (ssget)) (setq I 0 iNbJeu (sslength JEU)) (repeat iNbJeu (setq Elt (ssname Jeu I)) (setq I (1+ I)) (if (setq EltLstTable (ade_odgettables Elt)) (progn (setq iEltLst 0 iNbEltLst (length EltLstTable)) (repeat iNbEltLst (setq EltTable (nth iEltLst EltLstTable)) (setq iEltLst (1+ iEltLst)) (setq oTableDef (ade_odtabledefn EltTable)) (setq sNomTable (cdr (assoc "Tablename" oTableDef))) (regapp sNomTable) (setq exdata (list sNomTable)) (setq oLstChamp (cdr (assoc "Columns" oTableDef))) (setq iChamp 0 iNbChamp (length oLstChamp)) (repeat iNbChamp (setq sNomChamp (cdr (assoc "ColName" (nth iChamp oLstChamp)))) (setq sTypeChamp (cdr (assoc "ColType" (nth iChamp oLstChamp)))) (setq sValChamp (ade_odgetfield Elt EltTable sNomChamp 0)) (setq iChamp (1+ iChamp)) (setq exdata (append exdata (list (cond ((eq sTypeChamp "Real") (cons 1040 sValChamp )) ((eq sTypeChamp "Integer") (cons 1070 sValChamp )) ((eq sTypeChamp "Point") (cons 1010 sValChamp )) ((eq sTypeChamp "Character") (cons 1000 sValChamp )) ) ) ) ) ) (setq exdata (list (list -3 exdata))) (setq newent (append (entget Elt) exdata)) (entmod newent) ) ) ) ) ) -
[Résolu] Comment changer le contenu d'un texte
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Comme tu rencontre beaucoup de difficulté, je ne peux que te conseiller les méthodes évoqué par Olivier et gilles, ce sera une bonne démarche pour manipuler les fonctions de base. Il y a aussi un autre moyen, que je donne pour d'autres, qui est beaucoup plus rapide. Exemple: (vlax-put (vlax-ename->vla-object (car (entsel "\nSélectionner un texte: "))) 'TextString (getstring T "\nNouveau texte: ") ) -
[Challenge] (vl-position) amélioré
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Après lecture des codes et du lien. La fonction mpos de (gile) est proche de M-position de Tharwat La fonction vl-pat de Patrick_35 (comme il l'a fait remarqué) est proche de index de Stefan Cette dernière ce révèle la plus rapide au benchmark (j'ai pas vérifié..., en plus je n'ai pas l'outil!) Comme quoi lorsqu'on cherche une manière concise on se rapproche d'un code commun. Honneur à Tramber qui est le seul (pour l'instant) à avoir proposé une fonction récursive. Pour les benchmarks, tant que les valeurs sont proches cela n'est pas vraiment révélateur à mon avis: Si j'ai le temps de faire un clin d'oeil ;) pour moi c'est kif-kif... je ne fais pas la chasse aux milli-secondes. :P -
[Challenge] (vl-position) amélioré
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Merci de ta contribution Tramber, La récursivité est bien, j'avais songé aussi au (cdr (member)) mais ça nécessite de compter, ce que tu fais d'ailleurs avec ta variable (pas très catholique) lst. -
Et ceci (peut être a améliorer..., pas trop testé) (defun nomprenom (nom / l flag) (setq l (vl-string->list nom)) (vl-list->string (mapcar '(lambda (x) (if (eq x 32) (setq flag T)) (if (and (or flag (eq x (car l))) (> x 90)) (- x 32) x)) l)) ) (nomprenom "denis hache")-> "Denis HACHE"
-
A mon avis, la raison n'est que financière... Depuis plusieurs années le tourisme est en berne en Egypte (instabilité politique et autres facteurs) C'est environ 10% du PIB du pays. Ils font simplement tout ce qui est en leur pouvoir pour relancer cette économie. Du coup ils sont moins regardant sur les demandes des chercheurs pour entreprendre des recherches (ce qui était loin d'être le cas avant! ils étaient toujours très réticents, si ce n'est opposé à toutes recherches), Ils espèrent une découverte (majeur ou pas!) qui relancerait l'intérêt touristique. C'est peut être le moment de tenter ta chance? ;)
-
Bonjour, (vl-position) répondait exactement à mon besoin mais a un gros défaut; elle ne retourne que la position du 1er élément trouvé. Ce que je désire avoir en retour, ce sont les positions multiples de l'élément dans la liste. Exemple pour: (setq stuff (list "a" "b" "c" "d" "e" "c" "a")) que (vl-position-multi "c" stuff) -> (2 5) (vl-position-multi "a" stuff) -> (0 6) (vl-position-multi "b" stuff) -> (1) (vl-position-multi "f" stuff) -> nil Bien sur, à la différence de vl-position la fonction me retourne une liste d'entier ou nil J'ai bien déjà pondu ça: (defun vl-position-multi (el l / n l_id l_n) (setq n 0 l_id (mapcar '(lambda (x) (equal x el)) l) ) (repeat (length l_id) (if (car l_id) (setq l_n (cons n l_n))) (setq n (1+ n) l_id (cdr l_id)) ) (reverse l_n) ) Pour le peu de test que j'ai effectué, ca à l'air correct. Mais je serais curieux d'avoir d'autres versions (les pros de la récursivité) ou de manière plus concise... Si ça vous dit!
-
Un DXF est structuré en plusieurs sections principales. Il est écrit de façon séquentiel: chaque ligne ne contient qu'une information. La définition d'un objet se fait donc sur plusieurs lignes, qui fonctionnent généralement (pour faire simple) sur deux lignes succesives. une ligne pour le numéro du code (un entier) et une ligne suivante pour la valeur attachée à ce code. La fin d'une section se termine toujours par une ligne contenant l'entier 0 suivie de la ligne ENDSEC Conseil: Seule la section ENTITIES sera interessante pour toi.(à moins que tu t'interesse aussi à la définition des "BLOCK") Donc faire une recherche dans le fichier pour trouver cette section Et refaire une recherche à partir de ce point avec ENDSEC. Seule cette section ainsi déterminée contiendra la définition des objets dessinés. Exemple d'un DXF avec une ligne et un cercle complétement épuré SECTION 2 ENTITIES 0 LINE 5 2C7 330 1F 100 AcDbEntity 8 0 100 AcDbLine 10 726440.3160237623 20 6462720.676423864 30 0.0 11 775440.7503324483 21 6429482.975265797 31 0.0 0 CIRCLE 5 2D3 330 1F 100 AcDbEntity 8 0 100 AcDbCircle 10 730623.2803545923 20 6437643.129360008 30 0.0 40 8448.575229561225 0 ENDSEC Avec ceci tu pourra extraire les infos qui te sont utiles en t'appuyant sur les codes (que je ne décrirai pas ici, voir par exemple l'aide en ligne)
-
[Résolu] Lisp modifications d'attributs et hachures
bonuscad a répondu à un(e) sujet de Glead dans Débuter en LISP
Bonjour, Je vais donner un autre exemple (qui sera à adapter...) Que fait celui-ci? Il hachure chaque polyligne fermée, mais pour chaque polyligne il va chercher le segment le plus grand afin de régler l'angle des hachures par rapport à celui-ci. Par exemple si tu règle comme il faut pour le motif "vigne", tu pourras obtenir a ce que la hachure s'aligne sur le plus grand côté de la parcelle, ce qui donne un meilleur rendu final que d'avoir les hachures toutes dans le même sens. (defun c:multi_hatch-45 ( / js n model_hatch scale_hatch ang_hatch ent dxf_ent lst_pt lst_d where alpha) (setq js (ssget '((0 . "LWPOLYLINE") (-4 . "<AND") (-4 . "&") (70 . 1) (-4 . "AND>")))) (cond (js (setq n -1 model_hatch (getvar "HPNAME") scale_hatch (getvar "HPSCALE") ang_hatch (getvar "HPANG") ) (setvar "HPNAME" "ANSI31") (setvar "HPSCALE" (* (getvar "HPSCALE") (getvar "DIMSCALE"))) (repeat (sslength js) (setq ent (ssname js (setq n (1+ n))) dxf_ent (entget ent) lst_pt (mapcar '(lambda (x) (trans x ent 0)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) lst_d (mapcar 'distance lst_pt (cons (last lst_pt) lst_pt)) where (- (length lst_pt) (length (member (apply 'max lst_d) lst_d))) alpha (angle (if (zerop where) (last lst_pt) (nth (1- where) lst_pt)) (nth where lst_pt)) ) (setvar "HPANG" (angle (trans '(0 0 0) 0 1) (trans (polar '(0 0 0) alpha scale_hatch) 0 1))) (command "_.HATCH" "" "" "" ent "") ) (setvar "HPNAME" model_hatch) (setvar "HPSCALE" scale_hatch) (setvar "HPANG" ang_hatch) ) (T (princ "\nAucune LWPOLYLINE fermée trouvé !")) ) (princ) ) -
Remplacer des blocs par des points en conservant les XDATA
bonuscad a répondu à un(e) sujet de charlounet dans Routines LISP
Ecrit rapidement pour répondre à la demande initiale de charlounet ((lambda ( / js n ent dxf_ent xd_list nw_dxf) (setq js (ssget "_X" (list (cons 0 "INSERT") (if (getvar "CTAB") (cons 410 (getvar "CTAB")) (cons 67 (- 1 (getvar "TILEMODE"))))))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) xd_list (assoc -3 (setq dxf_ent (entget ent (list "*")))) nw_dxf (list (cons 10 (trans (cdr (assoc 10 dxf_ent)) ent 0)) (cons 0 "POINT") ) ) (foreach i '(6 8 39 48 62 210) (if (assoc i dxf_ent) (setq nw_dxf (cons (cons i (cdr (assoc i dxf_ent))) nw_dxf)) ) ) (entmake (append (reverse nw_dxf) (if xd_list (list xd_list) '()) ) ) (entdel ent) ) ) ) (prin1) )) -
Tracer en temps réel un arc
bonuscad a répondu à un(e) sujet de Caleb dans Pour aller plus loin en LISP
Salut, Pour t'inspirer, un bout de code pour tracer un arc virtuel par 3 points. Cela ce comporte comme la commande arc, mais aucun objet n'est créé. ((lambda ( / p1 p2 ll pt_m px1 px2 key p3 px3 px4 pt_cen rad inc ang nm lst_pt pa1 pa2) (initget 9) (setq p1 (getpoint "\nSpécifiez le point de départ de l'arc: ")) (initget 9) (setq p2 (getpoint p1 "\nSpécifiez le second point de l'arc: ")) (setq ll (list p1 p2) pt_m (mapcar '/ (list (apply '+ (mapcar 'car ll)) (apply '+ (mapcar 'cadr ll)) (apply '+ (mapcar 'caddr ll)) ) '(2.0 2.0 2.0) ) px1 (polar pt_m (+ (angle p1 p2) (* pi 0.5)) (distance p1 p2)) px2 (polar pt_m (- (angle p1 p2) (* pi 0.5)) (distance p1 p2)) ) (princ "\nSpécifiez l'extrémité de l'arc: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq p3 (cadr key) ll (list p1 p3) pt_m (mapcar '/ (list (apply '+ (mapcar 'car ll)) (apply '+ (mapcar 'cadr ll)) (apply '+ (mapcar 'caddr ll)) ) '(2.0 2.0 2.0) ) px3 (polar pt_m (+ (angle p1 p3) (* pi 0.5)) (distance p1 p3)) px4 (polar pt_m (- (angle p1 p3) (* pi 0.5)) (distance p1 p3)) pt_cen (inters px1 px2 px3 px4 nil) ) (cond (pt_cen (setq rad (distance pt_cen p3) inc (angle pt_cen p1) ang (+ (* 2.0 pi) (angle pt_cen p3)) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 36.0))) lst_pt '() ) (if (zerop nm) (setq nm 1)) (repeat nm (setq pa1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 36.0)) pa2 (polar pt_cen inc rad) lst_pt (append lst_pt (list pa1 pa2)) ) ) (setq lst_pt (append lst_pt (list pa2 p3))) (grvecs lst_pt) ) ) ) ) ) (prin1) )) -
Pour ma part, de ce que j'ai essayé cela fonctionne sans difficulté. Je prends soins de faire des exports en DXF par type d'objet (généralement polyligne ou point) Je fais alors un export en DXF version 13 mais par sélection d'objet; PAS par dessin, en format ASCII et pas binaire (mais cela n'a peut être pas d'importance) Dans QGIS (avec ou sans Grass), je fais: "Couche"-> "Ajouter une couche"-> "Ajouter une couche vecteur..." Pour "Jeu de données" tu fais "parcourir" et dans la boite de dialogue tu peux activer le filtre DXF d'Autocad pour trouver plus facilement ton fichier. Après les infos de projection sont demandées et c'est fini.
