Macro Unroll Ruled Surface: Difference between revisions

From FreeCAD Documentation
m (Robot: Automated text replacement (-https://sourceforge.net/apps/phpbb/free-cad +http://forum.freecadweb.org))
Line 41: Line 41:
#***************************************************************************
#***************************************************************************
#* *
#* *
#* Copyright (c) 2013 - DoNovae/Herve BAILLY <hbl13@donovae.com> *
#* Copyright (c) 2013 - DoNovae/Herve BAILLY <hbl13@donovae.com> *
#* *
#* *
#* This program is free software; you can redistribute it and/or modify *
#* This program is free software; you can redistribute it and/or modify *
Line 68: Line 68:
from PyQt4 import QtGui,QtCore
from PyQt4 import QtGui,QtCore
from FreeCAD import Base
from FreeCAD import Base
from unrollRuledSurface.unfoldBox import unfoldBoxClass
fields_l = []
fields_l = []
unroll_l = []
unroll_l = []



#####################################
#####################################
Line 99: Line 101:
scale = float(fields_l[2].text())
scale = float(fields_l[2].text())
scale_auto = scale_check.isChecked()
scale_auto = scale_check.isChecked()
edge0 = edge0_check.isChecked()
a3 = a3_check.isChecked()
a3 = a3_check.isChecked()
cartridge = cartridge_check.isChecked()
cartridge = cartridge_check.isChecked()
Line 106: Line 109:
FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale: "+str(scale)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale: "+str(scale)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale_check: "+str(scale_auto)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale_check: "+str(scale_auto)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.edge0_check: "+str(edge0)+"")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.a3_check: "+str(a3)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.a3_check: "+str(a3)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.cartridge: "+str(cartridge)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.cartridge: "+str(cartridge)+"\n")
Line 116: Line 120:
QtGui.qApp.restoreOverrideCursor()
QtGui.qApp.restoreOverrideCursor()
DialogBox.hide()
DialogBox.hide()
unrollRS=unrollRuledSurface( file_name , pts_nbr , edge0 )
draw=Drawing2d( scale, scale_auto , a3 , cartridge , onedrawing )
unrollRS=unrollRuledSurface( file_name , pts_nbr )
#
#
# Get selection
# Get selection
Line 123: Line 126:
sel=FreeCADGui.Selection.getSelection()
sel=FreeCADGui.Selection.getSelection()
faceid=0
faceid=0
objnames_l=[]
objnames0_l=[]
grp=FreeCAD.activeDocument().addObject("App::DocumentObjectGroup", str(file_name)+"_objs")
for objid in range( sel.__len__() ):
for objid in range( sel.__len__() ):
shape=sel[objid].Shape
shape=sel[objid].Shape
Line 128: Line 134:
for id in range( faces.__len__() ):
for id in range( faces.__len__() ):
FreeCAD.Console.PrintMessage("UnrollRuledSurface.proceed: ObjId= "+str(objid)+" , faceId= "+str( faceid )+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.proceed: ObjId= "+str(objid)+" , faceId= "+str( faceid )+"\n")
if faces.__len__() > 1:
unroll_l.append( unrollRS.unroll(faces[id]) )
name=sel[objid].Name+".faces "+str(id)
else:
name=sel[objid].Name
obj=unrollRS.unroll(faces[id],name)
obj.ViewObject.Visibility=False
grp.addObject(obj)
objnames_l.append( [ obj , name ] )
objnames0_l.append( [ sel[objid] , name ] )
faceid=faceid+1
faceid=faceid+1
id=0
draw.all( unroll_l )
while objnames_l.__len__() > 0:
draw=Drawing2d( scale, scale_auto , a3 , cartridge , onedrawing,str(file_name)+"_page"+str(id) )
objnames_l=draw.all( objnames_l )
id=id+1
FreeCAD.Console.PrintMessage("UnrollRuledSurface: obj_l= "+str(objnames_l.__len__())+"\n")


FreeCAD.Console.PrintMessage("UnrollRuledSurface: end.\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface: end.\n")
Line 148: Line 167:
#####################################
#####################################
class unrollRuledSurface:
class unrollRuledSurface:
def __init__( self, file_name, pts_nbr ):
def __init__( self, file_name, pts_nbr , edge0 ):
self.doc = FreeCAD.newDocument( str(file_name) )
self.doc = FreeCAD.activeDocument()
self.file_name = file_name
self.file_name = file_name
self.pts_nbr = int(pts_nbr)
self.pts_nbr = int(pts_nbr)
self.edge0 = edge0
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll - file_name: "+self.file_name+" , pts_nbr: "+str(self.pts_nbr)+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll - file_name: "+self.file_name+" , pts_nbr: "+str(self.pts_nbr)+"\n")


Line 173: Line 193:


#####################################
#####################################
# Function discretize
# Function nbpoles
#####################################
#####################################
def nbpoles(self,curve):
def nbpoles(self,curve):
if type(curve).__name__=='GeomLineSegment':
if type(curve).__name__=='GeomLineSegment':
nbpol=0
nbpol=1
elif type(curve).__name__=='GeomBSplineCurve':
elif type(curve).__name__=='GeomBSplineCurve':
nbpol=curve.NbPoles
nbpol=curve.NbPoles
elif type(curve).__name__=='GeomCircle':
elif type(curve).__name__=='GeomCircle':
nbpol=1
nbpol=2
elif type(curve).__name__=='GeomBezierCurve':
nbpol=4
else:
else:
nbpol=0
nbpol=0
FreeCAD.Console.PrintMessage("UnrollRulrdSurface.nbpole {:s} = {:d}\n".format(type(curve).__name__,nbpol))
return nbpol
return nbpol


Line 192: Line 215:
# composed of 2 or 4 edges
# composed of 2 or 4 edges
#####################################
#####################################
def unroll(self,face):
def unroll(self,face,name):
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: Ege Nbr= "+str( face.Edges.__len__())+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: Ege Nbr= "+str( face.Edges.__len__())+"\n")
if face.Edges.__len__() == 2:
if face.Edges.__len__() == 2:
Line 216: Line 239:
nbpol2=self.nbpoles(E2.Curve)
nbpol2=self.nbpoles(E2.Curve)
nbpol3=self.nbpoles(E3.Curve)
nbpol3=self.nbpoles(E3.Curve)
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: nbpol0= {:d}, nbpol1= {:d}, nbpol2= {:d}, nbpol3= {:d}\n".format(nbpol0,nbpol1,nbpol2,nbpol3))


if nbpol0 + nbpol2 > nbpol1 + nbpol3:
if self.edge0:
e1=E0
e1=E0
e2=E2
e2=E2
Line 243: Line 267:
devlxy_l=self.devlxyz( sd1 , sd2 )
devlxy_l=self.devlxyz( sd1 , sd2 )
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: size devlxy_l: "+str( devlxy_l.__len__())+"\n")
FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: size devlxy_l: "+str( devlxy_l.__len__())+"\n")
p=self.doc.addObject("Part::Polygon","Polygon")
p=self.doc.addObject("Part::Polygon",name)
p.Nodes=devlxy_l
p.Nodes=devlxy_l
self.doc.recompute()
self.doc.recompute()
Line 255: Line 279:
#####################################
#####################################
def vect_copy( self, vect):
def vect_copy( self, vect):
v= vect.add( FreeCAD.Base.Vector(0,0,0))
v= vect.add( FreeCAD.Base.Vector(0,0,0) )
return v
return v


Line 313: Line 337:
ob1=FreeCAD.Vector(a1b1.Length,0,0)
ob1=FreeCAD.Vector(a1b1.Length,0,0)
devl2xy_l.append( ob1 ) #B1
devl2xy_l.append( ob1 ) #B1
#self.draw_line( devl1xy_l[0] , devl2xy_l[0] )
#self.draw_line( vect1[0] , vect2[0] )
for j in range( 1 , self.pts_nbr ) :
for j in range( 1 , self.pts_nbr ) :
#
#
Line 318: Line 344:
#
#
ab=vect2[j-1].sub(vect1[j-1])
ab=vect2[j-1].sub(vect1[j-1])
#self.draw_line( vect1[j-1] , vect2[j-1] )
#
#
# AC
# AC
Line 347: Line 374:
v.multiply(sinalp*ac.Length)
v.multiply(sinalp*ac.Length)
a1c1=a1c1.add(v)
a1c1=a1c1.add(v)
#FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp a1b1: "+str(a1b1n.getAngle(a1b1on))+"\n")
#FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp oc1: "+str(a1b1n.getAngle(a1c1)-alp)+"\n")
#FreeCAD.Console.PrintMessage("UnrollRuledSurface.length oc1: "+str(a1c1.Length-ac.Length)+"\n")
oa1=self.vect_copy(devl1xy_l[j-1])
oa1=self.vect_copy(devl1xy_l[j-1])
oc1=oa1.add(a1c1)
oc1=oa1.add(a1c1)
Line 360: Line 390:
v.multiply(sinalp*bd.Length)
v.multiply(sinalp*bd.Length)
b1d1=b1d1.add(v)
b1d1=b1d1.add(v)
#FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp od1: "+str(b1a1n.getAngle(b1d1)-alp)+"\n")
#FreeCAD.Console.PrintMessage("UnrollRuledSurface.length od1: "+str(b1d1.Length-bd.Length)+"\n")
ob1=self.vect_copy(devl2xy_l[j-1])
ob1=self.vect_copy(devl2xy_l[j-1])
od1=ob1.add(b1d1)
od1=ob1.add(b1d1)
Line 366: Line 398:
# Draw generatrice
# Draw generatrice
#
#
#self.draw_line( devl1xy_l[j] , devl2xy_l[j] )
c1d1=devl2xy_l[j].sub( devl1xy_l[j] )
c1d1=devl2xy_l[j].sub( devl1xy_l[j] )
if ab.Length <> 0 :
if ab.Length <> 0 :
Line 400: Line 433:
#####################################
#####################################
# Class Drawing2d
# Class Drawing2d
# -obj_l: listes of object
# -topxh1
# -topyh1
# -topxv1
# -topyv1
# -topxvmax1
# -topyvmax1
# -topxvmax1
# -topyvmax1
#####################################
#####################################
class Drawing2d:
class Drawing2d:
Line 410: Line 452:
# - onedrawing
# - onedrawing
#####################################
#####################################
def __init__( self, scale , scale_auto , a3 , cartridge , onedrawing ):
def __init__( self, scale , scale_auto , a3 , cartridge , onedrawing , page_str ):
self.TopX_H=0
self.TopX_H=0
self.TopY_H=0
self.TopY_H=0
Line 432: Line 474:
self.H=210
self.H=210
self.marge=6
self.marge=6
self.name="Page"
self.name=page_str


#####################################
#####################################
Line 456: Line 498:
# Function all
# Function all
#####################################
#####################################
def all( self, obj_l ):
def all( self, objname_l ):
obj1_l=[]
for objid in range( obj_l.__len__() ):
if objid == 0 or not self.onedrawing:
for objid in range( objname_l.__len__() ):
page = self.newPage()
if objid == 0 or not self.onedrawing:
page = self.newPage()
else:
page = FreeCAD.activeDocument().getObject( self.name )
obj1_l.extend( self.done( objid , objname_l[objid] ))
return obj1_l
self.done( objid , obj_l[objid] , page )


#####################################
#####################################
# Function done
# Function all
#####################################
#####################################
def done( self, id , obj , page ):
def done( self, id , objname ):
#
#
# Init
# Init
#
#
obj_l=[]
obj=objname[0]
objname=objname[1]
xmax=obj.Shape.BoundBox.XMax-obj.Shape.BoundBox.XMin
xmax=obj.Shape.BoundBox.XMax-obj.Shape.BoundBox.XMin
ymax=obj.Shape.BoundBox.YMax-obj.Shape.BoundBox.YMin
ymax=obj.Shape.BoundBox.YMax-obj.Shape.BoundBox.YMin
Line 491: Line 536:
# Init
# Init
#
#
FreeCAD.Console.PrintMessage("Dawing2d: init\n")
self.TopX_H=self.marge*2
self.TopX_H=self.marge*2
self.TopY_H=self.marge*2
self.TopY_H=self.marge*2
Line 499: Line 545:
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
self.TopY_V=self.marge*2
self.TopY_V=self.marge*2
elif self.onedrawing:
elif self.onedrawing:
if ( self.TopX_H + xmax * scale < self.L ):
if self.TopX_H + xmax * scale < self.L :
if ( self.TopY_H + ymax * scale + self.marge*2 < self.H ):
if self.TopY_H + ymax * scale + self.marge*2 < self.H :
#
#
# H Add at right on same horizontal line
# H Add at right on same horizontal line
#
#
FreeCAD.Console.PrintMessage("Dawing2d: horizontal\n")
TopX=self.TopX_H
TopX=self.TopX_H
TopY=self.TopY_H
TopY=self.TopY_H
self.TopX_H=self.TopX_H + xmax * scale + self.marge
self.TopX_H=self.TopX_H + xmax * scale + self.marge
self.TopY_H=self.TopY_H
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
Line 521: Line 567:
# V Add at right on same horizontal line
# V Add at right on same horizontal line
#
#
Draft.rotate( obj , 90 )
FreeCAD.Console.PrintMessage("Dawing2d: vertival\n")
if self.TopX_V + ymax * scale +2* self.marge < self.L and self.TopY_V + xmax * scale + 2*self.marge < self.H :
Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
self.TopX_V=max(self.TopX_Vmax, self.TopX_V)
Draft.rotate( obj , 90 )
Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
TopX=self.TopX_V
x0=xmax;xmax=ymax,ymax=x0
TopY=self.TopY_V
self.TopX_V=max(self.TopX_Vmax, self.TopX_V)
self.TopX_V = self.TopX_V + ymax * scale + self.marge
TopX=self.TopX_V
self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + xmax * scale + self.marge )
TopY=self.TopY_V
self.TopX_V = self.TopX_V + xmax * scale + self.marge
self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + ymax * scale + self.marge )
else:
obj_l.append( [ obj , name ] )
return obj_l

