Maxime10 Posté(e) le 28 novembre Posté(e) le 28 novembre Bonjour à toutes et tous, Dans un premier temps j'ignore si j'ai bien posté dans la bonne section du forum, ma question/demande concerne une commande liée à COVADIS mais également une adaptation de cette dernière. Dans le cadre de mon travail je réalise très régulièrement des plans avec affichage intérieure de surfaces pièce par pièce. Pour réaliser cette dernière tâche j'utilise la commande COVCOTSURF (Covadis 2D->Cotations/Divisions->Cotation de surface) Deux options s'offrent alors à moi, un positionnement automatique au "centre" des polylignes fermées (attention aux pièces entrée + dégagement) c'est ce que j'utilise depuis toujours, ou autre choix un positionnement manuel de chaque surface à l'emplacement souhaité (lent et fastidieux). Avec l'option cotation automatique j'obtiens le résultat ci-dessous. A noter que le texte de surface viendra recouvrir le texte d'usage de la pièce et c'est justement ce que je souhaite éviter (texte d'usage se situe toujours au milieu de la pièce, on a essayé de le mettre en coin on avait ensuite un soucis avec les cotations automatiques). Et ce que je souhaite si possible obtenir en finalité ci-dessous ? A savoir le positionnement du texte par exemple dans le coin le plus inférieur, à l'intérieur et sur la gauche, de chaque polyligne fermée et sélectionnée avec l'outil. Question: Est-ce seulement faisable ? Vous remerciant pour votre temps et votre analyse. Maxime
didier Posté(e) le 28 novembre Posté(e) le 28 novembre Bonjour @Maxime10 Modifier une commande COVADIS relève de la gageure, je ne m'y attèlerai assurément pas. Par contre, cocher la case "Confirmer la position de chaque surface" me semble un bon palliatif, non ? Il est possible d'écrire un LSP qui fasse le job, ça existe d'ores et déjà d'ailleurs, mais pas "reprendre" du Covadis. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre Bonjour @didier, C'est bien compris pour la difficulté de la modification de la commande en elle-même. Cocher la case "confirmer la position de chaque surface'' est envisageable sur de petits projets mais pas sur des bâtiments comportant un nombre très important de pièces, ce qui s'avèrerait très fastidieux. J'utilise quelques LISP pour d'autres tâches et je reste donc ouvert à cette éventualité. Je suis à peu près capable d'en modifier (j'ai adapté le LISP LW_DIM à mes besoins par exemple), mais incapable d'en créer ... je vais fouiner pour en trouver un approchant le besoin dans ce cas. Merci pour votre retour. Maxime
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre Pour faire suite, Je dois reconnaître que le premier avantage de chercher par soi-même est de pouvoir critiquer sa façon de travailler. Plutôt que de vouloir afficher la surface en bas à gauche des polylignes fermées, je reconnais pouvoir également me satisfaire d'exporter la surface dans un tableur afin de la gérer directement depuis ce dernier. A ce titre je suis tombé sur le LISP "SURFAREA" de Luna sur ce post: Néanmoins le LISP a dû évoluer au fil de la discussion pour se complexifier par rapport à la demande d'origine et je ne remet pas la main dessus. Cela m'aura au moins permis de tomber sur la fameuse pépite du raisonnement: Est-il logique pour un géomètre de préférer la somme des arrondis des différentes pièces plutôt que la somme arrondie des surfaces brutes, merci pour ce moment ! Enfin, je serai intéressé @lecrabe (si tu passes par ici ^^) si tu pouvais me transmettre le LISP "LWPOL_3_TEXT_to_Table_0" et correspondant à l'image je pense en effet pouvoir l'associer comme tu le conseilles au LISP "EPD" pour un export en .csv au besoin. Maxime
didier Posté(e) le 28 novembre Posté(e) le 28 novembre Bonjour @Maxime10 Dans un premier temps, je réponds à la demande initiale. Un mini fichier LSP permet de faire ça : Il va falloir l'améliorer en cas de géométrie s'éloignant du rectangle, je pense à un point proche du centre géométrique, mais en tenant compte de l'écriture du nom de pièce. Pour ce faire, ce serait bien d'avoir un exemple de fichier tel que vous les faites. Pas une image, un DWG pour avoir les styles de texte, les unités… Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre @didier, Merci pour cette réactivité ça semble correspondre en grande partie au besoin ! Comme demandé, ci-joint un dwg type de ce que j'obtiens actuellement. A noter que le texte des surfaces généré via la commande COVCOTSURF est très gros afin de "faciliter" leur lecture pour mes collègues reprenant derrière moi. Mais étant situé sur le texte des pièces .. c'est pas fou. On peut considérer diviser la hauteur du texte par deux lorsqu'il sera mieux placé au sein de la polyligne. J'ai également vu que la police utilisée, century gothic, risque de ne pas aider ? elle génère dans l'index une codification étrange comme \pxqc;Cuisine pour Cuisine, j'ignore cependant le pourquoi du comment et si c'est normal. Merci par avance, Maxime CadXp_Surfaces.dwg
lecrabe Posté(e) le 28 novembre Posté(e) le 28 novembre Hello @Maxime10 SVP tu testes le Lisp "NUMBER_TYPE_AREA_2" ... SVP BIEN parametrer les 4 variables ci-dessous ! (setq _numLay "TEXT_NUMBER") (setq _typeLay "TEXT_TYPE") (setq _areaLay "TEXT_AREA") (setq _polyLay "ROOM_POLYGON") C une version US/English mais tu devrais "t en sortir" !? ET tu me dis !? Bye, lecrabe PS: reponse en 14 mn, le Support est il EFFICACE ?? ;; ;; Routine par doaiena pour Patrice B. ;; ;; Routine: NUMBER_TYPE_AREA_2_Table by doaiena ;; ;; ---- Re: Lisp to Get Table with Room : Number + Type + Area ---- ;; ;; Here is a quick draft. I didn't have time to test it a lot, ;; so try it and tell me if it's working as expected. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ATTENTION : DIMZIN = 0 sinon on ne controle pas les Decimales !! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (vl-load-com) (defun c:NUMBER_TYPE_AREA_2_Table ( / _dec dec _numLay numLay _typeLay typeLay _areaLay areaLay _polyLay polyLay ss ctr obj coords pts ss2 lay num typ area data tablePt table row col dimzinsauve oldecho ) (setq oldecho (getvar "cmdecho")) (setvar "cmdecho" 0) ;;;;;;;; Sauvegarde de DIMZIN ;;;;;;;; (setq dimzinsauve (getvar "dimzin") ) (setvar "dimzin" 0) (setq _dec "2") (setq _numLay "TEXT_NUMBER") (setq _typeLay "TEXT_TYPE") (setq _areaLay "TEXT_AREA") (setq _polyLay "ROOM_POLYGON") (initget "0 1 2 3") (setq dec (cond ((getkword (strcat "How many decimals for the AREA [0/1/2/3] <" _dec ">: "))) (_dec))) (setq numLay (getstring (strcat "Enter layer for text number <" _numLay ">: "))) (if (= numLay "") (setq numLay _numLay)) (setq typeLay (getstring (strcat "Enter layer for text number <" _typeLay ">: "))) (if (= typeLay "") (setq typeLay _typeLay)) (setq areaLay (getstring (strcat "Enter layer for text number <" _areaLay ">: "))) (if (= areaLay "") (setq areaLay _areaLay)) (setq polyLay (getstring (strcat "Enter layer for 2D polygons <" _polyLay ">: "))) (if (= polyLay "") (setq polyLay _polyLay)) (princ "\n \nSVP verifiez AVANT que les Polylignes 2D sont parfaites : \nPas de doublon/triplon , Closes , CONTINUOUS , PLINEGEN=0 , etc ! \n \n") (if (setq ss (ssget (list (cons 0 "LWPOLYLINE") (cons 8 polyLay) (cons 70 1)))) (progn (while (not tablePt) (setq tablePt (getpoint "\nPick top left corner for the table: "))) (command "_view" "_sa" "tmp") (setq ctr 0) (repeat (sslength ss) (setq obj (vlax-ename->vla-object (ssname ss ctr))) (setq coords (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj)))) (setq pts nil) (while (> (length coords) 0) (setq pts (cons (list (car coords) (cadr coords)) pts)) (setq coords (cdr (cdr coords))) ) (command "_zoom" "_o" (ssname ss ctr) "") (if (setq ss2 (ssget "_WP" pts (list (cons 0 "Text") (cons 8 (strcat numLay "," typeLay "," areaLay))))) (progn (setq ctr2 0 num "0" typ "0" area (rtos 0 2 (atoi dec))) (repeat (sslength ss2) (setq lay (cdr (assoc 8 (entget (ssname ss2 ctr2))))) (cond ((= lay numLay) (setq num (cdr (assoc 1 (entget (ssname ss2 ctr2)))))) ((= lay typeLay) (setq typ (cdr (assoc 1 (entget (ssname ss2 ctr2)))))) ((= lay areaLay) (setq area (rtos (atof (cdr (assoc 1 (entget (ssname ss2 ctr2))))) 2 (atoi dec)))) ) (setq ctr2 (1+ ctr2)) );repeat (setq data (cons (list num typ area) data)) ));if ss2 (setq ctr (1+ ctr)) );repeat (command "_view" "_r" "tmp") (command "_view" "_de" "tmp") (if (> (length data) 0) (progn (setq data (vl-sort data '(lambda (x y) (< (atoi (car x)) (atoi (car y)))))) (setq table (vla-Addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point tablePt) (+ (length data) 2) 3 10 30)) (setq row 0) (repeat (length data) (setq col 0) (repeat 3 (vla-settext table (+ row 1) col (nth col (nth row data))) (setq col (1+ col)) ) (setq row (1+ row)) );rows (vla-settext table (+ row 1) 2 (rtos (apply '+ (mapcar 'atof (mapcar 'caddr data))) 2 (atoi dec))) )) ));if ss ;;;;;;;; Restauration de DIMZIN ;;;;;;;; (setvar "dimzin" dimzinsauve) (setvar "cmdecho" oldecho) (princ) );defun Autodesk Expert Elite Team
didier Posté(e) le 28 novembre Posté(e) le 28 novembre Bonjour @Maxime10 Ce que je vous propose est de prendre le centre géométrique et de chercher à se décaler du nom de la pièce (très mal écrit au demeurant). Autre chose d'important, la valeur de superficie doit-elle être associative avec la polyligne ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre @didier, Oui nous pouvons imaginer nous décaler juste en dessous du texte de la pièce. Après concertation auprès de mon service ce serait vraiment bien. La superficie n'a pas nécessairement besoin d'être associative non, on peut s'en passer. Une fois les surfaces générées je ne modifie pas la polyligne (ou ferai attention le cas échéant). Maxime
lecrabe Posté(e) le 28 novembre Posté(e) le 28 novembre Hello OUI dans "mon" Lisp, les Textes sont statiques ! Bye, lecrabe Autodesk Expert Elite Team
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre (modifié) Bonjour @lecrabe, Le support est effectivement très rapide ! La version anglaise ne me refroidit pas trop mais je bloque à cette ligne: SVP verifiez AVANT que les Polylignes 2D sont parfaites : Pas de doublon/triplon , Closes , CONTINUOUS , PLINEGEN=0 , etc ! J'ai au préalable passé DIMZIN de 8 à 0, PLINEGEN de 1 à 0, ma polyligne est bien close et CONTINUOUS et créée via la commande polyligne (PO). Je pense que ne défini pas correctement les fameuses variables: (setq _numLay "TEXT_NUMBER") (setq _typeLay "TEXT_TYPE") (setq _areaLay "TEXT_AREA") (setq _polyLay "ROOM_POLYGON") Et je ne pense à vrai dire pas savoir comment m'y prendre. EDIT: Je creuse un peu plus avec ce post qui semble répondre à mes interrogations: Maxime Modifié le 28 novembre par Maxime10 Ajout d'un lien expliquant les variables et les arguments en LISP
lecrabe Posté(e) le 28 novembre Posté(e) le 28 novembre Hello Tu dois modifier les 4 lignes AVEC TES Noms de calque !! Avec le NOTEPAD.exe , il suffit de mettre le BON Nom pour les 4 calques ! 2 calques séparés pour les 2 types de texte existants : _numLay pour le No d Ordre dans le tableau _typeLay pour le Nom de la piece Le 3eme pour la surface qui sera générée automatiquement (_areaLay) Et le dernier : 1 calque pour les Polylignes closes existantes (_polyLay) Est ce OK ou dois je détailler plus ?? Bye, lecrabe PS: les Textes générés sont statiques mais normalement on s en fout car on ne modifie plus les contours des pièces !? Autodesk Expert Elite Team
Maxime10 Posté(e) le 28 novembre Auteur Posté(e) le 28 novembre (modifié) @lecrabe, Ok je vois le concept j'arrive désormais à générer un tableau dans lequel j'ai indiqué les mauvais calques pour les différentes variables. Je continue mes tests de mon côté pour générer le tableau souhaité mais je suis sur la bonne piste ! EDIT: Le bloque à priori au TEXT_TYPE qui renvoi 0 dans le tableau généré. Est-ce dû à la police ? Maxime TEST2.dwg Modifié le 28 novembre par Maxime10 Ajout PJ du tableau obtenu
didier Posté(e) le 28 novembre Posté(e) le 28 novembre Bonjour @Maxime10 Je ne comprends pas les échanges avec lecrabe, que faut-il faire ? Pour les caractères spéciaux dans les noms de pièce, c'est parce que ce sont des textes multilignes avec des options de formatage qui pourrissent bien la vie à tout le monde. Il n'y a aucun intérêt d'utiliser ce genre d'entités pour écrire des textes simples. J'écris mes textes de superficies dans un calque que j'ai créé "à la main" car je ne pense pas qu'on imprime avec les polylignes de délimitation. Est-ce utile ? et si oui, faut-il le prévoir dans le LSP ? ou on reste à écrire dans le calque courant. Le fichier est étrange parce que tout est ortho, mais pas parfaitement aligné sur l'axe des X, est-ce une mauvaise manipulation de votre part ? Je centre un peu les textes, mais il y aura toujours des reprises à prévoir, dégagements et placards… J'en suis là : le nom de la commande est maxime10, (si vous trouvez ça lent, je peux l'accélérer). Amicalement Maxime10.LSP 1 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Maxime10 Posté(e) le 29 novembre Auteur Posté(e) le 29 novembre Bonjour @didier, Les échanges avec lecrabe concernent un autre sujet mais tout aussi important. Le but pour moi dans un second temps sera d'exporter les surfaces générées sur un tableur pour simplifier le travail de mes collègues en aval du projet. C'est donc dans ce but que je m'intéresse au conseil de lecrabe pour réaliser cette seconde étape. Le LISP que vous avez créé correspond à la demande initiale et va permettre à mes collègues et moi-même de visualiser plus efficacement les surfaces au sein de chaque pièce, cela nous aide pour du contrôle et du confort visuel. Je l'ai testé et certaines surfaces n’apparaissent pas sous le texte mais au centre géométrique de la polyligne fermée et décalé vers le bas c'est bien ça ? Et pour répondre à la question posée, nous imprimons exclusivement en interne ces surfaces si besoin et le calque courant est très bien pour la génération). Et pour la lenteur cela convient je ne le trouve pas particulièrement lent. Pour le fichier et pour l'explication de l'étrangeté, c'est un plan réalisé à partir d'une ortho-image (.tif) générée depuis un nuage de points. Le bâtiment de plusieurs niveaux a été entièrement scanné. L'ortho-image issu du nuage est donc orientée d'après un SCU défini depuis le nuage (sur le logiciel de traitement), il tend à être en ortho mais ne l'est pas et cela n'est pas gênant pour nous. Nous dessinons l'existant et non pas un plan d'exécution, bien que théoriquement ce type de bâtiment est censé avoir ses angles à 90° je suis d'accord. Pour les textes je comprend mieux, merci pour cette explication. Maxime
arnaudalp Posté(e) le 29 novembre Posté(e) le 29 novembre Bonjour @Maxime10, Pourquoi ne pas utiliser la commande du levé d'intérieur " gestion des identifiants " ? Ca pourrait être une solution ? Tu peux générer un listing des identifiants.
Maxime10 Posté(e) le 29 novembre Auteur Posté(e) le 29 novembre Bonjour @arnaudalp, Merci pour ta contribution. J'avoue ne pas connaître l'existence de cet outil, au même titre que les personnes m'ayant formé initialement. J'ignore cependant si la charte graphique de ma société peut me permettre d'utiliser cet outil, le rendu client se doit d'être identique au rendu actuel. Néanmoins je pense que le bloc paramétrable peut l'être en ce sens .. je vais aussi creuser cette piste au cas où. Maxime
Maxime10 Posté(e) le 29 novembre Auteur Posté(e) le 29 novembre Bonjour @lecrabe, Et ... au secours ! J'ai défini mes paramètres directement dans le .lsp afin qu'ils s'affichent lors des différentes étapes et que je puisse faire entrée ou clique droit pour les valider rapidement. Ce qui donne: (setq _numLay "COPRO_Lot") (setq _typeLay "COPRO_Texte") (setq _areaLay "COPRO_Surface-Valeur") (setq _polyLay "COPRO_Surface") Mais c'est de pire en pire sur la génération du tableau ... Ci-joint le dwg concerné. Merci par avance pour le temps consacré.. Maxime Test3.dwg
lecrabe Posté(e) le 29 novembre Posté(e) le 29 novembre Hello Remarque sans AutoCAD donc je n ai pas pu regarder ton DWG ! Attention: pour les 2 calques avec les Textes existants, ils doivent être des Textes (TEXT) ET NON PAS des Multi-Textes !? Est ce ton problème ? Bye, lecrabe Autodesk Expert Elite Team
Maxime10 Posté(e) le 29 novembre Auteur Posté(e) le 29 novembre C'était bien ça ! Merci beaucoup, le tableau se génère correctement, je vais maintenant regarder pour l'exporter sur excel. Milles mercis ! @lecrabe@didier J'utilise vos deux programmes désormais. Et didier, le seul "bémol" reste que la valeur puisse sortir de la polyligne, mais je reprendrai à la main le peu de cas pouvant apparaître, le plus gros du boulot étant fait ! Et @arnaudalp, je regarderai cela ultérieurement et au besoin, je suis déjà content d'avoir aussi cette possibilité en tête.
lecrabe Posté(e) le 29 novembre Posté(e) le 29 novembre Hello Au fait SVP tu travailles sur AutoCAD MAP (ou AutoCAD CIVIL) ou sur un AutoCAD "normal" ? Bye,lecrabe Autodesk Expert Elite Team
Maxime10 Posté(e) le 29 novembre Auteur Posté(e) le 29 novembre Je suis sur AutoCAD MAP 3D 2019 couplé à un Covadis 17.0f
Maxime10 Posté(e) le 20 décembre Auteur Posté(e) le 20 décembre Bonjour @lecrabe, J'ai un petit soucis avec l'utilisation du LISP NUMBER_TYPE_AREA_2_TABLE que tu m'as généreusement transmis. Le tableau généré ne semble pas prendre en compte les polylignes possédant des arcs ? voir la cuisine 7.03 du dwg joint. J'ai le même système sur des balcons possédant des arcs. Mais cela n'est pas systématique (voir la terresse 7.61 qui se génère malgré deux arcs ? je ne comprend pas). Est-ce que cela peut-être géré en modifiant le code ? Aussi, lorsqu'il y a plusieurs textes dans la polyligne, par exemple: "Chambre" et "Pl.", pouvons-nous envisager d'exporter ces deux textes avec la syntaxe suivante dans la colonne 2 du tableau: "Chambre + Pl." ? Aujourd'hui, seul le premier texte (créé ?) est indiqué dans le tableau (voir la pièce 7.07). Merci pour le temps consacré à ce sujet. Maxime Modele.dwg
lecrabe Posté(e) le 20 décembre Posté(e) le 20 décembre Hello Desole mais je suis incapable de modifier la routine Lisp/VLisp ! Elle prend le 1er texte trouve sur chacun des 2 calques avec texte 2 calques séparés pour les 2 types de texte existants : _numLay pour le No d Ordre dans le tableau _typeLay pour le Nom de la piece SVP qq un peut il revoir et ameliorer la routine ? Bye, lecrabe Autodesk Expert Elite Team
Maxime10 Posté(e) le 20 décembre Auteur Posté(e) le 20 décembre Merci pour la rapidité de ton retour. Mmh oui je comprend et ne peux malheuresement pas non plus modifier la-dite routine en conséquence. Je rejoins donc @lecrabe pour un(e) éventuel(lle) bienfaiteur/trice qui passerait par ici ^^. Maxime
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant