FastFiber

Attributes invullen via excel (opgelost)

Gestart door Nico160775, di 05 01 2010, 11:42:15

Vorige topic - Volgende topic

Nico160775

Ik heb een 1000-tal tekeningen waarin een bepaald attribute moet ingevuld worden.
De waarde die hier moet ingevuld worden is te halen uit een excel.
Of kan ook gehaald worden uit de bestandsnaam zelf. vb.       123456_00.dwg      123456 moet worden ingevuld in de attribute.

Kan iemand me hier verder bij helpen?

Nico160775

Dit is een titelhoek als block met enkele attributen in.
De attribute die moet ingevuld worden is     TAG:      IDENTIFICATION
En de filename is vb. 12345678910_05.dwg waarvan alleen 12345678910 moet ingevuld worden.

Alvast merci.

H@rm

Citaat van: Nico160775 op di 05 01 2010, 11:42:15

Of kan ook gehaald worden uit de bestandsnaam zelf. vb.       123456_00.dwg      123456 moet worden ingevuld in de attribute.


Je zou ook een field kunnen aanmaken die zoekt naar die dwg-naam. ! keer het block aanmaken en redefinen in de tekeningen.

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

Nico160775

Citaat van: H@rm op di 05 01 2010, 12:22:57
Je zou ook een field kunnen aanmaken die zoekt naar die dwg-naam. ! keer het block aanmaken en redefinen in de tekeningen.

Michel

Wat bedoel je met keer het block aanmaken en redefinen?

cadtools@gmail.com

Fields is inderdaad een goede optie.
Ik ben toch wel benieuwd of iemand een techniek kent om TAG definities in te vullen mbt Excel. Hoe?

Nico160775

Die fields zijn wel goed maar niet zo als je maar een deel nodig hebt van die field.

H@rm

Citaat van: Nico160775 op di 05 01 2010, 12:26:38
Wat bedoel je met keer het block aanmaken en redefinen?

Ik heb een blockje aangemaakt (zij bijlage) met daar in een 4-tal atributen. (plotdatum, tekenaar, dwgnaam en blad nummer)
Probeer daar eens mee te stoeien of dat iets is?
Als dat een beetje lijkt op het geen je voor ogen hebt wil ik wel verdere uitleg geven.

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

Nico160775

Citaat van: H@rm op di 05 01 2010, 13:25:41
Ik heb een blockje aangemaakt (zij bijlage) met daar in een 4-tal atributen. (plotdatum, tekenaar, dwgnaam en blad nummer)
Probeer daar eens mee te stoeien of dat iets is?
Als dat een beetje lijkt op het geen je voor ogen hebt wil ik wel verdere uitleg geven.

Michel

Jip dit is een block... maar hoe vul je die automatisch in?
Heb een 1000-tal tekeningen met een block en nu wil ik via een macrotje of een lisp al die blocks automatisch invullen zodat ik niet alle tekeningen moet openen en block aanklikken en nummer invullen.
Maar zodat dit een beetje automatisch gaat....


Reimer

Het principe van Harm is als volgt:
- pas jouw standaard tekenhoofd aan door het attribuut IDENTIFICATION in te vullen met een field die de bestandsnaam weergeeft.
- Sla dit tekenhoofd op als aparte dwg.
- Insert het aangepaste hoofd in een bestaande tekening (gebruik browse om hem op te halen). Acad zal aangeven dat het block al bestaat en vraagt of je hem wil in de tekening wilt vernieuwen (redefine).
- Kies voor Redefine block en alle bestaande tekenhoofden worden vervangen door de nieuwe, waarbij reeds ingevulde attributen blijven bestaan. Dit is meteen een probleem omdat het attribuut IDENTIFICATION al is ingevuld en dus niet de nieuwe inhoud krijgt.
- Door in het standaard block het attribuut IDENTIFICATION te hernoemen kan deze niet ingevuld zijn in bestaande tekeningen. Je zult echter wel even ATTSYNC moeten toepassen om bestaande blocken te updaten naar de nieuwe definitie.

Je kunt BaBe gebruiken om bovenstaande stappen geautomatiseerd op meerdere dwg's toe te passen.
Ik ken echter geen mogelijkheid om met een field de bestandsnaam in te korten zoals je aangegeven hebt. Dus of je uiteindelijk geholpen bent met deze oplossing is de vraag.

Met behulp van een lisproutine is het wel mogelijk om de bestandsnaam in te korten en kun je opdracht geven om alle attributen met de tag IDENTIFICATION binnen een bepaald block aan te passen. Ik denk echter dat er anderen op dit forum zijn die dit sneller/beter voor elkaar krijgen dan ik.

Reimer.

H@rm

Nico,

Het is in principe zo dat als je een block met Fields maakt dat deze fields automatisch worden in gevuld. (soms is nog een regen nodig)
Ik ben er vanuit gegaan dat je de onderhoek van een tekening wilt invullen. De onderhoek heeft in alle 1000 tekeningen dezelfde naam. Je past dan de onderhoek aan in 1 tekening d.m.v. het toevoegen van de fields die je nodig acht. Dan insert je het block en als Acad meld dat het block al bestaat beantwoord je met ja dat je het bestaande block wilt overschrijven. Omdat je aan het wijzigen bent geweest in de atributen moet je ook nog het commando "attsync" gebruiken om alle attributen weer te synchroniseren.
Ik begrijp nu ook dat dit voor die duizend tekeningen een bereklus is.

Volgende voorstel is: maak gebruik van de bijlage bij deze topic.
Als je een klein beetje handig bent met lisp kun je de bijlage om bouwen naar je eigen indeling.

Verder zul je (ongeacht welke oplossing je kiest) voor die 1000 tekening ook gebruik moeten maken van BaBe. (even hier op de site zoeken) Die zorgt ervoor dat je een bewerking op heel veel tekeningen kunt los laten.

Succes

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

Nico160775

Merci,

Ga dan eerst nog eens moeten kijken om die BAbe aan de praat te krijgen want dat was me tot nog niet gelukt...
Ben bezig om de goei titelhoek te verkrijgen zodat ik deze kan verwerken in die lisp.
verder fields zal ik niet kunnen gebruiken want dan zit ik met de volledige field name.
...

Zal nog een beetje testen worden....

alvast bedankt..

cetacad

#11
Plaats het onderstaande in het bestand Acad2009doc.lsp . Dit bestand wordt bij het openen van iedere tekening doorlopen, dus zal de routine bij het openen van iedere tekening uitgevoerd worden.

(load "TEKNUM")
(C:TEKNUM)


Het bestand TEKNUM.lsp heb toegevoegd. Deze moet in een dir geplaatst worden die AutoCad weet te vinden.

In deze routine heb ik de volgende uitgangspunten gehanteerd:
- Dat de onderhoek "Titelhoek" heet. Dit is waarschijnlijk niet zo en moet dus aangepast worden.
- Dat de aan te passen regel het 5e element in de attribute is. Als dit niet zo is moet je even spelen met de positie van het teken ; wat voor de regels staat. Dit geeft aan dat een regel wel of niet uitgevoerd wordt.
- Dat je alles wat voor het teken _ staat als nummer wilt weergeven    (123456_00.dwg wordt 123456).

succes. Fred




roy_043

#12
@cetacad
Goed werk! Maar bepaalde dingen moeten mij toch van het LISP-hart :wink:.
Daarom deze 3 tips:
1. Declareer de variabelen zodat het locale variabelen worden.
  Dit is de allerbelangrijkste tip want dit is fundamenteel.
  (setq streep nil) ; dit wordt dan overbodig
2. Je kunt bij (ssget ...) filters opgeven:
  (setq sset (ssget "_X" '((0 . "INSERT") (2 . "TitelHoek"))))
  ; Let op: de bloknaam is nu HoofdLetterGevoelig!
  ; Jouw lisp kan hierdoor vele malen efficiĆ«nter worden.

3. Bij (While ...) is het gebruik van (progn ...) overbodig.

Tenslotte: Als je meer wilt weten over het vinden van het juiste attribuut kijk dan hier:
http://www.cadsite.be/smf/index.php?topic=3564.msg18262#msg18262

<EDIT>Opmerking HoofdLetterGevoelig klopt niet</EDIT>

cetacad

Bedankt voor de tips. Ik ben weer iets wijzer geworden.

Reimer

Citaat van: roy_043 op di 05 01 2010, 20:18:45
[tt...
Tenslotte: Als je meer wilt weten over het vinden van het juiste attribuut kijk dan hier:
http://www.cadsite.be/smf/index.php?topic=3564.msg18262#msg18262
...[/tt]

Ik had dit al wel eens voorbij zien komen maar niet goed bekeken. Nu heb ik dat wel gedaan en er is mij nu veel meer duidelijk over locale en globale variabelen. Super  :vreegoe: Mijn complimenten

Reimer