Fórum témák

» Több friss téma
Fórum » Eagle 3D segítség, POV-Ray
Lapozás: OK   26 / 42
(#) Attila86 hozzászólása Márc 11, 2009 /
 
Most már rájöttem pár dologra és így már tudom állítani a tekercs összes méretét (de csak a belső átmérő és a lekerekítési sugár a fontos). Sőt, a huzal színét is be tudom állítani!

A 3d41.ulp-t böngészve arra is rájöttem, hogy az Eagle3D-ben tulajdonképpen két szín lista van. Az egyik az az, ami a LED-ek színének beállításánál és a nyák színösszeállításánál a hátteret beállító résznél jön elő. Itt ezek a színek vannak:
Fehér, Piros, Zöld, Kék, Sárga, Szürke50, Szürke25
Erre a listára a programban "color_lgt" néven lehet hivatkozni.
A másik lista bővebb, ez "color_slct" néven van a programban. Ezen a listán vannak ezek a színek:
Fehér, Piros, Zöld, Kék, Sárga, Szürke10, Szürke30, Szürke50, Szürke70, Szürke90, Fekete, Ezüst:, Arany, Réz, Lombzöld, Sötétzöld
Ezek a színek szerepelnek a színek definícióit tartalmazó nyelvi fájlokban (3dcol.dat, 3dcol_fr.dat, 3dcol_hu.dat...). Ide tök egyszerűen be lehet írni pluszban bármit, persze a POV-Ray nyelvén.

Most arra próbálok rájönni, hogy mi baja van az Eagle3D-nek ezzel a sorral:
  1. sprintf(pov_pack,"%s%f,",pov_pack,menetsz);

Mert ha ezt beírom a 3d41.ulp-be, akkor nem hajlandó lefutni az Eagle3D.
A többi adatot ugyan ezzel a sorral ki tudom 'küldeni' a makróba, csak ott a "menetsz" helyett más szöveg van. Azokkal valamiért nincs semmi baja.
Szerintem ez összefüggésben van azzal, hogy a többi adat így szerepel néhány sorral feljebb:
  1. real dbelso=10;
  2. real gyleker=1;
  3. ...

De a "menetsz" viszont így:
  1. int menetsz=10;

Ez miért van MPi-c? Ezt te írtad be így, azért kérdezem.
(#) niedziela válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Gond az lehet:

A real, real formátum az int pedig integer.
a %f lebegőpontos formázó karakter aminek az integer tipus nem felel meg mivel az integer nem tört alak.
(#) Attila86 válasza niedziela hozzászólására (») Márc 11, 2009 /
 
Akkor mit írjak be a
  1. "%s%f,"

helyett?
(#) MPi-c válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Üdv!
Reggel sikerült kirajzoltatnom egy tekercset. Először csak azokkal a paraméterekkel, ami a makróba fixen be volt állítva. Aztán a színeket is beállítottam. Valóban ez a színlista nem túl nyerő, ha a másik, amiről írtál jobb, át kell írni az ulp-ben. A színekkel kapcsolatban még annyit, hogy user.inc-ben, ahhoz, hogy megjeleníthető legyen a 'texture'-t át kellett írnom 'pigment'-re.
A 'menetsz' miatt reklamált futásnál, ezért írtam int-re.
A sprintf(pov_pack,"%s%f,",pov_pack,menetsz); sorban éppen ezért az f-et, ami a behelyettesítendő változó típusát jelzi (ahogy niedziela írta, itt float) át kell írni d-re, ez jelzi az egész típust.
Most nem tudom elküldeni az ulp-t mert otthon van.
Átírtam a makrót is, hogy az átadandó paramétereket használja. Egyszer futtatm le a pov fájlt, de nagyon érdekes képet adott, valami a huzal vastagsággal nem jó, túl nagynak rajzolta. Jobban nem tudtam a kérdést megvizsgálni, mert nem volt időm.
(#) Attila86 válasza MPi-c hozzászólására (») Márc 11, 2009 /
 
Üdv.!
Átírtam d-re, így már lefut az Eagle3D. Sőt, a 3D-s képet is megrajzolja a POV-Ray, de valóban elég hülyén néz ki. Teljesen szét van esve a tekercs. Olyan, mintha valamiért a menetszámot a huzalvastagságként értelmezné.
(#) Attila86 válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Már rá is jöttem!
Nem mindegy a definíciók sorrendje! Olyan sorrendbe kell írni a makróban a makró neve után lévő zárójelben a változókat, amilyen sorrendben a "sprintf" utasításokkal ki vannak küldve az értékek. Most tök jó, tudom állítani már a menetszámot is, és a 3D-s kép is normális (nincs szétesve).

Szerk.:
Na, most már mindent tudok állítani! Azt is tudom, hogy hogyan tudok tetszőleges számú értéket 'megkérdezni' és kiküldeni a makróba, és hogy a makróban hogyan tudom ezt felhasználni. Szuper!

Most már csak pár kisebb problémát kell megoldani amit eddig nem is említettem mert nem akartam még jobban összekutyulni a dolgokat. Ha nem megy egyedül, akkor majd kérdezek...
(#) MPi-c válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Attól tartok nem tudok, majd csak megint koraeste belenézni, addig, biztos találsz valami megoldást, és gondolom, a színeket is helyre teszed Egyébként a huzal és a gyűrű színénél mindegyiknek szín kellene, mert ha nem, - gondolom nem a szivárvány minden színében gyártják - akkor lehet, érdemesebb lenne egy-két külön tömbbe az alkalmazható színeket beírni és csak abból választani.

(1000)
(#) MPi-c válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Hm Én olyan sorrendben írtam, a sprintf-eket, ahogy a változók a makróhíváskor a változólistában szerepelnek. Mégis prückös volt...
(#) Attila86 válasza MPi-c hozzászólására (») Márc 11, 2009 /
 
Idézet:
„akkor lehet, érdemesebb lenne egy-két külön tömbbe az alkalmazható színeket beírni és csak abból választani.”

Igen. Nekem ez tetszene a legjobban, de ez nekem sajnos nem fog menni. Ezért használtam fel az Eagle3D-ben már meglévő két szín-listát.
(#) Attila86 hozzászólása Márc 11, 2009 /
 
Megpróbáltam értelmet felfedezni a 3d41.ulp-ben írtak logikájában. Így rájöttem hogy tudok ilyet is csinálni:
Bővebben: Link
Odaírtam pár helyre hogy "mm", és alulra a weboldalam címét. Ezt eddig is tudtam hogy hogyan kell, de most rájöttem hogy hogyan tudom ilyen szép keretekbe foglalni a dolgokat ("Gyürü adatai" és "Tekercs adatai").

Úgy döntöttem, hogy mégiscsak beállíthatóvá teszem az összes tulajdonságot. Tehát a gyűrű külső átmérőjét és vastagságát is, illetve hogy fekvő vagy álló kivitelű legyen-e. Ez utóbbit viszont arra gondoltam, hogy úgy kellene megoldani hogy ki lehessen pipálni hogy álljon vagy feküdjön-e a tekercs. Ezt hogyan lehet megoldani? (Mármint hogyan lehet ilyen bepipálható kockákat betenni?)
(#) Attila86 válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Illetve:
Meg tudom adni hogy mettől meddig lehessen beírni számokat. Például a menetszámot most nullától százig lehet beírni, mert:
  1. dlgCell(10,1,10,2) dlgSpinBox(menetsz,0,100);

Ez jó dolog, mert ha mondjuk 142-t írok be akkor feldob egy kis hibaüzenetet hogy ez nem jó szám.
Azt meg lehetne csinálni valahogy, hogy a "dkulso" ne lehessen kisebb mint a "dbelso"? Ugyanis ha így írja be az ember akkor szétesik a gyűrű 3D-s képe. Tehát azt szeretném hogy ne lehessen a belső átmérőhöz nagyobb számot írni mint a külső átmérőhöz. Mert ilyen a valóságban is lehetetlen.
(#) niedziela válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
if dkulso > dbelso
........
adatok átadása
........
else
......
hibaüzenet
.......


Ezért írtam múltkor, hogy először az alapokat kellene elsajátítani, aztán visszatérni ......
(#) Attila86 válasza niedziela hozzászólására (») Márc 11, 2009 /
 
Idézet:
„Ezért írtam múltkor, hogy először az alapokat kellene elsajátítani, aztán visszatérni ......”

Igen, de az túl nagy falat lenne. Bár biztosan lenne haszna ha megtanulnék programozni, de nem hiszem hogy később szükségem lenne erre a tudásra. Ha már mindenképpen programozás, akkor meg inkább a mikrokontrollerek programozását lenne jó elsajátítani, de az meg itt most nem segítene.

Most hogy így leírtad... a POV-Ray-ben is ugyan így működik ez, csak ott kell egy "#"-jel az "if" és az "else" elé.
(#) Attila86 válasza niedziela hozzászólására (») Márc 11, 2009 /
 
Sikerült egy hibaüzenet ablakot elővarázsolni, de az csak úgymond tájékoztató jellegű. Tehát le lehet okézni és utána ugyan úgy kiadja a (hibás) adatokat a makróba. Az lenne a jó, hogyha az OK-gombra való nyomás után visszadobná az ablakot ahol be kell írni az értékeket. Vagy esetleg már a hibás érték beírásakor is szólhatna.
(#) MPi-c válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Idézet:
„Azt meg lehetne csinálni valahogy, hogy a "dkulso" ne lehessen kisebb mint a "dbelso"?”

Talán feltétel vizsgálat nélkül is működne:
előbb a belső értéket kellen bekérni, majd a következő kérdésnél az lenne a minimum érték.
dlgRealEdit(dbelso,0,40);
dlgRealEdit(dkulso,dbelso,40);
ha ezt elfogadja, vagy még cifrázva:
dlgRealEdit(dkulso,dbelso+1,40);
(#) Attila86 válasza MPi-c hozzászólására (») Márc 11, 2009 /
 
Ez nekem is eszembe jutott, de nem működik. :no:
Az alsó OK gomb lenyomásáig az értékeket ez határozza meg:
  1. real dkulso=25;
  2. real dbelso=10;
  3. real gyvast=10;
  4. real gyleker=1;
  5. real dhuzal=0.8;
  6. int menetsz=10;
  7. real gyszin=0;
  8. real hszin=0;
(#) niedziela válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Idézet:
„hogyha az OK-gombra való nyomás után visszadobná az ablakot ahol be kell írni az értékeket. Vagy esetleg már a hibás érték beírásakor is szólhatna.”


Mit írtál az IF-be ? Annak az lenne a lényege, hogy ha

x > z akkor adja 't a paramétereket, ha nem igaz a feltétel akkor ne adja át hanem jelenjen meg hibaüzenet.

Neked most akkor a hiba mellé a paramétereket is átadja, vagy a paraméterek átadása nélkül is lefut ?

Annyit lehetne tenni elvileg, hogy az IF helyett repeat ciklust használsz ami egyszer mindenképpen lefut és a végén megnézi a feltételt, ha igaz kilép a ciklusból, ha nem újra kezdi.

De akkor ide kell az ablakot és annak értékátadásait is írni

Repeat

....
....
Until x > y

(ha lehet ilyen ciklust hívni )

Az hogy a beírást figyelje még bonyolultabb és felesleges is.

Tehát az egész ablakra....OK gombra vonatkozó részt próbáld egy Repeat ciklusba tenni, ha lehet.




(#) Attila86 válasza niedziela hozzászólására (») Márc 11, 2009 /
 
Ezt írtam:
  1. if(dkulso>dbelso) sprintf(pov_pack,"%s%f,",pov_pack,dbelso);
  2. else dlgMessageBox("A külsö átmérönek nagyobbnak kell lennie a belsönél!");


A "dlgMessageBox"-ot lelestem egy másik hasonló hibaüzenet-ablakról.

Idézet:
„Neked most akkor a hiba mellé a paramétereket is átadja, vagy a paraméterek átadása nélkül is lefut ?”


Kiírja a hibaüzenetet, amit ha leokézok akkor lefut az egész. Létrehozza a pov fájlt is, de a hibás adatot nem küldi ki, emiatt a POV-Ray kiabál is, hogy a nyolc adatból csak hét van megadva. Tehát végül is nem küldi ki az adatot, de így mégsem jó.
(#) niedziela válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Akkor az else ágba még tedd be a hibaüzenet mellé, hogy

pl:
dbelso= dkulso - 5

Akkor úgy add át a paramétereket, hogy a hibaüzenet mellet nem a felhasználó rossz adatai kerülnek ki hanem jó adatok amiket ugyan nem a felhasználó állított be de nem töri össze a képet. A hibaüzenet pedig tájékoztat erről és a helyes adatok megadásának módjáról.

Az a helyzet, hogy írsz egy programot, és ha azt teljesen "hülye" védetté akarod tenni, még kétszer annyit írhatsz mint maga a program lényegi része.

És még így is lesz akinek sikerül
(#) Attila86 válasza niedziela hozzászólására (») Márc 11, 2009 /
 
Nos igen, mondasz valamit...
Megpróbálom így megírni. De hogyha több ilyen kritériumot állítok be, tehát például hogyha a "dkulso" és a "dbelso" különbsége kisebb a "gyleker" négyszeresénél, akkor minden hibás adat megadása esetén fel fog dobni külön 1-1 ablakot?

Lehet hogy inkább a tekercs makróját írom át, hogyha irreális értékeket kap akkor azt felejtse el és helyette használja a legnagyobb (vagy legkisebb) még reális értéket. Tulajdonképpen ez csak egy kis matek, az pedig menni fog.
(#) niedziela válasza Attila86 hozzászólására (») Márc 11, 2009 /
 
Idézet:
„Lehet hogy inkább a tekercs makróját írom át,”


Nem kell, ha rossz értéket adnak meg akkor küld át az alap értékeket amiket te állítasz be. + egy üzenet, hogy hibás adat miatt egy előre definiált méretet fog kirajzolni.

real dkulso=25;
real dbelso=10;
real gyvast=10;
real gyleker=1;
real dhuzal=0.8;
int menetsz=10;
real gyszin=0;
real hszin=0;

(#) Attila86 hozzászólása Márc 12, 2009 /
 
Hogyan lehet betenni két kis bepipálható kockát úgy, hogy csak az egyiket lehessen bepipálni? Tehát hogyha mondjuk az 1. kocka be van pipálva a 2. pedig nem és bepipálom a 2. kockát, akkor az 1. kockából tűnjön el a pipa.
A tekercs pozícióját szeretném így meghatározni, hogy álló vagy fekvő legyen-e.
(#) Frankye válasza Attila86 hozzászólására (») Márc 12, 2009 /
 
Ha az megfelel, hogy az egyik mindenképpen legyen bejelölve, akkor a "rádiógomb" az általad keresett elem. Ha viszont lehet olyan eset is, hogy egyikben sincs pipa, akkor azt le kell programozni, sajnos. (Ehhez azért nem értek annyira.)
(#) Attila86 válasza Frankye hozzászólására (») Márc 12, 2009 /
 
Nem, az egyiknek mindenképpen be kellene lennie pipálva. Hiszen olyan nem lehet hogy se nem álló se nem fekvő.

Tehát amolyan választókapcsoló-szerűséget szeretnék.

Ez a "rádiógomb" nekem teljesen ismeretlen, megkérdezem róla guglit...

Szerk.:
Hűűűű, ez nekem nagyon magas!
Közben rájöttem hogy az Eagle3D-ben eredetileg az "Általános" fülön van két bejelölő-négyzet: "Furatok (valós mód" és a "Furatok (gyors mód)". Ezek is ilyen módon működnek, hogy egyszerre csak az egyiket lehet kijelölni.
Megpróbálom innen lekoppintani a programot. (Eddig a többi elemmel is ugyan ezt csináltam, talán ez is sikerülni fog.)
(#) Frankye válasza Attila86 hozzászólására (») Márc 12, 2009 /
 
A Visual Basic, és más, objektum-orientált programnyelvek ezt a választó kapcsoó(sor)t "rádiógomb" (Radio Button(s)) néven emlegetik. A jelölő négyszög, amibe a pipa kerül, a CheckBox. A beviteli mező (amibe a szöveget kell írni, vagy számot) nevét nem tudom sajnos fejből, de az Excel-ben, ha párbeszéd-panelt készítesz, ott ezeken a neveken hivatkozik rájuk.
(#) niedziela válasza Attila86 hozzászólására (») Márc 12, 2009 /
 
dlgRadioButton(string Text, int &Selected)
(#) Attila86 válasza niedziela hozzászólására (») Márc 12, 2009 /
 
Az "int &Selected" mit jelent és mit kell oda írni?
Illetve utána a "sprintf" utasítással hogyan tudom kiküldeni azt az adatot hogy melyik kocka lett kipipálva?

És egy más jellegű kérdés:
Szerintetek átírjam az Eagle3D-t és a LED-ek makróját úgy, hogy a LED-eknek ne csak a színére, átlátszóságára és a paneltól mért távolságára kérdezzen rá, hanem arra is hogy világítson-e a LED? Mert át tudom írni a makrójukat úgy hogy beleteszek egy fényforrást is...
(#) MPi-c válasza Attila86 hozzászólására (») Márc 12, 2009 /
 
Az jó módszer, ha a kész programból puskázol.
A furatok kijelölése így néz ki:
  1. dlgCell(1,1) dlgCheckBox(lang[11], opt_boh) if(opt_boh==1) opt_bohf = 0;
  2. dlgCell(2,1) dlgCheckBox(lang[13], opt_bohf) if(opt_bohf==1) opt_boh = 0;

Így rádiógomb nélkül is meg lehet oldani.
A program elején a két változó persze deklarálva van:
int opt_boh = 1;
int opt_bohf = 0;
Az sprintf-nél pedig a szokásos feltétel vizsgálattal ( if else) tudod a makrónak átadni - pontosabban a pov fájlba beírni - a kiválasztott értéket.

Jöhet a világítós led! :yes:
(#) Attila86 válasza MPi-c hozzászólására (») Márc 12, 2009 /
 
Hogyan tudtad beírni ezt a két sort úgy, hogy sorszámozva vannak a sorok? Gondolom azt nem te írtad be, mert nem lehet kijelölni a sorszámokat a böngészőben. Nem tudtam hogy tud ilyet a fórummotor.
(#) icserny válasza Attila86 hozzászólására (») Márc 12, 2009 /
 
Nyitó code tag-et meg kell buherálni: =asm, =c vagy =text.

Például {code=c} esetén

  1. dlgCell(1,1) dlgCheckBox(lang[11], opt_boh) if(opt_boh==1) opt_bohf = 0;
  2. dlgCell(2,1) dlgCheckBox(lang[13], opt_bohf) if(opt_bohf==1) opt_boh = 0;


{code=text} estén pedig:

  1. dlgCell(1,1) dlgCheckBox(lang[11], opt_boh) if(opt_boh==1) opt_bohf = 0;
  2. dlgCell(2,1) dlgCheckBox(lang[13], opt_bohf) if(opt_bohf==1) opt_boh = 0;


Természetesen szögletes zárójel kell a kapcsos helyett...
Következő: »»   26 / 42
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem