libreria personale

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

libreria personale

Post by Luixx »

Salve, ho quasi riuscito ad fare la mia libreria personale con le mie funzioni etc..
vorrei chiedere sapete mica dove si trova tutti i Part::, e posso fare che ogni oggetto che non esiste in freecad predefinito me li creo io e che posso rieditarli nelle proprietà.
Ora visto i miei posto precedenti e nel topic "bolts", qui tutto ok. ma per fare altre cose come dovrei .. per caso registrare una macro e poi implementarla nel mio codice?.

Allego immagine e vedete i cerchi che ho messo ed questo è solo un pezzettino di libreria che sto facendo.
1.jpg
1.jpg (210.39 KiB) Viewed 4102 times
Idea ?
E poi una funziona per creare un tubo avete idea come fare perché non trovo la proprietà di aggiungere un tubo.. e vedo solo box, cylinder etc.
devo fare io ? e poi incollarlo nel mio codice?.
In oltre vi lascio un pezzettino di macro, perché si può usare sia con py e macro o tramite console di freecad.

Code: Select all

from FreeCADZero import Util,  Box , Cylinder, BoolTool

box1 = Box("box1")
print("init box")
box1.create(10,20,60)
print("create box")
box1.placement(FreeCAD.Placement(App.Vector(10,10,10), App.Rotation(45,0,0)))
print("place box")
Util.doc_refresh()
print("refresh1")

cylinder1 = Cylinder("cylinder1")
print("init cyl")
cylinder1.create(20,10,360)
print("create cyl")
cylinder1.placement(FreeCAD.Placement(App.Vector(10,10,10), App.Rotation(45,0,0)))
print("place cyl")

bool1 =  BoolTool("bool1")
print("init bool")
objs = ("box1", "cylinder1") 
bool1.mfuse_obj(objs)
print("fuse objs")

Util.doc_refresh()
print("refresh2")
Grazie mille e buona settimana.
User avatar
onekk
Veteran
Posts: 6202
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: libreria personale

Post by onekk »

Il tubo beh è il cilindro esterno a cui sottrai il cilindro interno, leggermente più lungo per "tagliare" bene il solido.

A Parte che la macro la puoi usare solo se hai FreeCADZero installato, che se è una tua libreria, mica tutti la hanno a disposizione.

Comunque, lo puoi fare anche così:

Code: Select all

import FreeCAD
from FreeCAD import Rotation, Vector

import Part

int_dia = 5
spess = 1.5

cir_1 = Part.Circle(Vector(0,0,0), Vector(0,0,1), int_dia + spess)
cir_2 = Part.Circle(Vector(0,0,0), Vector(0,0,1), int_dia)

face1 = Part.Face(Part.Wire(cir_1.toShape()))
face2 = Part.Face(Part.Wire(cir_2.toShape()))

tube = face1.cut(face2).removeSplitter()


Part.show(tube, "tube")

dritto = tube.extrude(Vector(0,0,20))

Part.show(dritto, "tubo_dritto")

curva = tube.revolve(Vector(0, int_dia * 2,0), Vector(1,0,0), -90)
curva.Placement = FreeCAD.Placement(Vector(int_dia * 3, 0, 0), Rotation(0,0,0))

Part.show(curva, "curva_90")
luix-tubi.png
luix-tubi.png (25.25 KiB) Viewed 4050 times
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/
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

Re: libreria personale

Post by Luixx »

ok, ti ringrazio molto appena posso provo e poi ti faccio sapere.. scusa del ritardo .. ma visto che c'era il sole sono uscito di casa.
Domani ti faccio sapere . Grazie mille e buona serata.
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

Re: libreria personale

Post by Luixx »

ciao ho provato il tuo codice è funziona.. e ti ringrazio molto.. l'unico lo sto mettendo nella mia libreria ora vorrei fare il modo
che posso dare il diametro e lo spessore e la lunghezza.
ora non riesco ad capire perché solo questa classe frrecad mi dice che non e valida.
ti posto caso mai se voi mi scrivi in privato e poi ne parliamo.

Ecco il codice:

Code: Select all

import FreeCAD, FreeCADGui, Part
App = FreeCAD
Gui = FreeCADGui
from FreeCAD import Rotation, Vector
import Part


__name__ = "Tube"

