Aller au contenu

Obtenir les informations contenus à l'intérieur d'une polyligne fermé


Messages recommandés

Posté(e)

Bonjour à tous,

J'ai une problème pour la réalisation de quotité.

J'aimerais connaître les surfaces de polylignes fermées et les associer à un texte contenu dans cette polyligne.

Exemple 4 polyligne fermé représentant chambre, cuisine, sdb, salon. Dans ces polylignes un texte représentant la fonction de la pièce énoncé précédement. Je voudrais obtenir rapidement un tableau avec polyligne chambre x m², polyligne cuisine x m², polyligne sdb x m², etc.

Je sais que via la fonction de cubature multi emprise cela est réalisable , mais est-il possible de le faire sans devoir créer des MNT...

 

Un tout grand merci d'avance.

Posté(e)
Il y a 18 heures, arnaudalp a dit :

Bonjo
Dans le levé d'intérieur, tu trouveras ton bonheur je pense. Regarde dans l'aide : Foncier -> levé d'intérieur -> Contours, surfaces et centroïdes

est-il possible d'avoir une peu plus d'explication, cela m'intéresse mais je ne comprends pas la manipulation a effectuer 

Merci d'avance

Posté(e)

Voila ce qu'il me faudrait :

- Une détection de texte dans une polyligne, avec l'information de la surface de la polyligne correspondante ( comme sur la vidéo ci-jointe )

Ici cela fonctionne mais il faut créer deux Etats de terrains pour pouvoir les créer.

Je cherche juste une fonction qui le ferai sans devoir passer par cette commande.

 

Cordialement

Posté(e)
il y a 26 minutes, arnaudalp a dit :

@AlexisF la solution que je t'ai proposé fonctionne ?

Je cherchais qqch de plus simple, voir vidéo ci-joint, où la désignation et la surface serait quasiment lié en quelques clic, dans votre méthode il faut attribuer chaque désignation de pièce a chaque polyligne ...

Posté(e)

Bonjour @AlexisF

Je pense qu'il va falloir passer par un LSP personnalisé.
Le coup des MNT me semble pour le moins alambiqué.
Par contre, la solution avec le module "intérieurs" me parait efficiente.

Je note qu'aucun dessin n'est livré, donc je vais partir sur des hypothèses personnelles, en espérant qu'elles correspondent à vos données entrantes !
Sinon, vous allez faire des remarques sur le LSP livré et je devrai faire des corrections !.

Tout de suite, je manque de temps, mais ce qui est demandé est simple, je m'y mettrai rapidement.

Amicalement


 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

Bonjour,

Pas sur d'avoir compris la demande. Mais en passant par des étiquettes Covadis, il y a pas moyen d'obtenir ce que tu cherches, non ?. Et là, l'étiquette serait directement liée à la polyligne.

Ensuite un petit listing d'étiquette et un copier/coller depuis l'Excel produit et le tour est joué.

PS : Oui, je sais mon exemple n'est pas très réaliste 😂

 

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.3d
Pisser sous la douche ne suffira pas
Posté(e)
Le 15/04/2025 à 21:03, Olivier Eckmann a dit :

Bonjour @AlexisF,

 

Pourquoi ne pas utiliser le listing de surface qui permet d'indiquer le calque des polylignes fermées et le calque des identifiants ? 

https://youtu.be/0zTMD4wKo24

 

Olivier

Car il faut indiquer le nom de chaque pièce dans les calques ce qui peut prendre énormement de temps lorsque l'on réalise les quotités de 100aines d'appartements

Posté(e)
Le 15/04/2025 à 16:29, didier a dit :

Bonjour @AlexisF

Je pense qu'il va falloir passer par un LSP personnalisé.
Le coup des MNT me semble pour le moins alambiqué.
Par contre, la solution avec le module "intérieurs" me parait efficiente.

Je note qu'aucun dessin n'est livré, donc je vais partir sur des hypothèses personnelles, en espérant qu'elles correspondent à vos données entrantes !
Sinon, vous allez faire des remarques sur le LSP livré et je devrai faire des corrections !.

Tout de suite, je manque de temps, mais ce qui est demandé est simple, je m'y mettrai rapidement.

Amicalement


 

