Zurück   3dmaxforum.de > 3ds Max > 3ds Max - Plugins und Skripte

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07.02.2010, 20:29   #1 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard Mehrere Objekte nacheinander per Skript auswählen und linken

Hallo,

ich habe ein recht triviales Problem, für dass ich (absoluter Skriptanfänger) jedoch noch keine Lösung gefunden habe.

Folgende Situation:
Ich habe beispielsweise 20 Boxen: Box1, Box2, ..., Boxi, ..., Box20
Und ich habe 20 Bones: Bone1, Bone2, ..., Bonei, ..., Bone20

Jetzt möchte ich per Skript jede Boxi auf den entsprechenden Bonei linken.

Wie geht das?
Ich habe schon eine Schleife versucht, scheitere aber schon am auswählen der Objekte

for i=1 to 20 do select box i

aber dann weiß ich die Syntax nicht, um MaxScript beizubringen, dass box ein fester String ist und i die Laufvariable.

Für Hilfe wäre ich sehr dankbar

Martin

Geändert von panther444 (07.02.2010 um 20:30 Uhr)
panther444 ist offline   Mit Zitat antworten
Alt 07.02.2010, 21:52   #2 (permalink)
Moderator
 
Benutzerbild von scrimski
 
Registriert seit: 27.04.2005
Ort: Berlin
Alter: 35
Beiträge: 11.860

Software:
Wings 3D
Sprachversion: en

Blog-Einträge: 48
scrimski wird als engagiert angesehenscrimski wird als engagiert angesehen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Ein String wird immer in Anführungszeichen geführt., wäre also "box". So wie du es jetzt verwendest, ist es eine Variable, noch dazu eine undeklarierte.

