FastFiber

routine aanpassen

Gestart door marcelmaas, di 15 06 2010, 11:45:48

Vorige topic - Volgende topic

marcelmaas

Hi,

Wij werken met geneste blokken waarin attributen uitgelezen zouden moeten worden.
Mijn vraag is of het mogelijk is om bijgevoegde lisp om te bouwen zodat je daarmee de attributen in de geneste blokken uit bijgevoegde tekening kunt optellen?

groeten Marcel..

Atwist

Hallo Marcel,

Ik heb een lisp bij gevoegd misschien is deze al geschikt voor jou.

Deze is gemaakt door Lee Mac Theswamp en CadTuror.


Atwist
Atwist

AutoCad 2008.

marcelmaas

Atwist,

Deze lisp telt helaas de attributen uit de blokken niet op, zoals voor ons de bedoeling is.

Wij hebben een block, daarin inserten we een ander block en dat block slaan wij dan op met een andere naam.
Op het moment dat wij het block inserten in het eerste block mag het ook zo zijn dat automatisch de attributen overgenomen worden van het eerste block naar het block wat we op dat moment inserten.

Dat zal allemaal wel een beetje te ver gaan denk ik.

Misschien dat iemand anders nog een idee heeft.

In ieder geval alvast bedankt voor de moeite..

groeten Marcel..

bart

#3
blocken met atributten nesten is vrij zinloos in mijn ogen
volgens mij kan je dan beter gewoon tekst gebruiken.
Je kan de geneste atributten toch niet rechtstreeks aanpassen met de standaard autocad commando's

Wat is voor jouw de toegevoegde waarde van deze arributten ?
Mogelijk zie ik een interesante eigenschap over het hoofd
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

marcelmaas

#4
Hi Bart,

Ik zal proberen om het wat uit te leggen.
Wij hebben een tekening waarin simpele rechthoekige blokken zitten (door ons zelf erin geplaatst)

Dan komen wij op een punt waarop wij in die blokken een soort van klein leidingmatje gaan plaatsen als dynamischblock waaraan attributen hangen voor W (vermogen), L/H (waterhoeveelheid en KPA (drukval).

Van die combinatie van rechthoek en het leidingmatje maken wij dan weer een block (om te voorkomen dat iemand dat dynamisch block kan verdanderen) met daarin een bepaalde code die de tegel (combinatie van de rechthoek en het leidingmatje) krijgt om hem te kunnen onderscheiden van de andere tegels waarin grotere of kleinere leidingmatjes met dus andere vermogens, l/h enz zitten.

Dus kort gezegd hebben we soms veel verschillende soorten tegels die qua vermogen enzo verschillend zijn waardoor iedere tegel een eigen code krijgt die in dat leidingblok komt te staan.

Uit groepjes van verschillende tegels moeten we daarna de attributen kunnen optellen, om bijvoorbeeld het totale vermogen van een groep te kunnen aangeven.

Het attributen verhaal is hierin dus heel belangrijk, en als we niet de attributen uit een geneste blok kunnen halen dan moeten we het anders gaan aanpakken.

Ik zal een klein voorbeeld tekeningetje bijvoegen waardoor het misschien duidelijk wordt.
Wat je in deze tekening ziet is een plafond spiegel met daarop onze activering (leidingwerk wat voor koeling of verwarming van de plafond tegel zorgt)
Daarboven staan de vermogens per groep van activering.

Deze tekening is op de manier getekend zoals we dat al een paar jaar doen, maar dat gaat via een uitgebreide lisproutine en heeft inmiddels veel nadelen, daarom willen we het anders gaan doen.

Ik hoop dat je het allemaal nog kunt volgen.

groetn Marcel..


bart

Je block beschermen door hem te nesten? waar tegen dan.
Als je dubbelklikt op het block kan je in de blockeditor je dynamische block heel simpel wijzigen.

Een bescherming tegen per ongeluk wijzigen kan ook door de laag te locken
waar je het block in insert

Gebruik je het zelfde dynamische block in de zelfde tekening voor verschillende tegels ?
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#6
Beste Marcel,

Gebruik eens in bijgevoegde tekening het programma AttNesBlk in AttNesBlk.lsp
(Attributes in Nested Blocks), want waarschijnlijk lost dit een deel van je probleem op.
Het programma leest slechts nu nog slechts een attribuutwaarde per genest block uit.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

roy_043

Deze dan?
Als een insert "losse" attributes heeft dan worden deze gebruikt. Als "losse" attributes ontbreken wordt pas gezocht naar geneste attributes.
Let op de spelling van tags: de routine gaat hier HoofdLetterGevoelig mee om. Er is sprake van de tags GKW en GWK ...
Tenslotte een vraag:
Waarom is het merk 10-1200-k4 een dynamisch block? Lijkt mij onlogisch, het is immers een vaststaand element.

marcelmaas

Hi Roy,

Deze werkt inderdaad zoals wij zouden willen, hij telt alleen de KPA niet op, maar misschien doen we iets fout.?

Nou komt dat eigenlijk goed uit, want de KPA's kun je ook niet zonder meer optellen, daar is een ingewikkelde formule voor nodig.
We hebben een Excel programma waarin we wat gegevens moeten invullen over de vermogens en lengte + breedte van het leiding matje, dan komt er daaruit onderin de Excel een totale weerstand over de aansluitgroep uit.
Achter de schermen in die Excel zit dus een formule die we zouden kunnen bouwen in deze lisp.

Ik weet niet of er iemand is die goed is met Excel en formules in lisp, maar dan zouden we echt Mega blij zijn, want nu moeten we steeds die Excel erbij halen om de KPA's op te tellen.

Ik heb de Excel bijgevoegd, misschien dat je er eens naar wilt kijken dan snap je wat ons probleem is.

In ieder geval al super bedankt voor de aanpassing van de lisp, enuhhh Hofcad ook nog bedankt voor de moeite :-)

