script che da errore "Brep_Api command not done"

Forum per le domande e le discussioni in Italiano
Forum rules
regole del forum e le informazioni utili

Importante: PRIMA di chiedere aiuto leggete qui!
Post Reply
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

script che da errore "Brep_Api command not done"

Post by Luixx »

Salve ho guardato questo script:
https://ingegnerialibera.altervista.org ... utorial_05

nel mio che ho fatto nel lanciare lo script mi da il simbolo rosso nell'oggetto appena creato dandomi l'errore "Brep_Api command not done".

Lo script è questo:
Premetto che sto usando la 0.19.2 e ho testato gli altri script che ci sono in quella pagina .. funziona tutto .. ma tranne l'esempio come creare le proprietà.

Incollo il codice:

Code: Select all

import FreeCADGui
import FreeCAD
from FreeCAD import Base
import Part

class CustomObject:
    def __init__(self, obj):
        obj.addProperty("App::PropertyLength","b","CustomObject","Base").b=500.0
        obj.addProperty("App::PropertyLength","h","CustomObject", "Altezza").h=100.0
        obj.addProperty("App::PropertyLength","l","CustomObject", "Larghezza").l=400.0
        obj.Proxy = self

    def execute(self, fp):
        Vert1 = Base.Vector(0,0,0)
        Vert2 = Base.Vector(fp.b,0,0)
        Vert3 = Base.Vector(fp.b,fp.h,0)
        Vert4 = Base.Vector(0,fp.h,0)
        
        Line1 = Part.Line(Vert1,Vert2)
        VertC1 = Base.Vector(fp.b+fp.h/2,fp.h/2,0)
        Arc1 = Part.Arc(Vert2,VertC1,Vert3)
        Line2 = Part.Line(Vert3,Vert4)
        VertC2 = Base.Vector(-fp.h/2,fp.h/2,0)
        Arc2 = Part.Arc(Vert4,VertC2,Vert1)
        
        Shape1 = Part.Shape([Line1,Arc1,Line2,Arc2])
        
        Wire1 = Part.Wire(Shape1.Edges)
        Face1 = Part.Face(Wire1)
        
        Solid1 = Face1.extrude(Base.Vector(0,0,fp.l))
        fp.Shape = Solid1

class ViewProviderCustomObject:
    def __init__(self, obj):
        obj.Proxy = self


def makeCustomObject():
    a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","CustomObject")
    CustomObject(a)
    ViewProviderCustomObject(a.ViewObject)
    FreeCAD.ActiveDocument.recompute()

makeCustomObject()
Avete idea come risolvere il problema?
Grazie mille e buona fine settimana.
User avatar
onekk
Veteran
Posts: 6208
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: script che da errore "Brep_Api command not done"

Post by onekk »

Semplicemente usa Part.LineSegment al posto che Part.Line.

Dovrebbe funzionare, hanno cambiato pochissime cose tra la 0.16 se non erro per cui se usi codice "vecchio" devi tenere presente questa particolarità se devi unire segmenti tra di loro.

È un problema semantico Part.Line è una linea infinita che passa per i due punti dati, Parte.LineSegment è una Segmento che passa da punto A a punto B.

Per cui la modifica corregge il concetto di base.

Ovviamente unire una linea infinita con un arco non ha punti coincidenti. Un segmento ha un inizio ed una fine e i punti di giunzione sono univoci.

Se usi alcune funzioni, una linea è meglio se devi trovare ad esempio l'incrocio del "prolungamento" di due segmenti.

Ovviamente se devi definire una "spezzata" ad esempio in un Wire i punti devono coincidere altrimenti non crei una "spezzata" (o polilinea che dir si voglia) e quindi il motore di OCCT di dà l'errore.

Saluti

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
Post Reply