A I beam python feature

Info about new community or project announcements, implemented features, classes, modules or APIs. Might get technical!
PLEASE DO NOT POST HELP REQUESTS OR OTHER DISCUSSIONS HERE!
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
User avatar
Vincent B
Veteran
Posts: 4733
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

A I beam python feature

Post by Vincent B »

For quickly design a beam.
True IPE HEA IPN profile.
Bevel able at the start and end of the beam.
Can be manually handle or attached on a edge. (first select the edge then call the macro)
Raw programming, i'm a beginner. ;)

Code: Select all

import FreeCAD, Part, Draft, math
from FreeCAD import Base
v = FreeCAD.Base.Vector



class IH:
   def __init__(self, obj, linksub, lenobj=0):
              
      # print (linksub)
      # print (lenobj)
          
      obj.addProperty("App::PropertyFloat","Width","Parameters","").Width = 42
      obj.addProperty("App::PropertyFloat","Height","Parameters","").Height = 80
      obj.addProperty("App::PropertyFloat","FlangeThickness","Parameters").FlangeThickness = 5.9
      obj.addProperty("App::PropertyFloat","FlangeAngle","Parameters").FlangeAngle = 8
      obj.addProperty("App::PropertyFloat","WebThickness","Parameters").WebThickness = 3.8
      obj.addProperty("App::PropertyFloat","FilletRadius","Parameters","Fillet radius").FilletRadius = 4
      obj.addProperty("App::PropertyFloat","Length","Parameters","Extrude Length").Length = lenobj
      obj.addProperty("App::PropertyFloat","Bevel1","Parameters","First bevel cut").Bevel1 = 0
      obj.addProperty("App::PropertyFloat","Bevel2","Parameters","Second bevel cut").Bevel2 = 0
      obj.addProperty("App::PropertyFloat","BevelRotate","Parameters","Angle of bevel around his axle").BevelRotate = 0
      obj.addProperty("App::PropertyBool","MakeFillet","Parameters","Wheter to draw the fillets or not").MakeFillet = True
      obj.addProperty("App::PropertyBool","Centered","Parameters","Choose corner or profile centre as origin").Centered = False
      obj.addProperty("App::PropertyBool","IPN","Parameters","IPE HEA style or IPN style").IPN = True
      if linksub:
        obj.addProperty("App::PropertyLinkSub","Target","Base","Target face").Target = linksub
       
      obj.Proxy = self
 
   def onChanged(self, obj, prop):
      
      if prop == "Width" or prop == "Height" or prop == "FlangeThickness" or prop == "WebThickness" or prop == "FilletRadius" or prop == "Length" or prop == "Bevel1" or prop == "Bevel2" or prop == "Centered" or prop == "BevelRotate":
        self.execute(obj)

   def execute(self, obj):
           
        try:
            L = obj.Target[0].getSubObject(obj.Target[1][0]).Length
        except:   
            L = obj.Length 
     
        pl = obj.Placement
        TF = obj.FlangeThickness
        TW = obj.WebThickness
        W = obj.Width
        H = obj.Height
        R = obj.FilletRadius
        r = 0
        d = v(0,0,1)
        B1 = obj.Bevel1
        B2 = obj.Bevel2
        A = obj.BevelRotate
        w = 0
        h = 0
        k = 2 * round (max (H/W,W/H),2)  # coeff pour depasser l'objet (rotation bevel)
        XA1 = W/2-TW/2                   # face gauche du web
        XA2 = W/2+TW/2                   # face droite du web
                    
        if obj.Centered == True:
            w = -W/2
            h = -H/2
            
        if obj.MakeFillet == False:                          # IPE ou IPN sans arrondis
       
            Yd = 0
            if obj.IPN == True:
                Yd = (W/4)*math.tan(math.pi*obj.FlangeAngle/180)  
            
            p1 =  v(0+w,0+h,0)
            p2 =  v(0+w,TF+h-Yd,0)
            p3 =  v(XA1+w,TF+h+Yd,0)
            p4 =  v(XA1+w,H-TF+h-Yd,0)
            p5 =  v(0+w,H-TF+h+Yd,0)
            p6 =  v(0+w,H+h,0)
            p7 =  v(W+w,H+h,0)
            p8 =  v(W+w,H-TF+h+Yd,0)
            p9 =  v(XA2+w,H-TF+h-Yd,0)
            p10 = v(XA2+w,TF+h+Yd,0)
            p11 = v(W+w,TF+h-Yd,0)
            p12 = v(W+w,0+h,0)
            
            L1 = Part.makeLine(p1, p2)
            L2 = Part.makeLine(p2, p3)
            L3 = Part.makeLine(p3, p4)
            L4 = Part.makeLine(p4, p5)
            L5 = Part.makeLine(p5, p6)
            L6 = Part.makeLine(p6, p7)
            L7 = Part.makeLine(p7, p8)
            L8 = Part.makeLine(p8, p9)
            L9 = Part.makeLine(p9, p10)
            L10 = Part.makeLine(p10,p11)
            L11 = Part.makeLine(p11,p12)
            L12 = Part.makeLine(p12,p1)
                
            wire = Part.Wire([L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12])
            
        if obj.MakeFillet == True and obj.IPN == False:      # IPE avec arrondis
                
            p1 =  v(0+w,0+h,0)
            p2 =  v(0+w,TF+h,0)
            p3 =  v(XA1-R+w,TF+h,0)
            p4 =  v(XA1+w,TF+R+h,0)
            p5 =  v(XA1+w,H-TF-R+h,0)
            p6 =  v(XA1-R+w,H-TF+h,0)
            p7 =  v(0+w,H-TF+h,0)
            p8 =  v(0+w,H+h,0)
            p9 =  v(W+w,H+h,0)
            p10 = v(W+w,H-TF+h,0)
            p11 = v(XA2+R+w,H-TF+h,0)
            p12 = v(XA2+w,H-TF-R+h,0)
            p13 = v(XA2+w,TF+R+h,0)
            p14 = v(XA2+R+w,TF+h,0)
            p15 = v(W+w,TF+h,0)
            p16 = v(W+w,0+h,0)
            
            c1 = v(XA1-R+w,TF+R+h,0)
            c2 = v(XA1-R+w,H-TF-R+h,0)
            c3 = v(XA2+R+w,H-TF-R+h,0)
            c4 = v(XA2+R+w,TF+R+h,0)
            
            L1 = Part.makeLine(p1, p2)
            L2 = Part.makeLine(p2, p3)
            L3 = Part.makeLine(p4, p5)
            L4 = Part.makeLine(p6, p7)
            L5 = Part.makeLine(p7, p8)
            L6 = Part.makeLine(p8, p9)
            L7 = Part.makeLine(p9, p10)
            L8 = Part.makeLine(p10, p11)
            L9 = Part.makeLine(p12, p13)
            L10 = Part.makeLine(p14, p15)
            L11 = Part.makeLine(p15, p16)
            L12 = Part.makeLine(p16, p1)
            
            A1 = Part.makeCircle(R,c1,d,270,0)
            A2 = Part.makeCircle(R,c2,d,0,90)
            A3 = Part.makeCircle(R,c3,d,90,180)
            A4 = Part.makeCircle(R,c4,d,180,270)
               
            wire = Part.Wire([L1,L2,A1,L3,A2,L4,L5,L6,L7,L8,A3,L9,A4,L10,L11,L12])
        
        if obj.MakeFillet == True and obj.IPN == True:       # IPN avec arrondis
        
            r = R/2
            angarc = obj.FlangeAngle
            angrad = math.pi*angarc/180
            sina = math.sin(angrad)
            cosa = math.cos(angrad)
            tana = math.tan(angrad)
            cot1 = W/4*tana     #1,47
            cot2 = TF-cot1      #4,42
            cot3 = r*cosa       #1,98
            cot4 = r-cot3*tana  #1,72
            cot5 = cot4*tana    #0,24
            cot5 = cot2+cot5    #4,66
            cot6 = R*sina       #0,55
            cot7 = W/4-R-TW/2   #4,6
            cot8 = cot6+cot7    #5,15
            cot9 = cot7*tana    #0,72
            cot10 = R*cosa      #3,96
            
            xc1 = r
            yc1 = cot5-cot3
            c1 = v(xc1+w,yc1+h,0)
            
            xc2 = W/2-TW/2-R
            yc2 = cot9+TF+cot10
            c2 = v(xc2+w,yc2+h,0)
            
            xc3 = xc2
            yc3 = H-yc2
            c3 = v(xc3+w,yc3+h,0)
            
            xc4 = xc1
            yc4 = H-yc1
            c4 = v(xc4+w,yc4+h,0)
               
            xc5 = W-xc1
            yc5 = yc4
            c5 = v(xc5+w,yc5+h,0)
            
            xc6 = W-xc2
            yc6 = yc3
            c6 = v(xc6+w,yc6+h,0)
            
            xc7 = xc6
            yc7 = yc2
            c7 = v(xc7+w,yc7+h,0)
            
            xc8 = xc5
            yc8 = yc1
            c8 = v(xc8+w,yc8+h,0)
            
            A1 = Part.makeCircle(r,c1,d,90+angarc,180)
            A2 = Part.makeCircle(R,c2,d,270+angarc,0)
            A3 = Part.makeCircle(R,c3,d,0,90-angarc)
            A4 = Part.makeCircle(r,c4,d,180,270-angarc)
            A5 = Part.makeCircle(r,c5,d,270+angarc,0)
            A6 = Part.makeCircle(R,c6,d,90+angarc,180)
            A7 = Part.makeCircle(R,c7,d,180,270-angarc)
            A8 = Part.makeCircle(r,c8,d,0,90-angarc)
            
            xp1 = 0
            yp1 = 0
            p1 = v(xp1+w,yp1+h,0)
            
            xp2 = 0
            yp2 = cot5-cot3
            p2  = v(xp2+w,yp2+h,0)
            
            xp3 = cot4
            yp3 = cot5
            p3 = v(xp3+w,yp3+h,0)
            
            xp4 = W/4+cot8
            yp4 = TF+cot9
            p4 = v(xp4+w,yp4+h,0)
            
            xp5 = W/2-TW/2
            yp5 = yc2
            p5 = v(xp5+w,yp5+h,0)
            
            xp6 = xp5
            yp6 = H-yp5
            p6 = v(xp6+w,yp6+h,0)
            
            xp7 = xp4
            yp7 = H-yp4
            p7 = v(xp7+w,yp7+h,0)
            
            xp8 = xp3
            yp8 = H-yp3
            p8 = v(xp8+w,yp8+h,0)
            
            xp9 = xp2
            yp9 = H - yp2
            p9 = v(xp9+w,yp9+h,0)
            
            xp10 = xp1
            yp10 = H
            p10 = v(xp10+w,yp10+h,0)
            
            xp11 = W
            yp11 = H
            p11 = v(xp11+w,yp11+h,0)
            
            xp12 = xp11
            yp12 = yp9
            p12 = v(xp12+w,yp12+h,0)
            
            xp13 = W-xp8
            yp13 = yp8
            p13 = v(xp13+w,yp13+h,0)
            
            xp14 = W-xp7
            yp14 = yp7
            p14 = v(xp14+w,yp14+h,0)
            
            xp15 = W-xp6
            yp15 = yp6
            p15 = v(xp15+w,yp15+h,0)
            
            xp16 = W-xp5
            yp16 = yp5
            p16 = v(xp16+w,yp16+h,0)
            
            xp17 = W-xp4
            yp17 = yp4
            p17 = v(xp17+w,yp17+h,0)
            
            xp18 = W-xp3
            yp18 = yp3
            p18 = v(xp18+w,yp18+h,0)
            
            xp19 = W-xp2
            yp19 = yp2
            p19 = v(xp19+w,yp19+h,0)
            
            xp20 = W
            yp20 = 0
            p20 = v(xp20+w,yp20+h,0)
              
            L1 = Part.makeLine(p1, p2)
            L2 = Part.makeLine(p3, p4)
            L3 = Part.makeLine(p5, p6)
            L4 = Part.makeLine(p7, p8)
            L5 = Part.makeLine(p9, p10)
            L6 = Part.makeLine(p10, p11)
            L7 = Part.makeLine(p11, p12)
            L8 = Part.makeLine(p13, p14)
            L9 = Part.makeLine(p15, p16)
            L10 = Part.makeLine(p17, p18)
            L11 = Part.makeLine(p19, p20)
            L12 = Part.makeLine(p20, p1)
                
            wire = Part.Wire([L1,A1,L2,A2,L3,A3,L4,A4,L5,L6,L7,A5,L8,A6,L9,A7,L10,A8,L11,L12])
         
        obj.Shape = wire    
        p = Part.Face(wire)   
           
        if L:                                       # si on extrude
            ProfileFull = p.extrude(v(0,0,L))
            obj.Shape = ProfileFull
            YA1 = W*math.tan(math.pi*B1/180)
            YA2 = W*math.tan(math.pi*B2/180)
                
            if B1 or B2:                            # couper les extrémités
                if B1 and not B2: 
                    p1 = v(w,h,0)
                    p2 = v(k*W+w,k*h,0)
                    p3 = v(k*W+w,k*h,k*YA1)
                    obj.Shape  = ProfileFull.cut(self.SubtractiveCoin(p1,p2,p3,H,A,d,k))
                if B2 and not B1: 
                    p1 = v(w,h,L)
                    p2 = v(k*W+w,k*h,L)
                    p3 = v(k*W+w,k*h,L-k*YA2)
                    obj.Shape  = ProfileFull.cut(self.SubtractiveCoin(p1,p2,p3,H,A,d,k))
                if B1 and B2 :  
                    p1 = v(w,h,0)
                    p2 = v(k*W+w,k*h,0)
                    p3 = v(k*W+w,k*h,k*YA1)
                    Profiledemicut = ProfileFull.cut(self.SubtractiveCoin(p1,p2,p3,H,A,d,k))
                    p1 = v(w,h,L)
                    p2 = v(k*W+w,k*h,L)
                    p3 = v(k*W+w,k*h,L-k*YA2)
                    obj.Shape  = Profiledemicut.cut(self.SubtractiveCoin(p1,p2,p3,H,A,d,k))   
        else:   
            obj.Shape = p
            
        obj.Placement = pl
        obj.positionBySupport()
        
   def SubtractiveCoin(obj,p1,p2,p3,H,A,d,k):
        WireCoin = Part.makePolygon([p1,p2,p3,p1])
        FaceCoin = Part.Face(WireCoin)
        coin1 = FaceCoin.extrude(v(0,k*H,0))
        coin2 = FaceCoin.extrude(v(0,-k*H,0))
        if A:
            coin1.rotate (p1,d,A)
            coin2.rotate (p1,d,A)
        fuse = coin1.fuse(coin2)
        return fuse        
        