roy_043

Citaat van: marcelmaas op do 17 06 2010, 15:10:39hij telt alleen de KPA niet op, maar misschien doen we iets fout.?
In het originele bestand staat:

...
    (if (eq (caar item) "KPA")
    (setq tmp (list (caar item)
          (vl-princ-to-string (apply 'max (mapcar 'atof (mapcar 'cdr item))))))
...

max wil zeggen: gebruik het maximum van een lijst met getallen.
In het nieuwe bestand is dit niet veranderd.

marcelmaas

Okay dus hij pakt het hoogste KPA getal van de tegels die je selecteerd?

roy_043

Ja. Als je wilt dat "KPA" ook wordt opgeteld dan moet je regel 88 aanpassen:
Oud:

                  (if (= (caar item) "KPA") 'max '+)

Nieuw:

                  '+

marcelmaas

Okay bedankt voor de info, maar zoals al eerder gezegd mag je die niet zomaar optellen.

Joop

#13
Ik heb het excelbestand even bekeken en een stukje geanaliseerd. (zie hieronder)

Er zijn meerdere tabbladen beveiligd en verborgen.
Wil je de berekening van dit spreadsheet in lisp zetten heb je deze gegevens nodig.Gelukkig zijn eze gegevens zijn wel nog, via een omweggetje, op te halen.

Zonder wachtwoord is er echter geen legale manier om te controleren of deze waarden het gevolg zijn formules
Citeer
Totale drukval koeling >> =SOM(K76:K77)

K76 >> =ALS('Getal van Reynolds'!B26<2000;L50*'Getal van Reynolds'!B41;L50*'Getal van Reynolds'!B40)
K77 >> =$K$60*'Getal van Reynolds'!B62

>> =ALS('Getal van Reynolds'!B26<2000;L50*'Getal van Reynolds'!B41;L50*'Getal van Reynolds'!B40)+$K$60*'Getal van Reynolds'!B62

'Getal van Reynolds'!B26 >> 1221.42291121901
'Getal van Reynolds'!B40 >> 222.696844582837
'Getal van Reynolds'!B41 >> 285.2672831
'Getal van Reynolds'!B62 >> 25.5006588965302

Totale drukval koeling >> =ALS(1221.42291121901<2000;L50*285.2672831;L50*222.696844582837)+$K$60*25.5006588965302

L50 >> =A15*M36+A16*Q36+A17*U36+A18*M48+A19*Q48+A20*U48

A15 >> [Aantal panelen regel 1] >> [AP1]
M36 >> =M35+2*$C$10/1000
A16 >> [Aantal panelen regel 2] >> [AP2]
Q36 >> =Q35+2*$C$10/1000
A17 >> [Aantal panelen regel 3] >> [AP3]
U36 >> =U35+2*$C$10/1000
A18 >> [Aantal panelen regel 4] >> [AP4]
M48 >> =M47+2*$C$10/1000
A19 >> [Aantal panelen regel 5] >> [AP5]
Q48 >> =Q47+2*$C$10/1000
A20 >> [Aantal panelen regel 6] >> [AP6]
U48 >> =U47+2*$C$10/1000

Totale drukval koeling >> =[AP1]*(M35+2*$C$10/1000)+[AP2]*(Q35+2*$C$10/1000)+[AP3]*(U35+2*$C$10/1000)+[AP4]*(M47+2*$C$10/1000)+[AP5]*(Q47+2*$C$10/1000)+[AP6]*(U47+2*$C$10/1000)

$C$10 >> [Gemiddelde lengte aansluitslang]
M35 >> [tabel waarde]
etc..
etc.........
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

marcelmaas

Hi Joop,

De collega die deze excel sheet gemaakt heeft is op vakantie, en pas weer over een week weer terug.
Ik heb het wachtwoord toch weten te achterhalen, maar weet niet of het voldoende is.
Zie bijgevoegde bestand.

yoin