Scrivere il valore delle aree in modo automatico

delio

Utente poco attivo
Professione: Geometra
Software: AutoCAD 2016, Archicad
Regione: campania
#21
ottimo, gentilissimo! aggiorno subito il file anche se.......al posto del retino forse troverei utile creare una polilinea, è possibile?
 

Betoniera

Utente Junior
Professione: Ingegnere
Software: Autodesk Robot
Regione: Lombardia
#22
ottimo, gentilissimo! aggiorno subito il file anche se.......al posto del retino forse troverei utile creare una polilinea, è possibile?

Sei fortunato perchè il programma prima di calcolare l'area crea una polilinea che poi io cancello.
Allora modifica il programma mettendo ; davanti a queste 2 righe.
La prima è quella che crea il retino, la seconda è quella che cancella la polilinea.
Se un domani vuoi ripristinarle basterà togliere ;
Ciao


;(command "_-bhatch" "_s" en "" "")*
;(command "_erase" en "")
 

delio

Utente poco attivo
Professione: Geometra
Software: AutoCAD 2016, Archicad
Regione: campania
#23
Ad aver trovato questo listato e te così disponibile :)

grazie ancora!

ps. sto calcolando aree e perimetri di molte stanze che poi devo inserire in excel, esiste un listato che mi permette di creare una tabella per ogni stanza con nome stanza (numero progressivo che segue l'ordine di come le seleziono), area e perimetro?
 

Tristan

Utente Senior
Professione: Application Engineer
Software: AutoCAD Civil 3D, Revit e altre amenità
Regione: Trentino
#24
sto calcolando aree e perimetri di molte stanze che poi devo inserire in excel, esiste un listato che mi permette di creare una tabella per ogni stanza con nome stanza (numero progressivo che segue l'ordine di come le seleziono), area e perimetro?
Questa cosa Revit la fa da una vita ma voi ancora vi ostinate a lavorare in AutoCAD...contenti voi
 

MANOLI63

Utente poco attivo
Professione: progettista
Software: autocad architecture 2012
Regione: lombardia
#25
Questa cosa Revit la fa da una vita ma voi ancora vi ostinate a lavorare in AutoCAD...contenti voi
Buonasera a tutti,

sono nuovissimo (primo intervento). Non so nulla di linguaggio lisp. Vi sottopongo uno strumento per me utilissimo (trovato in queste pagine) a cui ho semplicemente cambiato nome al comando. Mi piacerebbe che restituisse valori in mq e non in punti (lavoro in mm e mi scrive ad esempio 16000000 (4000x4000 punti) invece di 16 (mq). Credo occorra un'informazione del tipo "dividi punti per 1000000 !?! ).
grazie

(vl-load-com)
(defun C:TOTMQ (/ *error* dest i e ss ht suma enti oldzin pct prec val p1)

(or acDoc (setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
(vla-startUndoMark acDoc)
(setq oldzin (getvar "DIMZIN"))

(defun *error* (msg)
(and msg (/= msg "Function cancelled") (princ msg))
(setvar "DIMZIN" oldzin)
(vla-EndUndoMark acDoc)
(princ)
)

(if
(setq suma 0 ht 0 ss (ssget '((0 . "TEXT"))))
(progn
(repeat (setq i (sslength ss))
(setq suma (+ suma (atof (cdr (assoc 1 (setq e (entget (ssname ss (setq i (1- i)))))))))
ht (max ht (cdr (assoc 40 e)))
)
)
(princ "\nSelect Existing Text Entity to be replaced OR Hit Enter Twice To Place as New text")
(setq dest (ssget ":E:S:L" '((0 . "TEXT"))))
(cond (dest
(setq enti (vlax-ename->vla-object (ssname dest 0))
val (vla-get-textstring enti)
)
(if (setq pct (vl-string-search "." val)) (setq prec (- (strlen val) pct 1)) (setq prec 0))
(if (> prec 0) (setvar "DIMZIN" 1) (setvar "DIMZIN" 8) )
(vla-put-textstring enti (rtos suma 2 prec))
)
((setq p1 (getpoint "\nText Position:"))
(entmake (list '(0 . "TEXT") (cons 10 p1) (cons 40 ht) (cons 1 (rtos suma 2 4))))
;;; (command "text" "j" "ml" p1 (* 0.25 (getvar "LTSCALE")) "0" (rtos suma 2 4))
)
)
)
)
(print suma)
(princ)
)
 

Allegati

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#26
Non restituisce l'area in "punti". Non esiste l'unità "punto" in Autocad.
Restituisce il valore in unità al quadrato
Se lavori in mm, l'area è in mmq. Se lavori in m, l'area è in mq.
D'altra parte se ritieni corretto e d'uso corrente l'uso dei mm, non vedo perche non esprimere l'area in mmq.

in tutti i casi la modifica va fatta qui:
(entmake (list '(0 . "TEXT") (cons 10 p1) (cons 40 ht) (cons 1 (rtos suma 2 4))))

che diventa
(entmake (list '(0 . "TEXT") (cons 10 p1) (cons 40 ht) (cons 1 (/ (rtos suma 2 4) 1000000))))
 

MANOLI63

Utente poco attivo
Professione: progettista
Software: autocad architecture 2012
Regione: lombardia
#27
Grazie Cristallo!

purtroppo il perchè del fatto che lavoro in mm ma mi servono le dimensioni in mq è un quesito che ho posto al mio datore di lavoro, ma il problema è legato alla complessità delle attività aziendali (siamo in diversi a mettere le mani sugli elaborati, ognuno per le proprie esigenze: a me servono i mq, ad altri i mm..).
Piuttosto ti chiedo un'ultima cortesia: avrei la stessa necessità per il file che ti allego ora. Mi puoi indicare come correggerlo?
1000 grazie ancora!

;;; 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:MQ (/
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" "mq")
(command "._layer" "_thaw" "mq" "_on" "mq" "_unlock" "mq" "_set" "mq" "") ;_ closes command
(command "._layer" "_make" "mq" "_color" 1 "mq" "") ;_ 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 0)
)
(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 'MQ' to start command...<<<")
(princ)
 

Allegati

  • 5.1 KB Visualizzazioni: 7