je trouve aussi que le module cubature multi-emprise n'a pas sa place dans ce que je veux réaliser mais aucune autres options n'est apparement faite pour associer un texte , une polyligne et une surface rapidement.

 

Cordialement   

Posté(e)
Le 16/04/2025 à 09:17, La Lozère a dit :

Bonjour,

Pas sur d'avoir compris la demande. Mais en passant par des étiquettes Covadis, il y a pas moyen d'obtenir ce que tu cherches, non ?. Et là, l'étiquette serait directement liée à la polyligne.

Ensuite un petit listing d'étiquette et un copier/coller depuis l'Excel produit et le tour est joué.

PS : Oui, je sais mon exemple n'est pas très réaliste 😂

 

En fait ma problématique réside surtout dans le faite de ne pas devoir écrire soi-même la désignation des pièces.

Nous recevons les plans déjà établis avec une désignation bien particulière ( parfois plus de 100 appartement ) 

Il est alors long de nommer chaque pièce sachant que le travail est déjà fait.

L'option que je recherche est vraiment celle comme sur la vidéo posté précédemment mais sans devoir passer par la création de MNT.

Posté(e)

Hello

 J essaye de resumer :

-- Tu as un DWG en METRE

-- Tu as des Polylignes 2D (sur un Calque specifique) avec un Texte SIMPLE "Identifiant" (sur un Calque specifique) a l interieur PARTOUT

-- TU veux la Surface en M2 (au fait 1 ou 2 decimales ?)

-- TU veux un tableau avec le Listing des pieces (Identifiants + Surfaces + Le total general)

Ai je bien compris ?

Bye, lecrabe

 

Autodesk Expert Elite Team

Posté(e)
il y a 11 minutes, lecrabe a dit :

Hello

 J essaye de resumer :

-- Tu as un DWG en METRE

-- Tu as des Polylignes 2D (sur un Calque specifique) avec un Texte SIMPLE "Identifiant" (sur un Calque specifique) a l interieur PARTOUT

-- TU veux la Surface en M2 (au fait 1 ou 2 decimales ?)

-- TU veux un tableau avec le Listing des pieces (Identifiants + Surfaces + Le total general)

Ai je bien compris ?

Bye, lecrabe

 

C'est bien ça sans avoir à retranscrire chaque nom de pièce qui serait déjà existant 

Merci d'avance 

Posté(e)

Hello

DONC DEJA SVP tu testes cette belle routine de Gilles : POLYAREA

Qui traite les objets (ayant une surface possible) et genere un champ dynamique de la Surface ...

Au fait tu "regles" TEXTSIZE a une bonne hauteur avant le lancement de POLYAREA !

SVP est ce OK pour toi ?

