ivf verkoopsplannen moet ik oppervlaktes berekenen van leefruimte, circulatie, blablabla...
& deze mee in de ruimte plaatsen.
vroeger deed ik dit met het commando AREA & deze waarde overtypen in een DTEXT.
momenteel doe ik het met FIELDS (area-value van (omtrek) object)
deze FIELDS staan dus niet in een table.
als ik echter nadien een optelsommetje wil van alle appartementen, kan ik geen gebruik maken van de FIELD-FORMULA-SUM ? deze vraagt namelijk naar cellen met waardes (móeten mijn FIELDS in een TABLE staan?)
momenteel copy-paste ik de FIELD EXPRESSIONS naar kladblok, zet ik er een + tekentje tussen & importeer ik dit in een nieuwe FIELD. dit werkt, maar wreed lastig.
iemand een idee?
voor zij die bijna op vakantie gaan, prettige feesten ;)
Citaat van: jo-king op wo 20 12 2006, 11:43:11
ivf verkoopsplannen moet ik oppervlaktes berekenen van leefruimte, circulatie, blablabla...
& deze mee in de ruimte plaatsen.
vroeger deed ik dit met het commando AREA & deze waarde overtypen in een DTEXT.
momenteel doe ik het met FIELDS (area-value van (omtrek) object)
deze FIELDS staan dus niet in een table.
als ik echter nadien een optelsommetje wil van alle appartementen, kan ik geen gebruik maken van de FIELD-FORMULA-SUM ? deze vraagt namelijk naar cellen met waardes (móeten mijn FIELDS in een TABLE staan?)
momenteel copy-paste ik de FIELD EXPRESSIONS naar kladblok, zet ik er een + tekentje tussen & importeer ik dit in een nieuwe FIELD. dit werkt, maar wreed lastig.
iemand een idee?
voor zij die bijna op vakantie gaan, prettige feesten ;)
Beste Jo-king,
Je zou de fields in AutoLISP programma laten selecteren, en
dan via de database van een field de waarde van een oppervlak
laten optellen.
(setq e (entsel) )
en
(entget (car e)) geeft bij een field selectie
((-1 . <Entity name: 7ef930b0>) (0 . "MTEXT") (5 . "116") (102 .
"{ACAD_XDICTIONARY") (360 . <Entity name: 7ef930b8>) (102 . "}") (330 . <Entity
name: 7ef91cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbMText") (10 861.155 692.282 0.0) (40 . 2.5) (41 . 0.0) (46 . 0.0) (71 . 1)
(72 . 5) (1 . "103.4603") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0)
(42 . 15.8333) (43 . 2.5) (50 . 0.0) (73 . 1) (44 . 1.0))
Waarbij in (1 . "103.4603") de oppervlakte is.
Met vriendelijke groet,
HofCAD CSI
PS Het zal waarschijnlijk wel zoiets als onderstaand worden:
(defun C:TotAA( / ss i n e en )
(setq ss (ssget))
(setq tot 0
i 0
n 0
)
(repeat (sslength ss)
(setq e (entget (ssname ss i))
en (cdr (cadr e))
)
(if (= en "MTEXT")
(progn (setq n (1+ n)
tot (+ tot (atof (cdr (assoc 1 e))))
)
)
)
(setq i (1+ i))
)
(textscr)
(princ (strcat "\n De totale oppervlakte van "
(itoa n)
" oppervlakken is: "
(rtos tot)
)
)
(princ)
)
Waarschijnlijk moeten er nog een aantal voorwaarden gesteld worden,
maar daarvoor moet je het testen.
Best Jo-king,
Probeer onderstaand programma eens.
(defun C:TotAA (/ ss i n e en Fstr LenFstr FstrL5 Obj)
(setq ss (ssget))
(setq tot 0
i 0
n 0
)
(vl-load-com)
(repeat (sslength ss)
(setq e (entget (ssname ss i))
en (cdr (cadr e))
Fstr nil
LenFstr nil
FstrL5 nil
)
(if (= en "MTEXT")
(progn
(setq Obj (vlax-ename->vla-Object (cdr (car e))))
(setq Fstr (vla-fieldcode Obj)
LenFstr (strlen Fstr)
)
(if (> LenFstr 9)
(setq FstrL5 (strcase (substr Fstr (- LenFstr 5) 4)))
)
(if (= FstrL5 "AREA")
(progn (setq n (1+ n)
tot (+ tot (atof (cdr (assoc 1 e))))
)
)
)
)
)
(setq i (1+ i))
)
(textscr)
(princ (strcat "\n De totale oppervlakte van "
(itoa n)
" oppervlakken is: "
(rtos tot)
)
)
(princ)
)
Met vriendelijke groet,
HofCAD CSI
hofcad, mercikes om te helpen! ;)
maar 'k krijg er (nog) niet veel uit
Command: totaa
Select objects: Specify opposite corner: 1 found
Select objects:
De totale oppervlakte van 0 oppervlakken is: 0.00000000
Command:
waarbij ik m'n ADT areaadd objecten selecteer
identiek bij polylines
identiek bij de fields
...
Citaat van: jo-king op do 21 12 2006, 16:15:58
hofcad, mercikes om te helpen! ;)
maar 'k krijg er (nog) niet veel uit
Command: totaa
Select objects: Specify opposite corner: 1 found
Select objects:
De totale oppervlakte van 0 oppervlakken is: 0.00000000
Command:
waarbij ik m'n ADT areaadd objecten selecteer
identiek bij polylines
identiek bij de fields
...
Beste Jo-king,
Het spijt me dat het je niet lukt.
Ik heb het uitgeprobeerd in AutoCAD 2007 met selectie van o.a.polylijnen, cirkels en normale Mtext en fields en ik kreeg wel een goed resultaat.
Alles wat geen field was, werd er uit gefilterd.
Maar wat krijg jij bij een selectie van een Field met
(setq e (entsel) )
en daarna
(entget (car e))
Geeft dat ook zoiets als:
((-1 . <Entity name: 7ef930b0>) (0 . "MTEXT") (5 . "116") (102 .
"{ACAD_XDICTIONARY") (360 . <Entity name: 7ef930b8>) (102 . "}") (330 . <Entity
name: 7ef91cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbMText") (10 861.155 692.282 0.0) (40 . 2.5) (41 . 0.0) (46 . 0.0) (71 . 1)
(72 . 5) (1 . "103.4603") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0)
(42 . 15.8333) (43 . 2.5) (50 . 0.0) (73 . 1) (44 . 1.0))
Is in ADT de fieldcode ook:
"%<\\AcObjProp Object(%<\\_ObjId 2130390624>%).Area>%"?
Met vriendelijke groet,
HofCAD CSI
Citaat van: jo-king op do 21 12 2006, 16:15:58
hofcad, mercikes om te helpen! ;)
maar 'k krijg er (nog) niet veel uit
Beste Jo-king,
Het field Format waarvoor TOTAA geschikt is (None).
Met vriendelijke groet,
HofCAD CSI
Citaat van: HofCAD op vr 22 12 2006, 11:03:45
Citaat van: jo-king op do 21 12 2006, 16:15:58
hofcad, mercikes om te helpen! ;)
maar 'k krijg er (nog) niet veel uit
Beste Jo-king,
Het field Format waarvoor TOTAA geschikt is (None).
Met vriendelijke groet,
HofCAD CSI
yes! indeed :) het werkt met field format op NONE.
voor de leesbaarheid werken we echter met decimal, precision op 0.00 en met een suffix "m²"
zodat je mooi 4.30m² krijgt ipv 4.300000
deze lisp geeft me inderdaad het optelsommetje van de twee fields, maar mijn verzoek was een field expression die dit doet...
maar 'k heb al veel geleerd van je uitleg ;) superbedankt!
en prettige feesten & tot volgend jaar :D
Citaat van: jo-king op vr 22 12 2006, 12:10:43
yes! indeed :) het werkt met field format op NONE.
voor de leesbaarheid werken we echter met decimal, precision op 0.00 en met een suffix "m²"
zodat je mooi 4.30m² krijgt ipv 4.300000
Beste Jo-king,
Als je het field formaat weet, dan is het programma TOTAA toch
makkelijk aan te passen?
Natuurlijk is dit niet 100% wat je gewenst had, maar je zou het programma
kunnen uitbreiden dat de waarde weggeschreven wordt.
Met de reactors van VisualLisp is het misschien mogelijk, deze waarde automatisch
bij verandering aan te passen.
Met vriendelijke groet,
HofCAD CSI
(defun C:TotAA2 (/ ss i n e en Fstr LenFstr FstrL47 Obj)
;;;Slechts geschikt voor fields met een soort gelijke field expression als onderstaand
;;;%<\AcObjProp.16.2 Object(%<\_ObjId 2130260640>%).Area \f "%lu2%pr2%ps[,m\\U+00B2]%ct8[1e-006]">%
(setq ss (ssget))
(setq tot 0
i 0
n 0
)
(vl-load-com)
(repeat (sslength ss)
(setq e (entget (ssname ss i))
en (cdr (cadr e))
Fstr nil
LenFstr nil
FstrL47 nil
)
(if (= en "MTEXT")
(progn
(setq Obj (vlax-ename->vla-Object (cdr (car e))))
(setq Fstr (vla-fieldcode Obj)
LenFstr (strlen Fstr)
)
(if (> LenFstr 47)
(setq FstrL47 (strcase (substr Fstr (- LenFstr 47) 48)))
)
(if (= FstrL47 ".AREA \\F \"%LU2%PR2%PS[,M\\\\U+00B2]%CT8[1E-006]\">%")
(progn (setq n (1+ n)
tot (+ tot (atof (cdr (assoc 1 e))))
)
)
)
)
)
(setq i (1+ i))
)
(textscr)
(princ (strcat "\n De totale oppervlakte van "
(itoa n)
" oppervlakken is: "
(rtos tot) "m\\U+00B2"
)
)
(princ)
)