def MakeIH():
    doc = FreeCAD.activeDocument()
    if doc == None:
        doc = FreeCAD.newDocument()
        
    obj=doc.addObject("Part::FeaturePython","I_Beam") 
    obj.addExtension("Part::AttachExtensionPython","obj")
   
    selobj = ""
    selsubobj = ""
    linksub = ""
    lenobj = 0 
    
    try:
       
        selobj = Gui.Selection.getSelectionEx()[0]
        linksub = (selobj.Object, (selobj.SubElementNames[0]))
        selsubobj = selobj.SubObjects[0]
        feature = selobj.Object
        edgeName = selobj.SubElementNames[0]
        lenobj = selsubobj.Length
        
        obj.MapMode = "NormalToEdge"
        obj.Support =  (feature, edgeName)
        obj.MapPathParameter = 1
       
    except:
        print ("no selection")
   
    IH(obj,linksub,lenobj)
    
    obj.ViewObject.Proxy=0
    viewObject = Gui.ActiveDocument.getObject(obj.Name)
    viewObject.DisplayMode = "Flat Lines"
  

MakeIH()
Attachments
Capture.JPG
Capture.JPG (50.98 KiB) Viewed 4288 times
test.FCStd
(76.74 KiB) Downloaded 99 times
User avatar
bernd
Veteran
Posts: 12851
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: A I beam python feature

