FastFiber

inhoud van attributes in een blok opvragen

Gestart door Anonymous, zo 12 12 2004, 09:22:08

Vorige topic - Volgende topic

Anonymous

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)

Sven

is er niemand die hier een antwoord op weet?

bart

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)
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Sven

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.

HofCAD

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)
)
ACADcadabra

bart

Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

thomas151283

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 !!

cadtools@gmail.com

Je kunt dit doen met de functie command:attext
Voor nadere info moet je maar een mailtje sturen

Joop

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
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

thomas151283

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

thomas151283

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

cadtools@gmail.com

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

bart

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.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

thomas151283

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

thomas151283

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

FastFiber