CADsite forum

AutoCAD => Autolisp => Topic gestart door: Anonymous op zo 12 12 2004, 09:22:08

Titel: inhoud van attributes in een blok opvragen
Bericht door: Anonymous op zo 12 12 2004, 09:22:08
1 ) Is er een mogelijkheid in lisp om de inhoud van een attribute binnen een blok op te vragen?
2) hoe sorteer ik dan de inhoud ? (alfanumeriek of numeriek)
Titel: inhoud van attributes in een blok opvragen
Bericht door: Sven op do 16 12 2004, 17:43:22
is er niemand die hier een antwoord op weet?
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op do 16 12 2004, 21:05:05
1 ja daar zijn verschillende manieren voor

maar de vraag is verder te onduidelijk voor een gericht antwoord

wat wil je bereiken met het opvragen van de inhoud?
hoe wil je sorteren (beide manieren behoren tot de mogelijkheid)
Titel: inhoud van attributes in een blok opvragen
Bericht door: Sven op vr 17 12 2004, 08:47:32
ok, dit is de opbouw van de tekening: 1 blok met 10 attributes wordt telkens geinserteerd (zij het op verschillende lagen). Elke laag vertegenwoordigd een ander materiaal.
Nu is het de bedoeling om per laag de blok met attributes op te vragen en daarna op de paper-space een lijst te krijgen van de blokken per laag. Hierbij wordt enkel het eerste attribute (een nummer) en 2 andere attributes weergegeven.
Het is de bedoeling om de blocks te sorteren volgens het nummer in de eerste attribute.

nen gansen boterham, he.
Titel: inhoud van attributes in een blok opvragen
Bericht door: HofCAD op vr 17 12 2004, 10:00:56
Citaat van: Svenok, dit is de opbouw van de tekening: 1 blok met 10 attributes wordt telkens geinserteerd (zij het op verschillende lagen). Elke laag vertegenwoordigd een ander materiaal.
Nu is het de bedoeling om per laag de blok met attributes op te vragen en daarna op de paper-space een lijst te krijgen van de blokken per laag. Hierbij wordt enkel het eerste attribute (een nummer) en 2 andere attributes weergegeven.
Het is de bedoeling om de blocks te sorteren volgens het nummer in de eerste attribute.

nen gansen boterham, he.

Beste Sven,

Wat je wilt doen, is te doen.
Maar het zal je wel enige tijd kosten.
Mogelijk zal het bijgevoegde programma je leren, hoe je de
gegevens via Lisp uit een block kunt halen.

Groetjes HofCAD CSI



(defun c:onderzoek()
(princ "\nCAD SCENE INVESTIGATION by HofCAD\n")
(setq es (entsel "Selecteer een block met attributen."))
(princ "\n\n(setq es (entsel \042Selecteer een block met attributen.\042)) geeft\n")
(princ es)
(setq e0 (car es))
(princ "\n\n(setq e0 (car es)) geeft naam van de insert\n")
(princ e0)
(setq e0g (entget e0))
(princ "\n\n(setq e0g (entget e0)) geeft gegevens van de insert\n")
(princ e0g)
(setq e01 (entnext e0))
(princ "\n\n(setq e01 (entnext e0)) geeft naam van het eerste attribuut\n")
(princ e01)
(setq e01g (entget e01))
(princ "\n\n(setq e01g (entget e01)) geeft gegevens van eerste attribuut\n")
(princ e01g)
(setq e02 (entnext e01))
(princ "\n\n(setq e02 (entnext e01)) geeft naam van het tweede attribuut\n")
(princ e02)
(setq e02g (entget e02))
(princ "\n\n(setq e02g  (entget e02)) geeft gegevens van tweede attribuut\n")
(princ e02g)
(setq e03 (entnext e02))
(princ "\n\n(setq e03 (entnext e02)) geeft naam van het derde attribuut\n")
(princ e03)
(setq e03g (entget e03))
(princ "\n\n(setq e03g (entget e03)) geeft gegevens van derde attribuut\n")
(princ e03g)
(setq e04 (entnext e03))
(princ "\n\n(setq e04 (entnext e03)) geeft naam van het vierde attribuut\n")
(princ e04)
(setq e04g (entget e04))
(princ "\n\n(setq e04g (entget e04)) geeft gegevens van vierde attribuut\n")
(princ e04g)
(princ)
)
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op vr 17 12 2004, 10:24:02
mooi begin lijkt mij
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op ma 04 04 2005, 14:13:18
Hoe kan er met lisp-routines vanuit AutoCAD naar Excel gegaan worden, om in Excel mijn gegevens van de getekende entiteiten (zoals breedte, hoogte, dikte, ...) om te kunnen zetten naar een *.CSV bestand.

