nardoz Posté(e) le 23 juin 2010 Posté(e) le 23 juin 2010 Bonjour à tous,Je me pose la question de savoir comment on peut faire l'équivalent d'un réseau autour d'un forme géométrique qui ne soit ne rectangulaire ni polaire : une ellipse par exemple.Typiquement, cela pourrait servir à répartir uniformément des chaises autour d'une table elliptique.Il y a bien la commande "diviser" avec l'option "bloc" (on aura pris soin de donner le point d'insertion de la "chaise" au centre de l'arrête avant de l'assise) puis l'option "aligner", mais la répartition des "chaises" se fait bien souvent à l'intérieur de l'ellipse !Quelqu'un a t'il une solution rapide à me proposer ?
Invité ingoenius Posté(e) le 23 juin 2010 Posté(e) le 23 juin 2010 moi j'avait fait ce lisp si peut te servir (defun C:ABLOC () (setq nome (car (entsel "\nSelectionne le Paarcours"))) (setq DTIPO (entget nome)) (setq TIPO (cdr (assoc 0 DTIPO))) ;determina cosé il tipo di oggetto (cond ((= TIPO "ARC") ;se é un arco (command "_pedit" nome "o" "" "" ) ;se non é un polilinea converte e poi procede (setq nomeD (entget (entlast))) ;ultimo oggetto creato (setq nome (cdr (assoc -1 nomeD))) ;nuovo nome entità (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO)) ;estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB))) ;recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome)) ;dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO)))) ;calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "_Y" N "") );fine cond 1 ((= TIPO "CIRCLE");se é un cerchio (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome));dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO))));calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "_Y" N "") );fine cond 2 ((= TIPO "ELLIPSE");se é un'ellisse (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome));dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO))));calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "o" N "") );fine cond 3 ((= TIPO "LWPOLYLINE");se é una polilinea (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome));dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO))));calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "_Y" N "") );fine cond 4 ((= TIPO "SPLINE");se é una spline (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome));dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO))));calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "_Y" N "") );fine cond 5 ((= TIPO "LINE");se é una line (command "_pedit" nome "o" "" "" );se non é un polilinea converte e poi procede (setq nomeD (entget (entlast)));dati ultima selezione (setq nome (cdr (assoc -1 nomeD)));nuovo nome entità (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq SPAZIO (getreal "\nInsert distance to blocks\n")) (setq dati (entget nome));dati polilinea (command "_area" "_object" nome) (setq lung (getvar "perimeter")) (setq N (+ 1 (fix (/ lung SPAZIO))));calcola il numero delle copie da fare (command "_divide" nome "B" NBLOC "_Y" N "") );fine cond 6 (t nil) );fine delle cond );fine defun ;-------------------------------------------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------------------------------------- ;inserisce dei blocchi all'interno di una zona selezionata ;calcolando quante linee e quante colonne inserire (defun C:QBLOC (/ OSN BLOCCO DatiB NBLOC NEWBLOC P1 P2 x1 x2 Disty Distx Ecx Ecy COL LIN OB2 QUANTI message);variabili locali (SETQ OSN (GETVAR "OSMODE"));salva gli snap (SETVAR "OSMODE" 0) ;toglie gli snap (setq BLOCCO (car (entsel "\nSelect 1 block "))) (setq DatiB (entget BLOCCO));estrae tutte le informazioni del blocco (setq NBLOC (cdr (assoc 2 DatiB)));recupera il nome del blocco selezionato (setq NEWBL NBLOC) (setq P1 (getpoint "\nseleziona angolo in basso a sinistra")) (setq P2 (getpoint "\nseleziona angolo alto destra ")) (setq x1 (car p1)) (setq x2 (car P2)) (setq Distx (- x2 x1)) (setq y1 (cadr P1)) (setq y2 (cadr P2)) (setq Disty (- y2 y1)) ;(setq X (fix Distx)) ;(setq Y (fix Disty)) (setq EcX (getreal "\n DISTANZA ORIZZONTALE X?\n")) (setq Ecy (getreal "\n DISTANZA VERTICALE Y? \n")) (setq COL (1+(fix (/ Distx ECx)))) (setq LIN (1+ (fix (/ Disty ECy)))) (setq QUANTI (itoa (* col lin)));stringa per il messaggio finale (command "_insert" NEWBL P1 "" "" "");inserisce il blocco in P1 (setq OB2 (entlast)) (command "_array" OB2 "" "_R" LIN COL Ecy Ecx "") (SETVAR "OSMODE" OSN) ;rimette gli snap salvati prima (setq message (strcat "inseriti " QUANTI " blocchi " NEWBL));unisco le stringhe (alert message);message box col messaggio ;(alert (princ) ) ;-------------------------------------------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------------------------------------------------------
nardoz Posté(e) le 23 juin 2010 Auteur Posté(e) le 23 juin 2010 Merci pour cette réponse rapide, mais je cherchais une solution plus simple à mettre en œuvre, je veux dire sans passer par de la programmation.
bryce Posté(e) le 29 juin 2010 Posté(e) le 29 juin 2010 Bonjour, La commande Diviser me semble la solution la plus simple.Si le bloc se met du mauvais côté, tu peux: - éditer le bloc, et dans l'éditeur de bloc faire un miroir/une rotation de la géométrie autour du point de base (si le bloc n'est pas utilisé ailleurs dans le dessin, sinon tu peux toujours le dupliquer sous un autre nom) - ou mieux, sélectionner tes blocs après insertion, et dans la palette Propriétés leur donner une échelle négative en X, Y ou Z selon le cas (si la case "mettre à l'échelle uniformément" n'était pas cochée lors de la création du bloc, mais ça peut se modifier dans l'éditeur de blocs...) - ou encore mieux, transformer tes blocs en blocs dynamiques en leur ajoutant une action d'inversion ou de rotation.Il te suffit ensuite de les sélectionner et de changer leur état d'inversion dans la palette Propriétés, ou de donner à ton paramètre d'angle une valeur de 180° au lieu de 0°. [Edité le 1/7/2010 par bryce] Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
nardoz Posté(e) le 29 juin 2010 Auteur Posté(e) le 29 juin 2010 Ok merciJ'avais bien vu la solution du "diviser" et de faire tourner les blocs après coup, mais la solution de transformer les blocs en blocs dynamiques me semble plus rapide.
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