Aller au contenu

Modification commande COVCOTSURF


Maxime10

Messages recommandés

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)

image.thumb.jpeg.83de4b144a3b39ec78f91ebfdeec50cb.jpeg

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).

image.thumb.jpeg.765cf7899586edfbbfa9a61d11af4aec.jpeg

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).

image.jpeg.0e7bdf3604b370c81ff13ddd7ab1d3a9.jpeg

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 ?

image.jpeg.90dce81cd505f46d39e93bb71822a422.jpeg

Vous remerciant pour votre temps et votre analyse.

Maxime

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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

image.thumb.jpeg.38ed4baafb2ae9ca399f7ffa8c84621e.jpeg

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

Bonjour @Maxime10

Dans un premier temps, je réponds à la demande initiale.
Un mini fichier LSP permet de faire ça :

2024-11-28_17-23-27.thumb.gif.15b7250e1f370bd772f1268ae778ac68.gif

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

Lien vers le commentaire
Partager sur d’autres sites

@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

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

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

Lien vers le commentaire
Partager sur d’autres sites

@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

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é par Maxime10
Ajout d'un lien expliquant les variables et les arguments en LISP
Lien vers le commentaire
Partager sur d’autres sites

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

@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é par Maxime10
Ajout PJ du tableau obtenu
Lien vers le commentaire
Partager sur d’autres sites

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).

2024-11-28_18-54-50.gif.904d9efa2779f489ec5f3c3352647305.gif

 

Amicalement

Maxime10.LSP

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é