288 lines
11 KiB
Python
288 lines
11 KiB
Python
# /**********************************************************************
|
|
# * *
|
|
# * Copyright (c) 2021 Javier Braña <javier.branagutierrez@gmail.com> *
|
|
# * *
|
|
# * This program is free software; you can redistribute it and/or modify*
|
|
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
|
# * as published by the Free Software Foundation; either version 2 of *
|
|
# * the License, or (at your option) any later version. *
|
|
# * for detail see the LICENCE text file. *
|
|
# * *
|
|
# * This program is distributed in the hope that it will be useful, *
|
|
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
# * GNU Library General Public License for more details. *
|
|
# * *
|
|
# * You should have received a copy of the GNU Library General Public *
|
|
# * License along with this program; if not, write to the Free Software *
|
|
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307*
|
|
# * USA *
|
|
# * *
|
|
# ***********************************************************************
|
|
|
|
|
|
import ArchComponent
|
|
import FreeCAD
|
|
|
|
if FreeCAD.GuiUp:
|
|
import FreeCADGui, os
|
|
from PySide import QtCore
|
|
from PySide.QtCore import QT_TRANSLATE_NOOP
|
|
else:
|
|
# \cond
|
|
def translate(ctxt, txt):
|
|
return txt
|
|
|
|
|
|
def QT_TRANSLATE_NOOP(ctxt, txt):
|
|
return txt
|
|
# \endcond
|
|
|
|
try:
|
|
_fromUtf8 = QtCore.QString.fromUtf8
|
|
except AttributeError:
|
|
def _fromUtf8(s):
|
|
return s
|
|
|
|
import PVPlantResources
|
|
|
|
|
|
def makeCable(name="Cable"):
|
|
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", name)
|
|
obj.Label = name
|
|
Cable(obj)
|
|
ViewProviderCable(obj.ViewObject)
|
|
return obj
|
|
|
|
|
|
class Cable(ArchComponent.Component):
|
|
"A Cable Obcject - Class"
|
|
|
|
def __init__(self, obj):
|
|
ArchComponent.Component.__init__(self, obj)
|
|
self.setProperties(obj)
|
|
|
|
def setProperties(self, obj):
|
|
pl = obj.PropertiesList
|
|
|
|
# General:
|
|
if not ("Manufacturer" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"Manufacturer",
|
|
"General",
|
|
"Connection")
|
|
|
|
if not ("Factory" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"Factory",
|
|
"General",
|
|
"Connection ")
|
|
|
|
if not ("DesignStandard" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"DesignStandard",
|
|
"General",
|
|
"Connection ")
|
|
|
|
if not ("CableDesignation" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"CableDesignation",
|
|
"General",
|
|
"Connection ").CableDesignation="RH5Z1-OL"
|
|
|
|
if not ("MaximumVoltage" in pl):
|
|
obj.addProperty("App::PropertyElectricPotential",
|
|
"MaximumVoltage",
|
|
"General",
|
|
"Connection ").MaximumVoltage="30kV"
|
|
|
|
if not ("MaxTemperatureForContinuousOperation" in pl):
|
|
obj.addProperty("App::PropertyInteger",
|
|
"MaxTemperatureForContinuousOperation",
|
|
"General",
|
|
"Connection ").MaxTemperatureForContinuousOperation=95
|
|
|
|
if not ("MaxTemperatureDuringEmergencyConditions" in pl):
|
|
obj.addProperty("App::PropertyInteger",
|
|
"MaxTemperatureDuringEmergencyConditions",
|
|
"General",
|
|
"Connection ").MaxTemperatureDuringEmergencyConditions=105
|
|
|
|
if not ("MaxTemperatureDuringShortCircuit" in pl):
|
|
obj.addProperty("App::PropertyInteger",
|
|
"MaxTemperatureDuringShortCircuit",
|
|
"General",
|
|
"Connection ").MaxTemperatureDuringShortCircuit=250
|
|
|
|
|
|
# Conductor:
|
|
if not ("Material" in pl):
|
|
obj.addProperty("App::PropertyEnumeration",
|
|
"Material",
|
|
"Conductor",
|
|
"Connection ").Material=["Copper", "Aluminium"]
|
|
|
|
if not ("Standard" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"Standard",
|
|
"Conductor",
|
|
"Connection ").Standard = "IEC 60228"
|
|
|
|
if not ("CrossSection" in pl):
|
|
obj.addProperty("App::PropertyArea",
|
|
"CrossSection",
|
|
"Conductor",
|
|
"Connection ").CrossSection = 95
|
|
|
|
if not ("MaximumConductorDiameter" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"MaximumConductorDiameter",
|
|
"Conductor",
|
|
"Connection ")
|
|
|
|
if not ("MinimumConductorDiameter" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"MinimumConductorDiameter",
|
|
"Conductor",
|
|
"Connection ")
|
|
|
|
if not ("MaximumResistance" in pl):
|
|
obj.addProperty("App::PropertyInteger",
|
|
"MaximumResistance",
|
|
"Conductor",
|
|
"Connection ")
|
|
|
|
# Insulation:
|
|
if not ("InsulationMaterial" in pl):
|
|
obj.addProperty("App::PropertyEnumeration",
|
|
"InsulationMaterial",
|
|
"Insulation",
|
|
"Connection ").InsulationMaterial=["HEPR", "XLPE"]
|
|
|
|
if not ("InsulationStandard" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"InsulationStandard",
|
|
"Insulation",
|
|
"Connection ").InsulationStandard = "IEC 60502-2"
|
|
|
|
if not ("InsulationNominalThickness" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"InsulationNominalThickness",
|
|
"Insulation",
|
|
"Sección").InsulationNominalThickness = 7.25
|
|
|
|
if not ("InsulationMinimumThickness" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"InsulationMinimumThickness",
|
|
"Insulation",
|
|
"Sección").InsulationMinimumThickness = 6.43
|
|
|
|
if not ("InsulationResistance" in pl):
|
|
obj.addProperty("App::PropertyInteger",
|
|
"InsulationResistance",
|
|
"Insulation",
|
|
"Sección").InsulationResistance = 3670000
|
|
|
|
# Outer semi-conductive layer:
|
|
if not ("OuterMaterial" in pl):
|
|
obj.addProperty("App::PropertyString",
|
|
"OuterMaterial",
|
|
"OuterLayer",
|
|
"Connection ").OuterMaterial = "Semicon. compound"
|
|
|
|
if not ("OuterNominalThickness" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"OuterNominalThickness",
|
|
"OuterLayer",
|
|
"Sección").OuterNominalThickness = 0.5
|
|
|
|
if not ("OuterMinimumThickness" in pl):
|
|
obj.addProperty("App::PropertyLength",
|
|
"OuterMinimumThickness",
|
|
"OuterLayer",
|
|
"Sección").OuterMinimumThickness = 0.5
|
|
|
|
# algo
|
|
if not ("ExternalDiameter" in pl):
|
|
obj.addProperty("App::PropertyDistance",
|
|
"ExternalDiameter",
|
|
"Cable",
|
|
QT_TRANSLATE_NOOP("App::Property", "Diameter")).ExternalDiameter = 6.6
|
|
|
|
if not ("Section" in pl):
|
|
obj.addProperty("App::PropertyArea",
|
|
"Section",
|
|
"Cable",
|
|
QT_TRANSLATE_NOOP("App::Property", "Sección"))
|
|
|
|
if not ("Core" in pl):
|
|
obj.addProperty("App::PropertyEnumeration",
|
|
"Core",
|
|
"Cable",
|
|
"Core").Core = ["1", "2", "3", ]
|
|
|
|
if not ("RadiusOfCurvature" in pl):
|
|
obj.addProperty("App::PropertyDistance",
|
|
"RadiusOfCurvature",
|
|
"Cable",
|
|
QT_TRANSLATE_NOOP("App::Property", "Diameter")).RadiusOfCurvature = 100
|
|
|
|
self.Type = "Cable"
|
|
|
|
obj.Proxy = self
|
|
obj.IfcType = "Cable Segment"
|
|
obj.setEditorMode("IfcType", 1)
|
|
|
|
def onDocumentRestored(self, obj):
|
|
"""Method run when the document is restored.
|
|
Re-adds the Arch component, and object properties."""
|
|
|
|
ArchComponent.Component.onDocumentRestored(self, obj)
|
|
self.setProperties(obj)
|
|
obj.Proxy = self
|
|
|
|
def onChanged(self, obj, prop):
|
|
''' Do something when a property has changed '''
|
|
|
|
def getPoint(self, val):
|
|
if val.Proxy.Type == 'String':
|
|
return val.StringPoles[0]
|
|
elif val.Proxy.Type == 'StringBox':
|
|
input = val.Shape.SubShapes[2].SubShapes[0]
|
|
return input.CenterOfMass
|
|
else:
|
|
return val.Placement.Base
|
|
|
|
def execute(self, obj):
|
|
''' No hacer nada. Es un componente sin shape'''
|
|
|
|
|
|
class ViewProviderCable(ArchComponent.ViewProviderComponent): #hace falta??
|
|
def __init__(self, vobj):
|
|
ArchComponent.ViewProviderComponent.__init__(self, vobj)
|
|
|
|
def getIcon(self):
|
|
return str(os.path.join(PVPlantResources.DirIcons, "cable.svg"))
|
|
|
|
|
|
class CommandCable:
|
|
def GetResources(self):
|
|
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "cable.svg")),
|
|
'Accel': "E, C",
|
|
'MenuText': QT_TRANSLATE_NOOP("Placement", "Cable"),
|
|
'ToolTip': QT_TRANSLATE_NOOP("Placement", "Calcular el BOQ de la")}
|
|
|
|
def Activated(self):
|
|
makeCable()
|
|
FreeCAD.ActiveDocument.recompute()
|
|
|
|
def IsActive(self):
|
|
if FreeCAD.ActiveDocument:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
if FreeCAD.GuiUp:
|
|
FreeCADGui.addCommand('PVPlantCable', CommandCable())
|