def create_distanceMeasure(start=None, end=None, baseName='measure'): """ Get the the closest return based on a source and target and variable modes :parameters: :start(str): Our start obj :end(str): End obj :baseName(str):What mode are we checking data from :returns {shape,dag,loc_start,loc_end,start,end} """ try: _str_func = 'create_distanceMeasure' #Create ==================================================================================== plug_start = POS.get_positionPlug(start) plug_end = POS.get_positionPlug(end) _res = {'start': start, 'end': end} if not plug_start: pos_start = POS.get(start) loc_start = mc.spaceLocator(name="{0}_{1}_start_loc".format( NAMES.get_base(start), baseName))[0] POS.set(loc_start, pos_start) plug_start = POS.get_positionPlug(loc_start) _res['loc_start'] = loc_start if not plug_end: pos_end = POS.get(end) loc_end = mc.spaceLocator(name="{0}_{1}_end_loc".format( NAMES.get_base(end), baseName))[0] POS.set(loc_end, pos_end) plug_end = POS.get_positionPlug(loc_end) _res['loc_end'] = loc_end mDistShape = r9Meta.MetaClass(mc.createNode('distanceDimShape')) mDistShape.rename("{0}_distShape".format(baseName)) mDistTrans = r9Meta.MetaClass(VALID.getTransform(mDistShape.mNode)) mDistTrans.rename("{0}_dist".format(baseName)) _res['dag'] = mDistTrans.mNode _res['shape'] = mDistShape.mNode ATTR.set_message(_res['dag'], 'distShape', _res['shape'], simple=True) ATTR.connect(plug_start, "{0}.startPoint".format(_res['shape'])) ATTR.connect(plug_end, "{0}.endPoint".format(_res['shape'])) return _res except Exception, err: cgmGen.cgmExceptCB(Exception, err)
def fbx_cleaner(delete = False, spaceString = '03FBXASC032'): """ Find all the sill attributes fbx adds on import :parameters: delete | whether to delete all userDefined attrs or not spaceString | Search string for what fbx did with spaces from max or other app. Replaces with underscore """ _str_func = 'fbx_cleaner' log.debug("|{0}| >> ...".format(_str_func)) _res = {} for o in mc.ls(): _res[o] = [] _l = mc.listAttr(o,userDefined=True) or [] for a in _l: _res[o].append(a) _shapes = TRANS.shapes_get(o) if _shapes: for s in _shapes: _res[s] = [] _l = mc.listAttr(s,userDefined=True) or [] for a in _l: _res[s].append(a) print cgmGEN._str_hardBreak l_renamed = [] for k,l in _res.iteritems(): if l: print cgmGEN._str_subLine print(cgmGEN._str_baseStart * 2 + " node: '{0}' | attrs: {1}...".format(k,len(l))) for i,a in enumerate(l): print(" {0} | '{1}'".format(i,a)) if delete: ATTR.delete(k,a) if spaceString: if spaceString in NAMES.get_base(k) and k not in l_renamed: new = mc.rename(k, NAMES.get_base(k).replace(spaceString,'_')) print(" Rename {0} | '{1}'".format(k,new)) l_renamed.append(k) print cgmGEN._str_hardBreak
def create_vectorCurveFromObj(obj=None, vector='z+', distance=1, asEuclid=False): try: _vec = transformDirection(obj, vector) except: _vec = MATH.get_obj_vector(obj, vector, True) return DIST.create_vectorCurve( POS.get(obj), _vec, distance, "{0}_{1}_vecLine".format(NAME.get_base(obj), vector))
def release_post_insert(self): #ATTR.set_messagse(_catch, 'tmpMsg', self.l_created[-1]) _loc = self.l_created[-1] _mLoc = r9Meta.MetaClass(_loc) _buffer = _mLoc.cgmLocDat _target = ATTR.get_message(_loc,'meshTarget')[0] _loc = mc.rename(_loc, "{0}_u{1}_v{2}_rayCast_loc".format(coreNames.get_base(_target), "{0:.4f}".format(_buffer['uv'][0]), "{0:.4f}".format(_buffer['uv'][1]), )) self.dropTool()
def create_loc(obj): _str_func = 'create_loc' infoDict = get_info(obj) _loc = mc.spaceLocator(name="{0}_loc".format(NAMES.get_base(obj)))[0] pos = infoDict['position'] mc.move(pos[0], pos[1], pos[2], _loc, ws=True) mc.xform(_loc, roo=infoDict['rotateOrder'], p=True) mc.xform(_loc, ro=infoDict['rotation'], ws=True) mc.xform(_loc, ra=infoDict['rotateAxis'], p=True) #mTarget = r9Meta.getMObject(target) mc.xform(_loc, rp=infoDict['position'], ws=True, p=True) if infoDict.get('scalePivot'): mc.xform(_loc, sp=infoDict['scalePivot'], ws=True, p=True) return _loc
def create_closest_point_node(source=None, targetSurface=None, singleReturn=False): """ Create a closest point on surface node and wire it :parameters: source(str/vector) -- source point or object targetSurface -- surface to check transform, nurbsSurface, curve, mesh supported singleReturn - only return single return if we have :returns node(list) """ try: _str_func = 'create_closest_point_node' _transform = False if VALID.vectorArg(source) is not False: _transform = mc.spaceLocator(n='closest_point_source_loc')[0] POS.set(_transform, source) elif mc.objExists(source): if SEARCH.is_transform(source): _transform = source elif VALID.is_component(source): _transform = mc.spaceLocator( n='{0}_loc'.format(NAMES.get_base(source)))[0] POS.set(_transform, POS.get(source)) else: _transform = SEARCH.get_transform(source) if not _transform: raise ValueError, "Must have a transform" if SEARCH.is_shape(targetSurface): l_shapes = [targetSurface] else: l_shapes = mc.listRelatives(targetSurface, s=True, fullPath=True) if not l_shapes: raise ValueError, "Must have shapes to check." _nodes = [] _locs = [] _types = [] _shapes = [] for s in l_shapes: _type = VALID.get_mayaType(s) if _type not in ['mesh', 'nurbsSurface', 'nurbsCurve']: log.error( "|{0}| >> Unsupported target surface type. Skipping: {1} |{2} " .format(_str_func, s, _type)) continue _loc = mc.spaceLocator()[0] _res_loc = mc.rename( _loc, '{0}_to_{1}_result_loc'.format(NAMES.get_base(source), NAMES.get_base(s))) _locs.append(_res_loc) _types.append(_type) _shapes.append(s) if _type == 'mesh': _node = mc.createNode('closestPointOnMesh') _node = mc.rename( _node, "{0}_to_{1}_closePntMeshNode".format( NAMES.get_base(source), NAMES.get_base(s))) ATTR.connect((_transform + '.translate'), (_node + '.inPosition')) ATTR.connect((s + '.worldMesh'), (_node + '.inMesh')) ATTR.connect((s + '.worldMatrix'), (_node + '.inputMatrix')) _pos = ATTR.get(_node, 'position') ATTR.connect((_node + '.position'), (_res_loc + '.translate')) _nodes.append(_node) elif _type == 'nurbsSurface': closestPointNode = mc.createNode('closestPointOnSurface') closestPointNode = mc.rename( closestPointNode, "{0}_to_{1}_closePntSurfNode".format( NAMES.get_base(source), NAMES.get_base(s))) mc.connectAttr((_transform + '.translate'), (closestPointNode + '.inPosition')) #attributes.doSetAttr(closestPointNode,'inPositionX',_point[0]) #attributes.doSetAttr(closestPointNode,'inPositionY',_point[1]) #attributes.doSetAttr(closestPointNode,'inPositionZ',_point[2]) ATTR.connect((s + '.worldSpace'), (closestPointNode + '.inputSurface')) ATTR.connect((closestPointNode + '.position'), (_res_loc + '.translate')) _nodes.append(closestPointNode) elif _type == 'nurbsCurve': _node = mc.createNode('nearestPointOnCurve') _node = mc.rename( _node, "{0}_to_{1}_nearPntCurveNode".format( NAMES.get_base(source), NAMES.get_base(s))) p = [] distances = [] mc.connectAttr((_transform + '.translate'), (_node + '.inPosition')) mc.connectAttr((s + '.worldSpace'), (_node + '.inputCurve')) ATTR.connect((_node + '.position'), (_res_loc + '.translate')) _nodes.append(_node) if not singleReturn: return _locs, _nodes, _shapes, _types _l_distances = [] pos_base = POS.get(_transform) for i, n in enumerate(_nodes): p2 = POS.get(_locs[i]) _l_distances.append(get_distance_between_points(pos_base, p2)) if not _l_distances: raise ValueError, "No distance value found" closest = min(_l_distances) _idx = _l_distances.index(closest) for i, n in enumerate(_nodes): if i != _idx: mc.delete(n, _locs[i]) return _locs[_idx], _nodes[_idx], _shapes[_idx], _types[_idx] except Exception, err: cgmGen.cgmExceptCB(Exception, err)
def get_special_pos(targets=None, arg='rp', mode=None, mark=False): """ This had to move here for import loop considerations :parameters: obj(str): Object to modify target(str): Object to snap to sourceObject(str): object to copy from arg rp sp boundingBoxEach boundingBoxAll - all targets bounding box cumulative axisBox castFar castNear groundPos mode - Relative to center front x :returns success(bool) """ try: _str_func = 'get_special_pos' _sel = mc.ls(sl=True) or [] targets = VALID.listArg(targets) _targets = VALID.mNodeStringList(targets) if not _targets: raise ValueError, "Must have targets!" _arg = VALID.kw_fromDict(arg, SHARED._d_pivotArgs, noneValid=True, calledFrom=__name__ + _str_func + ">> validate pivot") if _arg is None: _arg = arg if _arg == 'cast': _arg = 'castNear' if mode is None: if _arg in ['boundingBox']: mode = 'center' else: mode = 'z+' l_nameBuild = ['_'.join([NAMES.get_base(o) for o in _targets]), _arg] if mode: l_nameBuild.append(mode) l_res = [] if _arg in ['rp', 'sp']: for t in _targets: l_res.append(POS.get(t, _arg, 'world')) elif _arg == 'boundingBox': l_res.append(POS.get_bb_pos(_targets, False, mode)) elif _arg == 'boundingBoxShapes': l_res.append(POS.get_bb_pos(_targets, True, mode)) elif _arg == 'boundingBoxEach': for t in _targets: l_res.append(POS.get_bb_pos(t, False, mode)) elif _arg == 'boundingBoxEachShapes': for t in _targets: l_res.append(POS.get_bb_pos(t, True, mode)) elif _arg == 'groundPos': for t in targets: pos = TRANS.position_get(t) l_res.append([pos[0], 0.0, pos[2]]) elif _arg.startswith('castAll'): _type = _arg.split('castAll')[-1].lower() log.debug("|{0}| >> castAll mode: {1} | {2}".format( _str_func, mode, _type)) pos = RAYS.get_cast_pos(_targets[0], mode, _type, None, mark=False, maxDistance=100000) l_res.append(pos) elif _arg.startswith('cast'): _type = _arg.split('cast')[-1].lower() log.debug("|{0}| >> cast mode: {1} | {2}".format( _str_func, mode, _type)) if len(_targets) > 1: log.debug("|{0}| >> more than one target...".format(_str_func)) pos = RAYS.get_cast_pos(_targets[0], mode, _type, _targets[1:], mark=False, maxDistance=100000) else: pos = RAYS.get_cast_pos(_targets[0], mode, _type, _targets, mark=False, maxDistance=100000) if not pos: return False l_res.append(pos) elif _arg == 'axisBox': log.warning("|{0}| >> axisBox mode is still wip".format(_str_func)) if not targets: raise ValueError, "No targets in axisBox cast!" for t in targets: log.debug("|{0}| >> AxisBox cast: {1} ".format(_str_func, t)) _proxy = CORERIG.create_axisProxy(t) #Start point is bb center because rp can sometimes be in odd places and we care about the axisBox pos = RAYS.get_cast_pos(t, mode, 'near', _proxy, startPoint=POS.get(_proxy, 'bb'), mark=False, maxDistance=100000) log.debug("|{0}| >> AxisBox dat: {1}".format(_str_func, pos)) #if not pos: # pprint.pprint(vars()) l_res.append(pos) mc.delete(_proxy) else: raise ValueError, "|{0}| >> Unknown mode: {1}".format( _str_func, _arg) #cgmGEN.func_snapShot(vars()) if len(l_res) > 1: _res = DIST.get_average_position(l_res) else: _res = l_res[0] if mark: _loc = mc.spaceLocator()[0] mc.move(_res[0], _res[1], _res[2], _loc, ws=True) mc.rename(_loc, '{0}_loc'.format('_'.join(l_nameBuild))) if _sel and not mark: mc.select(_sel) return _res except Exception, err: cgmGEN.cgmExceptCB(Exception, err)
def snap(obj=None, targets=None, position=True, rotation=True, rotateAxis=False, rotateOrder=False, rotatePivot=False, scalePivot=False, objPivot='rp', objMode=None, objLoc=False, targetPivot='rp', targetMode=None, targetLoc=False, queryMode=False, space='w', mark=False, **kws): """ Core snap functionality. :parameters: obj(str): Object to modify target(str): Objects to snap to objPivot targetPivot objMode = targetMode position rotation rotateAxis rotateOrder scalePivot space mark :returns success(bool) """ try: _str_func = 'snap' try: obj = obj.mNode except: pass _obj = VALID.mNodeString(obj) if targets is None: log.debug("|{0}| >> self target... ".format(_str_func)) _targets = [_obj] else: _targets = VALID.mNodeStringList(targets) reload(VALID) _pivotObj = VALID.kw_fromDict(objPivot, SHARED._d_pivotArgs, noneValid=True) _pivotTar = VALID.kw_fromDict(targetPivot, SHARED._d_pivotArgs, noneValid=True) _space = VALID.kw_fromDict(space, SHARED._d_spaceArgs, noneValid=False, calledFrom=__name__ + _str_func + ">> validate space") log.debug( "|{0}| >> obj: {1}({2}-{3}) | target:({4}-{5})({6}) | space: {7}". format(_str_func, _obj, _pivotObj, objMode, _pivotTar, targetMode, _targets, _space)) log.debug( "|{0}| >> position: {1} | rotation:{2} | rotateAxis: {3} | rotateOrder: {4}" .format(_str_func, position, rotation, rotateAxis, rotateOrder)) kws_xform = {'ws': False, 'os': False} if _space == 'world': kws_xform['ws'] = True else: kws_xform['os'] = True #Mode type defaults... if objMode is None: if _pivotObj is 'boundingBox': objMode = 'center' elif _pivotObj in ['castCenter', 'castFar', 'castNear', 'axisBox']: objMode = 'z+' if targetMode is None: if _pivotTar is 'boundingBox': targetMode = 'center' elif _pivotTar in ['castCenter', 'castFar', 'castNear', 'axisBox']: targetMode = 'z+' if _pivotTar in ['castFar', 'castAllFar', 'castNear', 'castAllNear']: if targetMode == 'center': log.debug( "|{0}| >> Center target mode invalid with {1}. Changing to 'z+' " .format(_str_func, _pivotTar)) targetMode = 'z+' #cgmGEN.func_snapShot(vars()) if position or objLoc or targetLoc or rotatePivot or scalePivot: kws_xform_move = copy.copy(kws_xform) if _pivotTar == 'sp': kws_xform_move['spr'] = True else: kws_xform_move['rpr'] = True #>>>Target pos ------------------------------------------------------------------------------ log.debug( "|{0}| >> Position True. Getting target pivot pos {1} ".format( _str_func, _pivotTar)) l_nameBuild = [ '_'.join([NAMES.get_base(o) for o in _targets]), _pivotTar ] if targetMode and _pivotTar not in [ 'sp', 'rp', 'closestPoint', 'groundPos' ]: l_nameBuild.append(targetMode) l_pos = [] if _pivotTar in ['sp', 'rp']: log.debug("|{0}| >> xform query... ".format(_str_func)) for t in _targets: l_pos.append(POS.get(t, _pivotTar, _space)) pos_target = DIST.get_average_position(l_pos) elif _pivotTar == 'closestPoint': log.debug("|{0}|...closestPoint...".format(_str_func)) pos_target = DIST.get_by_dist(_obj, _targets, resMode='pointOnSurface') else: log.debug("|{0}| >> special query... ".format(_str_func)) _targetsSpecial = copy.copy(_targets) if _pivotTar not in [ 'axisBox', 'groundPos', 'castCenter', 'boundingBox' ]: _targetsSpecial.insert(0, _obj) pos_target = get_special_pos(_targetsSpecial, _pivotTar, targetMode) if not pos_target: return log.error("No position detected") if targetLoc: _loc = mc.spaceLocator()[0] mc.move(pos_target[0], pos_target[1], pos_target[2], _loc, ws=True) mc.rename(_loc, '{0}_loc'.format('_'.join(l_nameBuild))) log.debug("|{0}| >> Target pivot: {1}".format( _str_func, pos_target)) #>>>Obj piv ------------------------------------------------------------------------------ log.debug("|{0}| >> Getting obj pivot pos {1} ".format( _str_func, _pivotObj)) l_nameBuild = [NAMES.get_base(_obj), _pivotObj] if objMode and _pivotObj not in [ 'sp', 'rp', 'closestPoint', 'groundPos' ]: l_nameBuild.append(objMode) l_pos = [] if _pivotObj in ['sp', 'rp']: log.debug("|{0}| >> xform query... ".format(_str_func)) pos_obj = POS.get(_obj, _pivotObj, _space) elif _pivotObj == 'closestPoint': log.debug("|{0}|...closestPoint...".format(_str_func)) pos_obj = DIST.get_by_dist(_targets[0], _obj, resMode='pointOnSurface') else: log.debug("|{0}| >> special query... ".format(_str_func)) pos_obj = get_special_pos(_obj, _pivotObj, objMode) if objLoc: _loc = mc.spaceLocator()[0] mc.move(pos_obj[0], pos_obj[1], pos_obj[2], _loc, ws=True) mc.rename(_loc, '{0}_loc'.format('_'.join(l_nameBuild))) log.debug("|{0}| >> Obj pivot: {1}".format(_str_func, pos_obj)) if queryMode: pprint.pprint(vars()) log.warning("|{0}| >> Query mode. No snap".format(_str_func)) mc.select([_obj] + _targets) return True #>>>Obj piv ------------------------------------------------------------------------------ if position: log.debug("|{0}| >> Positioning... ".format(_str_func)) if _pivotObj == 'rp': TRANS.position_set(obj, pos_target) #POS.set(_obj, pos_target) else: p_start = TRANS.position_get(_obj) _vector_to_objPivot = COREMATH.get_vector_of_two_points( p_start, pos_obj) _dist_base = DIST.get_distance_between_points( p_start, pos_obj) #...get our base distance p_result = DIST.get_pos_by_vec_dist( pos_target, _vector_to_objPivot, -_dist_base) cgmGEN.func_snapShot(vars()) POS.set(_obj, p_result) if rotateAxis: log.debug("|{0}|...rotateAxis...".format(_str_func)) mc.xform(obj, ra=mc.xform(_targets[0], q=True, ra=True, **kws_xform), p=True, **kws_xform) if rotateOrder: log.debug("|{0}|...rotateOrder...".format(_str_func)) mc.xform(obj, roo=mc.xform(_targets[0], q=True, roo=True), p=True) if rotation: log.debug("|{0}|...rotation...".format(_str_func)) _t_ro = ATTR.get_enumValueString(_targets[0], 'rotateOrder') _obj_ro = ATTR.get_enumValueString(obj, 'rotateOrder') if _t_ro != _obj_ro: #Creating a loc to get our target space rotateOrder into new space log.debug( "|{0}|...rotateOrders don't match...".format(_str_func)) _loc = mc.spaceLocator(n='tmp_roTranslation')[0] ATTR.set(_loc, 'rotateOrder', _t_ro) rot = mc.xform(_targets[0], q=True, ro=True, **kws_xform) mc.xform(_loc, ro=rot, **kws_xform) mc.xform(_loc, roo=_obj_ro, p=True) rot = mc.xform(_loc, q=True, ro=True, **kws_xform) mc.delete(_loc) else: rot = mc.xform(_targets[0], q=True, ro=True, **kws_xform) mc.xform(_obj, ro=rot, **kws_xform) if rotatePivot: log.debug("|{0}|...rotatePivot...".format(_str_func)) mc.xform(obj, rp=pos_target, p=True, **kws_xform) if scalePivot: log.debug("|{0}|...scalePivot...".format(_str_func)) mc.xform(obj, sp=pos_target, p=True, **kws_xform) except Exception, err: cgmGEN.cgmExceptCB(Exception, err)
def create(target=None, position=None, tag=True, setMatchTarget=True, pivot='rp', mode='fromTarget', name=None): """ Return the short name of an object :parameters :target(str): What to create a loc from :tag(bool): Whether to tag for updating or special naming :pivot: Whether to force it to be created at the rotatePivot, scalePivot or BoundingBox center :mode fromTarget -- can be component or transform midPoint -- mid point of specfied targets closestPointOnTarget -- closest point from source to targets closestTarget -- closest target from source rayCast -- create a rayCast locator. For more options, see LOCINATOR attachPoint -- Create a rayCast follicle, and parent your loc to that. :setMatchTarget :returns short name(str) """ _str_func = "create" try: if mode == 'rayCast': #_catch = mc.group(em=True) class rayCastLoc(cgmDrag.clickMesh): def release_post_insert(self): #ATTR.set_messagse(_catch, 'tmpMsg', self.l_created[-1]) _loc = self.l_created[-1] _mLoc = r9Meta.MetaClass(_loc) _buffer = _mLoc.cgmLocDat _target = ATTR.get_message(_loc, 'meshTarget')[0] _loc = mc.rename( _loc, "{0}_u{1}_v{2}_rayCast_loc".format( coreNames.get_base(_target), "{0:.4f}".format(_buffer['uv'][0]), "{0:.4f}".format(_buffer['uv'][1]), )) self.dropTool() rayCastLoc(create='locator') #_res = ATTR.get_message(_catch,'tmpMsg')[0] return True _loc = mc.spaceLocator()[0] if position: mc.move(position[0], position[1], position[2], _loc, ws=True) if name: return mc.rename(_loc, name) return mc.rename("pos_loc") if not target: if name: return mc.rename(_loc, name) return mc.rename(_loc, "world_center_loc") _targets = VALID.objStringList(target, noneValid=False, calledFrom=__name__ + _str_func + ">> validate target") #_targets = VALID.listArg(target) if tag or mode: _mi_loc = r9Meta.MetaClass(_loc) if not _mi_loc.hasAttr('cgmLocDat'): _mi_loc.addAttr('cgmLocDat', attrType='string') log.debug("|{0}| >> {1} mode...".format(_str_func, mode)) if mode in ['fromTarget', 'attachPoint']: if len(_targets) != 1: log.warning("|{0}| >> mode: {1} | targets: {2} | ".format( _str_func, mode, _targets)) raise ValueError, "May only have one target for mode: {0} | targets: {1}".format( mode, _targets) _target = _targets[0] if name: _loc = mc.rename(_loc, name) else: _loc = mc.rename( _loc, "{0}_fromTarget_loc".format(coreNames.get_base(_target))) if tag: #store info ATTR.store_info(_loc, 'cgmName', coreNames.get_base(_target), attrType='string', lock=True) ATTR.store_info(_loc, 'cgmLocMode', 'fromTarget', lock=True) ATTR.set_message(_loc, 'cgmLocSource', _target, 'cgmLocDat') if not VALID.is_component(_target) and setMatchTarget: SNAP.matchTarget_set(_target, _loc) #_d = r9Meta.MetaClass(_loc).cgmLocDat _res = update(_loc) _res = update(_loc, _target, 'fromTarget') if mode == 'attachPoint': class follicleAttach(cgmDrag.clickMesh): def release_post_insert(self): _str_funcName = 'follicleAttach.release' """if not self.b_dragStoreMode:#If not on drag, do it here. Otherwise do it on update if self._posBuffer: self.l_return.extend(self._posBuffer) if self._posBufferRaw: self.l_returnRaw.extend(self._posBufferRaw) else: self.l_returnRaw.extend(self._posBuffer) if self._createModeBuffer: self.l_created.extend(self._createModeBuffer)""" for pos in self.l_returnRaw: log.debug("|{0}|...pos {1}".format( _str_funcName, pos)) for i, m in enumerate(self.d_meshPos.keys()): log.debug("|{0}|...mesh: {1}".format( _str_funcName, m)) for i2, h in enumerate(self.d_meshPos[m]): if h == pos: log.debug("Found follicle match!") try: _set = [ m, self.d_meshUV[m][i2], "{0}_u{1}_v{2}".format( coreNames.get_short(m), "{0:.4f}".format( self.d_meshUV[m][i2] [0]), "{0:.4f}".format( self.d_meshUV[m] [i2][1])) ] self._l_folliclesToMake.append( _set) log.debug("|{0}|...uv {1}".format( _str_funcName, _set)) except Exception, err: log.error( "|{0}| >> Failed to query uv for hit {2} on shape {2} | err:{1}" .format( _str_funcName, err, pos, m)) if self._l_folliclesToMake: for f_dat in self._l_folliclesToMake: _follicle = NODES.add_follicle( f_dat[0], f_dat[2]) log.debug( "|finalize| >> Follicle created: {0}". format(_follicle)) ATTR.set(_follicle[0], 'parameterU', f_dat[1][0]) ATTR.set(_follicle[0], 'parameterV', f_dat[1][1]) mc.parent(_loc, _follicle[0]) mc.delete(self.l_created) self.dropTool() follicleAttach() return _loc elif not _targets: raise ValueError, "Must have targets for mode: {0} | targets: {1}".format( mode, _targets)
follicleAttach() return _loc elif not _targets: raise ValueError, "Must have targets for mode: {0} | targets: {1}".format( mode, _targets) else: if len(_targets) <= 2 and mode not in ['midPoint']: log.warning("|{0}| >> mode: {1} | targets: {2} | ".format( _str_func, mode, _targets)) raise ValueError, "Must have more than two targets for mode: {0} | targets: {1}".format( mode, _targets) _name = "{0}_{1}_loc".format( '_to_'.join([coreNames.get_base(t) for t in _targets]), mode) _loc = mc.rename(_loc, _name) if tag: ATTR.store_info(_loc, 'cgmName', _name, lock=True) ATTR.store_info(_loc, 'cgmLocMode', mode, lock=True) ATTR.msgList_connect(_loc, 'cgmLocSource', _targets, dataAttr='cgmLocDat') if not VALID.is_component(_targets[0]) and setMatchTarget: SNAP.matchTarget_set(_targets[0], _loc) return update(_loc)
def create_localAxisProxyBAK(obj=None): """ Make a local axis box around a given object so that you can then """ try: _str_func = 'create_localAxisProxy' _dag = VALID.getTransform(obj) if not _dag: raise ValueError, "Must have a dag node" l_shapes = TRANS.shapes_get(_dag) _dup = mc.duplicate(l_shapes, po=False, rc=True)[0] #_dup = TRANS.parent_set(_dup,False) #Get some values... t = ATTR.get(_dup, 'translate') r = ATTR.get(_dup, 'rotate') s = ATTR.get(_dup, 'scale') o = TRANS.orient_get(_dup) shear = ATTR.get(_dup, 'shear') _scaleLossy = TRANS.scaleLossy_get(_dag) #Reset our stuff before we make our bb... TRANS.orient_set(_dup, (0, 0, 0)) ATTR.set(_dup, 'scale', [1, 1, 1]) _size = POS.get_bb_size(_dup, True) import cgm.core.lib.math_utils as COREMATH reload(COREMATH) #_proxy = create_proxyGeo('cube',COREMATH.list_div(_scaleLossy,_size)) _proxy = create_proxyGeo('cube', _size) mc.makeIdentity(_proxy, apply=True, scale=True) return #mc.xform(_proxy, scale = _size, worldSpace = True, absolute = True) #Parent it to the dup... _proxy = TRANS.parent_set(_proxy, _dup) ATTR.reset(_proxy, ['t', 'r', 'shear']) #_dup = TRANS.parent_set(_dup, TRANS.parents_get(_dag)) SNAP.go(_dup, _dag) ATTR.set(_dup, 'shear', shear) #TRANS.scaleLocal_set(_dup, s) #mc.delete(_dup) #_scaleLossy = TRANS.scaleLossy_get(_dag) #import cgm.core.lib.math_utils as COREMATH #TRANS.scaleLocal_set(_dup, COREMATH.list_mult([-1.0,-1.0,-1.0],_scaleLossy,)) #proxy = TRANS.parent_set(_proxy, False) cgmGEN.func_snapShot(vars()) #ATTR.set(_dup,'translate',t) #ATTR.set(_dup,'rotate',r) #SNAP.go(_proxy[0],_dag) #ATTR.set(_proxy[0],'scale',_scaleLossy) #TRANS.scaleLocal_set(_dup,[1,1,1]) #ATTR.set(_dup,'shear',[0,0,0]) #_proxy = TRANS.parent_set(_proxy, False) #TRANS.scaleLocal_set(_proxy,_scaleLossy) #ATTR.set(_dup,'scale',s) return mc.rename(_proxy, "{0}_localAxisProxy".format(NAMES.get_base(_dag))) except Exception, err: cgmGEN.cgmExceptCB(Exception, err, msg=vars())
def create_axisProxy(obj=None): """ Make a local axis box around a given object so that you can then """ try: _str_func = 'create_axisProxy' _dag = VALID.getTransform(obj) if not _dag: raise ValueError, "Must have a dag node. Obj: {0}".format(obj) if VALID.is_shape(obj): l_shapes = [obj] else: l_shapes = TRANS.shapes_get(_dag, True) _parent = TRANS.parent_get(_dag) _dup = mc.duplicate(l_shapes, po=False, rc=True)[0] #TRANS.pivots_recenter(_dup) _dup = TRANS.parent_set(_dup, False) ATTR.set_standardFlags(_dup, lock=False, keyable=True) #Get some values... l_reset = ['t', 'r', 's', 'shear', 'rotateAxis'] t = ATTR.get(_dup, 'translate') r = ATTR.get(_dup, 'rotate') s = ATTR.get(_dup, 'scale') ra = ATTR.get(_dup, 'rotateAxis') if ATTR.has_attr(_dup, 'jointOrient'): l_reset.append('jointOrient') jo = ATTR.get(_dup, 'jointOrient') o = TRANS.orient_get(_dup) shear = ATTR.get(_dup, 'shear') _scaleLossy = TRANS.scaleLossy_get(_dag) #Reset our stuff before we make our bb... ATTR.reset(_dup, l_reset) _size = POS.get_bb_size(_dup, True) #_proxy = create_proxyGeo('cube',COREMATH.list_div(_scaleLossy,_size)) _proxy = create_proxyGeo('cube', _size) mc.makeIdentity(_proxy, apply=True, scale=True) #Now Put it back _dup = TRANS.parent_set(_dup, TRANS.parent_get(_dag)) _proxy = TRANS.parent_set(_proxy, _dup) #_dup = TRANS.parent_set(_dup, TRANS.parents_get(_dag)) SNAP.go(_dup, _dag) #ATTR.set(_dup,'s',(0,0,0)) ATTR.reset(_dup, ['s', 'shear']) ATTR.reset(_proxy, ['t', 'r', 's', 'shear', 'rotateAxis']) _proxy = TRANS.parent_set(_proxy, _dag) ATTR.reset(_proxy, ['t', 'r', 's', 'shear', 'rotateAxis']) #match_transform(_proxy,_dag) #SNAP.go(_proxy,_dag,pivot='bb') #cgmGEN.func_snapShot(vars()) _proxy = TRANS.parent_set(_proxy, False) mc.delete(_dup) #match_transform(_proxy,_dag) return mc.rename(_proxy, "{0}_localAxisProxy".format(NAMES.get_base(_dag))) except Exception, err: cgmGEN.cgmExceptCB(Exception, err, msg=vars())
ATTR.set(_follicle[0],'parameterV',f_dat[1][1]) mc.parent(_loc, _follicle[0]) mc.delete(self.l_created) self.dropTool() follicleAttach() return _loc elif not _targets: raise ValueError,"Must have targets for mode: {0} | targets: {1}".format(mode,_targets) else: if len(_targets) <= 2 and mode not in ['midPoint']: log.warning("|{0}| >> mode: {1} | targets: {2} | ".format(_str_func,mode,_targets)) raise ValueError,"Must have more than two targets for mode: {0} | targets: {1}".format(mode,_targets) _name = "{0}_{1}_loc".format('_to_'.join([coreNames.get_base(t) for t in _targets]),mode) _loc = mc.rename(_loc, _name) if tag: ATTR.store_info(_loc,'cgmName',_name, lock = True) ATTR.store_info(_loc,'cgmLocMode',mode,lock = True) ATTR.msgList_connect(_loc, 'cgmLocSource',_targets, dataAttr='cgmLocDat') if not VALID.is_component(_targets[0]) and setMatchTarget: SNAP.matchTarget_set(_targets[0],_loc) return update(_loc) return update(_loc, _targets, mode) except ValueError,err: