Developer, C4D Betatester
Wie meinstn des ?Cyres90 schrieb:Frage 1:
Wie kann ich bei diesem MouseDrag die Koordinaten interaktiv anzeigen lassen?
Cyres90 schrieb:ich möchte sozusagen einen Strahl von der Kamera Richtung Curser schicken.
Cyres90 schrieb:Würde man mit einem Solchen Prinzip ein Schnittpunkt mit einer Fläche bzw. mit den Welt-"Ebenen" auslesen und ggf auch eine Flächennormale?
nux95 schrieb:Zum ermitteln der Position auf dem Objekt kannst du die GeRayCollider Klasse verwenden.
Ne, damit haste nur nen Punkt im Raum definiert. (Wenn man davon absieht dass ein Vektor ein Strahl ist, haha)Cyres90 schrieb:Meine Idee
Über die Werkzeug-GUI kann man leicht die Tiefe bestimmen (im Folgenden als mz bezeichnet), man erhält also einen Vektor (mx, my, mz), den man mit dem SW-Befehl in Koordinaten umwandeln kann. Ein Strahl wäre somit also realisiert.
Muss dich loben Zum einen bist du ja selber schon sehr weit gekommen, zum anderen fragen viele einfach bringen aber kein beispiel von ihrem problem. :hmpf:Cyres90 schrieb:Plugin:
Wie meinstn des ?
Ne, damit haste nur nen Punkt im Raum definiert. (Wenn man davon absieht dass ein Vektor ein Strahl ist, haha)
Momentan hast'e ja ne Tiefe mz = 1000.0 eingestellt.
Muss dich loben Zum einen bist du ja selber schon sehr weit gekommen, zum anderen fragen viele einfach bringen aber kein beispiel von ihrem problem. :hmpf:
Also ich hab das mal eingebaut mit dem GeRayCollider. Allerdings hab ich noch nicht herausgefunden wie man einstellen kann dass der Ray auch die Rotation und Skalierung des Objekts erkennt. Verfolge dazu mal diesen Thread, ich hoffe auch da eine Antwort vom her Rath zu bekommen.
Ich hab einfach mal das Nächste Objekt zum bereits selektierten gewählt, auf dem das selektierte ausgerichtet wird.
Die Kollisionserkennung könntest du noch auf Klonobjekte etc. ausweiten, nur so als Tipp
(Da Funktioniert MakeEditable nicht) [obj.GetChache() ]
import c4d
from c4d.utils import GeRayCollider
c4d.CallCommand(1024314)
def ZeroAxe(op): # Setzt die Objektachse auf den Weltursprung
mg = op.GetMg()
op.SetMg(c4d.Matrix())
count = op.GetPointCount()
for id in xrange(count):
pos = op.GetPoint(id)
pos *= mg
op.SetPoint(id,pos)
op.Message(c4d.MSG_UPDATE)
def MakeEditable(op):
if op is None:
return
if not isinstance(op,c4d.BaseObject):
return
if op.CheckType(c4d.Opolygon) | op.CheckType(c4d.Ospline):
return op
op = [op.Get*****()]
doc = c4d.documents.BaseDocument()
doc.InsertObject(op[0],None,None)
op = c4d.utils.SendModelingCommand(
command = c4d.MCOMMAND_MAKEEDITABLE,
list = op,
doc = doc )
return op[0]
def main():
op = doc.GetActiveObject()
if not op:
print "No object selected."
return
op = MakeEditable(op)
ZeroAxe(op)
ray = GeRayCollider()
ray.Init(op)
v1 = c4d.Vector(100,10,50)
v2 = c4d.Vector.GetNormalized(c4d.Vector(-1,0.5,0.5))
print "Startvektor: ",v1
print "Richtungsvektor: ",v2
print
if ray.Intersect(v1, v2, 5000) == False: return
sct = ray.GetNearestIntersection()
print "Kollisionsposition: ", sct["hitpos"]
print "KollisionsflächenID: ", sct["face_id"]
print "Kollisionsnormale: ", c4d.Vector.GetNormalized(sct["f_normal"])
print "Distanz: ", sct["distance"]
main()
Developer, C4D Betatester
Developer, C4D Betatester
Schau doch in den Py4D Docs, was eine GeClipMap is'.Cyres90 schrieb:was ist eine GeClipMap?
def Vec2Tup(vec):
return vec.x, vec.y, vec.z
bd.SetMatrix_Screen(op)
clpmap = GeClipMap()
clpmap.Init(100,200) # width, height
pos = Vec2Tup(obj.GetAbsPos())
for i, e in enumerate(zip(pos, ("x", "y", ",z"))):
clpmap.Text(5, i * 15, e[1] + ": " + str(e[0])) # x, y, text
bmp = clpmap.GetBitmap()
bd.DrawTexture(c4d.Vector(0,0,0), bmp) # pos, bitmap (nicht ganz sicher ob die argumente stimme)
Leider nicht.Cyres90 schrieb:Hast du was neues zu deinen Fragen im Plugin-Cafe-Board rausgefunden?
"""
Bibliothek.py
GetAllObjects
Copyright: Cyres
Written for CINEMA 4D R12.043
LastModified: 7.06.2011
"""
def GetAllObjects():
def DirectChildren(ObjList,Obj,VisInEdit,VisInRend):
if Obj.GetDown():
Obj = Obj.GetDown()
VisInEditUp = VisInEdit
VisInRendUp = VisInRend
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 0:VisInEdit = True
elif Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 1:VisInEdit = False
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 0:VisInRend = True
elif Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 1:VisInRend = False
ObjList = Append(ObjList,Obj,VisInEdit,VisInRend)
ObjList = DirectChildren(ObjList,Obj,VisInEdit,VisInRend)
ObjNext = Obj
while Obj.GetNext():
Obj = Obj.GetNext()
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 0:VisInEdit = True
elif Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 1:VisInEdit = False
else:VisInEdit = VisInEditUp
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 0:VisInRend = True
elif Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 1:VisInRend = False
else:VisInEdit = VisInRendUp
ObjList = Append(ObjList,Obj,VisInEdit,VisInRend)
ObjList = DirectChildren(ObjList,Obj,VisInEdit,VisInRend)
return ObjList
def Append(ObjList,Obj,VisInEdit,VisInRend):
Object = {"Object": Obj,
"VisInEdit": VisInEdit,
"VisInRend": VisInRend}
ObjList.append(Object)
return ObjList
import c4d
ObjList = list()
doc = c4d.documents.GetActiveDocument()
if not doc.GetFirstObject(): return
Obj = doc.GetFirstObject()
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 1:VisInEdit = False
else:VisInEdit = True
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 1:VisInRend = False
else:VisInRend = True
ObjList = Append(ObjList,Obj,VisInEdit,VisInRend)
ObjList = DirectChildren(ObjList,Obj,VisInEdit,VisInRend)
while Obj.GetNext():
Obj = Obj.GetNext()
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] == 1:VisInEdit = False
else:VisInEdit = True
if Obj[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] == 1:VisInRend = False
else:VisInRend = True
ObjList = Append(ObjList,Obj,VisInEdit,VisInRend)
ObjList = DirectChildren(ObjList,Obj,VisInEdit,VisInRend)
return ObjList
import c4d
import Bibliothek
c4d.CallCommand(1024314)
ObjLib = Bibliothek.GetAllObjects()
for Obj in ObjLib:
print Obj["Object"].GetName()
print Obj["VisInEdit"]
print Obj["VisInRend"]
neosun
Guest
Frage dazu, wenn ich diese Liste mit einer for obj in liste: outLink=objEine Funktion, bzw 2, die eine benötigt die andere, welche alle selektierten Objekte einer Szene in eine list packt.
cheers, nuxCode:def GetHNext(op): if not op: return if op.GetDown(): return op.GetDown() while not op.GetNext() and op.GetUp(): op = op.GetUp() return op.GetNext() def GetActiveObjects(doc): import c4d lst = list() op = doc.GetFirstObject() while op: if op.GetBit(c4d.BIT_ACTIVE) == True: lst.append(op) op = GetHNext(op) return lst
neosun
Guest
mp5gosu
Guest
Developer, C4D Betatester
neosun
Guest
mp5gosu
Guest
Und wie würdest du einen IteratorNode in COFFEE erstellen, mp5 ?
Developer, C4D Betatester
Die Idee hatte ich auch bin aber grad am überlegen wie man das effizient löst. Der Iterator node sollte ja nich bis 100000 durchlaufen wenn zb nu 15 objekte im OM sind..Iterator Node aus XPresso benutzen
Und wie willst du machen dass du innerhalb der schleife den output weitergibts ? Das hat Neosun ja in python versucht.ne eigene Schleife per COFFEE-Node erstellen.
Willkommen auf PSD-Tutorials.de
In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.
Nächster neuer Gratisinhalt
Statistik des Forums