Post by bernd »

similar to the way it is done in BOLTSFC for years already ... 8-) https://github.com/boltsparts/BOLTS/blo ... ofile_i.py
carlopav
Veteran
Posts: 2062
Joined: Mon Dec 31, 2018 1:49 pm
Location: Venice, Italy

Re: A I beam python feature

Post by carlopav »

nice script anyway!
follow my experiments on BIM modelling for architecture design
User avatar
bitacovir
Veteran
Posts: 1570
Joined: Sat Apr 19, 2014 6:23 am
Contact:

Re: A I beam python feature

Post by bitacovir »

GlouGlou wrote: Wed Sep 16, 2020 9:00 pm For quickly design a beam.
well done. Keep learning!
::bitacovir::
==================
One must be absolutely modern.
Arthur Rimbaud (A Season in Hell -1873)

Canal Youtube Grupo Telegram de FreeCAD Español

My personal web site
My GitHub repository
Mini Airflow Tunnel Project
User avatar
Vincent B
Veteran
Posts: 4733
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: A I beam python feature

Post by Vincent B »

Thanks.
I've made the L profile and the Square profile as well.
Attachments
Capture.JPG
Capture.JPG (58.52 KiB) Viewed 3945 times
mario52
Veteran
Posts: 4692
Joined: Wed May 16, 2012 2:13 pm

