-
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
-
Changement de diamètre d'une pastille
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
Bon, y suffit que je pose la question, pour qu'enfin je trouve la réponse. C'est (osnap pt "_cen") qui met le bazard (j'aurais dut y penser) J'ai fais autrement (pris le milieu des 2 sommets) et plus de soucis. -
Bonjour, J'ai un petit souci (pas bien dramatique...) Je fais en ce moment des cartes en plaçant sur une carte des pastilles représentatives de valeur. Pour faire cela j'utilise la commande ANNEAU avec un diamètre interne à zéro et le diamètre externe suivant la valeur à représenter. Pour fair plus simple je place d'abord un anneau fixe partout où ils doivent se trouver (ou si je doit changer la valeur, par la suite, et c'est fréquent) Comme la commande anneau est un peu fastidieuse si on change constamment de valeur, j'utilise un petit de code tout simple. Il fonctionne dans l'ensemble correctement, sauf que des fois, sans que je trouve l'explication ma pastille est déplacée. Je travaille essentiellement dans le SCG, parfois dans un SCU (mais parrallèle au SCG). Y a t-il une erreur ou ommission que je n'ai pas vue dans mon code? Un oeil extèrieur pourrait voir où j'ai fauté... (defun c:chg_donut ( / js diam n pt lremov) (while (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))) (setq pt (trans (osnap (trans (cdr (assoc 10 (setq n (entget (ssname js 0))))) 0 1) "_cen") 1 0)) (setq diam (getreal (strcat "\nNouveau diamètre ?<" (rtos (* 2 (cdr (assoc 43 n)))) ">: "))) (if (not diam) (setq diam (cdr (assoc 43 n))) (setq diam (* 0.5 diam))) (foreach el n (if (member (car el) '(43 10 40 41 42)) (setq lremov (cons (car el) lremov)))) (foreach m lremov (setq n (vl-remove (assoc m n) n)) ) (setq n (append n (list (cons 43 diam) (cons 10 (list (+ (car pt) (* diam 0.5)) (cadr pt))) (cons 40 diam) (cons 41 diam) (cons 42 1.0) (cons 10 (list (- (car pt) (* diam 0.5)) (cadr pt))) (cons 40 diam) (cons 41 diam) (cons 42 1.0) ) ) ) (entmod n) ) (prin1) )
-
C'est propre à 2017? Car sur des versions antérieures ce n'est pas reproductible!... que se soit "Génération du type de ligne" Activé ou pas ET/OU quelque soit la valeur de PLINEGEN. Même si la solution de contournement est bonne, j'aurais tendence à dire que c'est un BUG. On peut souhaiter travailler avec la génération du type de ligne activé.
-
Bonjour, Pas besoin de lisp... La commande EDITHACH (_Hatchedit) t'ouvres une boite de dialogue où à l'intérieur se trouve, dans la section "Options", un bouton à cocher "Séparer les hachures"
-
[Résolu] Dans un GetPoint, ou est le Z ?
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Quand je disais que je te rejoins, c'était sur ceci: Par contre ceci Est a interpréter avec un seul appel, car on n'est pas vraiment coincé. (cadr (cddddr (cddddr '(1 2 3 4 5 6 7 8 9 10)))) retourne 10, (nth) dans ce cas peut simplifié l'appel (et c'est ce pourquoi il a été certainement conçu) Pour mois les notions de (car) (cdr) et (cons) me semble essentielles pour une compréhension du lisp. J'ai appuyé sur la notion de paire pointée (qui elle ne présente pas d'aborescence, voir fin de page, donc un accés direct à la donnée), car (nth) se révèle inadapté à ce type de liste. En résumé l'utilisation de car et cdr sont essentielle à bon apprentissage du lisp, si l'on ne comprends pas bien cette base, on ne progressera que très lentement. Après au lecteur d'avoir l'oeil critique pour interpréter les réponses, car nul n'est parfait dans ses explications (même ceux qui manie bien la langue, peuvent fourcher) -
Petit souci d'accroche Objet
bonuscad a répondu à un(e) sujet de DenisHen dans Personnalisation, macros, DIESEL
M2P fonctionne bien, mais seulement à l'intérieur d'une commande de création (ou d'edition de position géométrique) d'entité. Tu ne peux pas l'appeler par exemple directement en ligne de commande m2p -> Commande inconnue "M2P". Appuyez sur F1 pour obtenir de l'aide. Ta macro qui débute par .XY qui n'est pas une commande de création mais un filtre, donc elle ne peut pas fonctionner à l'état brut. -
[Résolu] Dans un GetPoint, ou est le Z ?
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Je rejoins zebulon_, pour mar part je préfère largement les (car) et les (cdr) et tout ses mixtes. Pourquoi ? Déjà je pense que l'accés à la donnée est plus rapide qu'avec (nth) même si à l'utilisation cela ne se percoit pas. C'est vraiment la fonction de base du lisp en amont tu n'a rien d'autre. (nth) peut être simulé avec l'écriture d'une fonction. Si tu arrive à faire une fonction (car) et (cdr), je veux la démonstration! (nth) est surtout interessant si l'on a conjointement la liste des index et qu'on la manipule. Et puis ELEMENT IMPORTANT (nth) ne gère pas la paire pointée. Pour cette dernière, tu as le 1er élément avec (car) et le deuxième avec (cdr), avec (nth), impossible ! Essayes (nth 1 '(1 . 2)) -> ; erreur: liste incorrecte: 2 alors que (cdr '(1 . 2)) -> 2 -
Ce qui est surprenant entre tes 2 images, c'est que l'effet vertical est accessible dans l'une mais pas dans l'autre?!?
-
Alléger image sld pour boîte de dialogue
bonuscad a répondu à un(e) sujet de Neophyte dans LISP et Visual LISP
Ca fait bien longtemps que je n'ais fait des clichés. Mais en relisant l'aide. Comme les résolutions des écrans sont maintenant très élévée, je me demande si tu n'aurais pas interêt de faire ton cliché dans une fenêtre réduite... J'ai pas testé... -
Regarde si tu peut t'inspirer de ce type de ligne. Donnée à mettre dans le fichier transport.lin *transport,alterné A,0,["\U+25A0",transport,S=1,R=0,X=-0.595,Y=-0.3215],-0.6435,["\U+25A1",transport,S=1,R=0,X=-0.595,Y=-0.3215],-0.6435 Avant de chargé ce type de ligne, tu dois IMPERATIVEMENT, pour que ça fonctionne, CREER un style de texte nommé "transport" avec la fonte ARIAL.ttf, laisser les valeurs par défaut, (hauteur 0) Ceci fait tu pourra alors chargé ton type de ligne. Ne pas prendre le fichier "acadiso.lin" par défaut, mais cliquer sur le bouton "Fichier..." et avec l'explorateur, aller chercher ton fichier "transport.lin" dans le dossier où tu auras enregistrer ta défintion ci-dessus.
-
insérer des points, mais distance par distance
bonuscad a répondu à un(e) sujet de litelsousa dans AutoCAD 2016
Celui que j'ai proposé avec un fichier CSV génére les points automatiquement avec les interdistances données dans le fichier CSV en répétant celles-ci autant de fois que possible. Alors que dans le lien proposé, il faut le faire un par un en répétant chaque fois l'opération! Le fichier CSV permet en somme la simulation de la commande "mesurer" classique en mode paramètrique. -
insérer des points, mais distance par distance
bonuscad a répondu à un(e) sujet de litelsousa dans AutoCAD 2016
Un autre (que je ne pense pas avoir posté), basé sur le même concept mais qui répondrait mieux au souhait. (defun draw_pt (pt col / rap) (setq rap (/ (getvar "viewsize") 50)) (foreach n (mapcar '(lambda (x) (list ((eval (car x)) (car pt) rap) ((eval (cadr x)) (cadr pt) rap) (caddr pt) ) ) '((+ +) (+ -) (- +) (- -)) ) (grdraw pt n col) ) ) (defun c:measure_on_curve_whith_CSV ( / js ent dxf_ent vla_obj param_end perim_obj pt_ref dist_ref op input f_open l_read len_vtx lst_measure nb_el q_el new_pt) (vl-load-com) (princ "\nSélectionner un objet curviligne sur lequel vous voulez effectuer une mesure.") (while (not (setq js (ssget "_+.:E:S" (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE") (cons -4 "<NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") (cons -4 "AND>") (cons 0 "SPLINE") (cons -4 "OR>") ) ) ) ) ) (setq ent (ssname js 0) dxf_ent (entget ent) vla_obj (vlax-ename->vla-object ent) param_end (vlax-curve-getEndParam vla_obj) perim_obj (vlax-curve-getDistAtParam vla_obj param_end) ) (redraw ent 3) (initget 1) (setq pt_ref (getpoint "\nPoint de référence de la mesure: ") pt_ref (vlax-curve-getClosestPointTo vla_obj (trans pt_ref 1 0)) ) (draw_pt (trans pt_ref 0 1) 1) (setq dist_ref (vlax-curve-getDistAtPoint vla_obj pt_ref)) (initget "+ -") (setq op (getkword "\nAdditonner-Soustraire [+/-]? <+>: ")) (if (or (eq op "+") (not op)) (setq op '+) (setq op '-)) (setq input (getfiled "Select a CSV file" "" "csv" 2) f_open (open input "r") ) (while (setq l_read (read-line f_open)) (setq len_vtx (atof (substr l_read 1 (vl-string-position 59 l_read)))) (setq lst_measure (cons len_vtx lst_measure)) ) (close f_open) (setq lst_measure (reverse lst_measure) nb_el (length lst_measure) len_vtx 0 q_el 0 ) (while (<= (setq len_vtx (+ len_vtx (nth q_el lst_measure))) (- perim_obj dist_ref)) (if (or (null (setq new_pt (vlax-curve-getPointAtDist vla_obj (+ dist_ref len_vtx)))) (> ((eval op) dist_ref len_vtx) perim_obj)) (setq new_pt (vlax-curve-getPointAtDist vla_obj (- dist_ref len_vtx))) ) (draw_pt (trans new_pt 0 1) 3) (if (and (<= ((eval op) dist_ref len_vtx) perim_obj) (>= ((eval op) dist_ref len_vtx) 0.0)) (setq new_pt (vlax-curve-getPointAtDist vla_obj ((eval op) dist_ref len_vtx))) (setq new_pt nil) ) (if new_pt (progn (redraw) (draw_pt (trans pt_ref 0 1) 1) (draw_pt (trans new_pt 0 1) 3)) (progn (redraw) (draw_pt (trans pt_ref 0 1) 1)) ) (redraw) (if new_pt (entmake (list '(0 . "POINT") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (cons 8 (getvar "CLAYER")) (cons 10 new_pt) '(210 0.0 0.0 1.0) '(50 . 0.0) ) ) ) (setq q_el (rem (1+ q_el) nb_el)) ) (redraw ent 4) (prin1) ) Il faut au préalable un petit fichier au format CSV qui contiendrait par exemple pour le cas de litelsousa 6.0; 3.0; 1.0; -
Bonjour, Même avis que Sinan. Le SSD est donné pour un cycle de lecture/écriture donné. Pour le préserver, il est bien de paramétrer certaines choses, par exemple les répertoires temporaires, la swap sur un disque dur mécanique. Les données n'ont pas besoin d'être stockées sur un SSD. Sur un portable, il existe des "caddy bay" pour remplacer le lecteur/graveur CD/DVD (qui ne sert plus à grand chose, les clés USB ont pris leur places pour les échanges), pour y loger à la place un disque dur mécanique pour tes données.
-
En effet, si on utilise la commande des ExpressTools XDLIST, on retrouve bien les paramètres de la clothoïde. Pour moi j'arrive bien à les décaler, même si j'ai un panneau interdit vers l'extérieur. C'est pas faux!mais la différence est insignifiante. Ce qui me laisse suggèrer comme alternative, de décaler ses éléments principaux: droite et cercle, et de reconstruire les clothoïdes avec ces éléments décalés.
-
RollBack Windows 10
bonuscad a répondu à un(e) sujet de Olivier Eckmann dans Windows trucs et astuces
Bonjour, Olivier, je t'invite à lire mon expérience sur un Dell Latitude E6410, si ça peux t'aider... Depuis ce post, il est toujours aussi stable, réactif et fonctionnel même avec les updates qu'il y a pu avoir depuis. J'ai quand même parfois un plantage au démarrage, qui je pense; est dut soit un usage intempestif de ma part de CCleaner, soit aux bidouillage sur la config de la télémétrie que j'ai pu faire. (J'aime pas quand ça cause dans mon dos. Un hard reboot a raison de ce blocage, et ça redémarre comme avant) NB: Je suis en EFI. Vraiment je suis agréablement surpris et sastifait de Windows10. Mais je pense qu'un RAZ de la machine est souhaitable pour faire une "instal clean" plutôt que la migration... -
Certe, mais ça continu toujours, et avec un excellent contenu ... Par contre Exmateria n'est plus. snif, snif... La multiplicité de sites n'encourage pas!... et l'éphémère encore moins.
-
Bon je reposte le code (que je n'ai jamais retravaillé), c'est plus sur. (defun c:dim_perimeter ( / ent name_lay js n v_sd1 v_sd2 v_se1 v_se2 vlaobj pt_org pt_end param_start param_end perim_obj js_grp pt1_org pt1_end xname newdict) (vl-load-com) (if (not (tblsearch "BLOCK" "DIM_PERIMETER")) (progn (entmake '((0 . "BLOCK") (8 . "0") (2 . "DIM_PERIMETER") (70 . 2) (4 . "") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0)) ) (entmake '( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 2) (70 . 1) (43 . 0.5) (38 . 0.0) (39 . 0.0) (10 -0.25 0.0) (40 . 0.5) (41 . 0.5) (42 . 1.0) (10 0.25 0.0) (40 . 0.5) (41 . 0.5) (42 . 1.0) (210 0.0 0.0 1.0) ) ) (entmake '((0 . "ENDBLK") (8 . "0") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2))) ) ) (while (not (setq ent (entsel "\nChoix d'une entité sur le calque à coter: ")))) (setq name_lay (cdr (assoc 8 (entget (car ent))))) (setq js (ssget (append '((0 . "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")(-4 . "<NOT")(-4 . "&") (70 . 112)(-4 . "NOT>")) (list (cons 8 name_lay)))) n 0) (cond (js (command "_.undo" "_group") (setq v_sd1 (getvar "dimsd1") v_sd2 (getvar "dimsd2") v_se1 (getvar "dimse1") v_se2 (getvar "dimse2")) (setvar "dimsd1" 1)(setvar "dimsd2" 1) (setvar "dimse1" 1)(setvar "dimse2" 1) (repeat (sslength js) (setq ent (ssname js n) vlaobj (vlax-ename->vla-object ent) pt_org (vlax-curve-getStartPoint vlaobj) pt_end (vlax-curve-getEndPoint vlaobj) param_start (vlax-curve-getStartParam vlaobj) param_end (vlax-curve-getEndParam vlaobj) ; perim_obj (vlax-curve-getDistAtParam vlaobj (+ param_start param_end)) perim_obj (vlax-curve-getDistAtParam vlaobj param_end) ) (redraw ent 3) (command "_.dimaligned" pt_org pt_end "_text" (rtos perim_obj) pause) (redraw ent 4) (setq js_grp (list (entlast))) (command "_.offset" "_through" ent (getvar "lastpoint") "") (command "_.change" (entlast) "" "_property" "_layer" (getvar "clayer") "") (setq js_grp (cons (entlast) js_grp)) (setq vlaobj (vlax-ename->vla-object (entlast)) pt1_org (vlax-curve-getStartPoint vlaobj) pt1_end (vlax-curve-getEndPoint vlaobj) ) (command "_.-insert" "DIM_PERIMETER" pt1_org (/ (getvar "dimtxt") 2.0) (/ (getvar "dimtxt") 2.0) "0.0") (setq js_grp (cons (entlast) js_grp)) (command "_.-insert" "DIM_PERIMETER" pt1_end (/ (getvar "dimtxt") 2.0) (/ (getvar "dimtxt") 2.0) "0.0") (setq js_grp (cons (entlast) js_grp)) (command "_.line" pt_org pt1_org "") (setq js_grp (cons (entlast) js_grp)) (command "_.line" pt_end pt1_end "") (setq js_grp (cons (entlast) js_grp)) (if (null (dictsearch (namedobjdict) "BONUSCAD_DIM-PERIMETER")) (setq xname (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary"))) newdict (dictadd (namedobjdict) "BONUSCAD_DIM-PERIMETER" xname) ) (setq newdict (cdar (dictsearch (namedobjdict) "BONUSCAD_DIM-PERIMETER"))) ) (setq xname (entmakex (append '( (0 . "GROUP") (100 . "AcDbGroup") (300 . "Cote perimetre") (70 . 0) (71 . 1) ) (mapcar '(lambda (x) (cons 340 x)) js_grp) ) ) ) (if (not (assoc 3 (dictsearch (namedobjdict) "BONUSCAD_DIM-PERIMETER"))) (dictadd newdict "DIM-PERIMETER_1" xname) (dictadd newdict (strcat "DIM-PERIMETER_" (itoa (1+ (atoi (substr (cdr (assoc 3 (dictsearch (namedobjdict) "BONUSCAD_DIM-PERIMETER"))) 8))))) xname) ) (setq n (1+ n)) ) (setvar "dimsd1" v_sd1) (setvar "dimsd2" v_sd2) (setvar "dimse1" v_se1) (setvar "dimse2" v_se2) (command "_.undo" "_end") ) (T (princ "\nPas d'objet à mesurer sur ce calque.")) ) (prin1) ) J'espère que ça pourra faire l'affaire!
-
AFFICHGE DES PROPRIETES DE LA POLYLIGNE SUR LE DESSIN
bonuscad a répondu à un(e) sujet de rolandinho973 dans CADxp, comment ça marche?
Sans pouvoir tester, pour ton besoin spécifique essayes de remplacer dans le code les lignes ((eq (type str) 'STR) str) par ((eq (type str) 'STR) (if (eq desc_od "DIAM") (strcat "%%c " str) str)) C'est du bidouillage pour rendre le code adapté à ton dessin, mais pas forcément à d'autres. -
DenisH, Relis bien, ce n'est pas strcat mais strcase Le premier concatène des chaines de caractères, le second force la case (majuscule, minuscule) des caractères. (strcase "BOIS2" T) (strcase "bois2") Essayes ces deux expressions pour t'éclairer. Bien que dans le code de cela n'était pas effectivement necessaire, il a pris une précaution au cas où un utilisateur vienne à changer le nom dans le code (choisir un autre motif) et que celui ci soit écrit en minuscule.
-
Cercle Ttr a l'opposé de l'endroit voulu
bonuscad a répondu à un(e) sujet de Dietrich dans AutoCAD 2016
Si tu le dis..., pourtant dans l'aide sur raccord ou cercle TTR, il est bien précisé de l'importance des points de sélection! Autrement dans un système de coordonnées élevé, les raccords peuvent ne pas fonctionner (alors que si les objets sont rapprochés de l'origine, cela fonctionne parfaitement), ce sujet a été déjà abordé... -
Comme dit didier fait une recherche. Pour t'orienter vers mes réponses, recherche avec dim_perimeter sur le site.
-
Cercle Ttr a l'opposé de l'endroit voulu
bonuscad a répondu à un(e) sujet de Dietrich dans AutoCAD 2016
Pour ce qui est des raccord ou le montage de cercle avec les tangentes, les points de sélection des objets ont une grande importance. En effet, souvent 2 solutions (voir 4; lignes qui se croisent complétement) sont possibles, pour choisir la solution à mettre en oeuvre, Autocad se base sur les points de sélection, pour choisir la solution à mettre en place. Pour avoir le plus de succés possible avec ses commandes, il faut imaginer où seront à peu près les points de tangence du futur raccord afin que les points de sélection soient proche de la solution désirée. -
AFFICHGE DES PROPRIETES DE LA POLYLIGNE SUR LE DESSIN
bonuscad a répondu à un(e) sujet de rolandinho973 dans CADxp, comment ça marche?
Bonjour, Essayes la réponse pointée dans la discussion. -
Si je ne fais pas d'erreur, il me semble qu'il avait été évoqué "LapTop" par le passé... En même temps "Light" correspond bien car une LT n'est qu'une version bridé de la version pleine à ses fonctions de bases. Rappelez vous le procés à LT-Extender qui débridait le lisp sur une version LT.
-
Incrément ID des données d'objets (OD)
bonuscad a répondu à un(e) sujet de Cadiste dans AutoCAD 2014
Bon si ça fonctionne, c'est le principal... Une petite explication sur l'incrémentation alphanumérique. J'ai voulu garder le principe du numérique; c'est à dire colonne des unités, colonne des dizaine, colonne des centaines .... sauf qu'ici les colonnes peuvent être alphabétique. Donc l'incrémentation se fera toujours depuis la colonne de droite. ET SURTOUT, ça demande à l'utilisateur de connaitre à peu près le nombre d'objet à décompter pour fournir la clé alphanumérique de départ. Par exemple débuter à "A00" pour aboutir "Z99" devrait permettre de dénombrer environ 2000 objets. Par contre "A0" n'en permettra que 200 environ Tu as aussi la possibilité de voir comment (gile) incrémente dans son code et de l'appliquer ici!
