-
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
-
Le problème vient qu'à l'époque, on était obligé d'utiliser des bbcodes pour que le code soit afficher correctement sur le forum notamment le symbole > qui était pris pour un symbole de redirection et matraquait l'affichage. Depuis ce problème ne se pose plus mais les bbcodes sont désormais affichés sur ces anciennes pages et perturbe les copiés-collés. Celui de Lecrabe est bon et correspond bien, je ne l'ai pas retravaillé depuis.
-
D'après ce que j'ai pu lire oui! Il paraîtrait surtout que adblock, malgré son rôle, récupère des informations nous concernant (le comble pour une extension qui est censé nous protéger), ce que ne fait pas µblock origin (attention il y plusieurs extensions avec des noms un peu similaire. Mis à part ce point adblock est aussi efficace, mais plus intrusif, c'est tout. Après je ne suis pas un "geek", je fais confiance à ceux qui se sont penché sur le mode de fonctionnement de ces extensions, mais je n'ai aucun moyen (ni envie) de vérifier leur dires.
-
Bonjour, Pour découvrir des extensions qui peuvent nous simplifier la vie! Je vais vous citer celles que j'utilise et qui me semble avoir fait leurs preuves. Ce sont pour ma part essentiellement des extensions pour me protéger au mieux de mes surfs sur internet, j'attache une importance capitale à laisser le moins de traces possible pour ma tranquillité. uBlock Origin : Un bloqueur de pub très efficace et non intrusif contrairement à certains autres. Privacy Badger : Un bloqueur de traceurs invisibles. Decentraleyes : Pour se protéger de pistage faites par des requêtes en bloquant celles-ci. HTTPS Evrywhere : Force l'utilisation du chiffrement pour sécuriser la fréquentation de site non chiffré. NoScript : Bloquer les scripts java, flash. Bien qu'efficace cette extension peut se révéler pénible à utiliser et il n'est pas évident de créer sa liste blanche car ce n'est pas très intuitif d'utilisation. Grammalecte: Correcteur orthographique (pour faire plaisir à Didier ), fonctionne avec le dictionnaire French Spelling Dictionaryses fonctionnalités s'étende à Thunderbird et libre office pour ceux qui les utilise. Et bien sur un traducteur, pour ma part (malgré qu'il utilise les services google, mais les traductions sont pertinentes): ImTranslator Et vous qu'utilisez vous comme extensions?
-
Bonjour, Simplement que ces deux commandes ne sont pas natives, mais issue des ExpressTools et qu'elles sont définies en lisp. Si tu veux les appeler depuis une procédure lisp il ne faut pas passer par (command "...") mais appeler simplement la fonction définie en tant que commande, c'est à dire avec cette syntaxe (C:BURST) et (C:RTEXT) Je pense que comme se sont des fonctions évoluées, il n'est pas besoin de les charger auparavant, elles vont s'initialiser elles même par les procédures des Expresstools
-
Alors pour te rassurer. Chez moi avec comme FAI Orange (donc DNS d'Orange) et un PC sous Linux, aucun problème que ce soit avec Firefox ou Google chrome (pas Chromium hein). Ça devient complexe ton histoire ! PS: Je viens d'essayer avec Windows 10 ... Là c'est Bitdefender qui bloque la page, si je met une exception, ça fonctionne. Quelque chose a changé ? car je n'ai pas d'avertissement de la part de Firefox.
-
Je ne suis aucunement spécialiste en applis web, mais:Cela ne serait il pas en rapport avec l'attaque DNS récente? Attaque sur le DNS L'alerte de ICANN Un site de test Tout devient si sophistiqué, que pour démêler la pelote.... NB: Quand je lance le test sur ton site web, on peut pas dire que c'est excellent, il note une redirection si j'ai bien compris. Je me suis amusé à testé le site de Didier et c'est nettement meilleur.
-
Cette situation m'étais déjà arrivé, je corrigeais le dessin, purgeais celui ci (calque "&auditBAD_LAYER" ou un truc proche), et si je refaisais un contrôle ça me ressortait les mêmes erreurs, donc je pouvais tourner en boucle dans cette procédure... En fait en faisant une correction et en enregistrant de suite le fichier et en fermant celui-ci, lors de la réouverture je purgeais alors celui-ci et refaisais un contrôle et tout était OK. En conclusion en ne faisant pas ces 2 opérations dans la même session, je sortais de cette boucle infernale. Donc un conseil: enregistre puis quitte ton dessin après ton contrôle et réouvres le voir si le problème persiste.
-
Et si tu améliorait simplement ton filtre? Par exemple: (ssget '((-4 . "<OR") (0 . "CIRCLE") (-4 . "<AND") (0 . "LWPOLYLINE") (90 . 4) ; ne possède que 4 sommets (-4 . "&") ;opération logique AND sur le bit du code 70 -> 1 ou 129 (génération type de ligne) seront reconnue comme fermée (70 . 1) (-4 . "AND>") (-4 . "OR>") ) ) C'est qu'un exemple...
-
Sans avoir testé, mais ça devrait le faire... ((lambda ( / prefix) (setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier DXF TEMOIN" "" "dxf" 16)) "\\") pt_ins '(0.0 0.0 0.0) ) (foreach dxf (vl-directory-files prefix "*.dxf" 1) (command "_.-insert" (strcat "\"" prefix dxf "\"") "_none" pt_ins "" "" "") (setq pt_ins (list (+ (car pt_ins) 10.0) (cadr pt_ins) (caddr pt_ins))) ) (prin1) ))
-
Creer un Arc tangent à deux Elements et qui passe par un point donne
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
En restant dans un exemple "bateau", ce qui ne vas pas est cette ligne: (command "_.circle" "_3P" "_tan" (cdr e1) "_tan" (cdr e2) pt) au lieu du (cdr) il faut prendre le (cadr): le retour de (entsel) n'est pas une paire pointée. Après _trim peut être hasardeux: le cercle peut être tangent sans pour autant couper celle-ci -> l'ajustement échoue, ou aussi si l'utilisateur est dans un SCU, ce que tu ne gère pas.Mais la la grosse erreur reste le CDR ou lieu du CADR, je me demande d'ailleurs comment cela pouvait fonctionner sous bricscad ?!?! -
Bonjour, (getstring) est bien pensé. Mais une chose que tu ne dis pas. Ces types de ligne sont appliqués aux calques ou sont forcé par entités.La gestion n'est pas la même. Ton code à l'air de vouloir s'appliquer a des entités forcées, mais sache que le code DXF 6 n'est défini que si le type de ligne est différent de "DuCalque" Donc par exemple (ssget '((6 . "BYLAYER"))) retournera toujours une sélection vide même si des entités ayant le type de ligne "ducalque" existent dans le dessin. Des précisions?
-
Que d'éloges.... Je ne peux que vous remercier ! Mais au final c'est comparable à un anneau (_donut) qui serait fragmenté en plusieurs segments d'arc indépendants à cause des couleur à appliquer aux segments. Pas de quoi faire un fromage !
-
Creer un Arc tangent à deux Elements et qui passe par un point donne
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
T'emballe pas, d'après mes tests, des soucis avec des grandes coordonnées (problème récurent: comme la commande raccord par exemple) les intersections ne sont pas calculées avec assez de précision pour faire l'ajustement... Si on utilisait pas de nom d'entité, on pourrait soustraire la partie entière (arrondie) aux coordonnés, faire les calculs, puis à la fin restituer les coordonnées originales en rajouter la partie soustraite pour obtenir une précision correcte. Ou alors en prenant cette technique de soustraction, appliquer par un (entmod) aux entités (ce qui revient au déplacement provisoire proche du zéro) faire le raccord et faire un (entmod) inverse après les calculs. C'est dans ma tête, mais je n'ai pas encore expérimenté si c'est possible de l'appliquer relativement simplement sans couac et sans trop de lourdeur de code !... NB: J'ai simplifier un peu le code précédent (sélection des tangentes qui était un peux tortueux), cela ne change rien au fonctionnements qui reste identique. -
Creer un Arc tangent à deux Elements et qui passe par un point donne
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
Je vais tenter une approche avec cercle et 3 points et automatiser le reste.... (vl-load-com)(defun C:Arc-TT-PT ( / p1 e1 t1 p2 e2 t2 px cx) (setvar "cmdecho" 0) (while (not (setq e1 (nentsel "\n1er point de tangence: ")))) (setq p1 (cadr e1)) (setq t1 (osnap p1 "_near")) (while (not (setq e2 (nentsel "\n2ème point de tangence: ")))) (setq p2 (cadr e2)) (setq t2 (osnap p2 "_near")) (cond ((and t1 t2) (initget 9) (setq px (getpoint "\nPoint passage obligé: ")) (command "_.circle" "_3p" "_tan" t1 "_tan" t2 "_none" px) (setq cx (entlast)) (setq t1 (vlax-invoke (vlax-ename->vla-object cx) 'IntersectWith (vlax-ename->vla-object (car e1)) acextendotherentity ) ) (setq t2 (vlax-invoke (vlax-ename->vla-object cx) 'IntersectWith (vlax-ename->vla-object (car e2)) acextendotherentity ) ) (entdel (entlast)) (if (and t1 t2) (command "_.arc" "_none" (trans t1 0 1) "_none" px "_none" (trans t2 0 1)) (princ "\nPas de solution") ) ) ) (setvar "cmdecho" 1) (prin1) ) -
Bonjour, Bien qu'Autocad ne soit pas destiné à cela. Il peut être utile de faire une représentation de données sous forme de diagramme.J'ai pondu une fonction, je dis bien une fonction pas une commande, c'est à dire qu'elle attend des arguments.Ici les arguments devront être des paires pointés ("chaine" valeur-numérique) Un exemple d'appel(diagram '(("VAL1" . 1.0) ("VAL2" . 2.0) ("VAL3" . 3.0) ("VAL4" . 4.0) ("VAL5" . 5.0) ("VAL6" . 6.0) ("VAL7" . 7.0))) Je vous livre la fonction (defun diagram (l / l_car l_cdr p1 p2 p3 ll pt_m px1 px2 key rad inc lst_pt pa1 pa2 ratio pt key bulge p10 p10n bic) (setq l_car (mapcar 'car l) l_cdr (mapcar 'cdr l) p1 (polar (getvar "VIEWCTR") 0 (* 0.5 (getvar "VIEWSIZE"))) p2 (polar (getvar "VIEWCTR") pi (* 0.5 (getvar "VIEWSIZE"))) p3 (polar (getvar "VIEWCTR") (* 2 pi) (* 0.5 (getvar "VIEWSIZE"))) ll (list p1 p2) pt_m (getvar "VIEWCTR") 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 "\nRayon de référence moyen?: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq p3 (cadr key) ) (cond (pt_m (setq rad (distance pt_m p3) inc (angle pt_m p1) lst_pt '() ) (repeat 36 (setq pa1 (polar pt_m inc rad) inc (+ inc (/ (* pi 2.0) 36.0)) pa2 (polar pt_m inc rad) lst_pt (append lst_pt (list pa1 pa2)) ) ) (grvecs lst_pt) ) ) ) ) ) (setq rad (if rad rad 0.0) ratio (/ (* 2 pi) (apply '+ l_cdr)) count 0 p10n nil bic 0) (initget 9) (setq pt (getpoint (getvar "VIEWCTR") "\nPoint d'insertion du camembert: ")) (redraw) (initget "Valeur Type Deux _Value TYpe TWo") (setq key (getkword "\nInscrire les [Deux/Valeur/Type]?<V>: ")) (cond ((eq key "TWo") (setq key "TWo")) ((eq key "TYpe") (setq key "TYpe")) (T (setq key "Value")) ) (mapcar '(lambda (x y) (setq bulge (/ (sin (* 0.25 x ratio)) (cos (* 0.25 x ratio)))) (cond (rad (if p10n (setq p10 p10n) (setq p10 (polar pt (if (not (zerop x)) (* pi 0.5) (* pi 1.5)) (* 0.5 rad))) ) (setq p10n (polar pt (if (not (zerop x)) (+ (* pi 0.5) (* (+ bic (atan bulge)) 4)) (* pi 0.5)) (* 0.5 rad))) (entmake (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) (cons 8 (getvar "CLAYER")) (cons 62 (setq count (1+ count))) (cons 100 "AcDbPolyline") (cons 90 2) (cons 70 (if (not (zerop x)) 0 1)) (cons 43 rad) (cons 38 0.0) (cons 39 0.0) (cons 10 p10) (cons 40 rad) (cons 41 rad) (cons 42 (if (not (zerop x)) bulge 1.0)) (cons 91 0) (cons 10 p10n) (cons 40 rad) (cons 41 rad) (cons 42 (if (not (zerop x)) 0.0 1.0)) (cons 91 0) (cons 210 (trans '(0 0 1) 1 0 T)) ) ) (entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbMText") (cons 10 (polar pt (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) (+ rad (* 0.2 rad)))) (cons 40 (* 0.25 rad)) (cons 41 0.0) (cons 46 0.0) (cons 71 (if (and (> (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) (* 0.5 pi)) (<= (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) (* 1.5 pi))) 6 4 ) ) (cons 72 5) (cons 1 (strcat "{\\fArial|b0|i0|c0|p34;" (cond ((eq key "Value") (rtos x 2 2)) ((eq key "TYpe") y) ((eq key "TWo") (strcat y " " (rtos x 2 0))) ) ) ) (cons 7 "Standard") (cons 210 (trans '(0 0 1) 1 0 T)) (list 11 1.0 0.0 0.0) (cons 50 (if (and (> (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) (* 0.5 pi)) (<= (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) (* 1.5 pi))) (+ (* pi 1.5) (* 4 bic) (* 2 (atan bulge))) (+ (* pi 0.5) (* 4 bic) (* 2 (atan bulge))) ) ) (cons 73 1) (cons 44 1.0) ) ) (setq bic (+ bic (atan bulge))) ) ) (setq p10 p10n) ) l_cdr l_car ) (prin1) ) Pour faire un diagramme des type d'entités contenu dans votre dessin, on peut par exemple faire (copier-coller en ligne de commande ce qui suit) (diagram ((lambda ( / ) (setq js (ssget "_X") l_typ nil) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (setq typ (cdr (assoc 0 (entget ent)))) (if (not (member typ (mapcar 'car l_typ))) (setq l_typ (cons (cons typ 1) l_typ)) (setq l_typ (subst (cons typ (1+ (cdr (assoc typ l_typ)))) (assoc typ l_typ) l_typ)) ) ) )) ) Ou encore pour avoir le nombre d'entités par calque:Remplacer (assoc 0 ci-dessus par (assoc 8 Cela peut être très bien être des valeur stockées dans des blocs, des xdata, des données d'objet etc... du moment que la liste d'argument est correcte. Bon "camembert"!
-
Hey, Le plus simple la fonction (rem) (zerop (rem x1 x2)) -> T divisible ->nil n'est pas divisible; x1 et x2 étant tes nombres à soumettre.
-
Comme le dit tiphon, le problème est que des formes (.SHX) n'ont pas été migré. Cela vient probablement de type de lignes qui utilisent des formes qui génère ce message. Pour faire un récapitulatif, il te faudrait observer (avec le bloc note) les fichiers .LIN utilisé dans ton dessin. et voir quel shx est appelé dans ceux-ci. Une commande purger ne ferait pas de mal, car il est possible que la référence soit dans le dessin alors que ces type de ligne ne sont pas utilisés, donc définition inutile.
-
Bon ce que je vais proposer ne répond pas à la demande, ici c'est pour des conduites mais je pense que le principe est similaire.Donc je pense que le code pourrait être transposable à la demande. Testez le! est si ça semble correspondre, on doit pouvoir le personnaliser. (defun c:conduite ( / AcDoc Space msg_f msg_n n old_cutmnu old_plw old_osm pt_f lst_pt lst_tmp pt_n nw_pl key htx nw_style nw_obj pt rtx dxf_ent tmp deriv) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) msg_f "\nSpécifiez l'extrémité de la ligne ou [annUler]: " msg_n "\nSpécifiez l'extrémité de la ligne ou [Clore/annUler]: " n 0 old_cutmnu (getvar "SHORTCUTMENU") old_plw (getvar "PLINEWID") old_osm (getvar "OSMODE") ) (setvar "OSMODE" 5) (while (null (setq pt_f (getpoint "\nSpécifiez le point de départ de la polyligne: "))) (princ "\nPoint incorrect.") ) (setq pt_f (trans pt_f 1 0) lst_pt (list pt_f) lst_tmp lst_pt) (setvar "LASTPOINT" (car lst_pt)) (initget "U ANNUler _Undo UNDO") (while (and (setq pt_n (getpoint (trans pt_f 0 1) (if (< n 2) msg_f msg_n))) (/= pt_n "Close")) (if (listp pt_n) (progn (setq pt_n (trans pt_n 1 0) lst_pt (cons pt_n lst_pt) lst_tmp lst_pt) (setvar "LASTPOINT" (car lst_pt)) (setq n (1+ n) pt_f pt_n) ) (if (zerop n) (princ "\nTous les segments sont déjà annulés.") (progn (setq lst_pt (cdr lst_pt) lst_tmp lst_pt) (setvar "LASTPOINT" (car lst_pt)) (setq n (1- n) pt_f (getvar "lastpoint")) ) ) ) (if (< n 1) (initget "U ANNUler _Undo UNDO") (initget "U ANNUler Clore _Undo UNDO Close") ) (redraw) (while (cdr lst_tmp) (grdraw (trans (car lst_tmp) 0 1) (trans (cadr lst_tmp) 0 1) 7) (setq lst_tmp (cdr lst_tmp))) ) (redraw) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car lst_pt) (mapcar 'cadr lst_pt))))) (if (eq pt_n "Close") (vlax-put nw_pl 'Closed 1) ) (setvar "SHORTCUTMENU" 11) (setvar "PLINEWID" 0.0) (if (not (eq (substr (getvar "USERS1") 1 3) "plw")) (setvar "USERS1" "plw0.0") ) (initget 4) (setq key (getreal (strcat "\nDiamètre souhaité (Epaisseur de la polyligne canalisation en Centimètre) <" (itoa (fix (atof (substr (getvar "USERS1") 4 5)))) ">?: "))) (if key (setvar "USERS1" (strcat "plw" (rtos Key 2 1)))) (vlax-put nw_pl 'ConstantWidth (* (atof (substr (getvar "USERS1") 4 5)) 0.001)) (initget "PVC BETON PEHD") (setq key (getkword "\nType de conduite [PVC/BETON/PEHD]?: ")) (cond ((null (tblsearch "LAYER" "CANALISATION")) (vla-add (vla-get-layers AcDoc) "CANALISATION") ) ) (vlax-put nw_pl 'Layer "CANALISATION") (cond ((null (tblsearch "STYLE" "CONDUITE")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "CONDUITE")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list (strcat (getenv "windir") "\\fonts\\arial.ttf") 0.0 0.0 1.0 0.0) ) ) ) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar '(0.0 0.0 0.0) (* pi 0.5) (getvar "TEXTSIZE")))) (setq rtx 0.0) (strcat key " -Tuyau- " ; ou tout autres textes ou supprimer la ligne pour aucun texte " %%C:" "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID nw_pl)) ">%).ConstantWidth \\f \"%lu2%pr0%ct8[1000]\">%" ; facteur de 1000 pour retrouver le diamètre original " L = " "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID nw_pl)) ">%).Length \\f \"%lu2%pr1\">%" "m" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 pt "CONDUITE" "CANALISATION" rtx) ) (setq dxf_ent (entget (entlast))) (while (or (= 5 (car (setq tmp (grread t 5 1)))) (/= (car tmp) 25) (= (car tmp) 3)) (cond ((= 5 (car tmp)) (setq pt (vlax-curve-getClosestPointTo nw_pl (trans (cadr tmp) 1 0)) deriv (vlax-curve-getFirstDeriv nw_pl (vlax-curve-GetParamAtPoint nw_pl pt)) rtx (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR"))) ) (if (or (> rtx (* pi 0.5)) (< rtx (- (* pi 0.5)))) (setq rtx (+ rtx pi))) (entmod (subst (cons 50 rtx) (assoc 50 dxf_ent) (subst (cons 10 (polar pt (+ rtx (* pi 0.5)) (+ (* (atof (substr (getvar "USERS1") 4 5)) 0.001) (getvar "TEXTSIZE")))) (assoc 10 dxf_ent) dxf_ent) ) ) (entupd (cdar dxf_ent)) ) ((= 3 (car tmp)) (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar '(0.0 0.0 0.0) (* pi 0.5) (+ (* (atof (substr (getvar "USERS1") 4 5)) 0.001) (getvar "TEXTSIZE"))))) (setq rtx 0.0) (strcat key " -Tuyau- " ; ou tout autres textes ou supprimer la ligne pour aucun texte " %%C:" "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID nw_pl)) ">%).ConstantWidth \\f \"%lu2%pr0%ct8[1000]\">%" ; facteur de 1000 pour retrouver le diamètre original " L = " "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID nw_pl)) ">%).Length \\f \"%lu2%pr1\">%" "m" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 pt "CONDUITE" "CANALISATION" rtx) ) (setq dxf_ent (entget (entlast))) ) (T (princ "\nArrêt anormal de la commande ")) ) ) (entdel (entlast)) (setvar "PLINEWID" old_plw) (setvar "SHORTCUTMENU" old_cutmnu) (setvar "OSMODE" old_osm) (princ) )
-
Déjà je te suggère de taper ATTDEF en ligne de commande et de faire F1 pour obtenir de l'aide. Mais en condensé les entités ATTDEF sont destinées à être utilisée dans un bloc et non pas en objet indépendant (comme relaté dans ce fil) qui peut faire croire que c'est des ATTRIBUT (ils ne le deviennent que lorsqu'ils font partie de la définition d'un bloc, hors d'un bloc ils ont l'apparence du texte sans en être). Une fois définies (pas de limitation de nombre) lors de la création d'un bloc, à l'insertion de ce bloc tu sera invité à renseigner ces champs par des valeurs qu'on appelle ATTRIBUT (suivant les propriétés de mode défini dans ATTDEF: invisible, constant, vérifié, prédéfini) Tu peux ouvrir "Foor Plan Sample.dwg" (dans le dossier exemple d'autocad) où tu as des exemples de blocs simples et voir par exemple le bloc RMNUM (constitué d'une polyligne et 1 définition d'attribut :attdef)
-
Pour moi j'arrive à forcer la fonte.Il faut quand tu double-clic sur ton texte pour rentrer en mode édition, avant de changer la fonte de Times New Roman à Arial il faut sélectionner ton texte pour le mettre en évidence (clic-gauche maintenu et glissé)Il peut arriver que ce clic-gauche glissé ne fonctionne pas, alors faire (MAJ+flèche droite) pour mettre ton texte en évidence.Une fois cette mise en évidence faite, tu peux alors fixer la fonte à Arial.
-
Oui didier, on s'est bien compris. Je ne dénigre pas ton code qui est le corps essentiel du programme. J'ai fais exactement la même chose que toi. J'explique simplement le rôle de (member) dans le code à x_all qui avait l'air de penser qu'il était essentiel pour obtenir ce qu'il désirait. Donc pour lui faire comprendre je l'ai comparer à ton code, j'aurais aussi bien pu citer Matt666 qui n'applique pas non plus de contrôle de sélection. A demi-d'accord, car des fois ce n'est pas aussi aisé que ça et les contrôles peuvent alourdir considérablement le code si l'on veut une fonction robuste. Le débutant ne sais pas forcement comment procéder pour mettre en place ces contrôles. En résumé: Ta démarche est pédagogique La mienne est de partager une fonction qui sera utilisable par n'importe qui dans un environnement quelconque (version, langue...), enfin j'essaye... je suis pas parfait. Voilà tout le monde trouvera son compte dans les 2 démarches suivant son degré d'expérience.
-
Nentsel Vs Refedit+Enstel
bonuscad a répondu à un(e) sujet de Matt666 dans Pour aller plus loin en LISP
Je ne suis pas sure de ce que je vais raconter....En fait je pense que quand on rentre dans l'éditeur de bloc, ce n'est pas avec les entités d'origine mais avec une copie de celles ci. et que quand on sort de l'éditeur en validant les modifications, il redéfini le bloc avec ces nouvelles entités dupliquées/modifiées. Un peu comme on faisait à l'ancienne (avant l'éditeur de bloc) mais là c'est plus transparent pour l'utilisateur.Donc je pense que c'est normal de ne pas retrouver le même ename. -
Il me sert juste de contrôle de sélection dans le code. Je récupère en fait le type d'entité sélectionné et si ce type est MEMBRE de la liste définie (member) cela me renvoie vrai (True/T) et je continu le code autrement cela boucle sur la sélection car je déclare n_ent à nil. Une façon sûre de pouvoir récupérer le code DXF 1 (contenant la valeur du texte) propre au texte multi-texte ou attribut et d'appliquer le (entmod) comme le fait didier, sauf qu'avec le code sommaire de didier si tu fait une mauvaise sélection -> nil ou erreur
-
Très sommairement, devrait fonctionner avec des TEXT, MTEXT et ATTRIB imbriqué ou non. (defun c:ata ( / n_ent dxf_ent val_txt) (setq n_ent nil) (while (not n_ent) (setq n_ent (nentsel "\nChoix d'un texte source imbriqué : ")) (cond (n_ent (if (not (member (cdr (assoc 0 (setq dxf_ent (entget (car n_ent))))) '("MTEXT" "TEXT" "ATTRIB"))) (setq n_ent nil dxf_ent nil) ) ) ) ) (setq val_txt (cdr (assoc 1 dxf_ent)) n_ent nil) (while (not n_ent) (setq n_ent (nentsel "\nChoix d'un texte cible imbriqué : ")) (cond (n_ent (if (not (member (cdr (assoc 0 (setq dxf_ent (entget (car n_ent))))) '("MTEXT" "TEXT" "ATTRIB"))) (setq n_ent nil dxf_ent nil) ) ) ) ) (entmod (subst (cons 1 val_txt) (assoc 1 dxf_ent) dxf_ent)) (entupd (cdar dxf_ent)) (prin1) )
-
[Résolu] Sélection de plusieurs textes dans une XRef
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut Denis D'abord une remarque:(ssget "_:S") est pour une sélection d'un objet UNIQUE (_Single), donc pas la peine d'essayer de faire une boucle: (sslength) sera au mieux égal à 1 ou nil. Voici un exemple de boucle que je ferais ((lambda ( / concatxt n_ent dxf_ent val_txt) (setq concatxt "") (while (setq n_ent (nentsel "\nChoix d'un texte imbriqué: ")) (cond ((member (cdr (assoc 0 (setq dxf_ent (entget (car n_ent))))) '("MTEXT" "TEXT")) (setq val_txt (cdr (assoc 1 dxf_ent))) (setq concatxt (strcat concatxt " " val_txt)) ) (T (princ "\nN'est pas un texte!")) ) ) (print concatxt) (prin1) )) Je te laisse compléter à ta guise.