else:
else:
#
#
Line 533: Line 586:
#
#
if ( self.TopY_Hmax + ymax * scale + self.marge*2 < self.H ):
if ( self.TopY_Hmax + ymax * scale + self.marge*2 < self.H ):
FreeCAD.Console.PrintMessage("Dawing2d: carriage return: "+str(self.TopY_H + ymax * scale )+" > "+str(self.H)+"\n")
TopX=self.marge*2
TopX=self.marge*2
TopY=self.TopY_Hmax
TopY=self.TopY_Hmax
Line 538: Line 592:
self.TopY_H=TopY
self.TopY_H=TopY
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
self.TopY_Hmax=self.TopY_H + ymax*scale+self.marge
self.TopY_Hmax=self.TopY_Hmax + ymax*scale+self.marge
self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
Line 545: Line 599:
# V Add at right on same horizontal line
# V Add at right on same horizontal line
#
#
FreeCAD.Console.PrintMessage("Dawing2d: vertival: "+str(self.TopX_V)+" , "+str(self.TopX_Vmax)+"\n")
Draft.rotate( obj , 90 )
if self.TopX_V + ymax * scale + 2*self.marge < self.L and self.TopY_V + xmax * scale + 2*self.marge < self.H :
Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
TopX=self.TopX_V
Draft.rotate( obj , 90 )
Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
TopY=self.TopY_V
x0=xmax;xmax=ymax,ymax=x0
self.TopX_V = self.TopX_V + ymax * scale + self.marge
TopX=self.TopX_V
self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + xmax * scale + self.marge )
TopY=self.TopY_V
self.TopX_V = self.TopX_V + xmax * scale + self.marge
self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + ymax * scale + self.marge )
else:
obj_l.append( [ obj , objname ] )
return obj_l