Bye, lecrabe

 

 
;; 
;; PolyArea par GC - 03/03/2018 
;; 
;; Micro-Modif par Patrice B. 
;; 
;; ------------------------------------------------------------------------------------- 
;; SVP changer la Variable System       TEXTSIZE  AVANT d'executer la Routine ! 
;; Car la routine utilise la valeur de  TEXTSIZE  comme Hauteur de MTEXT par defaut ... 
;; ------------------------------------------------------------------------------------- 
;; 
;; J'ai revu les codes, le probleme venait de la methode utilisee pour placer le texte/champ sur le barycentre de la polyligne. 
;; Cette methode ne fonctionnait qu'avec des polylignes.
;; 
;; J'ai change cela. Le texte est desormais place au centre de la boundingbox de l'entite. 
;; J'ai aussi revu les filtres de selection qui ne devraient pas etre tout à fait les memes pour l'aire et la longueur. 
;; 
;; Pour l'aire, je te laisse choisir entre uniquement les objets fermes, ou pas.
;; 
;; Pour les longueurs, les champs sont differents pour les cercles (Circumference), les regions et mpolygons (Perimeter) 
;; et n'existent pas pour les ELLIPSEs et SPLINEs, j'ai donc remplace le champ par un MTEXT simple qui affiche la longueur.
;; 
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Area \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Length \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Perimeter \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Circumference \f "%lu2">%
;; 
;; Liste sur ELLIPSE --> Aire & Circonference ?? 
;; Liste sur SPLINE  --> Aire & Circonference ??
;; 
;; --- Interrogation Entite/Objet en Lisp ---
;; (entget (car (entsel)) '("*"))
;; 

(defun c:PolyArea (/ *error* filter ss acSpace minPt maxPt pt id str txt)
  (vl-load-com)
  (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
  (or *util* (setq *util* (vla-get-Utility *acdoc*)))
  (defun *error* (msg)
    (and msg
	 (/= msg "Fonction annulée")
	 (/= msg "Function cancelled")
	 (princ (strcat "Erreur: " msg))
    )
    (vla-EndUndomark *acdoc*)
    (princ)
  )

  ;; entités fermées
  ;|
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "CIRCLE,MPOLYGON,REGION")
		 '(-4 . "<AND")
		 '(0 . "ELLIPSE")
		 '(41 . 0.0)
		 (cons 42 (* 2 pi))
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "LWPOLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 9)
		 '(-4 . "AND>")
		 '(-4 . "OR>")
	       )
  )
  |;

  ;; entités fermées ou ouvertes
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "ARC,CIRCLE,LWPOLYLINE,MPOLYGON,REGION,ELLIPSE")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 8)
		 '(-4 . "AND>")
		 '(-4 . "OR>"))
  ) 
 

  (prompt "Hauteur courante de MTEXT - Voir la Variable System TEXTSIZE ... \n"  ) 

  (prompt "\nPOLYAREA traite: ARC,CIRCLE,ELLIPSE,POLYLINE 2D,ELLIPSE,SPLINE,MPOLYGON,REGION \nSelectionnez les objets ou Entree pour tous ") 

  (if (or (ssget filter)
	  (ssget "_X" (cons (cons 410 (getvar 'ctab)) filter))
      )
    (progn
      (vla-StartUndomark *acdoc*)
      (setq acSpace (vla-get-Block (vla-get-ActiveLayout *acdoc*)))
      (vlax-for	obj (setq ss (vla-get-ActiveSelectionSet *acdoc*))
	(vla-GetBoundingBox obj 'minPt 'maxPt)
	(setq pt  (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.))
			  (vlax-safearray->list minPt)
			  (vlax-safearray->list maxPt)
		  )
	      id  (vla-GetObjectIdString *util* obj :vlax-false)
	      str (strcat
		    "%<\\AcObjProp Object(%<\\_ObjId "
		    id
		    ">%).Area \\f \"%lu2%pr1%ps[,m²]%\">%"
		  )
	      txt (vla-addMText acSpace (vlax-3d-point pt) 0. str)
	)
	(vla-put-AttachmentPoint txt acAttachmentPointMiddleCenter)
	(vla-put-insertionPoint txt (vlax-3d-point pt))
      )
      (vla-Delete ss)
    )
  )
  (*error* nil)
)

 

Autodesk Expert Elite Team

Posté(e)
il y a 16 minutes, lecrabe a dit :

Hello

DONC DEJA SVP tu testes cette belle routine de Gilles : POLYAREA

Qui traite les objets (ayant une surface possible) et genere un champ dynamique de la Surface ...

SVP est ce OK pour toi ?

Bye, lecrabe

 

 
;; 
;; PolyArea par GC - 03/03/2018 
;; 
;; Micro-Modif par Patrice B. 
;; 
;; ------------------------------------------------------------------------------------- 
;; SVP changer la Variable System       TEXTSIZE  AVANT d'executer la Routine ! 
;; Car la routine utilise la valeur de  TEXTSIZE  comme Hauteur de MTEXT par defaut ... 
;; ------------------------------------------------------------------------------------- 
;; 
;; J'ai revu les codes, le probleme venait de la methode utilisee pour placer le texte/champ sur le barycentre de la polyligne. 
;; Cette methode ne fonctionnait qu'avec des polylignes.
;; 
;; J'ai change cela. Le texte est desormais place au centre de la boundingbox de l'entite. 
;; J'ai aussi revu les filtres de selection qui ne devraient pas etre tout à fait les memes pour l'aire et la longueur. 
;; 
;; Pour l'aire, je te laisse choisir entre uniquement les objets fermes, ou pas.
;; 
;; Pour les longueurs, les champs sont differents pour les cercles (Circumference), les regions et mpolygons (Perimeter) 
;; et n'existent pas pour les ELLIPSEs et SPLINEs, j'ai donc remplace le champ par un MTEXT simple qui affiche la longueur.
;; 
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Area \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Length \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Perimeter \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Circumference \f "%lu2">%
;; 
;; Liste sur ELLIPSE --> Aire & Circonference ?? 
;; Liste sur SPLINE  --> Aire & Circonference ??
;; 
;; --- Interrogation Entite/Objet en Lisp ---
;; (entget (car (entsel)) '("*"))
;; 

(defun c:PolyArea (/ *error* filter ss acSpace minPt maxPt pt id str txt)
  (vl-load-com)
  (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
  (or *util* (setq *util* (vla-get-Utility *acdoc*)))
  (defun *error* (msg)
    (and msg
	 (/= msg "Fonction annulée")
	 (/= msg "Function cancelled")
	 (princ (strcat "Erreur: " msg))
    )
    (vla-EndUndomark *acdoc*)
    (princ)
  )

  ;; entités fermées
  ;|
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "CIRCLE,MPOLYGON,REGION")
		 '(-4 . "<AND")
		 '(0 . "ELLIPSE")
		 '(41 . 0.0)
		 (cons 42 (* 2 pi))
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "LWPOLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 9)
		 '(-4 . "AND>")
		 '(-4 . "OR>")
	       )
  )
  |;

  ;; entités fermées ou ouvertes
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "ARC,CIRCLE,LWPOLYLINE,MPOLYGON,REGION,ELLIPSE")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 8)
		 '(-4 . "AND>")
		 '(-4 . "OR>"))
  ) 
 

  (prompt "Hauteur courante de MTEXT - Voir la Variable System TEXTSIZE ... \n"  ) 

  (prompt "\nPOLYAREA traite: ARC,CIRCLE,ELLIPSE,POLYLINE 2D,ELLIPSE,SPLINE,MPOLYGON,REGION \nSelectionnez les objets ou Entree pour tous ") 

  (if (or (ssget filter)
	  (ssget "_X" (cons (cons 410 (getvar 'ctab)) filter))
      )
    (progn
      (vla-StartUndomark *acdoc*)
      (setq acSpace (vla-get-Block (vla-get-ActiveLayout *acdoc*)))
      (vlax-for	obj (setq ss (vla-get-ActiveSelectionSet *acdoc*))
	(vla-GetBoundingBox obj 'minPt 'maxPt)
	(setq pt  (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.))
			  (vlax-safearray->list minPt)
			  (vlax-safearray->list maxPt)
		  )
	      id  (vla-GetObjectIdString *util* obj :vlax-false)
	      str (strcat
		    "%<\\AcObjProp Object(%<\\_ObjId "
		    id
		    ">%).Area \\f \"%lu2%pr1%ps[,m²]%\">%"
		  )
	      txt (vla-addMText acSpace (vlax-3d-point pt) 0. str)
	)
	(vla-put-AttachmentPoint txt acAttachmentPointMiddleCenter)
	(vla-put-insertionPoint txt (vlax-3d-point pt))
      )
      (vla-Delete ss)
    )
  )
  (*error* nil)
)

 

ok et ensuite comment lier la désignation de pièce a cette surface ?

Posté(e)

Bonjour @AlexisF

Je me permets de renouveler ma demande de fourniture de fichier de votre part.
Dans ce dessin, ce serait sympa d'y trouver ce que vous avez comme renseignements.
Mais aussi ce que vous voulez obtenir du programme que vous souhaitez faire ou nous demander d'écrire.

Sans ce dessin, on peut échanger des dizaines de messages avant de vous donner une bonne piste de recherche ou de travailler efficacement pour vous.
C'est fatigant et stérile pour vous et pour nous.

Amicalement

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)
il y a 18 minutes, didier a dit :

