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. Hé oui, tu m'apprends quelque chose... Si jusqu'à la version 2002 je connaissais à peu près toutes les variables de tête, ce n'est plus le cas aujourd'hui ! Beaucoup se plaignent qu 'Autocad n'offre pas beaucoup d'évolution au cours des versions, par contre aux niveaux des variables, ça a été la profusion (comme la multiplication des petits pains). En plus maintenant ces variables ont souvent des noms à rallonge qu'il est difficile à mémoriser. Donc je peux en apprendre tous les jours sur ces variables,c'est la que le mémo de Christian (Rebcao) est utile. Et là je ne parle que des variables système car j'ai abandonné de me pencher sur les variables d'environnement où il y en a une foultitude (voir setenv et getenv)
  2. Bruno m'a devancé... (sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>")))) doit être utilisé comme les grips (verbe -> action) et non dans le sens classique des commande Autocad (action -> verbe) Cette ligne de sélection en lisp te laisse le choix des objets en mode unique, fenêtre ou capture conjugés. Si tu veux l'équivalent de "effacer" "tout" en excluant les objets invisibles, tu peux utiliser l'équivalent: (sssetfirst nil (ssget "_X" '((-4 . "<NOT") (60 . 1) (-4 . "NOT>")))) En résumé, lancer la sélection puis l'action désiré (effacer, déplacer, copier, etc...)
  3. Bonjour, Étant un vieux de la vieille, je préfère l'ancienne méthode (peu connue) qui s'appuie sur le code DXF 60 qui rends les objets invisibles. A la différence de _HideObjects qui masque les objets sur la session en cours. Jouer sur le code 60 reste d'une session à l'autre. (après l'enregistrement du dessin). Malheureusement aucune commande standard ne donne accès à cette fonctionnalité très ancienne d' Autocad, obliger de recourir à la programmation. Pour ma part j'ai deux boutons associés à ces bouts de code lisp: e_off / e_on. (defun c:e_off ( / js_off n ent dxf_ent ) (princ "\nChoix des entités à inactiver: ") (setq js_off (ssget) n 0) (cond (js_off (repeat (sslength js_off) (setq ent (ssname js_off n) dxf_ent (entget ent) ) (if (not (member '(60 . 0) dxf_ent)) (entmod (append dxf_ent '((60 . 1)))) (entmod (subst '(60 . 1) '(60 . 0) dxf_ent)) ) (setq n (1+ n)) ) ) (T (princ "\nSélection vide.") ) ) (princ) ) (defun c:e_on ( / js_off n js_swap n_swap ent ent_dxf js_on nb) (setq js_off (ssget "_X" '((60 . 1))) n 0) (cond (js_off (setq js_swap (ssget "_X" '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))) n_swap 0) (cond (js_swap (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 2) (setq n_swap (1+ n_swap)) ) ) ) (repeat (sslength js_off) (setq ent (ssname js_off n)) (setq dxf_ent (entget ent)) (entmod (subst '(60 . 0) '(60 . 1) dxf_ent)) (entupd ent) (setq n (1+ n)) ) (princ "\nChoix des entités à réactiver: ") (setq js_on (ssget) n 0) (cond (js_on (repeat (sslength js_on) (if (ssmemb (ssname js_on n) js_off) (setq js_off (ssdel (ssname js_on n) js_off)) ) (setq n (1+ n)) ) (cond (js_off (setq nb 0) (repeat (sslength js_off) (setq ent (ssname js_off nb)) (setq dxf_ent (entget ent)) (if (not (member '(60 . 0) dxf_ent)) (entmod (append dxf_ent '((60 . 1)))) (entmod (subst '(60 . 1) '(60 . 0) dxf_ent)) ) (entupd ent) (setq nb (1+ nb)) ) (cond (js_swap (setq n_swap 0) (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 1) (setq n_swap (1+ n_swap)) ) ) ) ) (T (princ "\nAucune entité à réactivée!") ) ) ) (T (princ "\nSélection vide.") ) ) ) (T (princ "\nAucune entité à réactivée!") ) ) (princ) ) Avec cette méthode il est facile d'exclure les objets invisibles d'une sélection, par exemple: (sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))
  4. L'encodage de fichier texte n'est pas simple. Je pense que la proposition d'olivier est bonne mais qu'elle génère un IOO (Indicateur d'Ordre des Octets; ou BOM en anglais Byte Order Mark) On peut faire une conversion en UTF8 sans BOM en entête de fichier (Je ne sais pas faire) qui rendrait la lecture du fichier DXF sans erreur. J'ai souvent ce problème d'encodage avec des fichiers textes entre Linux et Windows, je dois jongler entre UTF8 (web et linux) et ANSI (par défaut dans Windows)
  5. Bonjour, Pour ma part j'utilise Notepad2 Ouvrir des DXF volumineux ne lui fait pas peur. L'interface est en Anglais, donc peut rebuter certain, mais pour l'encodage rien de plus simple. Bon il n'a pas eu de mise à jour depuis 2012, mais il s'installe toujours très bien sous window 10
  6. Disons qu'on t'incite fortement à l'acheter... Par défaut c'est la version "Trial" qui s'installe, donc sans l'acheter tu une boite qui s'affiche pendant 8sec au lancement qui te rappelle que c'est une version d'essai. Pour avoir la version libre tu as les instructions en cliquant sur le gros bouton bleu "supprimer": En fait il faut supprimer (ou renommer l'extension) les fichiers (généralement dans le dossier C:\Program Files\QCAD\plugins : qcaddwg.dll qcadpolygon.dll qcadproj.dll qcadproscript.dll qcadtriangulation.dll Au prochain lancement tu seras en version libre (donc plus accès aux dwg )
  7. Bonjour, Je vais parler de quelque chose de testé QCAD (mais seulement sous Linux, pas sous Window) C'est open source donc totalement gratuit. Quand je dis totalement gratuit, il faut (en tout cas sous linux) supprimer/inactiver certaines librairies, autrement tu es en version d'essai. La principale différence et que tu perds l'interface DWG en libre, tu n'as que le DXF et aussi quelques fonctionnalités (tout ce qui est marqué en bleu sur leur site: liste complète des fonctionnalités) En version d'essai j'ouvre assez fidèlement des fichiers 2D issus d'Autocad au format 2018 sans problème majeur. Donc en totalement libre tu pourrait créer du DXF que tu pourrais importer par la suite sous Autocad. Est ce que ça pourrait répondre à ton besoin? Il faut essayer...!
  8. A Olivier : Tu peux simplement ouvrir le fichier make-BD_CADASTRE.lsp et faire un chercher/remplacer de _2018 par _2013 (il y en a deux) pour être compatible avec une version inférieur à 2018. A Lecrabe : Oui j'avais bien noté ce problème de SHX d'Etalab non compatible, c'est d'ailleurs cette information récente (et toute bête) qui m'a incité à produire ce script (ou j'efface simplement les SHX). Merci de cette info bien utile qui simplifie bien les choses... Pour information j'ai lancé la procédure sur un petite machine pour voir: Un portable DELL Latitude E6410 ( Windows 10, i5 (CPU M 560 @ 2.67 Hz) avec 8 Go de Ram et carte graphique intégrée avec un MAP 2019 ) Le script à pris exactement 2h 30 à constituer la base, donc ça reste faisable sur des machines on va dire de bureautique... et le résultat s'exploite facilement par la procédure de requête en Lisp BD_CADASTRE fournie sans mettre à genoux cette petite machine. Le seul inconvénient qui reste (mais cela n'est pas inhérent à la procédure mais plutôt à Map lui même), c'est la gestion de POLYDISPLAY qui est vraiment aléatoire. Mon souhait aurait été d'avoir le remplissage sur l'Xref pour que Lisp BD_CADASTRE fonctionne pleinement car si c'est définie sur les bords il ne détecte la commune que si la souris est sur le filaire du MPolygon ET qu'une fois la commune validée cela passe en filaire et non en plein car on ne distingue plus rien. En fait Polydisplay n'est pris en compte que d'une session à une autre, vraiment pas pratique... Un petit rappel: Attention à l'alias CADASTRE défini par la procédure au cas ou vous faite plusieurs départements ou que vous changer le dossier initial de nom ou d'emplacement.
  9. Pour faire suite à ce sujet... DWG (Cadastre 2D) de 730 Mo = OK Je vous propose un lisp qui va automatiquement créer un script et l’exécuter pour mettre en place le parcellaire d'un département. Les pré-requis: Disposer d'Autocad Map bien sûr! Créer un dossier vierge de nomination au choix ainsi que l'emplacement (lecteurs en réseau possibles) Télécharger les sources de votre département, pour rappel: https://cadastre.data.gouv.fr/data/etalab-cadastre/latest/shp/departements/ Extraire les sources vers le dossier créé. Lancez AutoCAD et dans le nouveau dessin ouvert par défaut, charger (ou glissez-déposer dans la fenêtre graphique) le fichier lisp: make-BD_CADASTRE.lsp (accordez l'usage si vous avez des messages d'avertissement sur l'exécution) Et la suivant la puissance de la machine, l'importance du parcellaire le traitement du script peut varier. Au minimum une heure mais deux heures ou plus ne sont pas impossible... Donc lancer cette procédure à une pause déjeuner ou pendant la nuit (Attention à la mise en veille prolongée de window qui peut mettre le traitement en suspend) et il vaut mieux ne pas trop solliciter la machine pendant cette période. Au final un fichier gabarit nommé BD-CADASTRE.dwg sera créé. En chargeant le lisp BD_CADASTRE.lsp dans ce dessin et en exécutant la commande BD_CADASTRE, vous pourrez "balader" la souris sur le département, elle affichera le nom de la commune survolée. Lorsque celle-ci vous convient, un clic-gauche et la requête est effectuée sur cette commune. Vous pouvez répéter la commande si une autre commune vous est nécessaire. A la suite de ça vous pouvez décharger la référence extérieur et sauvegarder le résultat à autre endroit sous un autre nom. Évitez de modifier ou d'enregistrer le gabarit BD_CADASTRE utilisé. Cette partie finale peut être utilisé sur des machines sans prétention mais Autocad Map reste nécessaire. Bonne utilisation si vous en trouvez l'usage intéressant. J'ai réaliser ceci car il y a environ 4 mises à jour par an, et faire ces opérations manuellement sont fastidieuses. Après à vous de décider si vous voulez toutes les faire ou seulement une par an par exemple. Merci d'un retour éventuel, car j'ai testé sur trois départements différents et cela a fonctionné mais les tester tous... PS:Pour info j'ai essayé avec AcCoreConsole (qui est nettement plus rapide) mais si la commande MAPIMPORT est effectivement effectué, le shape est bien inséré, mais les Données d'Objet ne sont pas importées. C'est pour ça que j'ai du me retourner vers un script classique utilisant le GUI (Graphic User Interface). make-BD_CADASTRE.lsp BD_CADASTRE.lsp
  10. Bonsoir Après avoir vu ta vidéo, lorsque tu es dans dans ta boite "Performances graphiques" , que donne la page du "Journal du préparateur"? Cela peut t'aider à régler plus finement tes performance, si des options apparaissent en jaune ou pire en rouge les options actuelles ne conviennent pas et peuvent influer sur les performances graphiques.
  11. Bonjour, Je vous donne ces deux routines que j'ai pu poster sur des forum US concernant cette demande. Il faut se familiariser de l'usage de celle ci,mais une fois prise en main elles font le job. C'est peut être pas parfait, mais c'est gratuit (quoique je ne suis pas contre une rétribution). Depuis que je poste des solutions en lisp, seule UNE personne m'a offert une rétribution (sans que je lui demande quoi que ce soit), pourtant cela fait longtemps que je participe au forum. Entre le manque de simple merci, ou que les réponses ne se font que quand la proposition ne répond pas exactement à la demande, cela explique mon détachement progressif des forums en général. Sur ce, bon confinement à tous! Dim-grid est pour un carroyage directement dans l'espace objet.ViewPort2grid est pour faire un carroyage depuis une fenêtre (avec déjà une échelle fixée) dans l'espace papier et mettre en place le carroyage dans l'espace objet. Dim-Grid.lsp ViewPort2Grid.lsp
  12. voir post suivant
  13. Bonjour, Je vais mettre en partage une routine qui va vous permettre depuis un fichier CSV de mettre en place un bloc avec en attribut les données lues depuis un fichier CSV. Ce fichier CSV devra contenir au minimum la localisation du POINT à mettre en place (donc ses coordonnées) J'ai voulu cette routine le plus générique possible, donc elle doit être capable d'importer tout fichiers CSV quel que soit son contenu, du moment qu'il contient la localisation et des données arbitraires. Si le fichiers est uniformément structuré, l'import devrait bien s’effectuer. Si il y a une 1ère ligne ligne d'entête, celle ci peut servir pour générer les étiquettes d'attributs, autrement elles seront générées automatiquement avec un indice. Si par exemple vous voulez l'essayer, vous pouvez télécharger le fichier caracteristiques-2018.csv Lancer la procédure READCSV2BLK, sélectionner le fichier (patientez quelque minutes, il y a quand même 57783 lignes à lire et à implanter) Au final vous aurez vos point implantés avec les attributs correspondants aux accidents recensés en métropole et outre mer. Certain points sont mal positionnés car non renseignés en coordonnées. Essayez avec d'autre fichier en votre possession qui correspond aux critères en espérant que ça fonctionne. NB: avec l'exemple cité pour la latitude (lat) prendre l'option Y et pour la longitude (long) de prendre l'option X. Ainsi les cordonnées seront en GPS... ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun c:readCSV2BLK ( / input f_open l_read key_sep str_sep l_data l_ini count count_coor mess_att key_data x_data y_data z_data l_rmv l_var inc gab_l last_y l_str l_mes blk_scl pt) (setq input (getfiled "Selectionner un fichier CSV" "" "csv" 2) f_open (open input "r") l_read (read-line f_open) ) (close f_open) (initget "Espace Virgule Point-virgule Tabulation") (setq key_sep (getkword "\nSeparateur [Espace/Virgule/Point-virgule/Tabulation]? <Point-virgule>: ")) (cond ((eq key_sep "Espace") (setq str_sep " ")) ((eq key_sep "Virgule") (setq str_sep ",")) ((eq key_sep "Tabulation") (setq str_sep "\t")) (T (setq str_sep ";")) ) (setq l_data (str2lst (vl-string-right-trim str_sep l_read) str_sep) count 0 count_coor 0 l_ini "Donnée Xlocation Ylocation Zlocation Ignorer") (foreach el l_data (princ " ")(princ el)) (initget "Oui Non") (if (eq (getkword "\nCette 1ère ligne est elle une ligne d'entête qui peut constituer les étiquettes d'attribut [Oui/Non]? <Non>: ") "Oui") (setq mess_att T) (setq mess_att nil)) (foreach el l_data (initget 1 l_ini) (setq key_data (getkword (strcat "\nL'élément " el " est [" (vl-list->string (subst 47 32 (vl-string->list l_ini))) "]?: "))) (cond ((eq key_data "Xlocation") (setq x_data count_coor l_ini (vl-string-subst "" (strcat " " key_data) l_ini) l_rmv (cons (if l_rmv (+ count (length l_rmv)) count) l_rmv) count (1- count))) ((eq key_data "Ylocation") (setq y_data count_coor l_ini (vl-string-subst "" (strcat " " key_data) l_ini) l_rmv (cons (if l_rmv (+ count (length l_rmv)) count) l_rmv) count (1- count))) ((eq key_data "Zlocation") (setq z_data count_coor l_ini (vl-string-subst "" (strcat " " key_data) l_ini) l_rmv (cons (if l_rmv (+ count (length l_rmv)) count) l_rmv) count (1- count))) ((eq key_data "Ignorer") (setq l_rmv (cons (if l_rmv (+ count (length l_rmv)) count) l_rmv) count (1- count))) (T (if mess_att (progn (set (read el) count) (setq l_var (cons (read el) l_var) l_str (cons el l_str)) ) (progn (set (read (strcat "DATA" (itoa count))) count) (setq l_var (cons (read (strcat "DATA" (itoa count))) l_var)) ) ) ) ) (setq count (1+ count) count_coor (1+ count_coor)) ) (cond ((and (numberp x_data) (numberp y_data)) (setq count 0 inc (/ 5.0 3.0) gab_l (length l_var)) (mapcar '(lambda (x y / ) (if (not (tblsearch "LAYER" x)) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 x) '(70 . 0) (cons 62 y) '(6 . "Continuous") '(290 . 1) '(370 . -3) ) ) ) ) '("CSV2BLK" "CSV2BLK_x-y" "CSV2BLK_z" "CSV2BLK_ATT") '(1 3 3 4) ) (if (not (tblsearch "STYLE" "$CSV2BLK")) (entmake '( (0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "$CSV2BLK") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "arial.ttf") (4 . "") ) ) ) (if (not (tblsearch "BLOCK" "CSV2BLK")) (progn (entmake '((0 . "BLOCK") (2 . "CSV2BLK") (70 . 2) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0)) ) (setq last_y 0.0 count -1 l_str (if mess_att l_str nil) l_mes nil) (mapcar '(lambda (tag mes / ) (entmake (list '(0 . "ATTDEF") '(67 . 0) '(8 . "0") '(62 . 0) '(6 . "ByBlock") '(370 . -2) (cons 10 (list 1.0 last_y 0.0)) '(40 . 1.0) '(1 . "") '(50 . 0.0) '(41 . 1.0) '(51 . 0.0) '(7 . "$CSV2BLK") '(210 0.0 0.0 1.0) (cons 3 mes) (cons 2 tag) '(70 . 0) ) ) (setq last_y (+ last_y (- (* inc 2)))) ) (append (list "ID-X" "ID-Y" "ID-Z") (reverse (if mess_att l_str (repeat (length l_var) (setq l_str (cons (strcat "DATA" (itoa (setq count (1+ count)))) l_str)))))) (append (list "Coordinate X: " "Coordinate Y: " "Coordinate Z: ") (repeat (length l_var) (setq l_mes (cons "Data: " l_mes)))) ) (entmake '( (0 . "POINT") (67 . 0) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) ) ) (entmake '((0 . "ENDBLK") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2))) ) ) (initget 2) (if (not (setq blk_scl (getreal "\nEchelle du bloc? <1>: "))) (setq blk_scl 1.0)) (setq f_open (open input "r")) (if mess_att (read-line f_open)) (while (setq l_read (read-line f_open)) (setq l_data (str2lst (vl-string-right-trim str_sep l_read) str_sep) pt (list (atof (nth x_data l_data)) (atof (nth y_data l_data)) (if z_data (atof (nth z_data l_data)) 0.0)) ) (if l_rmv (foreach el l_rmv (setq l_data ((lambda (n lst / i rtn) (reverse (progn (setq i -1) (foreach x lst (if (/= n (setq i (1+ i))) (setq rtn (cons x rtn)) ) ) rtn ) ) ) el l_data ) ) ) ) (setq count 0 l_var nil ) (repeat gab_l (set (read (strcat "DATA" (itoa count))) count) (setq l_var (cons (read (strcat "DATA" (itoa count))) l_var) count (1+ count) ) ) (foreach n l_var (set n (nth (eval n) l_data)) ) (entmake (append '( (0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "CSV2BLK") (100 . "AcDbBlockReference") (66 . 1) (2 . "CSV2BLK") ) (list (cons 41 (* 1.0 blk_scl)) (cons 42 (* 1.0 blk_scl)) (cons 43 (* 1.0 blk_scl)) ) '( (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) ) (list (cons 10 pt) '(210 0.0 0.0 1.0)) ) ) (setq last_y (+ (cadr pt) (* blk_scl (+ inc))) count 0 l_str (if mess_att l_str nil) l_mes nil) (mapcar '(lambda (val tag lay / ) (entmake (append (list '(0 . "ATTRIB") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(8 . "CSV2BLK_x-y") '(100 . "AcDbText") ) (list (cons 8 lay) (cons 10 (list (+ (car pt) (* blk_scl 1.0)) (setq last_y (+ last_y (* blk_scl (- inc)))) (caddr pt))) (cons 1 val) (cons 40 (* 1.0 blk_scl)) ) (list '(50 . 0.0) '(41 . 1.0) '(51 . 0.0) '(7 . "$CSV2BLK") '(71 . 0) '(72 . 0) '(11 0.0 0.0 0.0) '(210 0.0 0.0 1.0) '(100 . "AcDbAttribute") ) (list (cons 2 tag)) (list '(70 . 0) '(73 . 0) '(74 . 0) ) ) ) ) (append (list (rtos (car pt) 2) (rtos (cadr pt) 2) (rtos (caddr pt) 2)) (mapcar 'eval (reverse l_var))) (append (list "ID-X" "ID-Y" "ID-Z") (reverse (if mess_att l_str (repeat (length l_var) (setq l_str (cons (strcat "DATA" (itoa (setq count (1+ count)))) l_str)))))) (append (list "CSV2BLK_x-y" "CSV2BLK_x-y" "CSV2BLK_z") (repeat (length l_var) (setq l_mes (cons "CSV2BLK_ATT" l_mes)))) ) (entmake '((0 . "SEQEND") (8 . "CSV2BLK") (62 . 0) (6 . "ByBlock") (370 . -2))) ) (close f_open) ) (T (princ "\nPas de coordonnées intoduites, implantation impossible!")) ) (mapcar '(lambda (x) (eval (set x nil))) l_var) (prin1) )
  14. Bonjour, Je ne sais si l'influence de cette variable avec les versions actuelles a encore de l'importance, mais essayes de changer la valeur de la variable (non documentée) QAFLAGS. De souvenir elle avait de l'influence sur la décomposition d'objet et sur les scripts. Avec google tu doit pouvoir retrouver des discussions à ce sujet.
  15. Un petit souci avec tes deux lisp (enfin pour moi sous une version 2019) Dans les deux routines les (command) sont bien internationalisés, SAUF pour SCU (en début et fin de lisp) En effet tu as (command "scu" "ge") et "ge" n'est pas une bonne option qui est "g" en français, mais qui entraine d'autres options...D'ailleurs la vraie option proposée "gé" ne fonctionne pas (bug?) Donc je propose de changer dans tes 2 lisp: (command "scu" "ge") en (command "_.ucs" "_w") et (command "scu" "p") en (command "_.ucs" "_p") Refais un essai avec cette correction et dis nous si ça va mieux!
  16. J'ai pas testé le lisp, mais je vois l'utilisation de : (rtos total) Il faut savoir que la fonction (rtos) accepte le mode unité utilisé ET la précision par exemple (rtos total 2 4) -> 2 pour le mode décimal et 4 pour le nombre de décimal désiré. Si le mode et la précision ne sont pas renseigné, la fonction utilise les valeurs qui sont initialisé dans la commande DDUNITS pour les longueurs. Donc si ta boite de dialogue affiche 0 pour la précision pour les longueurs les résultats seront arrondis donc 0.41 te renverra 0. Change la valeur de précision dans DDUNITS avant d'utiliser le lisp, ou fixe la variable dans le lisp (setvar "LUPREC" 2)
  17. [effacé double envoi]
  18. bonuscad

    Retraite J1

    Je suis sûr que tu vas faire ton jardin avec Autocad Map; afin de faire des requêtes pour savoir quand ramasser tes choux , où disposer ton crottin, le rendement en carotte de ton carré situé au sud de ton jardin, quand arroser tes tomates. Il faudrait qu'on se cotise pour te fournir une station météo pour parfaire l'équipement nécessaire au 1er retraité "IN" dans la gestion d'un jardin. Sur ce, à la revoyure et bonne retraite, pour ma part j'en suis à J-268
  19. Bonjour, Le seul que je connaisse en open source et que j'ai testé est QCAD Pour ma part je ne l'ai testé que sous Linux en 64 bit, bien qu'il soit aussi utilisable avec Windows et Mac d'après leur dire. L'installation par défaut se fait en version d'essai. En version d'essai vous pouvez ouvrir directement des fichiers DWG en version R2018 issu d'Autocad. Pour ma part j'ai ouvert des fichiers issus d'Autocad Map, seul les MPOLYGON ne sont pas reconnus, tous le reste est graphiquement parfaitement lu. Mes fichiers sont essentiellement 2D. Si tu veux être en open source, il faut: soit compiler avec les sources, soit (ce que j'ai fait sous Linux) virer des librairies après installation de la version d'essai. En open source, tu ne peux plus ouvrir et produire du DWG, tu ne manipule plus que du DXF, mais tu es en licence libre et gratuite. Pour le peu que j'ai pu testé, il me semble fiable mais faut se cantonner au DXF et à la 2D. C'est le prix de l'open source, c'est un choix à faire. Sa reste basique, mais suivant les besoins ça reste tout à fait satisfaisant à mon avis. En open source il est/sera difficile de trouver mieux, les logiciels de DAO sont les plus rares dans le monde du libre.
  20. bonuscad

    un carroyage

    Hello Patrice, En ce moment c'est plutôt Picon-bière, comme ça je fais ma prévention contre le COVID19 vu que la chloroquine est interdite, je remplace par la quinine. Je dis bien en prévention, je me soignerais pas avec; vue la dose homéopathique qu'il y a dans le picon! Et si j’exagère avec le picon bière, ce sera pour me soigner de la connerie humaine. Et pis retraite début été 2021
  21. bonuscad

    un carroyage

    à la ligne 54 où tu as: l_scale '(1.0 1.25 2.0 2.5 5.0 7.5) tu la passe à: l_scale '(1.0 1.25 1.5 2.0 2.5 4.0 5.0 7.5) C'est la liste unitaire des échelles, donc quand tu parle de 15000, c'est la même que 150 (ou 15 ou 1.5) En appuyant sur "+", dès que tu arrive à la fin de la liste (un multiple de 7.5) , tu retourne au début de la liste en incrémentant avec un facteur de 10 et avec "-" avec un facteur de 0.1 Le code propose une échelle qui est calculée en conséquence d'un A4 suivant ton hauteur de vue actuelle (variable "VIEWSIZE"), donc : CONSEIL, ne pas trop s'écarter de l'échelle proposée au départ sous peine d'avoir un quadrillage très serré ou à l'inverse non visible car trop écarté. Passer par exemple de 7500000 à 7500 va donner un quadrillage très serré. Le mieux est de lancer la routine lorsque la partie que tu désire quadriller est visible entièrement à l'écran et de rester dans l'ordre de grandeur proposée 10, 100, 1000, 10000 etc ...... Ma liste initiale était basée sur celle qu'on trouve sur un kutsch standard, mais rien n'empêche d'utiliser des échelles non usuelles, du 300, 700 et pourquoi pas du 3.333
  22. bonuscad

    un carroyage

    Pour faire un carroyage, j'avais proposé ceci. Cela fait un carroyage de ton Système Général dans lequel ton dessin est constitué ET référencé. Tu ne peux pas obtenir un carroyage en RGF93 si ton dessin est dans un autre système, il faut être cohérent. Néanmoins ce code te permet de faire un carroyage très rapidement de ton système utilisé. Mais comme Didier un carroyage à l'époque du numérique n'est guère utile, qui va reporter des points en coordonnées avec un kutsch sur du papier? L'utilité originale du carroyage était surtout cela...! cependant cela peut quand même informer du système utilisé dans le dessin pour celui qui consulte seulement le rendu papier. (vl-load-com) (defun des_vec (lst col / lst_sg) (setq lst_sg (list (cadr lst) (car lst))) (setq lst (cdr lst)) (while lst (if (cadr lst) (setq lst_sg (cons (cadr lst) (cons (car lst) lst_sg))) (setq lst_sg (cons (last lst_sg) (cons (car lst) lst_sg))) ) (setq lst (cdr lst)) ) (setq lst_sg (cons col lst_sg)) (grvecs lst_sg) ) (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (caddr lst) 0.0)) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:DIM-GRID ( / unit_draw AcDoc Space UCS save_ucs WCS dx_u hview old_snapang pt_ins dx dy pt_tmp ang l_scale format_scale coeff key pt_key s_ang nw_style f_pat nw_pl ech htx nw_pl_out nw_pl_in hatch_out hatch lst_pt str ori_txt nw_txt) (if (or (eq (getvar "USERS5") "") (not (eq (substr (getvar "USERS5") 1 2) "qz"))) (setvar "USERS5" (strcat "qz" (itoa (setq unit_draw 1000)))) (setq unit_draw (atoi (substr (getvar "USERS5") 3))) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-StartUndoMark AcDoc) (setq Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) UCS (vla-get-UserCoordinateSystems AcDoc) save_ucs (vla-add UCS (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point (getvar "UCSXDIR")) (vlax-3d-point (getvar "UCSYDIR")) "CURRENT_UCS" ) ) (vla-put-Origin save_ucs (vlax-3d-point (getvar "UCSORG"))) (setq WCS (vla-add UCS (vlax-3d-Point '(0.0 0.0 0.0)) (vlax-3d-Point '(1.0 0.0 0.0)) (vlax-3d-Point '(0.0 1.0 0.0)) "TEMP_WCS")) (vla-put-activeUCS AcDoc WCS) (if (not dx_u) (setq dx_u 210.0)) (setq hview (getvar "VIEWSIZE") old_snapang (getvar "SNAPANG") pt_ins (list (- (car (getvar "VIEWCTR")) (* hview 0.5)) (- (cadr (getvar "VIEWCTR")) (* hview 0.5))) dx dx_u dy (* dx_u (sqrt 2)) pt_tmp pt_ins ang (getvar "SNAPANG") l_scale '(1.0 1.25 2.0 2.5 5.0 7.5) format_scale (car l_scale) coeff 1.0 ) (if (> (fix (/ hview dy)) 3) (while (> (fix (/ hview dy)) 3) (foreach value l_scale (if (> (fix (/ hview dy)) 3) (setq format_scale value dx (* dx_u format_scale) dy (* dx_u (sqrt 2) format_scale)) ) ) (if (> (fix (/ hview dy)) 3) (setq coeff (* coeff 10.0) l_scale (mapcar '(lambda (x) (* x coeff)) l_scale) format_scale (car l_scale) ) ) ) ) (if (< (fix (/ hview dy)) 1) (while (< (fix (/ hview dy)) 1) (foreach value (reverse l_scale) (if (< (fix (/ hview dy)) 1) (setq format_scale value dx (* dx_u format_scale) dy (* dx_u (sqrt 2) format_scale)) ) ) (if (< (fix (/ hview dy)) 1) (setq coeff (* coeff 0.1) l_scale (mapcar '(lambda (x) (* x coeff)) l_scale) format_scale (last l_scale) ) ) ) ) (princ (strcat "\nSpecify up rigth corner or: [P] for new Position of down left corner,[R] for make Rotate, [+/-] change scale <" (rtos (* unit_draw format_scale) 2 3) ">: ")) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq pt_key (cadr key)) (redraw) (setq dx (+ (* (- (car pt_key) (car pt_ins)) (cos ang)) (* (- (cadr pt_key) (cadr pt_ins)) (sin ang))) dy (- (* (- (cadr pt_key) (cadr pt_ins)) (cos ang)) (* (- (car pt_key) (car pt_ins)) (sin ang))) ) (des_vec (list (list (car pt_ins) (cadr pt_ins)) (list (+ (car pt_ins) (* dx (cos ang))) (+ (cadr pt_ins) (* dx (sin ang)))) (setvar "LASTPOINT" (list (+ (car pt_ins) (- (* dx (cos ang)) (* dy (sin ang)))) (+ (cadr pt_ins) (+ (* dy (cos ang)) (* dx (sin ang)))) ) ) (list (- (car pt_ins) (* dy (sin ang))) (+ (cadr pt_ins) (* dy (cos ang)))) ) 3 ) ) ((or (eq (cadr key) 114) (eq (cadr key) 82)) (initget 0) (setq s_ang (getorient pt_ins (strcat "\nNew angle<" (angtos (getvar "SNAPANG")) ">: " ) ) ) (if (not s_ang) (setq s_ang ang)) (if (and (> s_ang (/ pi 2)) (<= s_ang (/ (* 3 pi) 2))) (setq ang (+ s_ang pi)) (setq ang s_ang) ) (setvar "SNAPANG" ang) (princ (strcat "\nSpecify up rigth corner or: [P] for new Position of down left corner,[R] for make Rotate, [+/-] change scale <" (rtos (* unit_draw format_scale) 2 3) ">: ")) ) ((or (eq (cadr key) 112) (eq (cadr key) 80)) (initget 9) (setq pt_ins (getpoint "\nSpecify down left corner: ")) (setq pt_ins (list (car pt_ins) (cadr pt_ins))) (princ (strcat "\nSpecify up rigth corner or: [P] for new Position of down left corner,[R] for make Rotate, [+/-] change scale <" (rtos (* unit_draw format_scale) 2 3) ">: ")) ) ((eq (cadr key) 43) (setq format_scale (cadr (member format_scale l_scale))) (if (not format_scale) (setq format_scale (car (setq l_scale (mapcar '(lambda (x) (* x 10.0)) l_scale))))) (setq dx (* dx_u format_scale) dy (* dx_u (sqrt 2) format_scale)) (princ (strcat "\nSpecify up rigth corner or: [P] for new Position of down left corner,[R] for make Rotate, [+/-] change scale <" (rtos (* unit_draw format_scale) 2 3) ">: ")) ) ((eq (cadr key) 45) (setq format_scale (cadr (member format_scale (reverse l_scale)))) (if (not format_scale) (setq format_scale (last (setq l_scale (mapcar '(lambda (x) (* x 0.1)) l_scale))))) (setq dx (* dx_u format_scale) dy (* dx_u (sqrt 2) format_scale)) (princ (strcat "\nSpecify up rigth corner or: [P] for new Position of down left corner,[R] for make Rotate, [+/-] change scale <" (rtos (* unit_draw format_scale) 2 3) ">: ")) ) ) ) (princ "\n") (redraw) (if (not (tblsearch "STYLE" "$DIM-GRID")) (progn (setq nw_style (vla-add (vla-get-textstyles AcDoc) "$DIM-GRID")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "SIMPLEX.SHX" 0.0 0.0 1.0 0.0) ) ) ) (if (not (tblsearch "LAYER" "DIM-GRID")) (vlax-put (vla-add (vla-get-layers AcDoc) "DIM-GRID") 'color 7) ) (if (not (findfile "QUADISO.pat")) (progn (setq f_pat (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\QUADISO.pat") "w")) (write-line "*QUADISO,Quadrillage lambert" f_pat) (write-line "0, -.015,0, 0,1, .03,-.97" f_pat) (write-line "90, 0,-.015, 0,1, .03,-.97" f_pat) (close f_pat) ) ) (if (not (findfile "REPQUADISO.pat")) (progn (setq f_pat (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\REPQUADISO.pat") "w")) (write-line "*REPQUADISO,Repere du quadrillage lambert" f_pat) (write-line "0, 0,0, 0,1" f_pat) (write-line "90, 0,0, 0,1" f_pat) (close f_pat) ) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (append pt_ins (polar pt_ins (+ (getvar "SNAPANG") (* pi 0.5)) (* (distance pt_ins (getvar "LASTPOINT")) (sin (- (angle pt_ins (getvar "LASTPOINT")) (getvar "SNAPANG"))))) (list (car (getvar "LASTPOINT")) (cadr (getvar "LASTPOINT"))) (polar pt_ins (getvar "SNAPANG") (* (distance pt_ins (getvar "LASTPOINT")) (cos (- (angle pt_ins (getvar "LASTPOINT")) (getvar "SNAPANG"))))) ) ) ech (* unit_draw format_scale) htx (/ ech 500.0) ) (vla-put-Closed nw_pl 1) (vla-put-layer nw_pl "DIM-GRID") (vla-Offset nw_pl (* htx 2.5)) (setq nw_pl_out (vlax-ename->vla-object (entlast))) (vla-Offset nw_pl (+ (* htx 2.5) (* htx 10.0))) (setq nw_pl_in (vlax-ename->vla-object (entlast))) (setvar "HPORIGINMODE" 0) (setvar "HPORIGIN" '(0.0 0.0)) (setq hatch_out (vla-AddHatch Space acHatchPatternTypeCustomDefined "REPQUADISO" :vlax-True)) (vlax-invoke hatch_out 'AppendOuterLoop (list nw_pl)) (vlax-invoke hatch_out 'AppendInnerLoop (list nw_pl_out)) (vla-put-patternscale hatch_out (/ ech 10.0)) (vla-put-patternangle hatch_out 0.0) (vla-put-layer hatch_out "DIM-GRID") (vla-evaluate hatch_out) (setq hatch (vla-AddHatch Space acHatchPatternTypeCustomDefined "QUADISO" :vlax-True)) (vlax-invoke hatch 'AppendOuterLoop (list nw_pl_in)) (vla-put-patternscale hatch (/ ech 10.0)) (vla-put-patternangle hatch 0.0) (vla-put-layer hatch "DIM-GRID") (vla-evaluate hatch) (setq lst_pt (l-coor2l-pt (vlax-invoke hatch_out 'IntersectWith nw_pl_out acExtendThisEntity ) T ) ) (foreach el lst_pt (cond ((or (equal (rem (car el) (/ ech 10.0)) (/ ech 10.0) 1E-8) (equal (rem (car el) (/ ech 10.0)) 0.0 1E-8)) (setq str (strcat " " (rtos (car el) 2 0) " ") ori_txt (* pi 0.5)) ) ((or (equal (rem (cadr el) (/ ech 10.0)) (/ ech 10.0) 1E-8) (equal (rem (cadr el) (/ ech 10.0)) 0.0 1E-8)) (setq str (strcat " " (rtos (cadr el) 2 0) " ") ori_txt 0.0) ) (T (setq str nil ori_txt nil)) ) (cond ((and el str ori_txt) (setq nw_txt (vla-AddText Space str (vlax-3d-point el) htx)) (vla-put-layer nw_txt "DIM-GRID") (vla-put-StyleName nw_txt "$DIM-GRID") (vla-put-Alignment nw_txt acAlignmentMiddleLeft) (vla-put-Rotation nw_txt ori_txt) (vla-put-TextAlignmentPoint nw_txt (vlax-3d-point el)) (if (vlax-invoke nw_pl 'IntersectWith nw_txt acExtendThisEntity) (vla-put-Alignment nw_txt acAlignmentMiddleRight) ) ) ) ) (setq pt_ins (polar pt_ins (+ (* pi 0.25) (getvar "SNAPANG")) (* htx 10))) (setq nw_txt (vla-AddText Space (strcat " Scale 1/" (rtos ech 2 0)) (vlax-3d-point pt_ins) (* 2 htx))) (vla-put-layer nw_txt "DIM-GRID") (vla-put-StyleName nw_txt "$DIM-GRID") (vla-put-Alignment nw_txt acAlignmentMiddleLeft) (vla-put-Rotation nw_txt (getvar "SNAPANG")) (vla-put-TextAlignmentPoint nw_txt (vlax-3d-point pt_ins)) (and save_ucs (vla-put-activeUCS AcDoc save_ucs)) (and WCS (vla-delete WCS) (setq WCS nil)) (vla-EndUndoMark AcDoc) (setvar "SNAPANG" old_snapang) (prin1) )
  23. On peut le faire directement avec un champ sans passer par un bloc. Bizarrement en mode manuel on ne peut pas utiliser un facteur de conversion, par contre en codant le champ comme ici, on peut?!?!, encore un drôle comportement d'autocad (vl-load-com) (defun make_field (pt# / obj) (vlax-put (vla-AddPoint Space (vlax-3d-point (trans pt# 1 0))) 'layer "Id-Point") (setq obj (entlast)) (mapcar '(lambda (lx) (apply '(lambda (ins_point value_field att_point txt_height dwg_dir name_layer txt_rot / nw_obj) (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans ins_point 1 0)) 0.0 (strcat "{\\fArial Narrow|b0|i0|c0|p34;" "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) value_field "}" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'Layer 'Rotation) (list att_point txt_height dwg_dir ins_point name_layer txt_rot) ) ) lx ) ) (list (list (mapcar '+ (trans pt# 1 0) (list (getvar "TEXTSIZE") (* (getvar "TEXTSIZE") 0.5) 0.0)) ">%).Coordinates \\f \"%lu2%pt1%pr3%ps[X=,]%ct8[0.001]\">%" 7 (getvar "TEXTSIZE") 5 "Id-XY" rtx ) (list (mapcar '+ (trans pt# 1 0) (list (getvar "TEXTSIZE") (- (* (getvar "TEXTSIZE") 0.5)) 0.0)) ">%).Coordinates \\f \"%lu2%pt2%pr3%ps[Y=,]%ct8[0.001]\">%" 1 (getvar "TEXTSIZE") 5 "Id-XY" rtx ) (list (mapcar '+ (trans pt# 1 0) (list (- (getvar "TEXTSIZE")) 0.0 0.0)) ">%).Coordinates \\f \"%lu2%pt4%pr3%ps[Z=,]%ct8[0.001]\">%" 6 (getvar "TEXTSIZE") 5 "Id-Z" rtx ) ) ) ) (defun c:point2xyz_field ( / htx rtx AcDoc Space ncol pt) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (if (not (setq rtx (getorient (getvar "VIEWCTR") "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ncol '(96 174 2) ) (foreach n '("Id-XY" "Id-Z" "Id-Point") (cond ((null (tblsearch "LAYER" n)) (vlax-put (vla-add (vla-get-layers AcDoc) n) 'color (car ncol)) ) ) (setq ncol (cdr ncol)) ) (while (setq pt (getpoint "\nPoint à côter?: ")) (make_field pt) ) (prin1) )
  24. Salut Patrice, En fait cela fait appel à 2 routines, utiliser celle ci seule ne fera pas grand chose. Je ne retrouve pas sur CadXp les publications que j'avais pu faire (trop ancien?) Mais si tu veux, consulte cette discussion toute récente, les 2 routines similaires y sont, je pense que tu comprendra le principe... En résumé: au lieu d'utiliser un bloc avec des attributs, tu utilises des données étendues pour stocker des informations sur un objet.
  25. Bonjour, Comme je reconnais quelque traits de ma patte d'écriture de ce lisp (quelque peu modifié/adapté par un autre que moi), il m'es assez facile de te proposer la modif... Donc rapidement, ça donnerais ceci (defun c:tabsurf ( / js js_sel n obj vla_obj oldim oldlay AcDoc Space nw_style ins_pt_cell h_t w_c ename_cell n_row n_column ename data_sort) (setq js (ssget '((0 . "LWPOLYLINE")))) (setq js_sel (ssadd)) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (if (vlax-ldata-get (setq vla_obj (vlax-ename->vla-object obj)) "SURF2") (ssadd obj js_sel) ) ) (cond (js_sel (setq oldim (getvar "dimzin") oldlay (getvar "clayer") ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Tableaux-Métrés")) (vla-add (vla-get-layers AcDoc) "Tableaux-Métrés") ) ) (cond ((null (tblsearch "STYLE" "TEXTE")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "TEXTE")) (vlax-put nw_style 'fontfile "romand.shx") (vlax-put nw_style 'height 0.0) (vlax-put nw_style 'obliqueangle (/ (* 15.0 pi) 180)) (vlax-put nw_style 'width 1.0) (vlax-put nw_style 'textgenerationflag 0.0) ) ) (setvar "dimzin" 0) (setvar "clayer" "Tableaux-Métrés") (initget 9) (setq ins_pt_cell (getpoint "\nPoint d'insertion haut gauche du tableau: ")) (initget 6) (setq h_t (getdist ins_pt_cell (strcat "\nHauteur du texte <" (rtos (getvar "textsize")) ">: "))) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (initget 7) (setq w_c (getdist ins_pt_cell "\nLargeur des cellules: ")) (setq ename_cell (vla-addTable Space (vlax-3d-point (trans ins_pt_cell 1 0)) (+ 3 (sslength js_sel)) 2 (+ h_t (* h_t 0.25)) w_c)) (setq n_row 2 n_column -1) (vla-SetText ename_cell 0 0 "SURFACES") (vla-SetCellTextStyle ename_cell 0 0 "TEXTE") (vla-SetCellTextHeight ename_cell 0 0 (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell 0 0 5) (foreach string '("LOCAUX" "SUPERFICIES (m²)") (vla-SetText ename_cell 1 (setq n_column (1+ n_column)) string) (vla-SetCellTextStyle ename_cell 1 n_column "TEXTE") (vla-SetCellTextHeight ename_cell 1 n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell 1 n_column 5) ) (setq n_column -1) (repeat (setq n (sslength js_sel)) (setq ename (vlax-ename->vla-object (ssname js_sel (setq n (1- n))))) (if (vlax-property-available-p ename 'Area) (setq data_sort (cons (cons (vlax-ldata-get ename "SURF2") (itoa (vla-get-ObjectID ename))) data_sort)) ) ) (foreach el (vl-sort data_sort '(lambda (e1 e2) (< (car e1) (car e2)))) (vla-SetText ename_cell n_row (setq n_column (1+ n_column)) (car el)) (vla-SetCellTextStyle ename_cell n_row n_column "TEXTE") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row n_column 6) (vla-SetText ename_cell n_row (setq n_column (1+ n_column)) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (cdr el) ">%).Area \\f \"%lu2%pr2%ps>%") ) (vla-SetCellTextStyle ename_cell n_row n_column "TEXTE") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row n_column 6) (setq n_row (1+ n_row) n_column -1) ) (setq n_column 1) (vla-SetText ename_cell n_row n_column (strcat "Total= " "%<\\AcExpr (Sum(B3:B" (itoa n_row) ")) \\f \"%lu2%pr1\">%") ) (vla-SetCellTextStyle ename_cell n_row (1- (length lst_idcolumn)) "TEXTE") (vla-SetCellTextHeight ename_cell n_row (1- (length lst_idcolumn)) (vlax-make-variant h_t 5)) (vla-SetCellAlignment ename_cell n_row (1- (length lst_idcolumn)) 6) (vlax-release-object ename_cell) (vlax-release-object Space) (setvar "dimzin" oldim) (setvar "clayer" oldlay) ) (T (princ "\nSélection vide!") ) ) )
×
×
  • 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é