page=FreeCAD.activeDocument().getObject(self.name )

Text=FreeCAD.activeDocument().addObject('Drawing::FeatureViewAnnotation', objname+"_txt")
Text.Text=objname
Text.X=TopX+xmax*scale/2
Text.Y=TopY+ymax*scale/2
Text.Scale=2


TopView = FreeCAD.activeDocument().addObject('Drawing::FeatureViewPart','TopView')
TopView = FreeCAD.activeDocument().addObject('Drawing::FeatureViewPart',objname)
TopView.Source = obj
TopView.Source = obj
TopView.Direction = (0.0,0.0,1)
TopView.Direction = (0.0,0.0,1)
Line 561: Line 629:
TopView.Scale = scale
TopView.Scale = scale
page.addObject(TopView)
page.addObject(TopView)
page.addObject(Text)
FreeCAD.activeDocument().recompute()
FreeCAD.activeDocument().recompute()
return obj_l




Line 579: Line 649:
DialogBox.setWindowTitle("UnrollRuledSurface")
DialogBox.setWindowTitle("UnrollRuledSurface")
la = QtGui.QVBoxLayout(DialogBox)
la = QtGui.QVBoxLayout(DialogBox)
buttonGrp1 = QtGui.QButtonGroup(DialogBox)
buttonGrp2 = QtGui.QButtonGroup(DialogBox)