Bonjour @AlexisF

Je me permets de renouveler ma demande de fourniture de fichier de votre part.
Dans ce dessin, ce serait sympa d'y trouver ce que vous avez comme renseignements.
Mais aussi ce que vous voulez obtenir du programme que vous souhaitez faire ou nous demander d'écrire.

Sans ce dessin, on peut échanger des dizaines de messages avant de vous donner une bonne piste de recherche ou de travailler efficacement pour vous.
C'est fatigant et stérile pour vous et pour nous.

Amicalement

 

Voici un petit exemple de fichier dwg

J'aimerais donc:

- selectionner les polylignes qui m'intéresse ou filtrer via calques

- selectionner les textes ( situer à l'intérieur des polylignes ) qui m'intéresse ou filtrer selon les calques

- obtenir un tableau de toutes les polylignes sélectionnées et les textes associés avec leurs surfaces 

Est ce que vous avez toutes les informations nécessaires?

 

Un tout grand merci pour l'attention portée à ma demande 

QUOTITES CADXP.dwg

Posté(e)

Hello @AlexisF

SVP tu regardes bien l image jointe ...

Tu vois les Surfaces generees par la routine Lisp POLYAREA de Gilles

(qui ont ete decomposees / explosees pour la routine Lisp suivante)

Tu vois un CHIFFRE facultatif qui est utilise pour trier dans le tableau

Tu vois un Texte (Nom de Piece) ou autre Identifiant ou Texte quelconque

ET tu vois le tableau (Style Copropriete) genere par la routine Lisp "NUMBER_TYPE_AREA_Table" ...

Est ce que cela te convient ??

 

Si c OK pour toi, SVP tu me le dis !

La routine "NUMBER_TYPE_AREA_Table" devrait etre amelioree "un poil" pour INTERPRETER le MTEXT Dynamique de la Surface (genere par POLYAREA) ainsi il ne serait plus necessaire de decomposer / exploser les Surfaces ... 

Facile pour un developpeur Lisp comme Didier ou Gilles ou autre ...

 

Bye, lecrabe

 

 

 

NUMBER_TYPE_AREA_2_Table.jpg

Autodesk Expert Elite Team

Posté(e)
il y a 14 minutes, lecrabe a dit :

Hello @AlexisF

SVP tu regardes bien l image jointe ...

Tu vois les Surfaces generees par la routine Lisp POLYAREA de Gilles

(qui ont ete decomposees / explosees pour la routine Lisp suivante)

Tu vois un CHIFFRE facultatif qui est utilise pour trier dans le tableau

Tu vois un Texte (Nom de Piece) ou autre Identifiant ou Texte quelconque

ET tu vois le tableau (Style Copropriete) genere par la routine Lisp "NUMBER_TYPE_AREA_2_Table" ...

Est ce que cela te convient ??

Bye, lecrabe

 

 

 

NUMBER_TYPE_AREA_2_Table.jpg

Comment créer un chiffre rapidement des une 100aines de contours différents ? 

Posté(e)

Hello

TON DWG demande du travail pour etre exploite !

1) MTEXTs a exploser / decomposer pour avoir des textes simples 

