def getlayers(self,name=None): dic={} for layer in self.layers(mode='all'): dic[layer]=[] for obj in self.childrens(): if obj.GetLayerObject(doc)[c4d.ID_BASELIST_NAME]==layer: dic[layer].append(obj) continue if name is None: return dic return dic[name]
def createWall(self,up=None): connect_wall=c4d.BaseObject(1011010) connect_wall[c4d.CONNECTOBJECT_WELD]=0 connect_wall[c4d.CONNECTOBJECT_PHONG_MODE]=3 if up is None: self.doc.InsertObject(connect_wall) else: self.doc.InsertObject(connect_wall,up) #踢脚线 extruding_foot=c4d.BaseObject(5116) extruding_foot[c4d.EXTRUDEOBJECT_EXTRUSIONOFFSET]=self.WALLFOOT extruding_foot[c4d.ID_BASELIST_NAME]=self.WALLNAME extruding_foot[c4d.ID_BASEOBJECT_ROTATION_ORDER]=5 extruding_foot[c4d.ID_BASEOBJECT_REL_ROTATION,c4d.VECTOR_X]=c4d.utils.DegToRad(-90) extruding_foot[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]=0 extruding_foot[c4d.CAPSANDBEVELS_CAP_ENABLE_START]=1 extruding_foot[c4d.CAPSANDBEVELS_CAP_ENABLE_END]=0 doc.InsertObject(extruding_foot,parent=connect_wall) #踢脚线上材质 wallfootmtl=self.doc.SearchMaterial('黑色氟碳漆') self.setMaterial(extruding_foot,wallfootmtl,pro=3,tile=1,seaml=1,log='') #墙体 extruding_up=c4d.BaseObject(5116) extruding_up[c4d.EXTRUDEOBJECT_EXTRUSIONOFFSET]=self.STORYHEIGHT - self.WALLFOOT extruding_up[c4d.ID_BASELIST_NAME]=self.WALLNAME extruding_up[c4d.ID_BASEOBJECT_ROTATION_ORDER]=5 extruding_up[c4d.ID_BASEOBJECT_REL_ROTATION,c4d.VECTOR_X]=c4d.utils.DegToRad(-90) extruding_up[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]=self.WALLFOOT extruding_up[c4d.CAPSANDBEVELS_CAP_ENABLE_START]=0 extruding_up[c4d.CAPSANDBEVELS_CAP_ENABLE_END]=1 doc.InsertObject(extruding_up,parent=connect_wall) #墙面上材质 mtl=self.doc.SearchMaterial('墙面木纹') self.setMaterial(extruding_up,mtl,pro=3,tile=1,seaml=1,log='') #墙体轮廓线条 connect_up=c4d.BaseObject(1011010) connect_up[c4d.CONNECTOBJECT_WELD]=0 connect_up[c4d.CONNECTOBJECT_PHONG_MODE]=3 connect_up[c4d.ID_BASELIST_NAME]=self.WALLSPLINENAME doc.InsertObject(connect_up,parent=extruding_up) #踢脚线轮廓线条 connect_foot=c4d.BaseObject(1011010) connect_foot[c4d.CONNECTOBJECT_WELD]=0 connect_foot[c4d.CONNECTOBJECT_PHONG_MODE]=3 connect_foot[c4d.ID_BASELIST_NAME]=self.WALLSPLINENAME doc.InsertObject(connect_foot,parent=extruding_foot) for spline in self.layersdic['wall']: newsp_foot=spline.GetClone() newsp_foot=self.changeSpline(newsp_foot) newsp_foot[c4d.ID_LAYER_LINK]=doc.GetLayerObjectRoot().GetDown() self.doc.InsertObject(newsp_foot,parent=connect_foot) for spline in self.layersdic['wall']: newsp_up=spline.GetClone() newsp_up=self.changeSpline(newsp_up) newsp_up[c4d.ID_LAYER_LINK]=doc.GetLayerObjectRoot().GetDown() self.doc.InsertObject(newsp_up,parent=connect_up) c4d.EventAdd() return connect_wall
def subtractWindow(self):
extruding=c4d.BaseObject(5116)
extruding[c4d.EXTRUDEOBJECT_EXTRUSIONOFFSET]=self.WINDOWUP-self.WINDOWDOWN
extruding[c4d.ID_BASELIST_NAME]=self.WINDOWNAME
extruding[c4d.ID_BASEOBJECT_ROTATION_ORDER]=5
extruding[c4d.ID_BASEOBJECT_REL_POSITION,c4d.VECTOR_Y]=self.WINDOWDOWN
extruding[c4d.ID_BASEOBJECT_REL_ROTATION,c4d.VECTOR_X]=c4d.utils.DegToRad(-90)
return extruding
def subtractDoor(self):
extruding=c4d.BaseObject(5116)
extruding[c4d.EXTRUDEOBJECT_EXTRUSIONOFFSET]=self.DOORHEIGHT
extruding[c4d.ID_BASELIST_NAME]=self.DOORNAME
extruding[c4d.ID_BASEOBJECT_ROTATION_ORDER]=5
extruding[c4d.ID_BASEOBJECT_REL_ROTATION,c4d.VECTOR_X]=c4d.utils.DegToRad(-90)
return extruding
def setDoors(self,hardData):
harddata=hardData.GetChildren()
for obj in harddata:
for layername,splines in self.layersdic.items():
if obj[c4d.ID_BASELIST_NAME]==layername and 'door' in layername:
for spline in splines:
#获得图形坐标轮廓尺寸
pos=spline.GetAbsPos()
lenth_vec,angle_vec=self.getSplineAngle(spline)
newobj=obj.GetClone()
newobj=self.stretchModel(newobj,lenth_vec,self.DOORHEIGHT,self.DEFAULT_DOORSIZE)
newobj.SetAbsPos(c4d.Vector(pos.x,0,pos.y))
newobj.SetAbsRot(angle_vec)
self.doc.InsertObject(newobj)
c4d.EventAdd()
return True
def setWindows(self,hardData): harddata=hardData.GetChildren() for obj in harddata: for layername,splines in self.layersdic.items(): if obj[c4d.ID_BASELIST_NAME]==layername and 'window' in layername: for spline in splines: lenth_vec,angle_vec=self.getSplineAngle(spline) pos=spline.GetAbsPos() if lenth_vec>300: n=int(lenth_vec/self.DEFAULT_WINDOWSIZE['window'][0]) w=lenth_vec/n connect=c4d.BaseObject(1011010) connect[c4d.CONNECTOBJECT_WELD]=0 connect[c4d.CONNECTOBJECT_PHONG_MODE]=3 connect[c4d.ID_BASELIST_NAME]=self.WINDOWMERGE doc.InsertObject(connect) newobj=self.confitWindows(obj,n,w,connect) #print(newobj) else: newobj=obj.GetClone() newobj=self.stretchModel(newobj,lenth_vec,self.DOORHEIGHT,self.DEFAULT_WINDOWSIZE) self.doc.InsertObject(newobj) newobj.SetAbsPos(c4d.Vector(pos.x,self.WINDOWDOWN,pos.y)) newobj.SetAbsRot(angle_vec) #self.GeRayCollider(cpolygon,newobj) c4d.EventAdd() return True
#装配单个可拉伸家具
def deformatFurniture(self,furname,hardData):
harddata=hardData.GetChildren()
for obj in harddata:
if obj[c4d.ID_BASELIST_NAME]==furname:
for spline in self.layersdic[furname]:
lenth_vec,angle_vec=self.getSplineAngle(spline)
#size=spline.GetRad()
pos=spline.GetAbsPos()
newobj=obj.GetClone()
newobj=self.stretchModel(newobj,lenth_vec,self.DEFAULT_FURNITURE[furname][1],self.DEFAULT_FURNITURE)
newobj.SetAbsPos(c4d.Vector(pos.x,0,pos.y))
angle_vec.x=-angle_vec.x
newobj.SetAbsRot(angle_vec)
self.doc.InsertObject(newobj)
c4d.EventAdd()
return True
#装配场景中的可拉伸家具
def setDeformFurn(self,hardData):
names=list(self.DEFAULT_FURNITURE.keys())
for name in names:
self.deformatFurniture(name,hardData)
return True
def CreateLight(self,pos,size):
obj=c4d.BaseObject(5102)
obj[c4d.LIGHT_TYPE]=8
obj[c4d.ID_BASEOBJECT_REL_POSITION]=c4d.Vector(pos.x,self.LIGHTHEIGHT,pos.y)
obj.SetRotationOrder(c4d.ROTATIONORDER_XYZGLOBAL)
obj[c4d.ID_BASEOBJECT_REL_ROTATION]=c4d.Vector(-1.571, 0, 0)
obj[c4d.LIGHT_AREADETAILS_SIZEX]=size.x*self.SCALE
obj[c4d.LIGHT_AREADETAILS_SIZEY]=size.y*self.SCALE
tarTag1=c4d.BaseTag(1029526)
tarTag1[c4d.LIGHTTAG_POWER]=0.3
tarTag1[c4d.OCT_LIGHTTAG_TYPE_SELECT]=1
tarTag1[c4d.LIGHTTAG_KEEP_INSTANCE_POWER]=1
tarTag1[c4d.LIGHTTAG_VISIBLE_ON_SPECULAR]=0
tarTag1[c4d.LIGHTTAG_VIS_CAM]=0
tarTag1[c4d.LIGHTTAG_VIS_SHADOW]=0
tarTag1[c4d.LIGHTTAG_VIS_GEN]=0
obj.InsertTag(tarTag1)
doc.InsertObject(obj)
c4d.EventAdd()
return obj
#设置全景相机位置
def setCamera(self,pos):
campos=c4d.Vector(pos.x,self.POSY,pos.y)
camobj=c4d.BaseObject(5103)
#camsuTag=c4d.BaseObject(5678)
camTag=c4d.BaseTag(1029524)
camTag[1439]=1
camTag[c4d.OCTANECAMERA_ENABLE_IMAGER]=1
camTag[c4d.OCT_CAMIMAGER_EN_DENOISER]=1
camTag[c4d.OCTANECAMERA_EXPOSURE]=4.0
camTag[c4d.OCTANECAMERA_HCOMPRESSION]=1.0
camTag[c4d.OCT_CAMERA_IMAGER_ORDER]=1
camTag[c4d.OCTANECAMERA_RESPONSE]=5221
camTag[c4d.OCTANECAMERA_NAT_RESPONSE]=1
camTag[c4d.OCTANECAMERA_GAMMA]=4.0
camobj[c4d.CAMERAOBJECT_SHOW]=0
camobj.InsertTag(camTag)
camobj.SetRelPos(campos)
doc.InsertObject(camobj)
c4d.EventAdd()
return camobj
扫码进群
转载时请连同下方内容一起转发
请与该公众号联系获取内容授权
长按二维码 轻松关注
微信公众号:i58UXD
58同城用户体验设计中心