blender3d.cz
http://blender3d.cz/forum/

Průsečík dvou edges?
http://blender3d.cz/forum/viewtopic.php?f=6&t=5552
Stránka 12

Autor:  zdendos [ úte úno 12, 2008 12:00 am ]
Předmět příspěvku:  Průsečík dvou edges?

Měl bych takový malý dotaz ohledně průsečíku dvou edges. Existuje v Blenderu nějaká fce nebo postup, jak to realizovat?

Autor:  Alfisko [ úte úno 12, 2008 4:48 pm ]
Předmět příspěvku: 

:?:
popravde receno jsem nepochopil co tim myslis?
rekl jsi, ze mas problem ohledne neceho, ale nedefinoval jsi problem

Autor:  zdendos [ úte úno 12, 2008 9:02 pm ]
Předmět příspěvku: 

Ale řekl.. 8) Potřebuji vytvořit průsečík (bod) dvou edges (přímek), které se kříží. Jak na to? Je v blenderu nějaká fce a nebo je na to nějaký postup?

Autor:  kareem [ úte úno 12, 2008 9:18 pm ]
Předmět příspěvku: 

Myslím že žádná taková fce v blenderu není, řekl bych, že v tomto případě pomůže akorát knife (k).
A nebo můžeš zkusit něco naprogramovat v pythonu.

Autor:  zdendos [ úte úno 12, 2008 10:46 pm ]
Předmět příspěvku: 

Tak to něco málo už v pythonu mám... Je to stále rozpracované...
Kód:
# Autor: Zdenek Koukol, (c) ZDENDOS COMPANY 2008
# ----------------------------------------------
# Fce najde prusecik dvou edges
# Testovano v Blender v 2.44 a 2.45
# Ver: 0.2

import Blender

if (Blender.Get("version") != 244) and (Blender.Get("version") != 245):
   print "Warning: Pro tuto verzi Blenderu nebyl script testovan."

objekty = Blender.Object.GetSelected()
if (len(objekty) != 1):
   print "Error: Vyberte pouze jeden objekt!"
else:
   objekt = objekty[0]
   if objekt.type != "Mesh":
      print "Error: Vyberte objekt typu MESH!"
   else:
      muj_mesh = objekt.getData()
      if Blender.Window.EditMode():
         print "Error: Nesmis byt v editacnim modu!"
      else:
         vybrane_usecky = []
         for usecka in muj_mesh.edges[:]:
            if (usecka.flag & 0x01): vybrane_usecky.append(usecka)
         
         if (len(vybrane_usecky) != 2):
            print "Error: Musis mit vybrany dve edges!"
         else:
            bodA = vybrane_usecky[0].v1
            bodB = vybrane_usecky[0].v2
            bodC = vybrane_usecky[1].v1
            bodD = vybrane_usecky[1].v2
         
            t = 0.0
            s = 0.0
         
            xE = 0.0
            yE = 0.0
            yE = 0.0
         
            xF = 0.0
            yF = 0.0
            yF = 0.0

            xA = (bodA.co[0])
            yA = (bodA.co[1])
            zA = (bodA.co[2])

            xB = (bodB.co[0])
            yB = (bodB.co[1])
            zB = (bodB.co[2])

            xC = (bodC.co[0])
            yC = (bodC.co[1])
            zC = (bodC.co[2])

            xD = (bodD.co[0])
            yD = (bodD.co[1])
            zD = (bodD.co[2])
            
            t = (yC*(xD - xC) - yA*(xD - xC) + xA*(yD - yC) - xC*(yD - yC)) / (((yB - yA) * (xD - xC)) - ((xB - xA) * (yD - yC)))
            s = (xA - xC + t*(xB - xA)) / (xD - xC)

            xE = xA + t*(xB - xA)
            yE = yA + t*(yB - yA)
            zE = zA + t*(zB - zA)                  
         
            xF = xC + s*(xD - xC)
            yF = yC + s*(yD - yC)
            zF = zC + s*(zD - zC)                  
            
            bod = Blender.NMesh.Vert(((xE + xF)/2), ((yE + yF)/2), ((zE + zF)/2))   
            muj_mesh.verts.extend([bod])
            muj_mesh.update()

Autor:  zdendos [ úte úno 12, 2008 10:47 pm ]
Předmět příspěvku: 

Já se hlavně, ptám, zda to má smysl vůbec ten skript dodělat a nebo ne. Ale jelikož v blenderu taková fce není, tak proč ne.

Autor:  frca [ úte úno 12, 2008 11:49 pm ]
Předmět příspěvku: 

V prostoru obecně nemusí průsečík dvou hran existovat. Takže jde spíš o to, najít bod na hraně, který je nejblíž jiné hraně.

Autor:  xixixao [ úte úno 12, 2008 11:53 pm ]
Předmět příspěvku: 

Nemusíš, ale pokud používáš "ctrl" při hýbání s vertexy apod., není to zas tak nepravděpodobné...

Autor:  frca [ stř úno 13, 2008 12:02 am ]
Předmět příspěvku: 

Problém je i v tom, že přesnost souřadnic je konečná a pokud nemají jednu souřadnici vyloženě společnou, tak je velká pravděpodobnost, že tam průsečík není -> zjišťování průsečíku povede opět na problém nejbližšího bodu.

Autor:  zdendos [ stř úno 13, 2008 12:48 am ]
Předmět příspěvku: 

Ale to by zase tolik nevadilo, kdyby se tento průsečík promítl do jedné z nich a tuto křivku by rozdělil (i kdyby to nebyl skutečný průsečík)

Autor:  vklidu [ stř úno 13, 2008 10:58 am ]
Předmět příspěvku: 

nehledate toto?
Tutorial
http://www.hybird.org/~guiea_7/
Script
http://blenderartists.org/forum/showthr ... light=geom

Autor:  zdendos [ stř úno 13, 2008 6:31 pm ]
Předmět příspěvku: 

Hm, zatím to vypadá podle ukázek velmi dobře...

Autor:  zdendos [ čtv úno 14, 2008 6:37 pm ]
Předmět příspěvku: 

Tak skript jsem nainstaloval... Ale nějak jsem nepříšel, jak ho aktivovat...

Autor:  vklidu [ pát úno 15, 2008 2:05 pm ]
Předmět příspěvku: 

bohuzel nemam se scriptem zadnou zkusenost, jen jsem nasel toto info asi pred rokem na webu (mozna jede jen s nejakou starsi verzi? netusim)

Autor:  zdendos [ sob úno 16, 2008 10:53 pm ]
Předmět příspěvku: 

Hm, porad na to nejak nemohu prijit. Tak stale vyuzivam svuj skript... Tam jsem jsi jist... :-)

Stránka 12 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/