Die Auswahl
Code:
for i=1 to 20 do select box i
ist unnötig(mal abgesehen, davon daß es falsch ist.

Was du tun kannst ist lle Boxen und alle Bones in je einem Array sammeln
Code:
theBoxes = $Box* as Array
theBones = $Bone* as Array
und dann per For To Schleife
Code:
for i in1 to theBoxes.count do
(
)
die Verlinkung zuweisen(in die Klammern)
Code:
theBoxes[i].parent = theBones[i]
Das Script arbeitet die Position im Array ab, nicht die Nummer im Namen. Fehlt in einem der beiden Arrays eine Zahl, stimmen die Nummern auh irfgendwann nicht mehr über ein.

Geändert von scrimski (07.02.2010 um 21:54 Uhr)
scrimski ist offline   Mit Zitat antworten
Alt 07.02.2010, 22:25   #3 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Hallo,
danke für deine Antwort. Das hilft mir schonmal ein gutes Stück weiter.

theBoxes = $Box* as Array
theBones = $Bone* as Array
nimmt aber alle Bones/Boxen in meiner Datei mit auf, oder?
Kann ich das auch noch eingrenzen?
Dass ich zum Beispiel im Vorraus alle Boxen und Bones, die relevant sind markiere und nur diese entsprechend in das Array übernommen werden?

vielen Dank
Martin
panther444 ist offline   Mit Zitat antworten
Alt 07.02.2010, 22:53   #4 (permalink)
Moderator
 
Benutzerbild von scrimski
 
Registriert seit: 27.04.2005
Ort: Berlin
Alter: 35
Beiträge: 11.860

Software:
Wings 3D
Sprachversion: en

Blog-Einträge: 48
scrimski wird als engagiert angesehenscrimski wird als engagiert angesehen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Zitat:
theBoxes = $Box* as Array
theBones = $Bone* as Array
nimmt aber alle Bones/Boxen in meiner Datei mit auf, oder?
Korrekt.
Zitat:
Dass ich zum Beispiel im Vorraus alle Boxen und Bones, die relevant sind markiere und nur diese entsprechend in das Array übernommen werden?
Das wär dann z.B.
Code:
theBoxes = selection as array
für die ausgewählten Boxen und
Code:
theBones = selction as Array
für ausgewählte Bones. Man kann das sicher auch anders machen, alles auswählen und dann automatisch nach Namen in zwei Arrays sortieren, aber mir fällt gerade nichts dazu ein.
scrimski ist offline   Mit Zitat antworten
Alt 07.02.2010, 23:25   #5 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Vielen, vielen Dank. Ich werde das morgen mal ausprobieren.
panther444 ist offline   Mit Zitat antworten
Alt 08.02.2010, 19:43   #6 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Ok, ich komme hier nicht wirklich zurecht und in den Tutorials habe ich leider auch nichts gefunden, was meiner Aufgabenstellung nur Ansatzweise ähnelt.

Situation:

Eine lange Kette von Objekten die durchnummeriert sind und alle auf einer Linie liegen.

Entsprechend diesen Objekten sollen jetzt Bones erzeugt werden. Sprich unter Objekt 1 soll Bone1 zu liegen kommen etc.
Hier hakt es schon wieder.
Ich weiß, dass ich eine Bonekette nach folgendem Prinzip erzeugen kann:
Code:
 
b0 = bone pos:[0,0,10]
in b0 b1 = bone pos:[0,0,10]
in b1 b2 = bone pos:[0,0,10]
Aber wie bekomme ich das in eine Schleife, dass ich beliebig viele Bones hintereinander erzeugen kann?

Vielen Dank nochmal für eure Mühe!
panther444 ist offline   Mit Zitat antworten
Alt 08.02.2010, 20:13   #7 (permalink)
Moderator
 
Benutzerbild von scrimski
 
Registriert seit: 27.04.2005
Ort: Berlin
Alter: 35
Beiträge: 11.860

Software:
Wings 3D
Sprachversion: en

Blog-Einträge: 48
scrimski wird als engagiert angesehenscrimski wird als engagiert angesehen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Schleifen bekommt man mit
Code:
for i in 1 to x do
.
x wäre in diesem Fall die Anzahl der Boxen, praktischweise wieder in ein Array.
Also
Code:
theBoxes = $Box* as Array
-- oder "theBoxes = selection as Array" für eine Auswahl von Boxen
for in in 1 to theBoxes.count do
(
--hier den Code für die Bones
)
scrimski ist offline   Mit Zitat antworten
Alt 08.02.2010, 20:18   #8 (permalink)
erfahrener Benutzer
 
Benutzerbild von Piflik
 
Registriert seit: 29.12.2008
Alter: 26
Beiträge: 966

Software:
3ds Max 2008
Sprachversion: en

Piflik hat noch zu wenig Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Also für Bones solltest du schon mehr machen, als Standard Bones zu verlinken...die korrekte Vorgehensweise, um Bones per MaxScript zu erstellen ist 'BoneSys'

Code:
BoneSys.createBone <point3> <point3> <point3>
Dabei stehen die point3 Platzhalter für Startpunkt, Endpunkt und ZAchse...

Um ne Bone-Chain zu erstellen musst du die erstellten Bones danach noch verlinken...

Bsp:

Code:
SrcObj = $Box* as array --die lange Kette von Objekten...musst natürlich deine Bezeichnung verwenden
BonArr = #() --leeres Array für die Bones

append BonArr (BoneSys.createBone SrcObj[1] SrcObj[2] [0,0,1]) --der erste Bone

for i in 2 to (SrcObj.count -1) do
(
  append BonArr (BoneSys.createBone SrcObj[i] SrcObj[i+1] [0,0,1])
 BonArr[i].parent = BonArr[i-1]
)
Am Ende musst du nur noch den letzten Bone auswählen, die Bonetools öffnen und 'Create End' klicken...

...könnte funktionieren...
__________________
Nec spe, nec metu.
piflik.de
Piflik ist gerade online   Mit Zitat antworten
Alt 08.02.2010, 20:38   #9 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Hi,

@scrimski: MeinProblem ist ja gerade, dass ich nicht weiß, wie ich Folgendes in der Skriptsprache korrekt ausdrücke:

Code:
for i=1 to x do 
(
in bi b i+1 = bone pos:[i*Abstand,0,10] 
)
Von daher war der Ansatz von Piflik schon vielversprechender, allerdings gibt dieser ein ganzes Arsenal an Fehlermeldungen aus, aus denen ich nicht schlau werde.

Code:
#($Box:Box01 @ [0.000000,-0.000001,14.849188], $Box:Box02 @ [30.174011,-0.000001,14.849188], $Box:Box03 @ [60.348022,-0.000001,14.849188], $Box:Box04 @ [90.522034,-0.000001,14.849188], $Box:Box05 @ [120.696045,-0.000001,14.849188], $Box:Box06 @ [150.870056,-0.000001,14.849188])
#()
-- Error occurred in anonymous codeblock; filename: ; position: 196; line: 4
--  Frame:
-- Unable to convert: $Box:Box01 @ [0.000000,-0.000001,14.849188] to type: Point3
-- Error occurred in anonymous codeblock; filename: ; position: 260; line: 6
--  Frame:
-- Type error: Call needs function or class, got: 6
Von daher werden immer noch Lösungen gesucht

Line 4 und 6 sind die, in denen srcObj auftaucht. Kann es hier ggf Probleme geben?

Geändert von panther444 (08.02.2010 um 20:41 Uhr)
panther444 ist offline   Mit Zitat antworten
Alt 08.02.2010, 21:49   #10 (permalink)
erfahrener Benutzer
 
Benutzerbild von Piflik
 
Registriert seit: 29.12.2008
Alter: 26
Beiträge: 966

Software:
3ds Max 2008
Sprachversion: en

Piflik hat noch zu wenig Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Facepalm...das kommt davon, wenn man Code schreibt und nur halb bei der Sache ist...da fehlt überall ein .pos...

Code:
SrcObj = $Box* as array --die lange Kette von Objekten...musst natürlich deine Bezeichnung verwenden
BonArr = #() --leeres Array für die Bones

append BonArr (BoneSys.createBone SrcObj[1].pos SrcObj[2].pos [0,0,1]) --der erste Bone

for i in 2 to (SrcObj.count - 1) do
(
  append BonArr (BoneSys.createBone SrcObj[i].pos SrcObj[i+1].pos [0,0,1])
 BonArr[i].parent = BonArr[i-1]
)
Das sollte besser funktionieren...
__________________
Nec spe, nec metu.
piflik.de
Piflik ist gerade online   Mit Zitat antworten
Alt 08.02.2010, 22:15   #11 (permalink)
neuer Benutzer
 
Registriert seit: 07.02.2010
Beiträge: 9

Software:
3ds Max Design 2010
Sprachversion: en

panther444 hat noch keine Resonanz auf seine Beiträge erhalten, um sein Renomee anzuzeigen
Standard AW: Mehrere Objekte nacheinander per Skript auswählen und linken

Super. Das funktioniert einwandfrei. Ich danke dir.

Solltest du dich mal in die Mensa der TUM Standort Garching verirren gebe ich dir ein Bier aus

Wenn wieder Probleme auftreten weiß ich ja jetzt, wohin ich mich wenden kann.

ciao
Martin
panther444 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB-Code ist An.
Smileys sind An.
[IMG] Code ist Aus.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are An


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
3ds Max 2009: Objekt an mehrere Targets linken Patrick 3ds Max - Animation 3 07.07.2009 14:33
Objekte nach Material auswählen heinbremer 3ds Max - Allgemeines 2 10.01.2008 15:41
mehrere Scenes automatisch nacheinander rendern mdm 3ds Max - Allgemeines 9 03.07.2007 17:37
Herausschreiben von separaten Vraybuffern für mehrere Objekte nacheinander -Dateipfad Roberto V-Ray 5 14.09.2006 13:11
mehrere polys auswählen Wolfi 3ds Max - Einsteiger 4 16.03.2005 09:11


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.


Powered by vBulletin Version 3.8.1 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2002 - 2009, 3dmaxforum.de