print3DEConsole "\nSmart Merge 2 Points...\n\n" set path [get3DEInstallPath] source $path/user_data/tcl_archive/veclib.tcl set tcl_precision 8 set fobj [getSelectedFobj] if {$fobj==0}\ { bell post3DEInfoRequester " \n Error, there is no Sequence/Ref. Frame selected. \n" return } set pg [getSelectedPGroup] if {$pg==0}\ { bell post3DEInfoRequester " \n Error, there is no Pointgroup selected. \n" return } set no_frames [getFobjNoFrames $fobj] # determine number of selected points... set no_sel_points 0 for {set p [getFirstPoint $pg]} {$p != 0} {set p [getNextPoint $pg $p]}\ { set selected [getPointSelectionFlag $pg $p] if {$selected} {incr no_sel_points} } if {$no_sel_points!=2}\ { bell post3DEInfoRequester " \n Error, there must be exactly 2 selected points. \n" return } # find the 2 selected points... set p1 0 set p2 0 for {set p [getFirstPoint $pg]} {$p != 0} {set p [getNextPoint $pg $p]}\ { set selected [getPointSelectionFlag $pg $p] if {$selected}\ { if {$p1 == 0} {set p1 $p}\ elseif {$p2 == 0} {set p2 $p} } } # determine the last valid tracking point of p1... set last_frame_p1 0 set prev_valid 0 for {set frame 1} {$frame <= $no_frames} {incr frame}\ { set valid [isPointPos2DValid $pg $p1 $fobj $frame] if {$valid&&$prev_valid} {set last_frame_p1 $frame} set prev_valid $valid } # determine the last valid tracking point of p2... set last_frame_p2 0 set prev_valid 0 for {set frame 1} {$frame <= $no_frames} {incr frame}\ { set valid [isPointPos2DValid $pg $p2 $fobj $frame] if {$valid&&$prev_valid} {set last_frame_p2 $frame} set prev_valid $valid } # sort p1 & p2... if {$last_frame_p1>$last_frame_p2}\ { set help $last_frame_p1 set last_frame_p1 $last_frame_p2 set last_frame_p2 $help set help $p1 set p1 $p2 set p2 $help } # create a new point and copy new curve into it... set p [createPoint $pg] set pos1 [getPointPosition2D $pg $p1 $fobj $last_frame_p1] set pos2 [getPointPosition2D $pg $p2 $fobj $last_frame_p1] set diff [vec2-vec2 $pos1 $pos2] for {set frame 1} {$frame <= $last_frame_p1} {incr frame}\ { set valid [isPointPos2DValid $pg $p1 $fobj $frame] if {$valid}\ { set pos2d [getPointPosition2D $pg $p1 $fobj $frame] setPointPosition2D $pg $p $fobj $frame $pos2d } } for {} {$frame <= $no_frames} {incr frame}\ { set valid [isPointPos2DValid $pg $p2 $fobj $frame] if {$valid}\ { set pos2d [getPointPosition2D $pg $p2 $fobj $frame] set pos2d [vec2+vec2 $diff $pos2d] setPointPosition2D $pg $p $fobj $frame $pos2d } }