#
#
Line 594: Line 666:
la.addWidget(scale_check)
la.addWidget(scale_check)


a3_check = QtGui.QCheckBox( DialogBox )
line3 = QtGui.QFrame(DialogBox)
line3.setFrameShape(QtGui.QFrame.HLine)
a3_check.setObjectName("checkBox")
line3.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(QtGui.QLabel("A3 Format"))
la.addWidget(line3)

edge0_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("Generatrices from edge 1 to 4" ))
edge0_check.setChecked(False)
la.addWidget(edge0_check)
edge1_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("Generatrices from edge 0 to 3" ))
edge1_check.setChecked(True)
buttonGrp1.addButton(edge0_check)
buttonGrp1.addButton(edge1_check)
la.addWidget(edge1_check)

line4 = QtGui.QFrame(DialogBox)
line4.setFrameShape(QtGui.QFrame.HLine)
line4.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line4)

a3_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("A3" ))
a3_check.setChecked(False)
a3_check.setChecked(False)
la.addWidget(a3_check)
la.addWidget(a3_check)
a4_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("A4"))
a4_check.setChecked(True)
buttonGrp2.addButton(a3_check)
buttonGrp2.addButton(a4_check)
la.addWidget(a4_check)


cartridge_check = QtGui.QCheckBox( DialogBox )
cartridge_check = QtGui.QCheckBox( DialogBox )
Line 605: Line 703:
cartridge_check.setChecked(False)
cartridge_check.setChecked(False)
la.addWidget(cartridge_check)
la.addWidget(cartridge_check)

line6 = QtGui.QFrame(DialogBox)
line6.setFrameShape(QtGui.QFrame.HLine)
line6.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line6)


onedrawing_check = QtGui.QCheckBox( DialogBox )
onedrawing_check = QtGui.QCheckBox( DialogBox )
onedrawing_check.setObjectName("checkBox")
onedrawing_check.setObjectName("checkBox")
la.addWidget(QtGui.QLabel("Group drawings in page"))
la.addWidget(QtGui.QLabel("Group drawings in page"))
cartridge_check.setChecked(False)
onedrawing_check.setChecked(True)
la.addWidget(onedrawing_check)
la.addWidget(onedrawing_check)


box = QtGui.QDialogButtonBox(DialogBox)
line7 = QtGui.QFrame(DialogBox)
line7.setFrameShape(QtGui.QFrame.HLine)
line7.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line7)


box = QtGui.QDialogButtonBox(DialogBox)
box = QtGui.QDialogButtonBox(DialogBox)
Line 623: Line 729:
QtCore.QMetaObject.connectSlotsByName(DialogBox)
QtCore.QMetaObject.connectSlotsByName(DialogBox)
DialogBox.show()
DialogBox.show()

</pre>
</pre>



Revision as of 18:10, 22 December 2013

File:Text-x-python Macro_unrollRuledSurface

Description
The macro allows to unroll ruled surfaces and to draw them on a page.

Author: Hervé B.
Author
Hervé B.
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None

Description

The macro allows to unroll ruled surfaces and to draw them on a page.



Macro_unrollRuledSurface

Installation

Copy the code file of the macro in the directory :

  • Linux & Mac  : $home/.Freecad/Mod/UnrollRuledSurface.
  • Windows : C:\Program Files\FreeCAD0.13

Add templates : A3_Landscape_Empty.svg A3_Landscape.svg A4_Landscape_Empty.svg A4_Landscape.svg

Cf Macro for unrolling ruled surfaces

Options

  • Number of generatrix
  • Scale manual or automatic
  • Page format: a3/a4, cartridge (cf FreeCAD templates)
  • Group drawings in the same page as possible.


Macro_unrollRuledSurface

Instruction for use

  1. Select ruled surfaces
  2. Explode them (cf Draft menu)
  3. Select the surfaces
  4. Execute the macro

Python Code

Macro_unrollRuledSurface.py

#***************************************************************************
#*                                                                         *
#*   Copyright (c) 2013 - DoNovae/Herve BAILLY <hbl13@donovae.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                                                                   *
#*                                                                         *
#***************************************************************************

#####################################
# Macro UnrollRuledSurface
#     Unroll of a ruled surface
#####################################
import FreeCAD , FreeCADGui , Part, Draft, math, Drawing , PyQt4, os
from PyQt4 import QtGui,QtCore
from FreeCAD import Base
from unrollRuledSurface.unfoldBox import unfoldBoxClass
fields_l = [] 
unroll_l = [] 


#####################################
#####################################
# Functions 
#####################################
#####################################

#####################################
# Function errorDialog 
#####################################
def errorDialog(msg):
    diag = QtGui.QMessageBox(QtGui.QMessageBox.Critical,u"Error Message",msg )
    diag.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint)
    diag.exec_()


