TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoCAD
 Lisp per calcolo aree e scrittura del risultato

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
Jarjarfix1 Inserito il - 18 aprile 2009 : 08:36:41
Buongiorno.
Avrei bisogno di un programmino lisp per il calcolo il automatico delle aree di polilinee chiuse o contorni. Ho cercato sul web se trovavo qualcosa ma non ho trovato nulla che faccia al caso mio.
Mi servirebbe (sempre se possibile) trovare qualcosa che mi permetta di selezionare un contorno e che in automatico al suo interno mi scriva la superficie in mq con lo stile di testo corrente. Se poi la selezione delle polilinee potesse essere multipla sarebbe perfetto.
Tra i lisp che ho visionato ho trovato il lisp che allego ma purtroppo è per autocad in versione inglese ma potrebbe essere una buona base di partenza....se funzionasse :-). Non mi serve però il nome del locale.
Utilizzo autocad 2008

Scarica allegato:

Pla.zip
1,29 KB

Buon weekend a tutti
20   U L T I M E    R I S P O S T E    (in alto le più recenti)
tuxon Inserito il - 02 luglio 2018 : 23:43:35
Buonasera a tutti, è il mio primo post.
Da poco ho iniziato a conoscere la programmazione Lisp, che sembra interessantissima per risparmiare tempo a lavoro.

Ho provato un paio di lisp per le aree, che vorrei pian piano personalizzare.

Ho provato ad utilizzare l'Arearon di questa discussione, veramente utile.

Sarebbe possibile creare, invece che testi, dei blocchi con attributi da poter poi estrapolare?

Vi ringrazio
Giuseppe Mauro Inserito il - 11 marzo 2018 : 19:51:15
Forse è il tuo pc
Riccardo Accordino Inserito il - 09 marzo 2018 : 12:03:12
Ciao, come mai su autocad 2015 non funziona niente?
Giuseppe Mauro Inserito il - 10 novembre 2012 : 13:06:51
Wow Aniello... ma allora ci segue ancora!

Mi sento meno solo
Terminator Inserito il - 09 novembre 2012 : 12:15:15
Così dovrebbe andare...
Le polilinee provvisorie le usavo per il calcolo delle aree singole con un punto di selezione all'interno, in sostanza non ho fatto altro che scrivere al centro della bounding box della polilinea provvisoria, l'area singola estrapolata. Per quanto concerne il testo, non conoscendo la sua altezza, ho usato la variabile che mi rappresenta l'altezza della vista diviso 45.

x Aniello: ringrazio per il suggerimento ma ho preferito usare la polilinea, molto più immediato

Scarica allegato:

areat.zip
2,24 KB
arri Inserito il - 09 novembre 2012 : 10:33:21
prego
Jarjarfix1 Inserito il - 09 novembre 2012 : 10:21:24
Mitico Arri. Grazie mille funziona alla perfezione.
Aniello Annunziata Inserito il - 09 novembre 2012 : 09:48:24
L'idea potrebbe essere di creare un retino (fittizio) con la funzione addHatch, passando gli oggetti selezionati in VBA ho l'esempio che è questo:


Sub Example_AddHatch()
    ' This example creates an associative gradient hatch in model space.
    
    Dim hatchObj As AcadHatch
    Dim patternName As String
    Dim PatternType As Long
    Dim bAssociativity As Boolean
    
    ' Define the hatch
    patternName = "CYLINDER"
    PatternType = acPreDefinedGradient '0
    bAssociativity = True
    
    ' Create the associative Hatch object in model space
    Set hatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
    Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
    Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.18")
    Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.18")
    Call col1.SetRGB(255, 0, 0)
    Call col2.SetRGB(0, 255, 0)
    hatchObj.GradientColor1 = col1
    hatchObj.GradientColor2 = col2
    
    ' Create the outer boundary for the hatch (a circle)
    Dim outerLoop(0 To 0) As AcadEntity
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 3: center(1) = 3: center(2) = 0
    radius = 1
    Set outerLoop(0) = ThisDrawing.ModelSpace.AddCircle(center, radius)
    
    ' Append the outerboundary to the hatch object, and display the hatch
    hatchObj.AppendOuterLoop (outerLoop)
    hatchObj.Evaluate
    ThisDrawing.Regen True
End Sub


