The single surface can have a face color, but subobject selection of the face is not possible via the UI ( Sub-object select face of monoface brep ).
The following script will set the face color of separate surfaces to their object color if the face color has not already been set (not System.Color.Empty). It can be used before _Join, _CreateSolid, etc.
Python script
from __future__ import print_function
import Rhino.DocObjects as rd
import rhinoscriptsyntax as rs
import scriptcontext as sc
from System.Drawing import Color
def main():
gBs = rs.GetObjects("Select surfaces", filter=rs.filter.surface, preselect=True)
if gBs is None: return
gBs_Mod = []
sLogs = []
for gB in gBs:
rdB = rs.coercerhinoobject(gB)
if rdB.Attributes.ColorSource == rd.ObjectColorSource.ColorFromLayer:
layer = sc.doc.Layers.FindIndex(rdB.Attributes.LayerIndex)
color = layer.Color
elif rdB.Attributes.ColorSource == rd.ObjectColorSource.ColorFromObject:
color = rdB.Attributes.ObjectColor
else:
sLogs.append(str(rdB.Attributes.ColorSource))
continue
rgF = rdB.BrepGeometry.Faces[0]
if rgF.PerFaceColor != Color.Empty or rgF.PerFaceColor == color:
continue
rgF.PerFaceColor = color
if rdB.CommitChanges():
gBs_Mod.append(gB)
if gBs_Mod:
print("{} surface face colors were modified.".format(len(gBs_Mod)))
else:
print("No surface face colors were modified.")
if sLogs:
for sLog in set(sLogs):
print("{} surfaces have {} color source and were not modified.".format(
sLogs.count(sLog), sLog))
sc.doc.Views.Redraw()
if __name__ == '__main__': main()