Dit is naar het schijnt mogelijk , maar weet niet hoe !!
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op ma 04 04 2005, 14:54:21
Je kunt dit doen met de functie command:attext
Voor nadere info moet je maar een mailtje sturen
Titel: inhoud van attributes in een blok opvragen
Bericht door: Joop op di 05 04 2005, 07:41:23
Over Exell en AutoCAD is al enkele keren op dit forum gepraat.
Volg de volgende link:
http://www.cadsite.be/forum/viewtopic.php?t=194

Succes,

Joop
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 08:16:12
Beste Joop,

Bedankt voor de link.
Momenteel snap ik er nog niet overdreven veel van (heb maar een basis over lisp), maar lijkt me enorm interessant te zijn.

Bedankt
Thomas151283
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 08:40:06
Kan iemand mij vertellen of ik op deze manier goed bezig ben om een koppeling tussen AutoCAD en Excel te verkrijgen.

(defun c:zijkant ()
;;;(defun c:zijkant (/ lop lbp rbp rop)
;;;  lop = Linker Onder hoek Punt
;;;  lbp = Linker Boven hoek Punt
;;;  rbp = Rechter Boven hoek Punt
;;;  rop = Rechter Onder hoek Punt
 (command "view" "o" "front")
 (command "erase" "all" "")
 (command "layer" "m" "zijkant" "c" "7" "" "")
;;; Tekenen van een rechthoek met lengte en breedte
 (graphscr)
 (setq lop (getpoint "\nSelecteer invoegpunt: "))
 (setq breedte (getreal "\nGeef breedte in  :"))
 (setq hoogte (getreal "\nGeef hoogte in  :"))
;;;0° is in radialen 0, 0 radialen omgezet in graden = 0°
 (setq rop (polar lop 0 breedte))
;;; lengte is hetgeen wat eerst word ingegeven => x-verplaatsing
;;;(dtr 90) is 90° omgezet in radialen = 1.5708
 (setq rbp (polar rop (dtr 90) hoogte))
 (setq lbp (polar rbp pi breedte))
 (command "pline" lop rop rbp lbp "c")
 (command "zoom" "e")
 (princ)
 (command "regenall")
;;; Inserteerpunt attribute Breedte
 (setq   insertbr
    (list (+ (car lop) breedte)
          (+ (cadr lop) 0)
          (+ (caddr lop) 0)
    )
 )
 (command "attdef"     "V"       ""      "PartW"
      "Geef de breedte op aub:"    ""      insertbr
      "10"        ""
     )
;;; Inserteerpunt attribute Hoogte
 (setq   inserth
    (list (+ (car lop) 0)
          (+ (cadr lop) hoogte)
          (+ (caddr lop) 0)
    )
 )
 (command "attdef"     "V"       ""      "PartL"
      "Geef de hoogte op aub:"    ""      inserth
      "10"        ""
     )
;;; Inserteerpunt attribute Materiaal
 (setq   insertmat
    (list (+ (car lop) 0)
          (+ (cadr lop) 0)
          (+ (caddr lop) 0)
    )
 )
 (command "attdef"    "V"          ""        "Partmat"
      "Geef de materiaalsoort op:"     ""        insertmat
      "10"       ""
     )
;;; Inserteerpunt attribute Referentie
 (setq   insertref
    (list (/ (+ (car lop) breedte) 2)
          (/ (+ (cadr lop) hoogte) 2)
          (+ (caddr lop) 0)
    )
 )
 (command "attdef"         "V"       ""
      "PartRef"         "Geef de referentienaam op aub:"
      ""            insertref       "10"
      ""
     )
 (command "zoom" "e")
 (princ)
 (command "filedia" "1")
 (command "attdia" "1")
;;; Maken van WBLOCK
 (command "wblock"
      (getstring 7 "\nGeef een bestandsnaam op: ")
      ""
      (setq lop (getpoint "\nDuid een invoegpunt aan: "))
      "all"
      ""
 )
;;; Inserteren van WBLOCK
 (command "insert"
      (getstring 7 "\nTik de naam van de in te voegen wblock in: ")
      (getstring 7 "\nDuid het invoegpunt aan: ")
      "1"
      "1"
      "0"
 )
;;; 7 wordt geplaatst om in de bestandsnaam een spatie in te kunnen geven
 (command "zoom" "e")
;;; Van AutoCAD naar Excel
 (command "eattext")
 (princ)
)


Thx, Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op di 05 04 2005, 08:50:29
Wat wil je bereiken ??
Attributen uit blocks kun je exporteren via het commando:attext
http://www.cadsite.be/forum/viewtopic.php?t=116&highlight=attext
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op di 05 04 2005, 09:05:43
een paar opmerkingen als opbouwende kritiek bedoeld.

Je gebruik erase all in een lisp dit wil ik je erstig ontraden.
(vooral als je geen vangnet voor fouten inbouwt)

er is nog geen rekening gehouden met de instellingen van diverse systeem variabelen in de lisp
dit kan er toe leiden dat je rechthoek in een ruit verandert en de attributen op een andere plaats komen dan dat je had gedacht.

Namen lengte breedte e.d worden meerdere keren gevraagd dit is veel werk om in te voeren en verhoogt bovendien de kans op fouten.

als je een Wblock maakt heb je 3 mogelijkheden om met de basis hiervoor om te gaan.
1 deze bijft ongewijzigd.
2 deze wordt naar een block omgezet
3 deze wordt gewist.

standaard is het 1 en blijft de basis info in de tekenig staan
is dat de bedoeling ?


Zet je attributen op een andere laag dan de rechthoek dat kan af en toe van pas komen.

Definieer de tekststyle e.d waarmee je de attributen maakt.

Waarom insert je niet een standaard blockje waar de attributen al in gedefineerd zijn ? waarna je dit blockje explodeert
in plaats van de attributen telkens opnieuw aan te maken.
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 09:37:41
Aan Cadtools@gmail.com

Wat ik wil bereiken: opstellen van een stuklijst in Excel mét de gegevens van de entiteiten uit AutoCAD.

Ben ik hiervoor niet goed bezig?

Indien u vb'en hierover heeft, mail gerust maar door.

Grtz Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 09:44:32
Aan Bart,

1) Wat bedoel je met een vangnet voor fouten? Moet ik dan prognosen en alertboxen inbouwen?

