Draft: small bug fix in DXF importer
This commit is contained in:
parent
dc7ccc41af
commit
19135f9586
|
@ -1330,14 +1330,14 @@ def getIfcBrepFacesData(obj,scale=1,sub=False,tessellation=1):
|
|||
if obj.Terrain.Shape:
|
||||
if not obj.Terrain.Shape.isNull():
|
||||
if obj.Terrain.Shape.isValid():
|
||||
fcshape = obj.Terrain.Shape
|
||||
shape = obj.Terrain.Shape
|
||||
if shape:
|
||||
import Part
|
||||
sols = []
|
||||
if fcshape.Solids:
|
||||
dataset = fcshape.Solids
|
||||
if shape.Solids:
|
||||
dataset = shape.Solids
|
||||
else:
|
||||
dataset = fcshape.Shells
|
||||
dataset = shape.Shells
|
||||
print "Warning! object contains no solids"
|
||||
for sol in shape.Solids:
|
||||
s = []
|
||||
|
|
|
@ -274,7 +274,7 @@ def getColor():
|
|||
return (r,g,b,0.0)
|
||||
else:
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/View")
|
||||
c = params.GetUnsigned("DefaultShapeLineColor",0)
|
||||
c = p.GetUnsigned("DefaultShapeLineColor",0)
|
||||
r = float(((c>>24)&0xFF)/255)
|
||||
g = float(((c>>16)&0xFF)/255)
|
||||
b = float(((c>>8)&0xFF)/255)
|
||||
|
@ -303,159 +303,6 @@ def formatObject(obj,dxfobj=None):
|
|||
elif hasattr(obj.ViewObject,"LineColor"):
|
||||
obj.ViewObject.LineColor = dxfDefaultColor
|
||||
|
||||
|
||||
|
||||
class fcformat:
|
||||
# OBSOLETED - TO BE REMOVED
|
||||
"this contains everything related to color/lineweight formatting"
|
||||
def __init__(self,drawing):
|
||||
self.dxf = drawing
|
||||
params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
|
||||
self.paramtext = params.GetBool("dxftext")
|
||||
self.dxflayout = params.GetBool("dxflayouts")
|
||||
self.paramstyle = params.GetInt("dxfstyle")
|
||||
self.join = params.GetBool("joingeometry")
|
||||
self.makeBlocks = params.GetBool("groupLayers")
|
||||
self.stdSize = params.GetBool("dxfStdSize")
|
||||
self.importDxfHatches = params.GetBool("importDxfHatches")
|
||||
self.renderPolylineWidth = params.GetBool("renderPolylineWidth")
|
||||
self.importPoints = params.GetBool("dxfImportPoints")
|
||||
bparams = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/View")
|
||||
|
||||
if self.paramstyle > 1:
|
||||
# checking if FreeCAD background is dark or bright
|
||||
if bparams.GetBool("Gradient"):
|
||||
c1 = bparams.GetUnsigned("BackgroundColor2")
|
||||
c2 = bparams.GetUnsigned("BackgroundColor3")
|
||||
r1 = float((c1>>24)&0xFF)
|
||||
g1 = float((c1>>16)&0xFF)
|
||||
b1 = float((c1>>8)&0xFF)
|
||||
r2 = float((c2>>24)&0xFF)
|
||||
g2 = float((c2>>16)&0xFF)
|
||||
b2 = float((c2>>8)&0xFF)
|
||||
v1 = FreeCAD.Vector(r1,g1,b1)
|
||||
v2 = FreeCAD.Vector(r2,g2,b2)
|
||||
v = v2.sub(v1)
|
||||
v.multiply(0.5)
|
||||
cv = v1.add(v)
|
||||
else:
|
||||
c1 = bparams.GetUnsigned("BackgroundColor")
|
||||
r1 = float((c1>>24)&0xFF)
|
||||
g1 = float((c1>>16)&0xFF)
|
||||
b1 = float((c1>>8)&0xFF)
|
||||
cv = FreeCAD.Vector(r1,g1,b1)
|
||||
value = cv.x*.3 + cv.y*.59 + cv.z*.11
|
||||
if value < 128: self.brightbg = False
|
||||
else:
|
||||
self.brightbg = True
|
||||
|
||||
if gui and draftui:
|
||||
r = float(draftui.color.red()/255.0)
|
||||
g = float(draftui.color.green()/255.0)
|
||||
b = float(draftui.color.blue()/255.0)
|
||||
self.lw = float(draftui.linewidth)
|
||||
else:
|
||||
self.lw = float(params.GetInt("linewidth"))
|
||||
c = params.GetUnsigned("color")
|
||||
r = float(((c>>24)&0xFF)/255)
|
||||
g = float(((c>>16)&0xFF)/255)
|
||||
b = float(((c>>8)&0xFF)/255)
|
||||
self.col = (r,g,b,0.0)
|
||||
|
||||
if self.paramstyle == 3:
|
||||
parammappingfile = params.GetString("dxfmappingfile")
|
||||
self.table = self.buildTable(parammappingfile)
|
||||
|
||||
def buildTable(self,tablefile):
|
||||
"builds a table for converting colors into linewidths"
|
||||
try: f = pythonopen(tablefile)
|
||||
except ValueError:
|
||||
print "error: ",tablefile, " not found"
|
||||
return None
|
||||
table = {}
|
||||
header = len(f.readline().split("\t"))
|
||||
if header == 15:
|
||||
for l in f:
|
||||
s = l.split("\t")
|
||||
if "Color_" in s[0]:
|
||||
index = int(s[0].split("_")[1])
|
||||
if s[1] == "(Object)": color = "object"
|
||||
else:
|
||||
c = s[2].split(",")
|
||||
color = [float(c[0])/255,float(c[1])/255,float(c[2])/255]
|
||||
if (color == [0.0,0.0,0.0]) and (not self.brightbg):
|
||||
color = [1.0,1.0,1.0]
|
||||
if s[2] == "(Object)": width = "object"
|
||||
else: width = float(s[10])*10
|
||||
table[index]=[color,width]
|
||||
elif header == 3:
|
||||
for l in f:
|
||||
s = l.split("\t")
|
||||
index = int(s[0])
|
||||
c = string.replace(s[1],'"','')
|
||||
c = c.split(",")
|
||||
color = [float(c[0])/255,float(c[1])/255,float(c[2])/255]
|
||||
width = float(s[2])
|
||||
table[index]=[color,width]
|
||||
for i in range(256):
|
||||
if not i in table.keys():
|
||||
table[i]=["object","object"]
|
||||
else:
|
||||
print "error building mapping table: file format not recognized"
|
||||
table = None
|
||||
print table
|
||||
return table
|
||||
|
||||
def formatObject(self,obj,dxfobj=None):
|
||||
"applies color and linetype to objects"
|
||||
if hasattr(obj.ViewObject,"TextColor"):
|
||||
obj.ViewObject.TextColor = (0.0,0.0,0.0)
|
||||
if self.paramstyle == 1:
|
||||
if hasattr(obj.ViewObject,"TextColor"):
|
||||
obj.ViewObject.TextColor = self.col
|
||||
else:
|
||||
obj.ViewObject.LineColor = self.col
|
||||
obj.ViewObject.LineWidth = self.lw
|
||||
elif (self.paramstyle == 2) and dxfobj:
|
||||
if hasattr(obj.ViewObject,"TextColor"):
|
||||
if dxfobj.color_index == 256: cm = self.getGroupColor(dxfobj)[:3]
|
||||
else: cm = dxfColorMap.color_map[dxfobj.color_index]
|
||||
obj.ViewObject.TextColor = (cm[0],cm[1],cm[2])
|
||||
else:
|
||||
if dxfobj.color_index == 256: cm = self.getGroupColor(dxfobj)
|
||||
elif (dxfobj.color_index == 7) and self.brightbg: cm = [0.0,0.0,0.0]
|
||||
else: cm = dxfColorMap.color_map[dxfobj.color_index]
|
||||
obj.ViewObject.LineColor = (cm[0],cm[1],cm[2],0.0)
|
||||
obj.ViewObject.LineWidth = self.lw
|
||||
elif (self.paramstyle == 3) and dxfobj:
|
||||
if hasattr(obj.ViewObject,"TextColor"):
|
||||
cm = table[dxfobj.color_index][0]
|
||||
wm = table[dxfobj.color_index][1]
|
||||
obj.ViewObject.TextColor = (cm[0],cm[1],cm[2])
|
||||
else:
|
||||
if dxfobj.color_index == 256:
|
||||
cm = self.table[self.getGroupColor(dxfobj,index=True)][0]
|
||||
wm = self.table[self.getGroupColor(dxfobj,index=True)][1]
|
||||
else:
|
||||
cm = self.table[dxfobj.color_index][0]
|
||||
wm = self.table[dxfobj.color_index][1]
|
||||
if cm == "object": cm = self.getGroupColor(dxfobj)
|
||||
else: obj.ViewObject.LineColor = (cm[0],cm[1],cm[2],0.0)
|
||||
if wm == "object": wm = self.lw
|
||||
else: obj.ViewObject.LineWidth = wm
|
||||
|
||||
def getGroupColor(self,dxfobj,index=False):
|
||||
"get color of bylayer stuff"
|
||||
name = dxfobj.layer
|
||||
for table in self.dxf.tables.get_type("table"):
|
||||
if table.name == "layer":
|
||||
for l in table.get_type("layer"):
|
||||
if l.name == name:
|
||||
if index: return l.color
|
||||
else:
|
||||
if (l.color == 7) and self.brightbg: return [0.0,0.0,0.0]
|
||||
else: return dxfColorMap.color_map[l.color]
|
||||
|
||||
def vec(pt):
|
||||
"returns a rounded Vector from a dxf point"
|
||||
return FreeCAD.Vector(round(pt[0],prec()),round(pt[1],prec()),round(pt[2],prec()))
|
||||
|
|
Loading…
Reference in New Issue
Block a user