#####################################
# Function proceed 
#####################################
def proceed():
   QtGui.qApp.setOverrideCursor(QtCore.Qt.WaitCursor)

   FreeCAD.Console.PrintMessage("===========================================\n")
   FreeCAD.Console.PrintMessage("UnrollRuledSurface: start.\n")
   try:
      file_name  = fields_l[0].text()
      pts_nbr    = float(fields_l[1].text())
      scale    = float(fields_l[2].text())
      scale_auto = scale_check.isChecked()
      edge0 = edge0_check.isChecked()
      a3 = a3_check.isChecked()
      cartridge = cartridge_check.isChecked()
      onedrawing = onedrawing_check.isChecked()
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.file_name: "+file_name+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.pts_nbr: "+str(pts_nbr)+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale: "+str(scale)+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.scale_check: "+str(scale_auto)+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.edge0_check: "+str(edge0)+"")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.a3_check: "+str(a3)+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.cartridge: "+str(cartridge)+"\n")
      FreeCAD.Console.PrintMessage("UnrollRuledSurface.onedrawing: "+str(onedrawing)+"\n")
   except:
      msg="UnrollRuledSurface: wrong inputs...\n"
      FreeCAD.Console.PrintError(msg)
      errorDialog(msg)

   QtGui.qApp.restoreOverrideCursor()
   DialogBox.hide()
   unrollRS=unrollRuledSurface( file_name , pts_nbr , edge0 )
   #
   # Get selection
   #
   sel=FreeCADGui.Selection.getSelection()
   faceid=0
   objnames_l=[]
   objnames0_l=[]
   grp=FreeCAD.activeDocument().addObject("App::DocumentObjectGroup", str(file_name)+"_objs") 
   for objid in range( sel.__len__() ):
     shape=sel[objid].Shape
     faces=shape.Faces
     for id in range( faces.__len__() ):
        FreeCAD.Console.PrintMessage("UnrollRuledSurface.proceed: ObjId= "+str(objid)+" , faceId= "+str( faceid )+"\n")
	if faces.__len__() > 1:
	  name=sel[objid].Name+".faces "+str(id)
	else:
	  name=sel[objid].Name
        obj=unrollRS.unroll(faces[id],name) 
        obj.ViewObject.Visibility=False
        grp.addObject(obj)
	objnames_l.append( [ obj , name ] )
	objnames0_l.append( [ sel[objid] , name ] )
        faceid=faceid+1
   id=0
   while objnames_l.__len__() > 0:
     draw=Drawing2d( scale, scale_auto , a3 , cartridge , onedrawing,str(file_name)+"_page"+str(id) ) 
     objnames_l=draw.all( objnames_l )
     id=id+1
     FreeCAD.Console.PrintMessage("UnrollRuledSurface: obj_l= "+str(objnames_l.__len__())+"\n")

   FreeCAD.Console.PrintMessage("UnrollRuledSurface: end.\n")
   FreeCAD.Console.PrintMessage("===========================================\n")

#####################################
# Function close 
#####################################
def close():
   DialogBox.hide()