2) ik weet dat ik lengte, breedte, ... meerdere malen moet ingeven. Heb hier idd ook al fouten tegen gemaakt.
Hoe kan ik dit vermijden?

3) Liefst zou ik hebben dat de block in de tek blijft staan, maar om mijn attributen te kunnen benoemen moet deze eerst uit uw tek, om er daarna opnieuw geinserteerd te worden.

4) Heb er nog niet aan gedacht om een standaard block te maken.
Maar kan ik hieraan dan direct lengte en breedte koppelen?

Alvast al bedankt voor de reactie.
Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op di 05 04 2005, 09:46:34
Waarom gebruik je niet gewoon de standaard command:attext.
Werkt zeker weten prima voor wat je wil! Questie van goed blocken aanmaken en een goede filter definieren...

Ken je dit command?
zie ook http://www.autocadforum.nl/autocadforum/viewtopic.php?t=428&highlight=attext
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 10:11:59
Als ik met "attext" werk kan ik in Excel mijn kolommen niet de gewenste naam geven.

De kolommen in Excel moet nl nog naar een ander programma ingelezen worden.

Daarom heb ik telkens via "eattext" proberen werken.

In excel moet alles opgeslaan worden als CSV bestand, om nadien in Ardis Cutting Optimizer in te kunnen lezen.

Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op di 05 04 2005, 11:41:43
Je onderwerp is naar mijn mening te specifiek om iets zinnigs over te melden...
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op di 05 04 2005, 11:42:05
Citaat van: thomas151283Aan Bart,

1) Wat bedoel je met een vangnet voor fouten? Moet ik dan prognosen en alertboxen inbouwen?

2) ik weet dat ik lengte, breedte, ... meerdere malen moet ingeven. Heb hier idd ook al fouten tegen gemaakt.
Hoe kan ik dit vermijden?

3) Liefst zou ik hebben dat de block in de tek blijft staan, maar om mijn attributen te kunnen benoemen moet deze eerst uit uw tek, om er daarna opnieuw geinserteerd te worden.

4) Heb er nog niet aan gedacht om een standaard block te maken.
Maar kan ik hieraan dan direct lengte en breedte koppelen?

Alvast al bedankt voor de reactie.
Thomas

1 met de lisp funtie error kan je aangeven wat er gebeurt als er iets fout gaat (voorbeeld de gebruiker drukt midden in de lisp op de de esc knop)

2 door de de namen en maten aan een variabele te koppelen kan je ze onbeperkt blijven hergebruiken

3 standaard blijven de elementen waar je een wblock van maakt in de tekening achter

   een paar punten ter overweging

   je kan binnen lisp de waarde van attributes aanpassen op database  niveau.

   je kan de waarde van de attributen al bij de definitie ingeven
waardoor ze er staan op het moment dat je er een (w)block van maakt.

4 ik doelde alleen op de attributen
maar je kan ook 2 blockjes toepassen 1 voor de attributen en 1 voor de rechthoek
Als je de laaste 1 bij 1 maakt kan je middels de schaalfactor de rechthoek maken door een verschillende x en y factor op te geven
vervolgens explodeer je het blockje en heb je een gesloten pline met de juiste afmeting.
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 12:48:51
Aan cadtools@gmail.com:

Kan best zijn, toch al bedankt voor de moeite.
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op di 05 04 2005, 16:53:11
heel simpel uitgelegd wil ik het volgende doen:
1. rechthoek tekenen in autocad (breedte en hoogte intypen) + eventueel tekst in rechthoek (bvb. "rechthoek1")
2. overbrengen van deze gegevens naar excel nl. 3 kolommen met breedte - hoogte - tekst
vb: 1000 - 2000  - rechthoek1

Belangrijk hierbij is dat de naam van de kolommen moet overeenkomen met de padnamen van het uiteindelijke programma (excel is slechts een tussenstap). Deze namen zijn voor breedte : "partw", hoogte : "partl" en voor tekst : "partref".
Wie kan mij op weg helpen (lees: programmaatje schrijven).
Ik kan de hulp echt gebruiken.

mvg

Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op wo 06 04 2005, 08:34:52
Ale het nu een blokje 1:1 tekend en ze verschaald (met verschillende xy waarden) kun je de gegevens opvragen met

BL:NAME C www 000 (Block name)
BL:XSCALE N www ddd (X scale factor)
BL:YSCALE N www ddd (Y scale factor)

Daarna kun je het bewerken met Excel.

andere mogelijkheden van attext..

BL:NAME C www 000 (Block name)
BL:LEVEL N www 000 (Block nesting level)
BL:X N www ddd (X coordinate of block insertion point)
BL:Y N www ddd (Y coordinate of block insertion point)
BL:Z N www ddd (Z coordinate of block insertion point)
BL:NUMBER N www 000 (Block counter; the same for MINSERT)
BL:HANDLE C www 000 (Block handle; the same for MINSERT)
BL:LAYER C www 000 (Block insertion layer name)
BL:ORIENT N www ddd (Block rotation angle)
BL:XSCALE N www ddd (X scale factor)
BL:YSCALE N www ddd (Y scale factor)
BL:ZSCALE N www ddd (Z scale factor)
BL:XEXTRUDE N www ddd (X component of block extrusion direction)
BL:YEXTRUDE N www ddd (Y component of block extrusion direction)
BL:ZEXTRUDE N www ddd (Z component of block extrusion direction)
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op wo 06 04 2005, 11:19:25
Nog een vraagje:

Hoe kan ik via lisp een wblock programmeren die in de tek blijft??

Bij intikken op de commandoregel van "wblock" kan je "convert to block" aanvinken.

Hoe kan ik da krijgen in lisp?

Ik blijf voorlopig hangen op het feit dat mijn wblocks uit de tek worden gehaald!

mvg, Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op wo 06 04 2005, 11:29:50
Als je een command : oops geeft heb je het ieder geval niet kwijt...
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op wo 06 04 2005, 12:21:25
via de dialoogregel gaat dat volgens mij niet.

wat je wel kan doen.

1 pas het commando block toe

2 doe eventueel oops om de basiselementen terug te krijgen