In pratica si potrebbe usare la funzione (ssget) per selezionare oggetti da passare alla funzione (vla-addhatch) una votla ottenuta la hatch si potrebbero interrogare i dati (area e perimetro, centroide, assi principali di inerzia e momenti di inerzia) e quindi cancellare l'entità.
Terminator Inserito il - 08 novembre 2012 : 22:16:49
Sarebbe bello effettuare i calcoli dell'area non solo con polilinee chiuse, cerchi, ellissi, ma anche con aree formate da entità varie. Per scrivere l'area singola all'interno dell'entità effettivamente basta usare la funzione vla-getboundingbox, per le aree chiuse formate da entità che non sono le precedenti bisognerebbe procedere in altra maniera.
arri Inserito il - 08 novembre 2012 : 18:48:55
Messaggio inserito da Jarjarfix1

Mi sa che sono negato su queste cose...
Allora:
Ho provato a cerare il file chiamato arearon.lisp inserendo le stringhe che hai riportato sopra.
ho caricato il lisp in autocad, ma quando lancio il comando arearon mi esce la scritta sottostante.


Funzione annullataDigitare il numero di operazioni da annullare o
[Auto/Controllo/INIzio/Fine/Segno/INDietro] <1>:

Ps. Ho autocad 2012 non so se centra qualcosa!


mancano alcuni underscore alle risposte dei comandi,
per la versione italiana usa questo

Scarica allegato:

arearon.rar
2,08 KB
Jarjarfix1 Inserito il - 08 novembre 2012 : 17:41:10
Mi sa che sono negato su queste cose...
Allora:
Ho provato a cerare il file chiamato arearon.lisp inserendo le stringhe che hai riportato sopra.
ho caricato il lisp in autocad, ma quando lancio il comando arearon mi esce la scritta sottostante.


Funzione annullataDigitare il numero di operazioni da annullare o
[Auto/Controllo/INIzio/Fine/Segno/INDietro] <1>:

Ps. Ho autocad 2012 non so se centra qualcosa!
arri Inserito il - 08 novembre 2012 : 17:23:50
Messaggio inserito da Jarjarfix1

Grazie.
Questo va già bene ma purtroppo non mi permette di selezionare più contorni contemporaneamente e calcolare le rispettive aree.


lo fa quello segnalato da Jotar

http://www.cadtutor.net/forum/showthread.php?32396-Area-calculation-for-region...&p=211618&viewfull=1#post211618

;;; CADALYST 07/08  www.cadalyst.com/code 
;;; Tip 2292: AreaRon.lsp	Area of Closed Polylines	(c) 2008 Ronald Maneja (Wizman)

;;; PRODUCES TEXT CONTAINING AREA OF  SELECTED CLOSED POLYLINES
;;; AND PUTS THEM IN AREARON LAYER
;;; CREATED BY RON MANEJA 31JAN08
;;; USER INPUTS: SCALE, POLYLINE SELECTION
;;;

;;; VERSION 1.1 (09FEB09): ADDED AREA FOR REGIONS, SPLINE, CIRCLE & ELLIPSE
;;; 