#####################################
# Class unrollRuledSurface 
#     - file_name : ouput file 
#     - pts_nbr : nbr point of 
#       discretization
#####################################
class unrollRuledSurface:
  def __init__( self, file_name, pts_nbr , edge0 ):
    self.doc = FreeCAD.activeDocument()
    self.file_name = file_name
    self.pts_nbr = int(pts_nbr)
    self.edge0 = edge0
    FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll - file_name: "+self.file_name+" , pts_nbr: "+str(self.pts_nbr)+"\n")


  #####################################
  # Function discretize 
  #####################################
  def discretize(self,curve):
         if type(curve).__name__=='GeomLineSegment':
            sd=curve.discretize( self.pts_nbr )
         elif type(curve).__name__=='GeomBSplineCurve':
            nodes=curve.getPoles()
            spline=Part.BSplineCurve()
            spline.buildFromPoles( nodes )
            sd=spline.discretize( self.pts_nbr )
         elif type(curve).__name__=='GeomCircle':
            sd=curve.discretize( self.pts_nbr )
	 else:
            sd=curve.discretize( self.pts_nbr )
         return sd 

  #####################################
  # Function nbpoles 
  #####################################
  def nbpoles(self,curve):
       if type(curve).__name__=='GeomLineSegment':
         nbpol=1
       elif type(curve).__name__=='GeomBSplineCurve':
         nbpol=curve.NbPoles
       elif type(curve).__name__=='GeomCircle':
         nbpol=2
       elif type(curve).__name__=='GeomBezierCurve':
         nbpol=4
       else:
         nbpol=0
       FreeCAD.Console.PrintMessage("UnrollRulrdSurface.nbpole {:s} = {:d}\n".format(type(curve).__name__,nbpol))
       return nbpol

  #####################################
  # Function unroll 
  #####################################
  # Unroll of a face 
  # composed of 2 or 4 edges
  #####################################
  def unroll(self,face,name):
    FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: Ege Nbr= "+str( face.Edges.__len__())+"\n")
    if face.Edges.__len__() == 2: 
       e1=face.Edges[0]
       e2=face.Edges[1]
       sd1=e1.Curve.discretize( self.pts_nbr )
       sd2=e2.Curve.discretize( self.pts_nbr )
    elif face.Edges.__len__() == 3:
       e1=face.Edges[0]
       e2=face.Edges[2]
       sd1=e1.Curve.discretize( self.pts_nbr )
       sd2=e2.Curve.discretize( self.pts_nbr )
    else:
       E0=face.Edges[0]
       E1=face.Edges[1]
       E2=face.Edges[2]
       E3=face.Edges[3]
       #
       # Choose more complexe curve as edge
       #
       nbpol0=self.nbpoles(E0.Curve)
       nbpol1=self.nbpoles(E1.Curve)
       nbpol2=self.nbpoles(E2.Curve)
       nbpol3=self.nbpoles(E3.Curve)
       FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: nbpol0= {:d}, nbpol1= {:d}, nbpol2= {:d}, nbpol3= {:d}\n".format(nbpol0,nbpol1,nbpol2,nbpol3))

       if self.edge0:
         e1=E0
         e2=E2
         v=self.discretize( E1 )
	 v0=v[0]
	 v1=v[self.pts_nbr-1]
       else:
         e1=E1
         e2=E3
         v=self.discretize( E2 )
	 v0=v[0]
	 v1=v[self.pts_nbr-1]

       sd1=self.discretize( e1 )
       sd2=self.discretize( e2 )
       #
       # Reverse if curves cross over
       #
       if not ( sd2[0].__eq__( v0 ) or not sd2[0].__eq__( v1 ) ):
          sd2.reverse()

    #
    # Create a polygon object and set its nodes 
    #
    devlxy_l=self.devlxyz( sd1 , sd2 )
    FreeCAD.Console.PrintMessage("UnrollRuledSurface.unroll: size devlxy_l: "+str( devlxy_l.__len__())+"\n")
    p=self.doc.addObject("Part::Polygon",name) 
    p.Nodes=devlxy_l
    self.doc.recompute()
    FreeCADGui.SendMsgToActiveView("ViewFit")
    return p

  #####################################
  # Function vect_copy 
  #   - vect:  
  #   - return copy of vector
  #####################################
  def vect_copy( self, vect):
     v= vect.add( FreeCAD.Base.Vector(0,0,0) )
     return v 

  #####################################
  # Function vect_cos 
  #   - vect1,2:  
  #   - return cos angle between 
  #     2 vectors 
  #####################################
  def vect_cos( self , vect1, vect2 ):
     cosalp=vect1.dot(vect2)/vect1.Length/vect2.Length
     return cosalp
  
  #####################################
  # Function vect_sin 
  #   - vect1,2:  
  #   - return abs(sin) angle between 
  #     2 vectors 
  #####################################
  def vect_sin( self , vect1, vect2 ):
     v= FreeCAD.Base.Vector(0,0,0)
     v.x=vect1.y*vect2.z-vect1.z*vect2.y
     v.y=vect1.z*vect2.x-vect1.x*vect2.z
     v.z=vect1.x*vect2.y-vect1.y*vect2.x
     sinalp=v.Length/vect1.Length/vect2.Length
     return sinalp

  
  #####################################
  # Function devlxyz 
  #    - vect1,2: 2 edges of the shape
  #    - return dvlxy_l
  #####################################
  # unroll of a face 
  # composed of 4 edges
  #####################################
  def devlxyz( self , vect1 , vect2 ):
    #
    # Init
    #
    if ( vect1.__len__() != vect2.__len__()) or  ( vect1.__len__() != self.pts_nbr ) or ( vect2.__len__() != self.pts_nbr ):
        msg="UnrollRuledSurface.devlxyz: incompatility of sizes vect1 , vect2, pts_nbr- "+str( vect1.__len__())+" , "+str( vect2.__len__())+" , "+str( self.pts_nbr )+"\n"
        FreeCAD.Console.PrintError(msg)
        errorDialog(msg)

    devlxy_l=[]
    devl1xy_l=[]
    devl2xy_l=[]
    errormax=0.0
    #
    # Init unroll
    # AB
    #
    a1b1=vect2[0].sub(vect1[0])
    oa1=FreeCAD.Vector(0,0,0)
    devl1xy_l.append( oa1 ) #A1
    ob1=FreeCAD.Vector(a1b1.Length,0,0)
    devl2xy_l.append( ob1 ) #B1
    #self.draw_line( devl1xy_l[0] , devl2xy_l[0] )
    #self.draw_line( vect1[0] , vect2[0] )
    for j in range( 1 , self.pts_nbr ) : 
      #
      # AB
      #
      ab=vect2[j-1].sub(vect1[j-1])
      #self.draw_line( vect1[j-1] , vect2[j-1] )
      #
      # AC
      #
      ac=vect1[j].sub(vect1[j-1])
      #
      # BD
      #
      bd=vect2[j].sub(vect2[j-1])
      #
      # CD 
      #
      cd=vect2[j].sub(vect1[j])
      #
      # A1B1 in unroll plan
      #
      a1b1=devl2xy_l[j-1].sub(devl1xy_l[j-1])
      a1b1n=self.vect_copy(a1b1)
      a1b1n.normalize()
      a1b1on=FreeCAD.Vector(-a1b1n.y,a1b1n.x,0)
      #
      # A1C1
      #
      cosalp=self.vect_cos( ab , ac )
      sinalp=self.vect_sin( ab , ac )
      a1c1=self.vect_copy(a1b1n)
      a1c1.multiply(cosalp*ac.Length)
      v=self.vect_copy(a1b1on)
      v.multiply(sinalp*ac.Length)
      a1c1=a1c1.add(v)
      #FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp a1b1: "+str(a1b1n.getAngle(a1b1on))+"\n")
      #FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp oc1: "+str(a1b1n.getAngle(a1c1)-alp)+"\n")
      #FreeCAD.Console.PrintMessage("UnrollRuledSurface.length oc1: "+str(a1c1.Length-ac.Length)+"\n")
      oa1=self.vect_copy(devl1xy_l[j-1])
      oc1=oa1.add(a1c1)
      devl1xy_l.append(oc1)
      #
      # B1D1
      #
      cosalp=self.vect_cos( ab , bd )
      sinalp=self.vect_sin( ab , bd )
      b1d1=self.vect_copy(a1b1n)
      b1d1.multiply(cosalp*bd.Length)
      v=self.vect_copy(a1b1on)
      v.multiply(sinalp*bd.Length)
      b1d1=b1d1.add(v)
      #FreeCAD.Console.PrintMessage("UnrollRuledSurface.alp od1: "+str(b1a1n.getAngle(b1d1)-alp)+"\n")
      #FreeCAD.Console.PrintMessage("UnrollRuledSurface.length od1: "+str(b1d1.Length-bd.Length)+"\n")
      ob1=self.vect_copy(devl2xy_l[j-1])
      od1=ob1.add(b1d1)
      devl2xy_l.append(od1)
      #
      # Draw generatrice
      #
      #self.draw_line( devl1xy_l[j] , devl2xy_l[j] )
      c1d1=devl2xy_l[j].sub( devl1xy_l[j] )
      if ab.Length <> 0 :
         errormax=max(errormax,math.fabs(ab.Length-c1d1.Length)/ab.Length)
    #
    # The end
    #
    FreeCAD.Console.PrintMessage("UnrollRuledSurface Error cd,c1d1: {:.1f} %\n".format(errormax*100))

    #
    # Close polygone
    #
    devlxy_l = devl1xy_l
    devl2xy_l.reverse()
    devlxy_l.extend( devl2xy_l )
    v=FreeCAD.Vector(0,0,0)
    devlxy_l.append( v )

    return devlxy_l

    

  #####################################
  # Function draw_line 
  #   - vect0,1: two points 
  #####################################
  def draw_line( self , vect0 , vect1 ):
     l=Part.Line()
     l.StartPoint=vect0
     l.EndPoint=vect1
     self.doc.addObject("Part::Feature","Line").Shape=l.toShape()


