Maxime10 Posté(e) il y a 15 heures Partager Posté(e) il y a 15 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) il y a 14 heures Partager Posté(e) il y a 14 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 14 heures Auteur Partager Posté(e) il y a 14 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 9 heures Auteur Partager Posté(e) il y a 9 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) il y a 9 heures Partager Posté(e) il y a 9 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 8 heures Auteur Partager Posté(e) il y a 8 heures @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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) il y a 8 heures Partager Posté(e) il y a 8 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) il y a 8 heures Partager Posté(e) il y a 8 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 8 heures Auteur Partager Posté(e) il y a 8 heures @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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) il y a 8 heures Partager Posté(e) il y a 8 heures Hello OUI dans "mon" Lisp, les Textes sont statiques ! Bye, lecrabe Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 8 heures Auteur Partager Posté(e) il y a 8 heures (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é il y a 8 heures par Maxime10 Ajout d'un lien expliquant les variables et les arguments en LISP Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) il y a 8 heures Partager Posté(e) il y a 8 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maxime10 Posté(e) il y a 7 heures Auteur Partager Posté(e) il y a 7 heures (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é il y a 7 heures par Maxime10 Ajout PJ du tableau obtenu Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) il y a 7 heures Partager Posté(e) il y a 7 heures 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
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