Kirjoittaja Aihe: [ ratkaistu ] freecad, makrojen sijoittamien itse valittuun hakemistoon?  (Luettu 3422 kertaa)

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
 Sattuisikohan kukaan tietämään, miten saisi kätevästi freecadin python-makrot itse luomaansa hakemistoon.

Tai voisiko freecadia käyttää Ubuntun vakio-pythonin kautta.

Käytössä on Ubuntu 14.04 perusversio, ja voi olla, että uuden 16.04 version mukana tulee myös  uudemopi freecad, jossa asia on ratkaistu.

Tämä ei ehkä ole ihan oikea paikka freecad-kysymyksille, mutta tuli nyt vähän kokeiltua freecadia verkossa olevien ohjeiden avulla, ja joskus voisi opetella lisääkin, jos näistä perusasioista vain selviää  :)

« Viimeksi muokattu: 26.07.16 - klo:10.36 kirjoittanut teele »

mrl586

  • Käyttäjä
  • Viestejä: 4638
    • Profiili
Vs: freecad, makrojen sijoittamien itse valittuun hakemistoon?
« Vastaus #1 : 24.07.16 - klo:22.26 »
symlinkkaus?

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
Vs: freecad, makrojen sijoittamien itse valittuun hakemistoon?
« Vastaus #2 : 24.07.16 - klo:22.46 »

eli miten se menisi, linkkausjuttuja ja .so -tiedostajoa en ole koskaan oikein ymmärtänyt

Käyttääköhän freecad jotain sisäisä pythonia. Huomasin, että se ei hyväksy käskyä

print 'ååååååååååååååå'

vaan valittaa koodauksesta. Pääte-pythoni tulostaa tekstin mukisematta.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: freecad, makrojen sijoittamien itse valittuun hakemistoon?
« Vastaus #3 : 24.07.16 - klo:23.39 »
Käyttääköhän freecad jotain sisäisä pythonia. Huomasin, että se ei hyväksy käskyä

print 'ååååååååååååååå'

vaan valittaa koodauksesta. Pääte-pythoni tulostaa tekstin mukisematta.

Periaatteessa Python 2 vaatii enkoodauksen määrittelyn lähdekoodin alussa tähän tapaan:

Koodia: [Valitse]
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
print u'ååååååååååååååå'

Freecadin pitäisi kuitenkin hoitaa tuo käyttäjän puolesta. Vika on ehkä jo korjattu versiossa 0.15. Siinä lienee paljon korjauksia muihinkin ongelmiin. Suosittelisin kokeilemaan sitä freecad-stable-PPA:sta:

http://ubuntuhandbook.org/index.php/2015/04/install-freecad-0-15-in-ubuntu-1404/

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
Vs: freecad, makrojen sijoittamien itse valittuun hakemistoon?
« Vastaus #4 : 26.07.16 - klo:10.33 »
Löysin alla olevan python-tiedoston netistä. Sen voi ajaa pääte-pythonissa kieliopintarkistusta varten, ja fc-pythonissa se piirtää myös kuvan.

Niksi näyttää olevan execfile -komento, jonka avulla tiedosto voidaan hakea mistä tahansa hakemistosta, kunhan vain polku on oikein.

Koodia: [Valitse]
# freecad_script_template.py
# a simple script example to use FreeCAD as module or with the FreeCAD GUI
# created by charlyoleg on 2013/05/02
# license: CC BY SA 3.0
### esimerkiksi:  execfile("/home/juha/kokeilukansio/freecad_script_template.py")
### freecadin pythonissa tekee jopa kuvan, muuten tekee stl-tiedoston
### ubuntu 14.04 vakio-freecad:ssa pohjoimaiset kirjaimet ei toimi :(


FREECADPATH='/usr/lib/freecad/lib' # adapt this path to your system

import sys
# choose your favorite test to check if you are running with FreeCAD GUI or traditional Python
freecad_gui = True
#if not(FREECADPATH in sys.path): # test based on PYTHONPATH
if not("FreeCAD" in dir()):       # test based on loaded module
  freecad_gui = False
print("dbg102: freecad_gui:", freecad_gui)

if not(freecad_gui):
  print("dbg101: add FREECADPATH to sys.path")
  sys.path.append(FREECADPATH)
  import FreeCAD

print("FreeCAD.Version:", FreeCAD.Version())
#FreeCAD.Console.PrintMessage("Hello from PrintMessage!\n") # avoid using this method because it is not printed in the FreeCAD GUI

import Part
from FreeCAD import Base

print("dbg111: start building the 3D part")

P1 = Base.Vector(0,0,0)
D1 = Base.Vector(0,0,1)
#myshape = Part.makeBox(2,3,2,P1)
mycyl1 = Part.makeCylinder(2,1,P1)
mycyl2 = Part.makeCylinder(1,4,P1)
myshape = mycyl1.fuse(mycyl2)


# view and export your 3D part
output_stl_file="test_template.stl"
Part.show(myshape) # works only with FreeCAD GUI, ignore otherwise
myshape.exportStl(output_stl_file)
print("output stl file: %s"%(output_stl_file))

print("dbg999: end of script")


Kiitos myös fc-päivittämistä koskevasta neuvosta. Päivittäminen saattaakin olla luulemaani helpompaa  :)


MUOK.

Tässä on vielä toinen execfile-kokeilu netistä, ja kuvakin on aika hieno

Koodia: [Valitse]
import Part, FreeCAD, math
from FreeCAD import Base
 
##     esimerkiksi:
##     execfile("/home/juha/kokeilukansio/bottle.py")
###   b = makeBottle(50.0, 70.0, 30.0)
###   Part.show(b)
#####       http://www.freecadweb.org/wiki/index.php?title=Topological_data_scripting#Make_a_prism


   
def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):
   aPnt1=Base.Vector(-myWidth/2.,0,0)
   aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
   aPnt3=Base.Vector(0,-myThickness/2.,0)
   aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
   aPnt5=Base.Vector(myWidth/2.,0,0)
       
   aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
   aSegment1=Part.Line(aPnt1,aPnt2)
   aSegment2=Part.Line(aPnt4,aPnt5)
   aEdge1=aSegment1.toShape()
   aEdge2=aArcOfCircle.toShape()
   aEdge3=aSegment2.toShape()
   aWire=Part.Wire([aEdge1,aEdge2,aEdge3])
       
   aTrsf=Base.Matrix()
   aTrsf.rotateZ(math.pi) # rotate around the z-axis
       
   aMirroredWire=aWire.transformGeometry(aTrsf)
   myWireProfile=Part.Wire([aWire,aMirroredWire])
   myFaceProfile=Part.Face(myWireProfile)
   aPrismVec=Base.Vector(0,0,myHeight)
   myBody=myFaceProfile.extrude(aPrismVec)
   myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)
   neckLocation=Base.Vector(0,0,myHeight)
   neckNormal=Base.Vector(0,0,1)
   myNeckRadius = myThickness / 4.
   myNeckHeight = myHeight / 10
   myNeck = Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)
   myBody = myBody.fuse(myNeck)
       
   faceToRemove = 0
   zMax = -1.0
       
   for xp in myBody.Faces:
       try:
           surf = xp.Surface
           if type(surf) == Part.Plane:
               z = surf.Position.z
               if z > zMax:
                   zMax = z
                   faceToRemove = xp
       except:
           continue
       
   myBody = myBody.makeThickness([faceToRemove],-myThickness/50 , 1.e-3)
       
   return myBody


« Viimeksi muokattu: 28.07.16 - klo:22.20 kirjoittanut teele »