Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Bon, ça ma turlupiner cette lenteur... J'ai revu un peu le code pour m'affranchir des appels à (command) et des sélections graphiques par points. Avec cette version plus besoin de zoom (j'ai "shunter" la fonction (cirsel) de (gile), qui dans ton cas n'apportait pas grand chose), cela à éliminé les erreurs d'appel à (ssget) par points. Malheureusement le traitement reste long (pour moi environ 10mm) pour l'ensemble de la sélection. Il faut dire que pour 3732 Textes je multiplie par 4 (les 4 coins) le test par sélections, ce qui fait quand même 14928 sélections à tester. Voici la version, qui reste basique (mais fiable) et juste adaptée à ton dessin (pas de controle, pas vérifié si des SCU particuliers pouvait ne pas fonctionner) Si d'autres ont des idées pour améliorer... (defun c:toto ( / js_text tol n ename ll ur l_box l_just js_bl) (princ "\nChoix des texte à justifier par rapport au bloc associé.") (setq js_text (ssget '( (0 . "TEXT") (67 . 0) (410 . "Model") (8 . "EA_AL200") (6 . "Continuous") (100 . "AcDbText") ) ) tol 0.2 ) (cond (js_text (repeat (setq n (sslength js_text)) (setq ename (vlax-ename->vla-object (ssname js_text (setq n (1- n))))) (vla-GetBoundingBox ename 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) l_box (list ll (list (car ll) (cadr ur) 0.0) ur (list (car ur) (cadr ll) 0.0)) l_just '(12 6 8 14) ) (repeat 4 (setq js_bl (ssget "_X" (list '(0 . "INSERT") '(67 . 0) '(410 . "Model") '(8 . "EA_AL200") '(6 . "Continuous") '(100 . "AcDbBlockReference") '(-4 . "<AND") '(-4 . ">,>,*") (cons 10 (mapcar '- (car l_box) (list tol tol 0.0))) '(-4 . "<,<,*") (cons 10 (mapcar '+ (car l_box) (list tol tol 0.0))) '(-4 . "AND>") ) ) ) (cond (js_bl (vlax-put ename 'Alignment (car l_just)) (vlax-put ename 'TextAlignmentPoint (car l_box)) ) ) (setq l_box (cdr l_box) l_just (cdr l_just) ) ) ) ) ) (prin1) )
  2. Je viens de faire un essai sur l'ensemble du dessin fourni. C'est furieusement long... :o mais ça va jusqu'au bout :P Il y quand même des erreur de temps en temps du style: _QTEXT _ON serait peut être le bienvenu pour accélérer la chose. De même un: (vlax-put ename 'InsertionPoint ....) ainsi qu'un (vlax-put ename 'Alignment 12 6 8 ou 14) serait peut être plus rapide que la commande _.JUSTIFYTEXT" En tout cas ça demande à être travaillé encore.
  3. Salut, Je viens de regarder rapidement ton problème. Le gros hic est que tu travailles dans un système de coordonnées élevées et que du utilises un filtre de sélection par "_CP" (Capture Polygone). Ce mode de sélection pour qu'il fonctionne correctement t'oblige à zoomer sur l'endroit où tu veux faire ces sélections: en tout cas c'est mon retour d'expérience... Donc avec ce handicap, le lisp deviendra beaucoup plus lent à l'exécution, mais plus fiable. Sur ton algo, j'ai préféré le prendre en sens inverse de toi. Je m'explique: Je cherche tous les textes filtrés que je vais passer en revue un par un. A ceux-ci je cherche la boite d'encombrement aux quels je vais appliquer la recherche du bloc aux quatre coins de cette boite. Si la recherche est fructueuse j'applique la justification correspondante au coin du texte. Voici par exemple l'embryon de code pondu à la va vite (defun circsel (cen rad mod fltr / ang lst) (setq ang 0) (repeat 50 (setq lst (cons (polar cen ang rad) lst) ang (+ ang (/ pi 25)) ) ) (ssget mod lst fltr) ) (defun c:toto ( / js_text n ent_txt ename ll ur l_box l_just js_bl) (setvar "CMDECHO" 0) (setvar "OSMODE" 0) (princ "\nChoix des texte à justfier.") (setq js_text (ssget '((0 . "TEXT") (67 . 0) (410 . "Model") (8 . "EA_AL200") (6 . "Continuous") (100 . "AcDbText")))) (cond (js_text (repeat (setq n (sslength js_text)) (setq ename (vlax-ename->vla-object (setq ent_txt (ssname js_text (setq n (1- n)))))) (vla-GetBoundingBox ename 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) ) (setq l_box (list ll (list (car ll) (cadr ur) 0.0) ur (list (car ur) (cadr ll) 0.0)) l_just '("_BL" "_TL" "_TR" "_BR")) (command "_.zoom" "_window" ll ur) (command "_.zoom" "0.5x") (repeat 4 (setq js_bl (circsel (car l_box) 0.2 "_CP" '((0 . "INSERT") (67 . 0) (410 . "Model") (8 . "EA_AL200") (6 . "Continuous") (100 . "AcDbBlockReference")))) (cond (js_bl (command "_.JUSTIFYTEXT" ent_txt "" (car l_just)) ) ) (setq l_box (cdr l_box) l_just (cdr l_just) js_bl (ssadd)) ) ) ) ) (setvar "CMDECHO" 1) (prin1) )
  4. Sans les fichiers ont ne fait pas grand chose d'un script :(rires forts): Voici par exemple un script que j'ai généré en lisp pour l’exécuter ensuite sour AutocadMap en 32bits (Windows XP) Il fait en tout 78844 lignes et il s'est exécuté sans problème pour faire mon assemblage. Je t'en donne un extrait, pour te donner une idéee. _.undo _control _none _.new "C:\Program Files\Autodesk\AutoCAD Map 3D 2011\Template\map2Diso.dwt" cmddia 0 _ADESETCRDSYS _sourceDrawings CADASTRE:\com-013\feuille-0130000D02\0130000D02.dwg RGF93.CC45 _currentSession Lambert93 _exit _ADEDRAWINGS _ALias _Update CADASTRE CADASTRE I:\DEPART07\BD_CADASTRE-07 _exit _ATtach CADASTRE:\com-013\feuille-0130000D02\0130000D02.dwg _exit _ADEQUERY _Define _Location _all _exit _execute _draw _.zoom _extent _.saveas 2010 I:\Depart07\L93-BD_CADASTRE-07\com-013\feuille-0130000D02\0130000D02.dwg cmddia 1 _.close Essayes en entourant de guillemets "unité:\chemin dossier\fichier.dwg"
  5. Pourquoi tu ne fourni que le chemin du dossier sans le nom du fichier? _open "N:\O_ESSIDIS\RESERVE\CARTO\TERMINAL.dwg" devrait fonctionner... Contrairement à ce que j'ai dit, un "\" simple à l'air de fonctionner pour un script.
  6. Pour ton info Autocad interprète le signe "\" comme un caractère spécial (qui en gros lui dit de lire le caractère suivant littéralement) Donc pour un chemin de dossier exprimé sous windows comme C:\toto\titi\fichier.dwg devra être transcrit pour autocad sous la syntaxe: C:\\toto\\titi\\fichier.dwg (tu doubles les anti-slash) Si tes noms de dossiers ou fichiers comporte des espaces, je te conseilles d'entourer l'ensemble de guillemets ("") pour que les espaces ne soit pas interprété comme une validation. Exemple: pour C:\to to\ti ti\mon fichier.dwg donner a autocad "C:\\to to\\ti ti\\mon fichier.dwg" On a aussi la possibilté de remplacé l'anti-slash par un slash simple: C:\toto\titi\fichier.dwg peut être écrit C:/toto/titi/fichier.dwg, c'est au choix! En script, pas vraiment de solution, pour ce cas de figure il te faut te tourner vers un langage plus évolué, lisp par exemple. Tu peux regarde aussi SCRIPTPro (ou un truc du genre, faire une recherche), qui je crois permet d'automatiser un script sur un lot de fichier DWG.
  7. Il te faut simplement mettre une ligne vide supplémentaire pour prendre l'option par défaut qui est "définir nouveau dessin", puis définir ton point d'insertion (généralement 0,0,0) [= (bloc=fichier de sortie)/* (dessin entier)] <définir nouveau dessin>: Spécifiez le point de base de l'insertion: 0,0,0 Choix des objets: tout et encore une ligne vierge pour valider le choix des objets...
  8. Salut, Un truc pêché je ne sais plus où! (il n'est pas de moi) Personnellement je n'aime pas trop les réacteurs qui sont persistant, et s'ils sont mal conçu peuvent être galère. Mais c'est juste un exemple pour montrer que l'on doit pouvoir faire quelque chose avec la couleur des onglets. ;met en rouge le nom de la présentation courante dans la barre d'onglet ; (vl-load-reactors) (vlr-miscellaneous-reactor nil '((:vlr-layoutSwitched . ChangeLayoutCrosshairColor-Red)) ) (defun ChangeLayoutCrosshairColor-Red (calling-reactor info /) (if (not (eq (car info) "Model")) (vla-put-LayoutCrosshairColor (vla-get-Display (vla-get-Preferences (vlax-get-acad-object))) (vlax-make-variant 255 vlax-vbLong) ) ) )
  9. bonuscad

    AUDIT BAD LAYER

    Vu que tu as les maintiens, tu peux essayer d'effacer sous Autocad les entités qui posent problème... quitte à les refaire ensuite. (entdel (handent "32D97")) (entdel (handent "32F0C"))
  10. Bonjour, Tu peux aussi essayer de régler les variables XLOADCTL et XLOADPATH qui détermine ta façon de travailler avec les Xrefs. Sont elles présentes sur les versions LT ?
  11. Bonjour, Je pense que c'est l'option "*" de wbloc qui fait que tu récupère l'intégralité du dessin. Essayes (sans avoir testé) de passer par l'option de Sélection d'objets et en réponse "Choix des objets:" donner l'option "Tout"
  12. bonuscad

    AUDIT BAD LAYER

    En cas d'un control (_audit) positif et que tu répares les erreurs, enregistre le fichier SANS purger. Quitte le et ré-ouvre le, à ce moment là tu pourra faire la purge sans tomber dans cette boucle infernale que j'avais déjà observé pour ma part (même avec des versions antérieures).
  13. Dans tes blocs, au lieu d'utiliser des attributs avec des valeurs fixes, utilise des champs dynamiques. Edites par exemples tes attributs fixés en dur de ton bloc (commande ATTEDIT), supprime la valeur, fais un click-droit dans la case d'édition et choisis "Insérer un champ..." Je te laisse découvrir la suite.
  14. Salut, On avait eu déjà une discussion il y a fort longtemps à ce propos ici et tu avais aussi confirmé ce problème. Problème que j'avais aussi déjà décelé encore bien avant ici Avec le temps passé, je pense aujourd'hui (sans pouvoir l'affirmer) qu'il faut que l'expression entière de la macro soit évaluée (le diesel est une évaluation de chaîne) pour que les variables soient affectés de leur nouvelle valeur. Bryce avait donné un lien interne pour l'explication, mais ce lien ancien ne fonctionne plus A priori il fallait encadrer les appel suivant ($M= xxxxxx) par des guillemets ("")
  15. Salut, Sur qu'en topographie cartographie, le problème est récurent, ce genre de fonction m'avait traversé l'esprit, tu l'a concrétisé. Merci
  16. Salut, Ben alors (gile) ?!?! à quoi sert la condition (if (not c:xxx) (load "xxx")), il ne charge que si c:xxx est non défini. Donc pour moi cela reste "propre", surtout que la fonction ne sera jamais chargée si l'on à jamais cliqué dessus durant la session, ce qui n'est pas le cas d'un chargement automatique qui va encombrer la mémoire inutilement. Bon c'est sur l'encombrement est plus que minime... ;) Bien sur tout les autre méthodes restent bonnes malgré tout. Donc juste surpris de l'expression "plus propre" venant de ta part.
  17. Pour (cond ((null (tblsearch "LAYER" "Mesures cumulees")) (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96) ) ) Effectivement tu peux le supprimer. Déjà là tu avais bon! Ensuite il faut aussi supprimer "{\\fArial|b0|i0|c0|p34;" Cette ligne en faite force le style du texte à l'intérieur du MTEXT en Arial, indépendamment du style courant, qui ici est le style "Standard" et dernièrement il te faut modifier la ligne (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0) en (list 5 (getvar "TEXTSIZE") 5 pt (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 0)
  18. Pour être plus rapide, tu peux essayer ceci: Dans la foulée j'ai essayé de faire une fonction de mesure cumulée générique (Longueur ou Surface) (vl-load-com) (defun c:cumul_measure2field ( / js htx AcDoc Space str k_mod n ename nw_obj pt key) (or (setq js (ssget "_I")) (setq js (ssget "_P")) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget))) ) ) (T (setq js (ssget))) ) (cond (js (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) str "" ) (cond ((null (tblsearch "LAYER" "Mesures cumulees")) (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96) ) ) (initget "Longueur Aire _Length Area") (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : ")) (if (not k_mod) (setq k_mod "Length")) (repeat (setq n (sslength js)) (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n))))) (if (eq k_mod "Length") (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter") (if (vlax-property-available-p ename (read typ_measure)) (setq str (strcat str "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%)." typ_measure " \\f \"%lu2%pr2\">%" "+" ) ) ) ) (if (vlax-property-available-p ename "Area") (setq str (strcat str "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2\">%" "+" ) ) ) ) ) (cond ((/= str "") (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar (getvar "VIEWCTR") (* pi 0.5) (getvar "TEXTSIZE")))) 0.0 (strcat "{\\fArial|b0|i0|c0|p34;" "%<\\AcExpr (" (substr str 1 (1- (strlen str))) ") \\f \"%lu2%pr2\">%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill) (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 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)) ) ) ) ) (T (princ "\nLes objets sélectionnés n'ont pas la propriété requise")) ) ) ) (prin1) ) NB:Bien que j'ai testé un peu, il peut y avoir des oublis ou un bug.
  19. Salut, En réponse exacte à ta question: non Cependant(plus fastidieux), lors de l'insertion de ton champ prend l'option "Formule", ne clique pas sur l'un des boutons Moyenne, Somme, Nombre ou Cellule qui sont réservés pour les tableaux, mais clique dans la boite formule: (pour la rendre active) et fais un click-droit et choisi "Insérer un champ..." tu continu alors comme tu le ferais pour un champ unique avec l'aire d'une hachure. Une fois fais tu as le résultat qui s'affiche, tu tapes alors "+" et tu refais un click-droit pour recommencer la procédure autant de fois que tu as d'objets. Au résultat final tu auras un champ unique qui englobe tes champs individuels et qui sera toujours dynamique si une ou plusieurs de tes hachures changent de géométrie. NB: Je pense qu'en lisp il serait possible d'automatiser cette procédure pour au final n'avoir que la sélection à faire.
  20. bonuscad

    Personnalisation bouton

    Tu peux éviter le bouton et taper par exemple PH (Polyligne Hachurée)au clavier après avoir chargé la fonction, ça me semble aussi simple qu'un bouton. La fonction: (je suppose que les calques existent...) (defun c:ph ( / ) (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (command "_.change" "_last" "" "_properties" "_layer" "POTEAU" "") (command "_.-hatch" "_select" "_last" "" "") (command "_.change" "_last" "" "_properties" "_layer" "REMPLISSAGE" "") (prin1) ) Je n'ai pas ce problème... mais c'est possible (un accrochage par défaut?) Le code est très basique et sans aucun contrôle, mais pour débuter..., on va pas compliquer la chose!
  21. bonuscad

    Personnalisation bouton

    Salut, Ce que tu veux faire dans un bouton ne sera possible que si tu veux faire une polyligne avec toujours le même nombre de sommets, à ce moment là tu insère autant de pause ("\") que de sommets désirés. Si par contre le nombre de sommets ne sera jamais constant, cela n'est pas possible (on ne peux pas faire une boucle en macro de bouton). Par contre si tu est en version pleine, tu peux utiliser une expression lisp dans l'éditeur de macro exemple: ((lambda ( / ) (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (command "_.-hatch" "_select" "_last" "" "") (prin1) ))
  22. bonuscad

    unload lisp

    Bonjour A part une fonction startup rajoutée dans un un acadXXX.lsp ou dans un fichier .MNL qui reste une action consciente de l'utilisateur, le lisp de (gile) ne peut se charger seul tel qu'il est écrit. Ps: peut être aussi une bidouille avec les (autoload) des Express
  23. Ces derniers jours une connaissance (pas virtuelle) m'a demandé un coup de main pour lui écrire un lisp sur des longueurs cumulées de polyligne. Je lui ai pondu ça, si ça peut vous donner des idées... (vl-load-com) (defun c:cumul_length ( / js n ename l_cumul ent_text dxf_ent key) (princ "\nSélectionner les polylignes pour avoir le cumul.") (or (setq js (ssget "_I" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) (setq js (ssget "_P" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))) ) ) (T (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) ) ) (cond (js (setq l_cumul 0.0) (repeat (setq n (sslength js)) (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n))))) (if (vlax-property-available-p ename 'Length) (setq l_cumul (+ (vlax-get ename 'Length) l_cumul)) ) ) (princ (strcat "\nLe total cumulé des polylignes sélectionnées est de " (rtos l_cumul))) (setq ent_text (entmakex (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 (strcat (rtos l_cumul 2 2) " cm")) (cons 10 (trans (getvar "VIEWCTR") 0 1)) (cons 40 (getvar "TEXTSIZE")) (cons 50 (- 0 (getvar "VIEWTWIST"))) (cons 7 (getvar "TEXTSTYLE")) (cons 71 7) (cons 72 5) ) ) dxf_ent (entget ent_text) ) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent)) (entmod dxf_ent) ) ) ) ) ) (prin1) ) De mon coté j'ai voulu essayer une version avec des repères multiple, la voilà.. (vl-load-com) (defun c:cumul_length ( / js n ename l_cumul l_pt nb) (princ "\nSélectionner les polylignes pour avoir le cumul.") (or (setq js (ssget "_I" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) (setq js (ssget "_P" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))) ) ) (T (setq js (ssget '( (0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>") ) ) ) ) ) (cond (js (setq l_cumul 0.0 l_pt nil tmp_l '()) (repeat (setq n (sslength js)) (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n))))) (if (vlax-property-available-p ename 'Length) (setq l_cumul (+ (vlax-get ename 'Length) l_cumul) l_pt (cons (vlax-curve-GetpointAtParam ename (* 0.5 (vlax-curve-getEndParam ename))) l_pt) ) ) ) (princ (strcat "\nLe total cumulé des polylignes sélectionnées est de " (rtos l_cumul))) (entmake (append (list '(0 . "MULTILEADER") '(100 . "AcDbEntity") '(100 . "AcDbMLeader") '(300 . "CONTEXT_DATA{") '(40 . 1.0) '(41 . 4.0) '(140 . 4.0) '(145 . 2.0) '(174 . 1) '(175 . 6) '(176 . 2) '(177 . 0) '(290 . 1) (cons 304 (rtos l_cumul)) '(11 0.0 0.0 1.0) '(13 1.0 0.0 0.0) '(42 . 0.0) '(43 . 0.0) '(44 . 0.0) '(45 . 1.0) '(170 . 1) '(90 . -1073741824) '(171 . 3) '(172 . 5) '(91 . -1073741824) '(141 . 0.0) '(92 . 15726992) '(291 . 0) '(292 . 0) '(173 . 0) '(293 . 0) '(142 . 0.0) '(143 . 0.0) '(294 . 0) '(295 . 0) '(296 . 0) '(110 122.689 121.446 0.0) '(111 1.0 0.0 0.0) '(112 0.0 1.0 0.0) '(297 . 0) '(302 . "LEADER{") '(290 . 1) '(291 . 1) (cons 10 (list (/ (apply '+ (mapcar 'car l_pt)) (setq nb (length l_pt))) (/ (apply '+ (mapcar 'cadr l_pt)) nb))) '(11 -1.0 0.0 0.0) '(90 . 0) '(40 . 18.4914) ) (repeat nb (setq tmp_l (append '((304 . "LEADER_LINE{")) (list (cons 10 (nth (setq nb (1- nb)) l_pt))) (list (cons 91 nb)) '((305 . "}")) tmp_l ) ) ) (list '(303 . "}") '(301 . "}") '(90 . 279680) '(170 . 1) '(91 . -1056964608) '(171 . -2) '(290 . 1) '(291 . 1) '(41 . 0.36) '(42 . 4.0) '(172 . 2) '(173 . 1) '(95 . 6) '(174 . 1) '(175 . 2) '(92 . -1056964608) '(292 . 0) '(93 . -1056964608) '(10 1.0 1.0 1.0) '(43 . 0.0) '(176 . 0) '(293 . 0) '(294 . 0) '(178 . 0) '(179 . 3) '(45 . 1.0) ) ) ) (sssetfirst nil (ssadd (entlast))) ) ) (prin1) ) Pour cette dernière le repère est grippé, il suffit d'activé une poignée sur le texte pour pouvoir la déplacer et que les ligne de repères suivent. Amusez vous !
  24. bonuscad

    Le Made in France

    Pour AutoCAD il m'a proposé une belle 404 Peugeot :(rires forts): :(rires forts):
  25. Bonjour, Fais quelque modifs rapides pour répondre à ton désir, il suffit cliquer à vide ou de valider à blanc pour pouvoir rentrer une valeur Z. Pas trop testé... (defun ajouz ( / ent dxf_ent typ_ent z) (setq ent (nentsel "\nChoisir le Texte/Texte Multiligne/Attribut pour obtenir le Z: ")) (cond ((not (null ent)) (setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (cond ((member typ_ent '("TEXT" "MTEXT" "ATTRIB")) (setq z (read (cdr (assoc 1 dxf_ent)))) (if (and (/= (type z) 'REAL) (/= (type z) 'INT)) (progn (princ "\nLa valeur du texte ne convient pas!") (initget 1 "Réessayer _Retry") (setq z (getreal "\n[Réessayer]/Entrez une valeur numérique: ")) (if (eq z "Retry") (setq ent nil)) ) ) ) (T (setq ent nil) (princ "\nN'est pas un Texte MTexte ou Attribut!") ) ) ) (T (setq z (getreal (strcat "\nEntrez une valeur numérique <" (rtos (caddr (getvar "LASTPOINT")) 2 2) ">: "))) (if (not z) (setq Z (caddr (getvar "LASTPOINT")))) ) ) (princ (strcat "\nZ = " (rtos z 2 2))) z ) (defun err_plxy (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (if pt_b (command "")) (setq *error* olderr) (setvar "cmdecho" 1) (princ) ) (defun c:3dpoly_xy ( / odlerr msg_f msg_n n pt_f pt_n val_z) (setvar "cmdecho" 0) (setq olderr *error* *error* err_plxy) (setq msg_f "\nSpécifiez l'extrémité de la ligne .XY de, ou [annUler]: " msg_n "\nSpécifiez l'extrémité de la ligne .XY de, ou [Clore/annUler]: " n 0 ) (while (null (setq pt_f (getpoint "\nSpécifiez le point de départ de la polyligne: .XY de "))) (princ "\nPoint incorrect.") ) (setq val_z (ajouz)) (command "_.3dpoly" ".xy" pt_f val_z) (initget "U ANNUler _Undo UNDO") (while (and (setq pt_n (getpoint pt_f (if (< n 2) msg_f msg_n))) (/= pt_n "Close")) (if (listp pt_n) (progn (setq val_z (ajouz)) (command ".xy" pt_n val_z) (setq n (1+ n) pt_f pt_n) ) (if (zerop n) (princ "\nTous les segments sont déjà annulés.") (progn (command "_undo") (setq n (1- n) pt_f (getvar "lastpoint")) ) ) ) (if (< n 1) (initget "U ANNUler _Undo UNDO") (initget "U ANNUler Clore _Undo UNDO Close") ) ) (if (eq pt_n "Close") (command "_close") (command "") ) (setq *error* olderr) (setvar "cmdecho" 1) (princ) ) PS: Tu utilise des polices forcées dans tes Textes multiligne pour avoir des soucis avec les styles?
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité