Aller au contenu

Comment savoir si un secteur est vide.


DenisHen

Messages recommandés

Bonjour à tous.

 

J'aimerais, avant de créér un cadre (une polyligne rectangulaire), savoir si il y a des entités dans ce secteur.

 

Sachant que j'ai les coordonnées minimum (point bas gauche) et maximum (point haut droit).

 

Il serait préférable que je le sache avant de créer ce rectangle.

 

Si quelqu'un a une astuce, un conseil... je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello Denis

 

Etant un NeuNeu en programmation, je vais raisonner AutoCAD !

 

Commande: SELECT

CLIC Coin puis CLIC Coin

 

A ce moment j'ai dans le jeu de selection PRECEDENT 0-N entites ...

Donc si je fais par exemple un EFFACER P ...

Je "nettoie" le contenu de la selection precedente ...

 

Bon WE, Bye, lecrabe

 

Sinon les routines SSOC & SSOF de Gilles pourront eventuellement t'aider ! ?

 


;;; SSOC pour selectionner tous les objets captures, suivant
;;; la vue, par le cercle, l'ellipse ou la polyligne.

(defun c:ssoc (/ ss opt)
 (and
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
     )
     (and
(sssetfirst nil nil)
(setq ss (ssget	"_:S:E"
		(list
		  '(-4 . "<OR")
		  '(0 . "CIRCLE")
		  '(-4 . "<AND")
		  '(0 . "ELLIPSE")
		  '(41 . 0.0)
		  (cons 42 (* 2 pi))
		  '(-4 . "AND>")
		  '(-4 . "<AND")
		  '(0 . "LWPOLYLINE")
		  '(-4 . "&")
		  '(70 . 1)
		  '(-4 . "AND>")
		  '(-4 . "OR>")
		)
	 )
)
     )
   )
   (sssetfirst
     nil
     (ssdel (ssname ss 0) (SelByObj (ssname ss 0) "Cp" nil))
   )
 )
 (princ)
)

;;;===============================================================;;;

;;; SSOF pour selectionner tous les objets contenus, suivant
;;; la vue, dans le cercle, l'ellipse ou la polyligne.

(defun c:ssof (/ ss opt)
 (and
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
     )
     (and
(sssetfirst nil nil)
(setq ss (ssget	"_:S:E"
		(list
		  '(-4 . "<OR")
		  '(0 . "CIRCLE")
		  '(-4 . "<AND")
		  '(0 . "ELLIPSE")
		  '(41 . 0.0)
		  (cons 42 (* 2 pi))
		  '(-4 . "AND>")
		  '(-4 . "<AND")
		  '(0 . "LWPOLYLINE")
		  '(-4 . "&")
		  '(70 . 1)
		  '(-4 . "AND>")
		  '(-4 . "OR>")
		)
	 )
)
     )
   )
   (sssetfirst
     nil
     (SelByObj (ssname ss 0) "Wp" nil)
   )
 )
 (princ)
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut Ô Décapode...

 

Je fais un code pour faire des cases, je cherche donc à ne pas créer une case vide.

 

Mais je vais étudier ta proposition de code...

 

Merci pour ton aide...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Desole mais j'ai compris (de TON sujet) que tu desirais savoir

si il y a avait des Entites dans une selection (rectangulaire ou autre)

donc j'ai repondu en consequence ...

 

Si tu desires dessiner un Damier ou Carroyage, ALORS c UN PEU different !

 

Je crois que tu as un AutoCAD MAP 201X !?

DONC SVP tu regardes le BON VIEUX Lisp "makegrid.lsp" qui est fourni en standard avec MAP (livre par Autodesk depuis 1998) !

 

C:\Program Files\Autodesk\Autodesk AutoCAD Map 3D 2014\Sample

 

C:\Program Files\Autodesk\AutoCAD 2015\Map\Sample

C:\Program Files\Autodesk\AutoCAD 2016\Map\Sample

C:\Program Files\Autodesk\AutoCAD 2017\Map\Sample

C:\Program Files\Autodesk\AutoCAD 2018\Map\Sample

C:\Program Files\Autodesk\AutoCAD 2019\Map\Sample

 

Ainsi tu auras "de base" un joli Damier (Carre ou Rectangulaire) !

Avec en plus un TEXTE d'Identification AU CENTRE ...

 

"makegrid.lsp" est parametrable :

- Nombre de ROW, COLUMN

- Taille de HEIGHT, WIDTH

- Texte Prefixe

- Nombre de Chiffres

 

Bye, lecrabe

 

PS: Si tu veux dessiner un Carroyage Lambert en Lisp, alors il y a plusieurs possibilites (Merci Bruno par exemple et aussi un Lisp de AutoCAD CIVIL)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

Oui, je cherche bien à dessiner un damier...

 

Je n'ai pas dis que tu m'avais répondu à coté... Loin de là, mais ton code me donne du fils à retordre. ;)

 

Je vais étudier de près le lisp "makegrid.lsp" que je ne connaissais pas...

Mais après quelques recherches, je ne l'ai pas trouvé...

 

Encore merci à toi...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Voici un Coper / Coller du "bon vieux" MAKEGRID.lsp (livre par Autodesk depuis 1998) ...

 

Bye, lecrabe

 

 

;;;---------------------------------------------------------------------------;
;;;
;;;    MAKEGRID.LSP 
;;;
;;;    (C) Copyright 1998 by Autodesk, Inc.
;;;
;;;    Permission to use, copy, modify, and distribute this software
;;;    for any purpose and without fee is hereby granted, provided
;;;    that the above copyright notice appears in all copies and
;;;    that both that copyright notice and the limited warranty and
;;;    restricted rights notice below appear in all supporting
;;;    documentation.
;;;
;;;    AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
;;;    AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
;;;    MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
;;;    DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
;;;    UNINTERRUPTED OR ERROR FREE.
;;;
;;;    Use, duplication, or disclosure by the U.S. Government is subject to
;;;    restrictions set forth in FAR 52.227-19 (Commercial Computer
;;;    Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
;;;    (Rights in Technical Data and Computer Software), as applicable.
;;;
;;;    July 1996
;;; 
;;;---------------------------------------------------------------------------;
;;;
;;;    DESCRIPTION
;;;
;;;    Draw rectangular grid lines and number the cells.
;;;
;;;---------------------------------------------------------------------------;

;;;****************************************************************************
;;; Function: C:MAKEGRID
;;;
;;; Use this function to create and label a rectilinear grid. Prompts 
;;; for base point, number of rows and columns, row height and column 
;;; width, text prefix and the number of digits for the suffix. Finally, 
;;; the text height is input if the current style has no height defined.
;;;
(defun C:MAKEGRID (
 / 
 basept    baseptx     basepty 
 numrow    numcol      width    height
 textsize  padzero     prefix 
 styl      ename       pt       label ct
 holdecho  heightflag  error    elist
 )
 
 (setq error *error*)
 ;;
 ;; Define error handler
 ;;
 (defun *error* (msg)
   (alert msg)
   (setq *error* error)
   (exit)
 )
 
 (setq holdecho (getvar "CMDECHO"))
 (setvar "cmdecho" 0)

 ;;
 ;; Get grid dimensions
 ;;
 (setq basept (getpoint "\nPick base point: "))
 (setq numrow (getint "\nEnter number of rows: "))
 (setq numcol (getint "\nEnter number of columns: "))
 
 (if (not (and (> numrow 0) (> numcol 0)))
   (prompt "\nERROR: number of rows or number of columns invalid.")
   (progn
     (initget 128)
     (setq pt (getcorner basept "\nUnit cell or row height (|||): "))
     (if (= (type pt) 'STR)
       (progn
         (setq height (atof pt))
         (setq width (getdist basept "\nColumn width (---): "))
       )
       (progn
         (setq width  (abs (- (car pt)(car basept))))
         (setq height (abs (- (cadr pt)(cadr basept))))
       )
     )
   )
 )
 
 (if (and width height)
   (progn
     ;;
     ;; Get text information
     ;;
     (setq prefix (getstring "\nEnter text prefix: "))
     (if (not prefix)
       (setq prefix "")
     )
     (setq padzero (getint "\nEnter number of digits: "))
     (if (not padzero)
       (setq padzero 0)
     )
     (if (> padzero 0)
       (setq padzero (- padzero 1))
     )

     ;;
     ;; Determine if current text style has a default height
     ;;
     (setq styl (getvar "TEXTSTYLE"))
     (setq styl (tblsearch "STYLE" styl))
     (setq textsize (cdr (assoc 40 styl)))
     (if (= 0.0 textsize)
       (setq heightflag T)
       (setq heightflag nil)
     )
     ;;
     ;; if not prompt for height
     ;;
     (while (= textsize 0.0)
       (setq textsize (getdist "\nEnter text size: "))
       (if (= textsize 0.0)
          (princ "\nText size must be greater than zero.")
       )
     )
   )
 );if
 
 ;;
 ;; Make and label grid
 ;;
 (if (and basept numrow numcol height width)
   (progn
     (setq ct 0)
     (setq baseptx (nth 0 basept))
     (setq basepty (nth 1 basept))

     ;;
     ;; for each row
     ;;
     (repeat numrow
       (setq baseptx (nth 0 basept))

       ;for each column
       (repeat numcol
         ;;
         ;; make the rectangle
         ;;
         (if (= 0 (getvar "PLINETYPE"))
         (progn
            (entmake (list (cons 0 "POLYLINE")(cons 70 1)))
            (entmake (list (cons 0 "VERTEX")(cons 10 (list baseptx basepty))))
            (entmake (list (cons 0 "VERTEX")(cons 10 (list (+ baseptx width) basepty))))
            (entmake (list (cons 0 "VERTEX")(cons 10 (list (+ baseptx width) (+ basepty height)))))
            (entmake (list (cons 0 "VERTEX")(cons 10 (list baseptx (+ basepty height)))))
            (entmake (list (cons 0 "SEQEND")))
         )
         (progn
            (setq elist (list (cons 0 "LWPOLYLINE")
                           (cons 100 "AcDbEntity")
                           (cons 67 0)
                           (cons 100 "AcDbPolyline")
                           (cons 90 4)
                           (cons 70 1)
                           (cons 10 (list baseptx basepty))
                           (cons 10 (list (+ baseptx width) basepty))
                           (cons 10 (list (+ baseptx width) (+ basepty height)))
		    (cons 10 (list baseptx (+ basepty height)))
                        )
            )
            (entmake elist)
         ))
         (setq ename (entlast))
         (setq baseptx (+ baseptx width))

         ;;
         ;; make the label
         ;;
         (setq ct (+ ct 1))
         (setq pt (ade_expreval ename ".CENTER" "point"))
         (setq chk (strlen (itoa ct)))
         (setq label "")
         (repeat (- padzero (- chk 1))
           (setq label (strcat label "0"))
         )
         (setq label (strcat prefix label (itoa ct)))
         
         ;;
         ;; if text style has no height setting
         ;;
         (if heightflag
           (command "_text" "_justify" "_middle" pt textsize 0 label)
           (command "_text" "_justify" "_middle" pt 0 label)
         )
       );repeat
       (setq basepty (+ basepty height))
     );repeat
   )
 );if
 
 (setq *error* error)
 (setvar "CMDECHO" holdecho)
 
 (prompt "\nProcessing completed.")
 (princ)
 
);C:MAKEGRID                     

(prompt "\nType: MAKEGRID to draw grid lines.")
(princ)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

Merci pour ce code, mais sans le savoir, j'ai déjà écris le mien :( qui, en résumé, fait la même chose que "makegrid.lsp"... :blink:

 

je cherche maintenant à ne pas créer la case s'il n'y a rien dedans...

 

J'ai bien tenté un (ssget, mais j'ai quelques problèmes avec... C'est l'objet d'un autre post...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Denis a re-invente l'Eau Chaude !

 

Une suggestion de developpement subtil a partir de "makegrid.lsp"

- Sortir un Tableau avec le nombre d'entites par case et l'identifiant de la case ...

- + Total general

- + Nombre de cases VIDES et Nombre de cases avec au moins UNE entite

- etc

 

Par contre comment traiter par exemple, une Polyligne ou Cercle ou xxxxx, qui traverse N cases !?

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

En fait, je cherche, via un (sslength de mon jeu de sélection (zone de mon futur casé), s'il y a au moins une entité dans la case dont je connais les coordonnées.

 

Si oui, je créé la case avec cartouche...

Si non, je passe a la case prochaine.

 

Mon Lisp est déjà fait, mais je ne gérais pas les cases vides...

Grossière erreur j'en conviens... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é