Re: A I beam python feature

Post by mario52 »

hi

mais q'c'est biau

and the GUI and the wiki

mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
Jpk
Posts: 17
Joined: Tue Dec 29, 2020 7:04 am
Location: 90 <> 68

Re: A I beam python feature

Post by Jpk »

Excellent,
mais j'aurais besoin du mode d'emploi détaillé.
JPK
User avatar
Vincent B
Veteran
Posts: 4733
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: A I beam python feature

Post by Vincent B »

2 ways to use it:
- Run the macro and give a length. You can use it manually by rotating and place it. The object can be containerized with Structure (Arch Wb) as well.
- Attached: select a edge of a sketch, run the macro, the profile is attached on the edge with his length.
...
I'm trying to build a selecting panel with all normalized dimensions. As I'm not gifted, that's coming slowly. :D
oddtopus
Posts: 142
Joined: Tue Sep 20, 2016 6:17 pm

Re: A I beam python feature

Post by oddtopus »

Nice feature indeed.
Unfortunately my installation of FC crashes when I save the file and reopen it.
Did you noticed the same trouble?
Version info:

Code: Select all

OS: Linux Mint 19.2
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.16121 (Git) AppImage
Build type: Release
Branch: master
Hash: a7919b63dea4bb1f1107c80ed44758479eec3d8d
Python version: 3.6.7
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: Italian/Italy (it_IT)
Log:

Code: Select all

Program received signal SIGSEGV, Segmentation fault.
#0  /lib/x86_64-linux-gnu/libc.so.6(+0x3f040) [0x7f19bcab3040]
#1  0x7f19c286ac0e in App::PropertyPythonObject::Restore(Base::XMLReader&) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x68e
#2  0x7f19c2840e4d in App::DynamicProperty::Restore(Base::XMLReader&) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x17d
#3  0x7f19c2796d19 in App::Document::readObjects(Base::XMLReader&) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x319
#4  0x7f19c279db93 in App::Document::Restore(Base::XMLReader&) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x1d3
#5  0x7f19c279f571 in App::Document::restore() from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x281
#6  0x7f19c28971f3 in App::Application::openDocument(char const*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x243
#7  0x7f19c28aab7c in App::Application::sOpenDocument(_object*, _object*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADApp.so+0x5c
#8  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(_PyCFunction_FastCallDict+0x18e) [0x7f19c1e1fc1e]
#9  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(+0x1650da) [0x7f19c1eb90da]
#10  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(_PyEval_EvalFrameDefault+0x3002) [0x7f19c1ebc902]
#11  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(+0x164cde) [0x7f19c1eb8cde]
#12  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(PyEval_EvalCodeEx+0x6d) [0x7f19c1eb930d]
#13  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(PyEval_EvalCode+0x3b) [0x7f19c1eb935b]
#14  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libpython3.6m.so.1.0(PyRun_StringFlags+0x92) [0x7f19c1ef4772]
#15  0x7f19c23552d4 in Base::InterpreterSingleton::runString(char const*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADBase.so+0x54
#16  0x7f19c2f9c07a in Gui::Command::doCommand(Gui::Command::DoCmd_Type, char const*, ...) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x12a
#17  0x7f19c2f0bfeb in Gui::Application::open(char const*, char const*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0xfb
#18  0x7f19c2f91061 in Gui::RecentFilesAction::activateFile(int) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x2f1
#19  0x7f19c2fa027c in Gui::Command::invoke(int) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x4c
#20  0x7f19c2f90a02 in Gui::ActionGroup::onActivated(QAction*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x1d2
#21  0x7f19bdec18d1 in QMetaObject::activate(QObject*, int, int, void**) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x2c1
#22  0x7f19be84c10f in QActionGroup::triggered(QAction*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x2f
#23  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5(+0x159009) [0x7f19be84d009]
#24  0x7f19bdec18d1 in QMetaObject::activate(QObject*, int, int, void**) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x2c1
#25  0x7f19be848372 in QAction::triggered(bool) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x32
#26  0x7f19be84b09d in QAction::activate(QAction::ActionEvent) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x5d
#27  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5(+0x2d8112) [0x7f19be9cc112]
#28  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5(+0x2dd280) [0x7f19be9d1280]
#29  0x7f19be9d4dcb in QMenu::mouseReleaseEvent(QMouseEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x24b
#30  0x7f19be89473a in QWidget::event(QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x96a
#31  0x7f19be9d569b in QMenu::event(QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x8b
#32  0x7f19be851c6c in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x9c
#33  0x7f19be856b5d in QApplication::notify(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0xc6d
#34  0x7f19c2f774a1 in Gui::GUIApplication::notify(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x41
#35  0x7f19bde97425 in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x75
#36  0x7f19be855860 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x1a0
#37  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5(+0x1ba274) [0x7f19be8ae274]
#38  /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5(+0x1bc2c3) [0x7f19be8b02c3]
#39  0x7f19be851c6c in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x9c
#40  0x7f19be8562ea in QApplication::notify(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Widgets.so.5+0x3fa
#41  0x7f19c2f774a1 in Gui::GUIApplication::notify(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x41
#42  0x7f19bde97425 in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x75
#43  0x7f19be2417db in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Gui.so.5+0x40b
#44  0x7f19be242f75 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Gui.so.5+0x115
#45  0x7f19be22474b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Gui.so.5+0x7b
#46  /tmp/.mount_FreeCAM6yDT3/usr/lib/libQt5XcbQpa.so.5(+0xa05d0) [0x7f19b5f545d0]
#47  /tmp/.mount_FreeCAM6yDT3/usr/lib/libglib-2.0.so.0(+0x569be) [0x7f19b97a29be]
#48  /tmp/.mount_FreeCAM6yDT3/usr/lib/libglib-2.0.so.0(g_main_context_dispatch+0x33) [0x7f19b97a3826]
#49  /tmp/.mount_FreeCAM6yDT3/usr/lib/libglib-2.0.so.0(+0x57a0b) [0x7f19b97a3a0b]
#50  /tmp/.mount_FreeCAM6yDT3/usr/lib/libglib-2.0.so.0(g_main_context_iteration+0x4a) [0x7f19b97a3acf]
#51  0x7f19bdee898c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x5c
#52  0x7f19bde9553b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0xfb
#53  0x7f19bde9d466 in QCoreApplication::exec() from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libQt5Core.so.5+0x86
#54  0x7f19c2f1436c in Gui::Application::runApplication() from /tmp/.mount_FreeCAM6yDT3/usr/bin/../lib/libFreeCADGui.so+0x16bc
#55  /tmp/.mount_FreeCAM6yDT3/usr/bin/FreeCAD(main+0x6c9) [0x403829]
#56  /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f19bca95bf7]
#57  /tmp/.mount_FreeCAM6yDT3/usr/bin/FreeCAD() [0x404699]
Program received signal SIGSEGV, Segmentation fault.
User avatar
Kunda1
Veteran
Posts: 13434
Joined: Thu Jan 05, 2017 9:03 pm

Re: A I beam python feature

Post by Kunda1 »

oddtopus wrote: Tue Jan 05, 2021 10:39 am Nice feature indeed.
Unfortunately my installation of FC crashes when I save the file and reopen it.

Version: 0.19.16121 (Git) AppImage
You're waaaay behind, current available 0.19 release is at 23578 (on linux)
Alone you go faster. Together we go farther
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
Post Reply