2) Le chiffre 1/2/3/4/etc (No de Lot Appart) doit etre separe du texte APPARTEMENT / CAVE / TERRASSE / BALCON

3) Les TEXTs simples APPARTEMENT / CAVE / TERRASSE / BALCON / etc sur UN Calque specifique

4) Les TEXTs simples 1/2/3/4/etc (No de Lot Appart) sur UN AUTRE Calque specifique

5) Les TEXTs simples COMMUN sur un AUTRE Calque ou ALORS avec une Polyligne autour pour les traiter !?

etc

Bye, lecrabe

 

PS: je te donne "quand meme" la routine "NUMBER_TYPE_AREA_Table" ... 

Ainsi un développeur Lisp pourra l améliorer !?

 

 


;; 
;; Routine par doaiena pour Patrice B.
;; 
;; Routine: NUMBER_TYPE_AREA_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 !! 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;; 
;; ATTENTION : Le Style de Tableau STANDARD doit etre correct et adapte 
;;

(vl-load-com) 

(defun c:NUMBER_TYPE_AREA_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 "NUMERO")      ;; Numero FACULTATIF pour le TRI / REGROUPEMENT dans le tableau

(setq _typeLay "PIECE")      ;; Nom / Identifiant de la PIECE

(setq _areaLay "SURFACE")    ;; Surface

(setq _polyLay "POLYGONE")   ;; Polygones


(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

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é