class Tube
    def __init__(self, name):
        self.name = name
    def makeTube(self, int_dia, spess):
        cir_1 = Part.Circle(Vector(0,0,0), Vector(0,0,1), int_dia + spess)
        cir_2 = Part.Circle(Vector(0,0,0), Vector(0,0,1), int_dia)
        face1 = Part.Face(Part.Wire(cir_1.toShape()))
        face2 = Part.Face(Part.Wire(cir_2.toShape()))
        tube = face1.cut(face2).removeSplitter()
        Part.show(tube, self.name)
        dritto = tube.extrude(Vector(0,0,20))
        Part.show(dritto, self.name + "_diritto")

La mia seconda versione della libreria ho aggiunto che non vada più in root di freecad ma in una cartella semplice scelta dall'utente e caricata in questo modo:

Code: Select all

import sys
sys.path.append('D:\src\FreeCAD\Mod')
Io in d:\ e dentro in src ho i miei lavori e o altri software dove faccio e li metto tutti in d:\src\

tipo che ho una carella anche di inskcape , krita etc..

aspetto notizie.
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

Re: libreria personale

Post by Luixx »

ops mi sono scordato l'errore:

Code: Select all

  File "D:/src/FreeCAD/Macro/002.FCMacro", line 6, in <module>
    tubo1 = Tube("tubo")
<class 'TypeError'>: 'module' object is not callable
nella macro:

Code: Select all

import sys
sys.path.append('D:\src\FreeCAD\Mod')

from FreeCADZero import Box, BoolTool, Cylinder, Util, Tube

tubo1 = Tube("tubo")
tubo1.makeTube(5,20)
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

Re: libreria personale

Post by Luixx »

come non detto meglio in root che al meno registra le classi part::proprety etc.
User avatar
onekk
Veteran
Posts: 6202
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: libreria personale

Post by onekk »

Tutto dipende da come costrusci la classe.

Se la metti nella directory utente di FreeCAD sotto Mod, lui esegue in automatico alcune cose, carica ed esegue Init.py ed InitGui.py, che registrano la libreria sia nella parte della Gui sia come metodi pyhton.

Importandolo invece come "libreria esterna" alcune azioni non vengono eseguite.

Il tuo metodo funziona, però se esegui il codice nell'editor ripetutamente, riempi sys.path inutilmente, fai una cerifica dell'esistenza del path e se c'è evita di aggiungere, è meglio.

Non ho analizzato a fondo la questione, solo per generare uno pseudo workbench ho "grattato la superficie", in genere importo la classe e stop, ma non usa una "integrazione con FreeCAD" come nel tuo caso, preferisco creare gli oggetti finali e stop, la modifica tramite GUI non la considero nemmeno, faccio prima a cambiare i parametri e rilanciare la routine di creazione.

Lo so che apparentemente è come usare FreeCAD come OpenSCAD, ma non è proprio vero, ritengo che la modifica di un oggetto complesso, creato parametricamente tramite la GUI sia semplicemente una "perdita di tempo", ma le mie esigenze in genere sono la "creazione di cose" sia che sia la generazione di gcode sia di STL per la stampa 3D.

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/
Luixx
Posts: 213
Joined: Thu Jan 25, 2018 9:12 am

Re: libreria personale

Post by Luixx »

ok, grazie mille per la spiegazione.. allora farò come fai tu.. creazione oggetti finali e modifico tramite codice le misure etc..

ti ringrazio molto .. appena che finisci la tua guida me la stampo tutta. Per adesso ho letto qualcosina e visto i listati.

saluti e buona serata e settimana.
User avatar
onekk
Veteran
Posts: 6202
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: libreria personale

Post by onekk »

Io importo la libreria all'interno del "file di creazione oggetti", esplicitamente e facendo un controllo se il percorso non sia già in sys.path.

Però c'è un problema, se modifichi la libreria esterna e queste è multifile, alcune modifiche non sono "propagate" cioè può capitare che FreeCAD vad in crash con errori oscuri, nessuno ha saputo dirmi se esista un workaround.

Se la libreria è stabile, non hai problemi, nel senso che se non la modifichi tra un "lancio e l'altro" del programma che crea gli oggetti in genere non da problemi.

Fortunatamente quando lanci uno script la prima operazione che fa FreeCAD è quella di salvarlo sul disco per cui non perdi le modifiche fatte al programma nell'editor.

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