(defun C:AREARON (/
		  allx
		  ally
		  areaobj
		  counter
		  ctr
		  el
		  entity-name
		  entnamevla
		  mysset
		  prec_temp
		  pt
		  reg_centroid
		  temp
		  tst
		  vertex
		  x
		  y
		  oldlayer
		  oldsnap
		  temperr
		  traperror
		  blpt
		  cir_center
		  el_center
		  maxpt
		  minpt
		  spl_center
		  trpt
		 )

(defun set_var ()
  (setvar 'cmdecho 0)
  (setq oldlayer (getvar "clayer"))
  (setq oldsnap (getvar "osmode"))
  (setq temperr *error*)
  (setq *error* traperror)
  (setvar "osmode" 0)
)


(defun traperror (errmsg)
  (command nil nil nil)
  (if (not (member errmsg '("console break" "Function Cancelled"))
      )
    (princ (strcat "\nError: " errmsg))
  )
  (command "_.undo" "end")
  (setvar "clayer" oldlayer)
  (setvar "osmode" oldsnap)
  (setvar "cmdecho" 1)
  (princ "\nError Resetting Enviroment ")
  (setq *error* temperr)
)



(defun reset_var ()
  (setq *error* temperr)
  (setvar "clayer" oldlayer)
  (setvar "osmode" oldsnap)
  (command "_.undo" "end")
  (setvar "cmdecho" 1)
)

  (vl-load-com)
  (set_var)
  (command "_.undo" "be")
  (if (tblsearch "Layer" "AREARON")
    (command "._layer" "_thaw" "AREARON" "_on" "AREARON" "_unlock" "AREARON" "_set" "AREARON" "") ;_ closes command
    (command "._layer" "_make" "AREARON" "_color" 1 "AREARON" "") ;_ closes command
  )
  (if (null sch)
    (setq sch 1.0)
  )
  (initget 6)
  (setq	temp (getreal (strcat "\nENTER SCALE <"
			      (rtos sch 2 2)
			      ">: "
		      )
	     )
  )
  (if temp
    (setq sch temp)
    (setq temp sch)
  )

  (if (null precision)
    (setq precision 1)
  )
  (initget 6)
  (setq	prec_temp
	 (getint
	   (strcat "\nHOW MANY DECIMAL PLACES?: <"
		   (rtos precision 2 2)
		   ">: "
	   )
	 )
  )
  (if prec_temp
    (setq precision prec_temp)
    (setq prec_temp precision)
  )



  (prompt "\nSELECT CLOSED POLYLINES/SPLINES, REGION, CIRCLE & ELLIPSE:> ")
  (setq
    mysset  (ssget '((-4 . "<or")
		     (-4 . "<and")
		     (0 . "LWPOLYLINE")
		     (70 . 1)
		     (-4 . "and>")
		     (-4 . "<and")
		     (0 . "SPLINE")
		     (70 . 11)
		     (-4 . "and>")
		     (0 . "REGION")
		     (0 . "CIRCLE")
		     (0 . "ELLIPSE")
		     (-4 . "or>")
		    )
	    )
    counter 0
  )
  (if mysset
    (progn
      (while (< counter (sslength mysset))
	(setq entity-name (ssname mysset counter)
	      EL	  (entget entity-name)
	      entnamevla  (vlax-ename->vla-object entity-name)
	      areaobj	  (vla-get-area entnamevla)
	)
	(cond
	  ((eq (cdr (assoc 0 el)) "LWPOLYLINE")
	   (progn
	     (setq allx	0
		   ally	0
		   ctr 0
		   tst 1
	     )
	     (while (assoc 10 el)
	       (setq vertex (cdr (assoc 10 el))
		     ctr    (+ ctr 1)
		     x	    (car vertex)
		     y	    (cadr vertex)
		     allx   (+ allx x)
		     ally   (+ ally y)
		     EL	    (cdr (member (assoc 10 el) el))
	       )
	     )
	     (setq x  (/ allx ctr)
		   y  (/ ally ctr)
		   pt (list x y)
	     )
	     (command "text"
		      "j"
		      "mc"
		      pt
		      (* sch 2.5)
		      "0"
		      (rtos areaobj 2 precision)
	     )
	   )
	  )
	  ((eq (cdr (assoc 0 el)) "REGION")
	   (setq reg_centroid
		  (vlax-safearray->list
		    (vlax-variant-value
		      (vla-get-centroid entnamevla)
		    )
		  )
	   )
	   (command "text"
		    "j"
		    "mc"
		    reg_centroid
		    (* sch 2.5)
		    "0"
		    (rtos areaobj 2 precision)
	   )
	  )

	  ((eq (cdr (assoc 0 el)) "CIRCLE")
	   (setq cir_center
		  (vlax-safearray->list
		    (vlax-variant-value
		      (vla-get-center entnamevla)
		    )
		  )
	   )
	   (command "text"
		    "j"
		    "mc"
		    cir_center
		    (* sch 2.5)
		    "0"
		    (rtos areaobj 2 precision)
	   )
	  )

	  ((eq (cdr (assoc 0 el)) "ELLIPSE")
	   (setq el_center
		  (vlax-safearray->list
		    (vlax-variant-value
		      (vla-get-center entnamevla)
		    )
		  )
	   )
	   (command "text"
		    "j"
		    "mc"
		    el_center
		    (* sch 2.5)
		    "0"
		    (rtos areaobj 2 precision)
	   )
	  )

	  ((eq (cdr (assoc 0 el)) "SPLINE")
	   (vla-GetBoundingBox entnamevla 'minPt 'maxPt)
	   (setq blPt (vlax-safearray->list minPt)
		 trPt (vlax-safearray->list maxPt)
	   )
	   (setq spl_center
		  (mapcar '* '(0.5 0.5 0.5) (mapcar '+ blPt trPt))
	   )
	   (command "text"
		    "j"
		    "mc"
		    spl_center
		    (* sch 2.5)
		    "0"
		    (rtos areaobj 2 precision)
	   )
	  )
	)
	(setq counter (+ counter 1))
      )
    )
    (alert "\nNO CLOSED POLYLINES/LWPOLYLINES/SPLINES IN YOUR SELECTION"
    )
  )
  (reset_var)
  (princ)

)
(prompt "'\n>>>...AreaRon.Lsp is now Loaded, Type 'Arearon' to start command...<<<")
(princ)
Jarjarfix1 Inserito il - 08 novembre 2012 : 15:54:09
Grazie.
Questo va già bene ma purtroppo non mi permette di selezionare più contorni contemporaneamente e calcolare le rispettive aree.
Terminator Inserito il - 08 novembre 2012 : 15:29:11
Messaggio inserito da Jarjarfix1

Buongiorno a tutti.
Dopo parecchio tempo mi ritornerebbe utile il Lisp per calcolare le aree di contorni chiusi ed inserire il risultato all'interno del contorno stesso, ma non trovo più il Lisp che mi avevate gentilmente dato.
Riuscireste ad "uploadarlo"?
Grazie.


Alternativa di un lisp scritto tempo fa:


Scarica allegato:

areat.zip
2,09 KB
Jarjarfix1 Inserito il - 08 novembre 2012 : 14:36:41
Buongiorno a tutti.
Dopo parecchio tempo mi ritornerebbe utile il Lisp per calcolare le aree di contorni chiusi ed inserire il risultato all'interno del controno stesso, ma non trovo più il Lisp che mi avevevate gentilmente dato.
Riuscireste ad "uploadarlo"?
Grazie.
arri Inserito il - 23 aprile 2009 : 19:27:23
Citazione:
Messaggio inserito da Jarjarfix1
Ho scoperto che per far funzionarequesto lisp devo impostare a zero l'altezza dello stile di testo che voglio utilizzare. Poi funzione tutto alla perfezione.
Grazie a tutti.



lo stile di testo deve sempre essere impostato a 0

per avere la richiesta dell'altezza durante il comando _TEXT

(nel lisp si sballava la sequenza di risposte)
Jarjarfix1 Inserito il - 23 aprile 2009 : 18:39:54
Scusatemi ma non riuscivo più ad accedere a questo sito (non so il perchè)
Comunque ho provato a modificare la scala del testo ma non cambiava nulla. Ho scoperto che per far funzionarequesto lisp devo impostare a zero l'altezza dello stile di testo che voglio utilizzare. Poi funzione tutto alla perfezione.
Grazie a tutti.
arri Inserito il - 21 aprile 2009 : 10:04:55
Citazione:
Messaggio inserito da antoniovinci

Citazione:
Messaggio inserito da arri
va bene per la versione inglese, mentre per quella italiana no

Per inciso, il mio link di stamattina alle 9:02 e' un "Arearon" gia' italianizzato.






più potente quello indicato da Jotar

VERSION 1.1 (09FEB09): ADDED AREA FOR REGIONS, SPLINE, CIRCLE & ELLIPSE
n/a Inserito il - 21 aprile 2009 : 09:06:25
Citazione:
Messaggio inserito da Jarjarfix1
all'interno della mia polilinea chiesa mo lascia i valori a zero


Prova ad alzare il valore lampeggiante:



Per capire come funziona il potente Arearon, ti consiglio di esercitarti su un disegno nuovo di prova, contenente un paio di rettangoli.

Jarjarfix1 Inserito il - 21 aprile 2009 : 08:16:55
Buongiono. Scusate se rispondo solo ora ma ieri internet non mi permetteva di accedere a questo sito (e non è la prima volta che succede)
Quoto la "polemica" di Riga in quanto il grado di "MAster" l'ho raggiunto solo perchè frequento questo sito quando non so come risolvere un problema. Se fossi un esperto probabilmente non avrei nemmeno scoperto che esisteva e comunque il primo link a arearon mi apriva una pagina che sembrava criptata.
Chiusa polemica.
Comunque ho seguito le istruzioni ma e ho scaricato e installato e caricato i file. Quando lancio il lisp mi crea un file txt (con l'area esatta) ma all'interno della mia polilinea chiesa mo lascia i valori a zero.
Il prgramma (se mi funzionasse) sarebbe perfetto.
Grazie e buona giornata a tutti

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,12 secondi.