
Maxime10
Membres-
Compteur de contenus
43 -
Inscription
-
Dernière visite
Tout ce qui a été posté par Maxime10
-
Bonjour @AlexisF, Je me permets de prendre part aux échanges dans le sens où j'ai il y a peu formulé le même genre de demande à la communauté CadXp. @lecrabe m'avait alors fournit le Lisp proposé plus tôt "NUMBER_TYPE_AREA_Table", sous sa version 2 "NUMBER_TYPE_AREA_2_Table". Ce Lisp fonctionne à merveille je ne peux que te conseiller de l'essayer. Aussi, pour répondre à une de tes interrogations vue plus tôt, il est possible de numéroter à la volée avec le formidable programme de Lee Mac intitulé "NUM_INC" que tu pourras retrouver sur son site. Espérant t'aider, Maxime
-
Bonjour @Chazug, Réalisant quotidiennement des plans 2D depuis nuages de points et travaillant dans un cabinet de géomètre je me permet de prendre part à l'échange. On utilise Trimble Realworks en interne (mais tu pourrais avoir Scene de chez Faro en équivalent) pour le traitement du nuage. Depuis ce logiciel on génère des ortho-images (projection du nuage sur un plan 2D défini). On exporte ces orthos-images sur Autocad et on vectorise le tout en faisant bien attention à tirer nos traits pour ne pas commettre d'impair. La compatibilité entre les logiciels se gère principalement avec le SCU commun créé depuis Trimble Realworks (dans ce dernier on peut aussi géoréférencé le projet etc ..) Maxime PS: En logiciel gratuit pour le traitement du nuage tu as peut-être CloudCompare ? Je n'ai pas essayé.
-
Bonjour @Faby38, Peux-tu envoyer un extrait ou carrément ton dwg s'il te plaît ? Je pense de tête à DEFDUCALQUE ou le lisp RB de Patrick_35 à lancer en amont de ton LISP. Maxime
-
Bonjour @arnaudalp, Merci pour ton retour. Le lisp est donné plus tôt dans le fil de la discussion. Mais je te le remet ci-dessous avec les variables correspondant au dwg "Modele.dwg". J'ai supprimé le point double et retenté mais rien n'y fait je ne récupères pas cette pièce. J'ai également créé un point transitoire (j'ai scindé mon arc en deux arc), je récupère alors le numéro de la pièce ainsi que la surface mais pas le texte "Cuisine" qui renvoit alors 0. J'ai ensuite enlevé mon arc pour le remplacer par plusieurs sommets, et cela fonctionne je récupère bien tout). Le lisp: ;; ;; 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 "COPRO_Numero-Lot") (setq _typeLay "COPRO_Texte") (setq _areaLay "COPRO_Surface-Valeur") (setq _polyLay "COPRO_Surface-Contour") (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
-
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
-
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
-
Problème pour purger des calques
Maxime10 a répondu à un(e) sujet de PATRICE69 dans AutoCAD 2020-2024
Bonjour @PATRICE69, De mon côté j'utilise le LISP "RB" de Patrick35. Tu peux tester et nous dire si cela te convient ? Maxime ;;;================================================================= ;;; ;;; RB.LSP V1.11 ;;; ;;; Refait tous les blocs de la couleur dubloc et sur le calque 0 ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun c:rb(/ a b s *errrb*) (defun *errrb* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (setq s *error* *error* *errrb* ) (setq a (tblnext "block" t)) (while a (setq b (cdr (assoc -2 a))) (while b (setq b (entget b)) (if (cdr (assoc 6 b)) (setq b (subst (cons 6 "ByBlock") (assoc 6 b) b)) (setq b (append b (list (cons 6 "ByBlock")))) ) (setq b (subst (cons 8 "0") (assoc 8 b) b)) (if (cdr (assoc 62 b)) (setq b (subst (cons 62 0) (assoc 62 b) b)) (setq b (append b (list (cons 62 0)))) ) (if (cdr (assoc 370 b)) (setq b (subst (cons 370 -2) (assoc 370 b) b)) (setq b (append b (list (cons 370 -2)))) ) (entmod b) (setq b (entnext (cdr (assoc -1 b)))) ) (setq a (tblnext "block")) ) (if (setq a (vl-remove-if-not '(lambda (x) (eq (car x) 350)) (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))) (foreach b a (entmod (append (vl-remove-if '(lambda (x) (eq (car x) 62)) (entget (cdr b))) (list (cons 62 0) (cons 62 0) (cons 62 0)))) ) ) (if (setq a (ssget "_x" (list (cons 0 "INSERT")))) (foreach b (mapcar 'cadr (ssnamex a)) (if (cdr (assoc 66 (entget b))) (progn (setq a (entget (entnext b))) (while (not (eq (cdr (assoc 0 a)) "SEQEND")) (entmod (subst (cons 62 0) (assoc 62 a) a)) (setq a (entget (entnext (cdr (assoc -1 a))))) ) ) ) (entupd b) ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (setq *error* s) (princ) ) (setq nom_lisp "RB") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) -
Bonjour à toutes et tous, Je me permet de faire suite à ce sujet et de rebondir sur un des souhaits qui était celui de pouvoir choisir si la cotation générée apparaît à "l'intérieur" ou à l'"extérieur" de la pièce. Utilisant la commande LW_DIM j'ai bien compris le fait d'inverser le sens de la polyligne afin d'obtenir le résultat souhaité et cela fonctionne. Aussi, en l'utilisant, je me suis rendu compte que machinalement, après la sélection de la polyligne à coter, je positionnais mon curseur à l'"intérieur" de la pièce avec pour souhait qu'elle s'affiche de ce côté de la polyligne. J'en viens donc à ma question, est-il possible d'inverser (ou non) le sens de la polyligne en fonction de la position du curseur de la souris par rapport à la-dite polyligne au moment de la validation de la commande (utilisant le cycle de sélection j'effectue un coup de molette arrière pour valider certaines commandes, si ça peut aider ?). Merci par avance pour vos retours. Maxime
-
Je suis sur AutoCAD MAP 3D 2019 couplé à un Covadis 17.0f
-
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.
-
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
-
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
-
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
-
@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
-
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
-
@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
-
@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
-
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
-
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
-
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
-
Bonjour @barbichette, Est-il possible d'avoir un extrait de plan subissant ce problème ? Maxime
-
@lecrabe Je n'ai pas de cas concret sous le coude afin de vérifier si cela change le soucis, seule chose que je peux voir en l'état c'est le rendu graphique qui s'en trouve bien affecté. Je vois que ces paramètres sont associés aux performances graphiques et que j'ai une NVIDIA QUADRO P2200, je n'ai jusqu'ici jamais eu à me plaindre de la configuration de mon ordinateur. Peut-être que @Didj05 pourra effectuer un de ces tests également sur le projet sur lequel il travail afin de nous aider. Maxime
-
Bonjour @lecrabe Merci pour ton retour, je viens de check les variables system que tu énonces et tout est bien en ordre pour les quatres, ce qui est rassurant. Je suis pour ma part sous AutoCAD 2019, je vais donc laisser ta proposition à Didj05 et continuer à effectuer mes RG au besoin. Bonne journée, Maxime
-
Bonjour Didj05, J'ai également ce contretemps que je "résous" de la manière suivante: Une fois l'orthophoto en arrière plan, lorsqu'elle repasse par magie au dessus de mes tracés, je fais un rapide "RG" (Regen) au clavier, et elle repasse naturellement en arrière-plan. Par contre je me demande si la variable DRAWORDERCTL n’impacte pas ce phénomène ?
-
Decaler plusieurs polylignes fermées simultanément
Maxime10 a répondu à un(e) sujet de Maxime10 dans AutoCAD 2019
J'ai changé mon approche vis à vis du résultat à obtenir afin d'optimiser les étapes et gagner en temps, par conséquent le besoin cité ci-dessus n'est plus valable dans mon cas. Néanmoins la fonction OffIn et OffOut me sera nécessaire pour d'autres applications. Maxime