#####################################
# Class Drawing2d 
#   -obj_l: listes of object
#   -topxh1
#   -topyh1
#   -topxv1
#   -topyv1
#   -topxvmax1
#   -topyvmax1
#   -topxvmax1
#   -topyvmax1
#####################################
class Drawing2d:
  #####################################
  # Function __init__ 
  #     - Scale
  #     - scale_auto
  #     - a3
  #     - cartridge
  #     - onedrawing
  #####################################
  def __init__( self,  scale , scale_auto , a3 , cartridge , onedrawing , page_str ):
    self.TopX_H=0
    self.TopY_H=0
    self.TopX_V=0
    self.TopY_V=0
    self.TopX_Hmax=0
    self.TopY_Hmax=0
    self.TopX_Vmax=0
    self.TopY_Vmax=0
    self.a3=a3
    self.scale=scale
    self.scale_auto=scale_auto
    self.cartridge=cartridge
    self.onedrawing=onedrawing
    if self.a3:
      self.L=420
      self.H=297
      self.marge=6
    else:
      self.L=297
      self.H=210
      self.marge=6
    self.name=page_str

  #####################################
  # Function newPage 
  #####################################
  def newPage( self ):
    freecad_dir=os.getenv('HOME')+"/.FreeCAD/Mod/unrollRuledSurface"
    page = FreeCAD.activeDocument().addObject('Drawing::FeaturePage', self.name )
    if self.a3:
        if self.cartridge:
           page.Template = freecad_dir+'/A3_Landscape.svg'   
        else:
           page.Template = freecad_dir+'/A3_Landscape_Empty.svg'   
    else:
        if self.cartridge:
           page.Template = freecad_dir+'/A4_Landscape.svg'   
        else:
           page.Template = freecad_dir+'/A4_Landscape_Empty.svg'   
    return page


  #####################################
  # Function all 
  #####################################
  def all( self, objname_l ):
      obj1_l=[]
      for objid in range( objname_l.__len__() ):
        if objid == 0 or not self.onedrawing:
          page = self.newPage()
        obj1_l.extend( self.done( objid , objname_l[objid] ))
      return obj1_l 

  #####################################
  # Function all 
  #####################################
  def done( self, id , objname ):
    #
    # Init
    #
    obj_l=[]
    obj=objname[0]
    objname=objname[1]
    xmax=obj.Shape.BoundBox.XMax-obj.Shape.BoundBox.XMin
    ymax=obj.Shape.BoundBox.YMax-obj.Shape.BoundBox.YMin
    if ymax > xmax :
      Draft.rotate( obj , 90 )
    Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
    xmax=obj.Shape.BoundBox.XMax-obj.Shape.BoundBox.XMin
    ymax=obj.Shape.BoundBox.YMax-obj.Shape.BoundBox.YMin

    scale=min((self.L-4*self.marge)/xmax,(self.H-4*self.marge)/ymax)

    if ( not self.scale_auto ) or ( self.onedrawing ) :
       scale=self.scale

    FreeCAD.Console.PrintMessage("UnrollRuledSurface.drawing: scale= {:.2f}\n".format(scale))
     

    if id == 0 or not self.onedrawing:
      #
      # Init
      #
      FreeCAD.Console.PrintMessage("Dawing2d: init\n")
      self.TopX_H=self.marge*2
      self.TopY_H=self.marge*2
      TopX=self.TopX_H
      TopY=self.TopY_H
      self.TopX_H=self.TopX_H + xmax * scale + self.marge
      self.TopY_H=self.TopY_H 
      self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
      self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
      self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
      self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
      self.TopY_V=self.marge*2
    elif self.onedrawing:
      if self.TopX_H + xmax * scale < self.L :
        if self.TopY_H + ymax * scale + self.marge*2 < self.H :
	   #
	   # H Add at right on same horizontal line
	   #
           FreeCAD.Console.PrintMessage("Dawing2d: horizontal\n")
           TopX=self.TopX_H
           TopY=self.TopY_H
           self.TopX_H=self.TopX_H + xmax * scale + self.marge
	   self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
	   self.TopY_Hmax=max( self.TopY_Hmax , self.TopY_H + ymax*scale+self.marge )
	   self.TopX_Vmax=max( self.TopX_Hmax , self.TopX_Vmax )
           self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax  )
           self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
	else:
	   #
	   # V Add at right on same horizontal line
	   #
           FreeCAD.Console.PrintMessage("Dawing2d: vertival\n")
           if self.TopX_V + ymax * scale +2* self.marge < self.L and self.TopY_V + xmax * scale + 2*self.marge < self.H :
             Draft.rotate( obj , 90 )
	     Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
	     x0=xmax;xmax=ymax,ymax=x0
             self.TopX_V=max(self.TopX_Vmax, self.TopX_V)
             TopX=self.TopX_V
             TopY=self.TopY_V
	     self.TopX_V = self.TopX_V + xmax * scale + self.marge
	     self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + ymax * scale + self.marge )
	   else:
	     obj_l.append( [ obj , name ] )
	     return obj_l

      else:
	#
	# H Carriage return 
	#
        if ( self.TopY_Hmax + ymax * scale + self.marge*2 < self.H ):   
           FreeCAD.Console.PrintMessage("Dawing2d: carriage return: "+str(self.TopY_H + ymax * scale )+" > "+str(self.H)+"\n")
           TopX=self.marge*2
           TopY=self.TopY_Hmax
           self.TopX_H=TopX + xmax * scale + self.marge
           self.TopY_H=TopY 
	   self.TopX_Hmax=max( self.TopX_Hmax , self.TopX_H )
	   self.TopY_Hmax=self.TopY_Hmax + ymax*scale+self.marge
           self.TopX_Vmax=max( self.TopX_Vmax , self.TopX_Hmax )
           self.TopX_V=max(self.TopX_Vmax,self.TopX_V)
	else:
	   #
	   # V Add at right on same horizontal line
	   #
           FreeCAD.Console.PrintMessage("Dawing2d: vertival: "+str(self.TopX_V)+" , "+str(self.TopX_Vmax)+"\n")
           if self.TopX_V + ymax * scale + 2*self.marge < self.L and self.TopY_V + xmax * scale + 2*self.marge < self.H :
             Draft.rotate( obj , 90 )
	     Draft.move( obj , FreeCAD.Base.Vector( -obj.Shape.BoundBox.XMin , -obj.Shape.BoundBox.YMin , 0))
	     x0=xmax;xmax=ymax,ymax=x0
             TopX=self.TopX_V
             TopY=self.TopY_V
	     self.TopX_V = self.TopX_V + xmax * scale + self.marge
	     self.TopY_Vmax=max( self.TopY_Vmax , self.TopY_V + ymax * scale + self.marge )
	   else:
	     obj_l.append( [ obj , objname ] )
	     return obj_l

    page=FreeCAD.activeDocument().getObject(self.name )

    Text=FreeCAD.activeDocument().addObject('Drawing::FeatureViewAnnotation', objname+"_txt")
    Text.Text=objname
    Text.X=TopX+xmax*scale/2
    Text.Y=TopY+ymax*scale/2
    Text.Scale=2

    TopView = FreeCAD.activeDocument().addObject('Drawing::FeatureViewPart',objname)
    TopView.Source = obj
    TopView.Direction = (0.0,0.0,1)
    TopView.Rotation = 0 
    TopView.X = TopX 
    TopView.Y = TopY 
    TopView.ShowHiddenLines = False
    TopView.Scale = scale 
    page.addObject(TopView)
    page.addObject(Text)
    FreeCAD.activeDocument().recompute()
    return obj_l




