オブジェクトを複写する方法を教えて下さい。

Japanese forum
Post Reply
mrrclb48z
Posts: 54
Joined: Wed Feb 07, 2018 11:20 am

オブジェクトを複写する方法を教えて下さい。

Post by mrrclb48z »


Box,Box001と2個できるのに、
myTetrahedron_x0_0y0_0z0_0が2個できないのは、どうしてですか?
マクロを2度実行すると、期待通りに、myTetrahedron_x0_0y0_0z0_0001ができます。

myTetrahedron(P1x,P1y,P1z,P2x,P2y,P2z,P3x,P3y,P3z,P4x,P4y,P4z)
myTetrahedron(P1x+50.0,P1y,P1z,P2x+50.0,,P2y,P2z,P3x+50.0,,P3y,P3z,P4x+50.0,,P4y,P4z)
2個できませんでした。

Boxをコピー(複写)する方法を教えて下さい。
myTetrahedron_x0_0y0_0z0_0をコピー(複写)する方法を教えて下さい。
よろしくお願いします。

Code: Select all

 

import FreeCAD
import Part
import DraftTools
import Draft
import Mesh

def myTetrahedron(P1x,P1y,P1z,P2x,P2y,P2z,P3x,P3y,P3z,P4x,P4y,P4z):
    xDummy=0
    yDummy=0
    zDummy=0
    a =[[xDummy,yDummy,zDummy],  #dummy
        [P1x,P1y,P1z],
        [P2x,P2y,P2z],
        [P3x,P3y,P3z],
        [P4x,P4y,P4z]]
    m1 = Mesh.Mesh([a[1],a[2],a[3]])     
    m2 = Mesh.Mesh([a[1],a[2],a[4]])
    m3 = Mesh.Mesh([a[2],a[3],a[4]])
    m4 = Mesh.Mesh([a[3],a[1],a[4]])
    mesh=Mesh.Mesh()
    mesh.addMesh(m1)
    mesh.addMesh(m2)
    mesh.addMesh(m3)
    mesh.addMesh(m4)
    shape = Part.Shape()        
    shape.makeShapeFromMesh(mesh.Topology,0.05)
    solid = Part.makeSolid(shape).removeSplitter()
    myWedgei='myTetrahedron_'+'x' + str(P1x) + 'y' + str(P1y)+ 'z' + str(P1z)
    f = doc.addObject("Part::Feature",myWedgei)
    f.Shape = solid
    gui_doc.getObject('myTetrahedron_x0_0y0_0z5_0').ShapeColor = (1.00,1.00,0.50)
    target_object=doc.getObjectsByLabel("myTetrahedron_x0_0y0_0z5_0")[0]
    myVolume=target_object.Shape.Volume
    myTxt_XYZ(0,0,0,"{:.3f}".format(myVolume)+'cm3')

def myCube(mySize):
    doc.addObject("Part::Box","Box")
    doc.Box.Length=mySize
    doc.Box.Width=mySize
    doc.Box.Height=mySize
    doc.Box.Placement=App.Placement(App.Vector(0.00,0.00,0.00),App.Rotation(App.Vector(0.00,0.00,1.00),0.00))
    gui_doc.getObject('Box').Transparency = 100

def myTxt_XYZ(P5x,P5y,P5z,myWedgei):
    p5 = FreeCAD.Vector(P5x,P5y,P5z)
    myText = Draft.makeText(myWedgei,p5) 
    myText.Label = myWedgei
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.7 mm'

P1x,P1y,P1z= 0.0, 0.0, 0.0
P2x,P2y,P2z=10.0, 0.0, 0.0
P3x,P3y,P3z= 0.0,10.0, 0.0
P4x,P4y,P4z= 0.0, 0.0,10.0

doc = App.activeDocument()
gui_doc=Gui.activeDocument()
myTxt_XYZ(P1x,P1y,P1z,'x' + str(P1x) + 'y' + str(P1y)+ 'z' + str(P1z))
myCube(10.0)
myCube(10.0)
myTetrahedron(P1x,P1y,P1z,P2x,P2y,P2z,P3x,P3y,P3z,P4x,P4y,P4z)
myTetrahedron(P1x,P1y,P1z,P2x,P2y,P2z,P3x,P3y,P3z,P4x,P4y,P4z)

App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")

User avatar
h.tsubota
Posts: 81
Joined: Mon Mar 21, 2016 2:09 pm
Location: Osaka, Japan
Contact:

Re: オブジェクトを複写する方法を教えて下さい。

Post by h.tsubota »

OS、バージョン情報が記載されていないので合っているかわかりませんが、取り急ぎ Windows版 ver 0.19.2 で実行してみました。

- ①② について
マクロが途中でエラー終了しているので、それが原因ではないでしょうか。33行目でエラーになっています。
Pythonコンソールを表示した状態で実行するとエラーが赤字で表示されるので確認できます。

- ③ について
Pythonコンソールを表示した状態で操作を実行するとそれと対応するPythonコードがPythonコンソールに表示されるので、それを参考にするといいと思います。

Pythonコンソールはメニューの[表示]→[パネル]→[Pythonコンソール]で表示可能です。
Post Reply