of insert het block op het basispunt als je niet de basiselementen wilt maar een blockje

3 wil je nu ook nog een wblock
schrijf dan met wblock het gemaakte blockweg

door de naam van het block in te voeren en vervolgens =
dan wordt het block als wblock weggeschreven

(ps filedia moet op 0 staan tijdens deze bewerkingen)
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op wo 06 04 2005, 13:24:40
Waarom moet filedia op 0 staan ??
Bij lisp-routines gaat bijna alles toch over de commandoregel?

Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op wo 06 04 2005, 14:57:24
Citaat van: thomas151283Waarom moet filedia op 0 staan ??
Bij lisp-routines gaat bijna alles toch over de commandoregel?

Thomas

sorry je hebt gelijk
deze is niet nodig binnen de lisp
alleen voor een testje op de commandline
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op wo 06 04 2005, 16:43:40
je kan ook gewoon -wblock gebruiken en zoals
je -pan, -insert , -etc kunt gebruiken zonder filedia te veranderen
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op wo 06 04 2005, 16:46:12
Citaat van: [email]cadtools@gmail.com[/email]je kan ook gewoon -wblock gebruiken en zoals
je -pan, -insert , -etc kunt gebruiken zonder filedia te veranderen


doe even -wblock op je commandline met filedia op 1
dan zal je zien dat er gewoon het venster verschijnt.
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op wo 06 04 2005, 17:09:01
bij mij niet  :roll:
Titel: inhoud van attributes in een blok opvragen
Bericht door: bart op wo 06 04 2005, 19:16:00
If FILEDIA is set to 1, entering -wblock at the Command prompt displays a standard file selection dialog box in which to specify a name for the new drawing file. If FILEDIA is set to 0, entering -wblock at the Command prompt displays a prompt on the command line

uit de help van acad 2006
:roll:
Titel: inhoud van attributes in een blok opvragen
Bericht door: cadtools@gmail.com op wo 06 04 2005, 19:20:45
juist !
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op do 07 04 2005, 07:27:06
Hartelijk dank aan allemaal,
jullie hebben me al fantastisch geholpen!

Heb nog nooit zoveel bijgeleerd als nu

MVG, Thomas
Titel: inhoud van attributes in een blok opvragen
Bericht door: Joop op do 07 04 2005, 07:36:24
Dat is de bdoeling van dit forum.
Titel: inhoud van attributes in een blok opvragen
Bericht door: thomas151283 op do 07 04 2005, 08:04:20
Wij het inserteren van een wblock die geprogrammeerd is met lisp kan je default waarden ingeven.

Is het mogelijk om deze default waarden te laten invullen als de variabelen "hoogte" en "breedte"??
Zoja, hoe begin je hieraan??

MVG Thomas

(defun c:attpl2 ()
;;; style maakt een nieuwe tekststijl aan: genaamd "attributes"
 (command "style" "attributes" "tahoma" "25" "" "" "" "")
;;; layer maakt een nieuw laag aan: genaamd "attributes"
 (command "layer" "m" "attributes" "c" "8" "" "")
;;; Selecteren van hoekpunten
 (setq lop (getpoint "\nLinker benedenhoekpunt aub.: "))
 (setq rbp (getcorner lop "\nRechter bovenhoekpunt aub.: "))
 (setq rop (list (car rbp) (cadr lop)))
 (setq lbp (list (car lop) (cadr rbp)))
;;; Breedte en Hoogte bepalen
 (setq breedte (distance lop rop))
 (setq hoogte (distance lop lbp))
;;; Inserteerpunt Attribute Materiaal (PartMat)
 (setq   insertmat
    (getpoint "\nDuid een invoegpunt aan aub: ")
 )
 (command "attdef"       "V"           ""
      "PartMat"       "Geef de Materiaalsoort op: "
      ""          insertmat        "0"
      ""
     )
;;; Inserteren Referentie
 (command
   "attdef"          "V"        ""
   "PartRef"          "Geef een referentienaam op: "
   ""             ""
  )
;;; Inserteren Lengte (=hoogte)
 (command "attdef" "V"   "" "PartL" "Geef de hoogte op: " "hoogte" "")
;;; Inserteren Breedte
 (command "attdef" "V"   "" "PartW" "Geef de breedte op: " "breedte" "")
)