#####################################
#####################################
# Dialog Box 
#####################################
#####################################
fields = [[ "File Name" , "UnrollSurface" ]]
fields.append(["Dicretization Points Nbr","100" ])
fields.append(["Scale","1" ])

DialogBox = QtGui.QDialog()
DialogBox.resize(250,250)
DialogBox.setWindowTitle("UnrollRuledSurface")
la = QtGui.QVBoxLayout(DialogBox)
buttonGrp1 = QtGui.QButtonGroup(DialogBox)
buttonGrp2 = QtGui.QButtonGroup(DialogBox)

#
# Input fields
#
for id in range(len( fields )):
  la.addWidget(QtGui.QLabel( fields[ id ][ 0 ] ))
  fields_l.append( QtGui.QLineEdit( fields[ id ][ 1 ] ))
  la.addWidget( fields_l[ id ] )

scale_check = QtGui.QCheckBox( DialogBox )
scale_check.setObjectName("checkBox")
scale_check.setChecked(True)
la.addWidget(QtGui.QLabel("Scale auto"))
la.addWidget(scale_check)

line3 = QtGui.QFrame(DialogBox)
line3.setFrameShape(QtGui.QFrame.HLine)
line3.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line3)

edge0_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("Generatrices from edge 1 to 4" ))
edge0_check.setChecked(False)
la.addWidget(edge0_check)
edge1_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("Generatrices from edge 0 to 3" ))
edge1_check.setChecked(True)
buttonGrp1.addButton(edge0_check)
buttonGrp1.addButton(edge1_check)
la.addWidget(edge1_check)

line4 = QtGui.QFrame(DialogBox)
line4.setFrameShape(QtGui.QFrame.HLine)
line4.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line4)

a3_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("A3" ))
a3_check.setChecked(False)
la.addWidget(a3_check)
a4_check = QtGui.QRadioButton( DialogBox )
la.addWidget(QtGui.QLabel("A4"))
a4_check.setChecked(True)
buttonGrp2.addButton(a3_check)
buttonGrp2.addButton(a4_check)
la.addWidget(a4_check)

cartridge_check = QtGui.QCheckBox( DialogBox )
cartridge_check.setObjectName("checkBox")
la.addWidget(QtGui.QLabel("Cartridge"))
cartridge_check.setChecked(False)
la.addWidget(cartridge_check)

line6 = QtGui.QFrame(DialogBox)
line6.setFrameShape(QtGui.QFrame.HLine)
line6.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line6)

onedrawing_check = QtGui.QCheckBox( DialogBox )
onedrawing_check.setObjectName("checkBox")
la.addWidget(QtGui.QLabel("Group drawings in page"))
onedrawing_check.setChecked(True)
la.addWidget(onedrawing_check)

line7 = QtGui.QFrame(DialogBox)
line7.setFrameShape(QtGui.QFrame.HLine)
line7.setFrameShadow(QtGui.QFrame.Sunken)
la.addWidget(line7)

box = QtGui.QDialogButtonBox(DialogBox)
box.setOrientation(QtCore.Qt.Horizontal)
box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
la.addWidget(box)

QtCore.QObject.connect(box, QtCore.SIGNAL("accepted()"), proceed )
QtCore.QObject.connect(box, QtCore.SIGNAL("rejected()"), close )
QtCore.QMetaObject.connectSlotsByName(DialogBox)
DialogBox.show()


Available translations of this page: