Home Technical Talk

Bridges across multiple holes

Hello, does anybody know if there is away to fix these gaps in 3ds?

gap_problem.jpg

with this one i'd select the top and bottom edges and then bridge.
from here I've been cutting in the geom from the side, it soon adds up to alot of work

so is there away to bridge a gap but also fill in the width segments while its bridging?

here are some other gaps

holes_in_poly.jpg




[also is there a 3ds website/forum i could ask / help problems on instead of using this technical talk forum, i feel bad to polycount =P ]

Replies

  • alexl
    Offline / Send Message
    alexl polycounter lvl 10
    For your first one here is how I would do it, it may not be the quickest method but I think its ok?

    filling_gap.jpg

    A little time consuming but if there is any faster way, I'd like to know too :)
  • Piflik
    Offline / Send Message
    Piflik polycounter lvl 12
    Sometimes you can copy existing similar pieces...like for the sphere example...select a similar set of faces, copy and rotate them to the right position, weld. But in general there is no quick way to do it. Bridge or Cap and then cut/connect the edges.
  • Yozora
    Offline / Send Message
    Yozora polycounter lvl 11
    what I usually do in these situations is select the line of edges that has the most vertices and then shift drag them using vertex snap, and then target weld the other ends of the edges.

    So in your first example, select the left line of (6) edges, shift drag snap to the next top vertex, and shift drag snap onto the right side of the mesh, then target weld the bottom 2 vertices and also weld the top snapped vertices.

    Not a perfect solution and doesnt work so well in some situations with more complex shapes, but generally I find its best to just plan ahead to avoid running into this in the first place (so finish the "base" shape first before inserting a bunch of extra edge loops).
  • PolyHertz
    Offline / Send Message
    PolyHertz polycount lvl 666
    Their is no automated way to do this, and even if their was it'd have to be a two step process where you specify the two sides to be bridged, and then the side(s) that would cut across. I actually looked into doing something like this in Maya a few months back, and came to the conclusion that it wasn't feasable (flat surfaces are one thing, but once you start getting warped and curved surfaces it can become a real nightmare).

    If someone can figure out a way to connect verts across rings while maintaining a gradual transition between each ones offset on the connected edges based on topological distance, you'll be golden. Till then, manual is the only way to go.
  • lloyd
    Thank you helpful people! i was thinking I'd have to do it that way

    Manually adding the other edges. Oh well.


    Autodesk need to make a Bridge+ button which takes into account other edges. or lets me bridge to them so i could then bridge 6 or so times across a surface.


    I find I'm mainly tackling the flat sided holes. as for the sphere that's a really good idea about rotation. hopefully one day that might come in handy!


    Thanks once again!
  • mLichy
    I'm sure it's possible.... I could maybe try and mess around with this... idk how easy it would be though.. I should probably get another script done that I want to do first that's easier, that might help me get setup to do this....
  • lloyd
    if your talking scripts. make one that moved the center/pivot of an object to the selected vert/s / polygon
    move_pivot.jpg
    Move center / pivot to yellow dot

    That would be good!

    Its somthing i could do really easy in xsi. you'd just click the vert and then click move center to vert [it was called point in xsi but same thing!]
  • PolyHertz
    Offline / Send Message
    PolyHertz polycount lvl 666
    lloyd: If you just want to move the pivot to the selected component you could copy/paste the values. Or if thats too slow try this (for use on one vert in editable poly):

    varVrtNum = (polyOp.getVertSelection $.baseObject) as array
    $.pivot = polyop.getVert $ varVrtNum[1]
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    Not sure what the Max Maya equivalents are but...
    "Poly Append" the first open border example ( result 1 face/poly )
    "Fill Holes" the closed border example ( result 1 face/poly per hole )

    Triangulate then Quadrangulate that face/poly
    This will get you at least halfway there ( divisions using border divisions )
  • mLichy
    lloyd, that's already done in my script :). I can upload it now I guess... I also added the same function for the Working Pivot. I also added alot more stuff that I think will help out ppl alot.

    You can download my toolbar on my website
  • PolyHertz
    Offline / Send Message
    PolyHertz polycount lvl 666
    mLichy: Whoa, didnt you just start doing maxscript recently? Nice work so far, your way ahead of me :P

    Edit:

    Threw together something that would work on single or multiple verts/edges/faces. It moves the actual pivot to the selected components averaged location. Run "$.pivot = curObjPos" to go back to the previous pivot at any time.
    global point3 curObjPos = $.pos
    
    if (classof $.baseObject == Editable_Poly) then
        (
        
        --Vert selection
        vrtCount = (((polyOp.getVertSelection $.baseObject) as array).count)
        if (subobjectLevel == 1 and vrtCount == 1) then
            (
            varVrtNum = (polyOp.getVertSelection $.baseObject) as array
            global point3 newPivotVec = polyop.getVert $ varVrtNum[1]
            )
        if (subobjectLevel == 1 and vrtCount >= 2) then
            (
            allVrts = (polyOp.getVertSelection $.baseObject) as array
            varVrtNum = [0,0,0]
            for eachVrt in allVrts do
                (
                buffVar = polyop.getVert $ eachVrt
                finalValx = (buffVar[1] + varVrtNum[1])
                finalValy = (buffVar[2] + varVrtNum[2])
                finalValz = (buffVar[3] + varVrtNum[3])
                varVrtNum = [finalValx,finalValy,finalValz]
                )
            varCenterA = varVrtNum[1] / allVrts.count
            varCenterB = varVrtNum[2] / allVrts.count
            varCenterC = varVrtNum[3] / allVrts.count
            global point3 newPivotVec = [varCenterA,varCenterB,varCenterC]
            )
        
        --Edge selection
        edjCount = (((polyOp.getEdgeSelection $.baseObject) as array).count)
        if (subobjectLevel == 2 and edjCount == 1) then
            (
            varEdjNum = (polyOp.getEdgeSelection $.baseObject) as array
            varEdjVrts = polyop.GetEdgeVerts $ varEdjNum[1]
            vrtOne = polyop.getVert $ varEdjVrts[1]
            vrtTwo = polyop.getVert $ varEdjVrts[2]
            finalValx = (vrtOne[1] + vrtTwo[1]) / 2
            finalValy = (vrtOne[2] + vrtTwo[2]) / 2
            finalValz = (vrtOne[3] + vrtTwo[3]) / 2
            global point3 newPivotVec = [finalValx,finalValy,finalValz]
            )
        if (subobjectLevel == 2 and edjCount >= 2) then
            (
            allEdjs = (polyOp.getEdgeSelection $.baseObject) as array
            varEdjNum = [0,0,0]
            for eachEdj in allEdjs do
                (
                varEdjVrts = polyop.GetEdgeVerts $ eachEdj
                vrtOne = polyop.getVert $ varEdjVrts[1]
                vrtTwo = polyop.getVert $ varEdjVrts[2]
                finalValx = (vrtOne[1] + vrtTwo[1] + varEdjNum[1])
                finalValy = (vrtOne[2] + vrtTwo[2] + varEdjNum[2])
                finalValz = (vrtOne[3] + vrtTwo[3] + varEdjNum[3])
                varEdjNum = [finalValx,finalValy,finalValz]
                )
            varCenterA = varEdjNum[1] / (allEdjs.count * 2)
            varCenterB = varEdjNum[2] / (allEdjs.count * 2)
            varCenterC = varEdjNum[3] / (allEdjs.count * 2)
            global point3 newPivotVec = [varCenterA,varCenterB,varCenterC]
            )
            
        --Face selection
        facCount = (((polyOp.getFaceSelection $.baseObject) as array).count)
        if (subobjectLevel == 4 and facCount == 1) then
            (
            varFacNum = (polyOp.getFaceSelection $.baseObject) as array
            global point3 newPivotVec = polyop.getSafeFaceCenter $ varFacNum[1]
            )
        if (subobjectLevel == 4 and facCount >= 2) then
            (
            allFacs = (polyOp.getFaceSelection $.baseObject) as array
            varFacNum = [0,0,0]
            for eachFac in allFacs do
                (
                buffVar = polyop.getSafeFaceCenter $ eachFac
                finalValx = (buffVar[1] + varFacNum[1])
                finalValy = (buffVar[2] + varFacNum[2])
                finalValz = (buffVar[3] + varFacNum[3])
                varFacNum = [finalValx,finalValy,finalValz]
                )
            varCenterA = varFacNum[1] / allFacs.count
            varCenterB = varFacNum[2] / allFacs.count
            varCenterC = varFacNum[3] / allFacs.count
            global point3 newPivotVec = [varCenterA,varCenterB,varCenterC]
            )
        
            
        --Object selection
        if (subobjectLevel == 0) then
            (
            global point3 newPivotVec = $.center
            )
        )
    
    
    --$.pivot = curObjPos --use to get the original pivot back
    $.pivot = newPivotVec --use to put the pivot at the vert selection
    
    
    
  • mLichy
    heh, yeah I started a couple weeks ago.. :)
  • lloyd
    @mLichy


    would you kindly pat your self on the back


    Thanks for the script. it works! and also has some other nice fetures. im moving over from xsi and in xsi you could press + and - to add diffent levels of 'Turbo smooth' on and off.

    so the turbo smoothing options in that script are very nice!


    -lloyd

    p.s well done for landing bungie. my dream job
Sign In or Register to comment.