FreeCAD рдПрдХ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдереНрд░реА-рдбрд╛рдпрдореЗрдВрд╢рдирд▓ рдПрдбрд┐рдЯрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рддреАрди-рдЖрдпрд╛рдореА рдореЙрдбрд▓ рдФрд░ рдЙрдирдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
FreeCAD рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 0.12 рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк 0.13 рдмреАрдЯрд╛ рдХреЛ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
FreeCAD рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ "рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ" (рдкреАрдбреАрдПрдл рдкреНрд░рд╛рд░реВрдк рдореЗрдВ) рднреА рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
FreeCAD рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХрд╛рдлреА рднрд░рдкреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдо рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдЙрддрдирд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░
FreeCAD рдлреЛрд░рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдбреНрд░рд╛рдЗрдВрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, FreeCAD рдореЗрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдФрд░ рдЫреЛрдЯреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдЬрдЧрд░ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдВрд╕реЛрд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реИ: рдЗрд╕рдХрд╛ рдХреЛрдИ рдЗрддрд┐рд╣рд╛рд╕ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдорд▓реНрдЯреАрд╡реЛрд▓реНрдпреВрдо рдлреНрд░реАрдХрд╛рдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдВред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдБ рдХрд┐ FreeCAD рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ, FreeCAD рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде ~ / .FreeCAD / Mod / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рд╕реНрдерд┐рдд рд▓рд┐рдкрд┐рдпреЛрдВ, рд╡рд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
FreeCAD рдореЗрдВ рд▓рд┐рдкрд┐рдпрд╛рдВ рджреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрддреА рд╣реИрдВ: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдЬрдЧрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд╕рд╛рде рд╣реА рд╕рд╛рде GUI рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреАред рдЖрдк рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ рдЖрдкрдиреЗ рд╕реНрд░реЛрдд рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдлреНрд░реАрдХрд╛рдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╣рдо рдПрдХ "рдкрд╣рд┐рдпрд╛" рдЦреАрдВрдЪрддреЗ рд╣реИрдВ
рдЖрдЗрдП XY рд╕рдорддрд▓ рдореЗрдВ рдПрдХ рд╕реНрдХреЗрдЪ рдмрдирд╛рдПрдВ, рдЙрд╕ рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдкрд╣рд┐рдпреЗ рдХреЗ "рдЖрдзреЗ" рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдЦреАрдВрдЪреЗрдВрдЧреЗред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ, "рдЖрдВрдЦ рд╕реЗ" рд╣рдо рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рд░реВрдкреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ ("рдкрдЯреНрдЯрд┐рдХрд╛" рдЙрдкрдХрд░рдг) рдореЗрдВ рдЪрд╛рдорд░ рдХреЛ рдХрд╛рдЯреЗрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд▓рдВрдЧрд░ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЗрдВрдЧреЗред рд╣рдо рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЯрд╛рдИ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдФрд░ рдкрдЯреНрдЯрд┐рдХрд╛ рдХреЗ рд░реЗрдбреА рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдлрд┐рд░ рд╣рдо рд╕реНрдХреЗрдЪ рдХрд╛ рд╕рдВрдкрд╛рджрди рдкреВрд░рд╛ рдХрд░ рд▓реЗрдВрдЧреЗ, рдЗрд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ (рдмрд╛рдИрдВ рдУрд░) рдЪреБрдиреЗрдВ рдФрд░ "рд░реЛрдЯреЗрдЯ рдЪрдпрдирд┐рдд рд╕реНрдХреЗрдЪ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╣рд┐рдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

рдЕрдм "рдбрд┐рд╕реНрдХ" рдореЗрдВ рдПрдХ рдкрд╛рдпрджрд╛рди рдмрдирд╛рдПрдБред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, XZ рд╡рд┐рдорд╛рди рдореЗрдВ рдПрдХ рдФрд░ рд╕реНрдХреЗрдЪ рдмрдирд╛рдПрдВред рдЗрд╕рдореЗрдВ, рд╣рдо рд╕реЗрдЧрдореЗрдВрдЯ рдФрд░ рдЖрд░реНрдХ рд╕реЗ рдХрдЯ рдЖрдЙрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдХреЗрдВрджреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЫреЗрдж рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордорд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдЕрджреГрд╢реНрдп рд░реЗрдЦрд╛рдУрдВ рдкрд░ рдЭрдкрдЯреЗрдВрдЧреЗред

рд╣рдорд╛рд░реА рд╕реНрдХреЗрдЪ 100 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдЦреАрдВрдЪреЛ (рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд┐рдпрд╛ рдХреЛ рдкрд╛рд░ рдХрд░реЗ) рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ (рдкреНрд▓реЗрд╕реЗрдореЗрдВрдЯ.рдкреЛрдЬрд┐рд╢рди) рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде 50 рдЗрдХрд╛рдЗрдпрд╛рдБ:

рдЕрдм рд╣рдореЗрдВ "рд╕рд░реНрдХрд▓" рдореЗрдВ рдХрдЯрдЖрдЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдЖрдХреГрддрд┐ рдХреЛ "рдЧреБрдгрд╛" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред "рдкреНрд░рдЬрдирди" рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ NCopy.py:
import FreeCAD, FreeCADGui, Part from FreeCAD import Base def CopyObj(obj): name = obj.Name shape = obj.Shape newshape = shape.copy() newobject = FreeCAD.ActiveDocument.addObject("Part::Feature",name) newobject.Shape = newshape return newobject def copyCirc(C=Base.Vector(0,0,0), A=Base.Vector(0,0,1), Ang=90, N=4, rot=True, moveOriToGrp=False): Ang %= 360 if (N > 360/Ang or N == 0): N = int(360/Ang) sel = FreeCADGui.Selection.getSelection() if (not sel): FreeCAD.Console.PrintError("Error: you should select some objects") return None doc = FreeCAD.activeDocument() grp = doc.addObject("App::DocumentObjectGroup", "CircularCopy") for Obj in sel: A0 = Ang for i in range (1, N): newobject = CopyObj(Obj) S = newobject.Shape S.rotate(C, A, A0) if (not rot): S.rotate(S.Placement.Base, A, -A0) grp.addObject(newobject) A0 += Ang if (moveOriToGrp): grp.addObject(Obj) return grp
рдЗрд╕реЗ ~ / .FreeCAD / Mod / рдХреЗ рдХреБрдЫ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
CopyObj рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдорд╛рди рд╣реИ (рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛): рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмрд╕ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред
CopyCirc рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЫрд╣ рддрд░реНрдХ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЙрди рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рд╣реИрдВред рдЙрд╕рдХреЗ рддрд░реНрдХ рд╣реИрдВ:
- рд╕реА - рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдХрд╛ рд╕рдордиреНрд╡рдп рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реЛрддреА рд╣реИ;
- рд╕рд░реНрдХрд▓ рдХреЗ рд╡рд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ;
- рдЖрдВрдЧ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдХреЛрдг рд╣реИ;
- рдПрди - рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (0 - рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдкрд░рд┐рдзрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ);
- рд╕рдбрд╝рд╛рдВрдз - рдХреНрдпрд╛ рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЧрд▓рдд рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣рд╛рдЗрдлрд╝рдиреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдзрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд░реЛрдЯреЗрд╢рди рдирд╣реАрдВ;
- MoveOriToGrp - рдореВрд▓ рдХреЛ рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдореВрд╣ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рд╣рдореЗрдВ рд╕рд░реНрдХрд▓ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдо рдЙрдиреНрд╣реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рддрдХ рдХреА рджреВрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБ [s] рдЪрдпрди рд╕реЗ рд▓реА рдЧрдИ рд╣реИред рдпрджрд┐ рдХреБрдЫ рднреА рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмрд╕ рддреНрд░реБрдЯрд┐ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ "CircularCopy" рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрдпрди рд╕реЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ (рдПрди -1) рдмрд╛рд░ рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рдЖрдЗрдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ: рдЬрд┐рд╕ рд╕рд░реНрдХрд▓ рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ "рдЧреБрдгрд╛" (0,1,0) рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд╣рдо рдХреЙрдкрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ 30 рдбрд┐рдЧреНрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рдХреЛрдг рдмрдирд╛рдПрдВрдЧреЗ, рдХреЗрдВрджреНрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (рдореВрд▓ рдкрд░) рд╕реНрдерд┐рдд рд╣реИ, рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдЬреНрдЮрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
import NCopy NCopy.copyCirc(A=App.Vector(0,1,0), N=0, Ang=30, moveOriToGrp=True)
рд╣рдо рдкреНрд░рдХрдЯ рд╣реБрдП рд╕рдореВрд╣ "рд╕рд░реНрдХреБрд▓рд░рдХреЙрдкреА" рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдпреВрдирд┐рдпрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ, "рдлреНрдпреВрдЬрди" рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ "рд╡реНрд╣реАрд▓" ("рд░реЗрд╡реЛрд▓реНрдпреВрд╢рди") рдФрд░ рдЗрд╕ рдпреВрдирд┐рдпрди рдХреЛ Ctrl рдХреБрдВрдЬреА рджрдмрд╛рдХрд░ рдЪреБрдиреЗрдВ, рдФрд░ рдСрдкрд░реЗрд╢рди "рдЪреМрд░рд╛рд╣реЗ" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдЯрдЖрдЙрдЯ рд╣рдорд╛рд░реЗ "рд╡реНрд╣реАрд▓" рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:

рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреАрдбреАрдПрдлрд╝ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП "рдкрд╣рд┐рдпрд╛" рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдЕрдиреЗрдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣
рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рд╡рд╕реНрддреБ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ (рдПрдорд╡реА рд╢рд┐рдлреНрдЯ рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдХреБрд▓реНрд╣рд╛рдбрд╝реА рд░реЛрдЯреЗрд╢рди рдЕрдХреНрд╖ рд╣реИ, рд░реЛрдЯ рд░реЛрдЯреЗрд╢рди рдХреЛрдг рд╣реИ):
def CopyObjAt(obj, mv=Base.Vector(0,0,0), axe=Base.Vector(0,0,0), rot=0): obj = CopyObj(obj) obj.Placement = FreeCAD.Placement(mv, axe, rot) return obj
рд╡реЗрдХреНрдЯрд░ V рдкрд░ N рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:
def copyVec(N=2, V=Base.Vector(0,0,1), moveOriToGrp=False): sel = FreeCADGui.Selection.getSelection() if sel: doc = FreeCAD.activeDocument() grp = doc.addObject("App::DocumentObjectGroup", "VectorCopy") for Obj in sel: R0 = V for i in range (1, N): newobject = CopyObj(Obj) newobject.Shape.translate(R0) grp.addObject(newobject) R0 += V if (moveOriToGrp): grp.addObject(Obj) else: FreeCAD.Console.PrintError("Error: you should select some objects") return grp
рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдПрди рдмрд╛рд░ рдХреЙрдкреА рдХрд░реЗрдВ - рдмреА-рд╕реНрдкрд▓рд╛рдЗрди:
def copyByTrajectory(N=4): sel = FreeCADGui.Selection.getSelection() def prErr(): FreeCAD.Console.PrintError("Error: you should select a traectory and one object\n") if (not sel): prErr(); return None L = len(sel) if(L != 2): prErr(); return None if(N < 2): FreeCAD.Console.PrintError("Error: N shold be more than 1\n"); return None Traj = sel[0].Shape
рдПрдХ рдЕрд╕рд░ рдбреНрд░рд╛
рдЕрдм, "рдкрд╣рд┐рдпрд╛" рдХреЗ рд╕рдорд╛рди, рд╣рдо рдПрдХ рдкрд┐рдВрдЬрд░реЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрд╕рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦреЛрд▓ рдЦреАрдВрдЪреЗрдВред рдлрд┐рд░, "рдЖрдВрдЦ рд╕реЗ" рд╣рдо рдкрд╣рд▓реЗ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛рдУрдВ рдХреЗ рдЖрдХреГрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрдирдХреЗ рдмреАрдЪ рд╣рдо рдПрдХ рд╡реГрддреНрдд рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рддреБрд░рдВрдд рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдкрдиреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреЗ рд╣реИрдВ: рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐, рд╡рд░реНрдЧреЛрдВ рдХреА рдКрд░реНрдзреНрд╡рд╛рдзрд░рддрд╛ рдФрд░ рдХреНрд╖реИрддрд┐рдЬрддрд╛, рд╕рдорд╛рди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдорд╛рдирддрд╛, рдЧреЛрд▓реЗ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдЯрд░рди рдХреЗ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдкреНрд░рддрд┐рдмрдВрдз рдФрд░ рдЧреЗрдВрдж рдХреА рд╕рддрд╣, рд╣рдо рдХреБрдЫ рдЖрдпрд╛рдореЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреЗрдЪ рдорд┐рд▓рддреЗ рд╣реИрдВ:

рд╣рдо рд╕реНрдХреЗрдЪ рд╕рдВрдкрд╛рджрди рдореЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреЗрдЪ рд░реЛрдЯреЗрд╢рди рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдРрд╕реА рдЕрдЪреНрдЫреА рдЪреАрдЬ рдорд┐рд▓рддреА рд╣реИ:

рдЕрдм рд╣рдореЗрдВ рдЧреЗрдВрджреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдПрдХ рдЧреЛрд▓реЗ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ" рдЖрдЗрдХрди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд╣реА рдХрд░реЗрдВ: рд╣рдо рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ 15 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░ рджреЗрдВрдЧреЗ, рдФрд░ рд╕реНрдерд┐рддрд┐ (рдкреНрд▓реЗрд╕рдореЗрдВрдЯ.рдкреЛрдЬрд┐рд╢рди) рдореЗрдВ рд╣рдо рдПрдХреНрд╕ рдХреЛ 58 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЧреЗрдВрджреЛрдВ рдХреЛ "рдЧреБрдгрд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдЧреЗрдВрдж рдХреЗ рдХреЛрдгреАрдп рд╡реНрдпрд╛рд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реНрдХреЗрдЪ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ (рдЕрдм рдпрд╣ "рдХреНрд░рд╛рдВрддрд┐" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ)ред рддрд╛рдХрд┐ рд╢реЗрд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗ, рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рд╕реНрдкреЗрд╕рдмрд╛рд░ рдХреЛ рджрдмрд╛рдПрдВ - рдпрд╣ рдЕрджреГрд╢реНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдореВрд▓ рд╕реЗ рд╣рдорд╛рд░реА рдЧреЗрдВрдж рддрдХ рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдмрдирд╛рдПрдВред рд╣рдо рдкреНрд░рддрд┐рдмрдВрдз рдмрдирд╛рддреЗ рд╣реИрдВ: рд╣рдо рдХрдбрд╝рд╛рдИ рд╕реЗ рдЦрдВрдб рдХреЗ рдПрдХ рдЫреЛрд░ рдХреЛ рдореВрд▓ рдореЗрдВ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ, рдФрд░ рдЧреЗрдВрдж рдХреЗ рджреВрд╕рд░реЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЛрдиреЗ рдкрд░ рд╕реАрдорд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, FreeCAD рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреА рдХрд╕рдо рдЦрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ)ред рддреЛ, рдпрд╣ рдХреЛрдг 14.9882 рдбрд┐рдЧреНрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓ - 15 рдбрд┐рдЧреНрд░реАред рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рджреЗрдВ рддрд╛рдХрд┐ рдлреНрд░реАрдХрд╛рдб рд╢рдкрде рдЧреНрд░рд╣рдг рди рдХрд░реЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ
рд╣рдорд╛рд░реЗ рдореЗрдврд╝реЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдПред рдЧреЗрдВрдж рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╣рд░ 30 рдбрд┐рдЧреНрд░реА рдореЗрдВ рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рдЗрд╕рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред рдПрдХ рдЕрд╕реНрдерд╛рдпреА рджреНрд╡рд╛рд░рд╛, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд╕рдорд╛рди рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
import NCopy NCopy.copyCirc(A=App.Vector(0,1,0), N=0, Ang=30, moveOriToGrp=True)
рдЕрдм рд╣рдорд╛рд░реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд░рдВрдЧ рджреЗрдВред рдЧреЗрдВрджреЛрдВ рдХреЛ рд░рдВрдЧрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдорд┐рд▓рд╛рдПрдВред "рд╕реМрдВрджрд░реНрдп" рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ "рд╕рдкрд╛рдЯ рд░реЗрдЦрд╛рдУрдВ" рд╕реЗ "рдЫрд╛рдпрд╛рдВрдХрд┐рдд" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╢реИрд▓реА рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдЧреЗрдВрджреЛрдВ рдХрд╛ рд░рдВрдЧ "рд╕реЛрдирд╛" (255, 214, 0) рдерд╛, рдФрд░ рдЦреЛрд▓ рдХрд╛ рд░рдВрдЧ "рдЪрд╛рдВрджреА" (192, 192, 192) рдерд╛ред рдЖрдк GUI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдВрдЧ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ (рдХреЗрд╡рд▓ RGB рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ "рдЕрд╕рд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
FreeCADGui.getDocument("bearing").getObject("Fusion").ShapeColor = (1.00,0.84,0.00) FreeCADGui.getDocument("bearing").getObject("Revolution").ShapeColor = (0.75,0.75,0.75)
рдЙрд╕реА рддрд░рд╣, рдЖрдк рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
FreeCADGui.getDocument("bearing").getObject("Revolution").DisplayMode = "Shaded" FreeCADGui.getDocument("bearing").getObject("Fusion").DisplayMode = "Shaded"

рдФрд░ рдЖрдк рдПрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрд╕рд╡реАрдЬреА рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрдЯрдХрдерд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛, рдлреНрд░реАрдХрд╛рдб рдХрдВрд╕реЛрд▓ рд╕реЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЗрди рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ (рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓) рдХреЛ ~ / .FreeCAD / Mod / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдЗрд╕рдХреЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, GUI ("рдмрдЯрди", "рдореЗрдиреВ", рдЖрджрд┐) рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдЗрдирд┐рд╢рд┐рдЯрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ InitGui.py рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рдпрд╣ FreeCAD рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓реЗрдЧреАред
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдиреНрдпреВрдирддрдо рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class MyWorkbench ( Workbench ): import Icon = () MenuText = " " ToolTip = " " def Initialize(self):
"рдЖрдЗрдЯрдо рдХреА рд╕реВрдЪреА" рд╕реВрдЪреА рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдЯреВрд▓рдХрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдоред рддрджрдиреБрд╕рд╛рд░, рдЗрди рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХрдорд╛рдВрдб рдпрд╛ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЬрдм рдЯрд╛рд╕реНрдХрдмрд╛рд░ рдпрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдПрдХ рдердВрдмрдиреЗрд▓ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдиреНрдпреВрдирддрдо рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class OneAction: def Activated(self):
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ FreeCAD рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд▓рд╛рдЗрди "рдЖрдЗрдЯрдо рдХрд╛ рдирд╛рдо" рд╣рдорд╛рд░реЗ OneAction рд╡рд░реНрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ (рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЗрд╕ рдЯреВрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рд╢реБрд░реБрдЖрддреА рд╡рд░реНрдЧ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗ)ред
рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдиреНрдпреВрдирддрдо рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class MyObject: def __init__(self, obj, ): ''' Add new properties to partfeature ''' obj.addProperty(" "," ","","").= obj.Proxy = self obj.Shape = -(obj.ViewObject) def onChanged(self, obj, prop): , prop, obj - -(obj.ViewObject) def execute(self, obj): , "" -(obj.ViewObject)
рдкреНрд░рджрд╛рддрд╛ рд╡рд░реНрдЧ рд╕рдВрд╕рд╛рдзрди (рдЪрд┐рд╣реНрди, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдЬреАрдпреВрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг FreeCAD рд╕рдВрд╕рд╛рдзрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдХрдорд╛рдВрдб рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдорджрдж рд╕реЗ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд▓реЗрдВрд╕ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдПрдХ рджрд┐рди рдЦреЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЙрдбрд╝рдирд╛ рд╣реИред" рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
import Lens a=[[8,6,1,6,3], [10,-15,2.5,8,5], [-16,10,0.5,6,7], [-8,-6,0.5,4,3], [3,3,0.2,2,1], [0,0,0.1,1,0.1], [0,3,.3,1]] Lens.makeLensBench(a) b=[[-10,8,0.1,6], [8,16,0.5,6], [16,-9,1,6]] Lens.makeLensBench(b,App.Vector(0,10,0))
рдЖрдкрдХреЛ рдпрд╣ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореЙрдбрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ
рдпрд╣рд╛рдВ рдЬрд╛рдиреЗ рдФрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдпреВрдкреАрдбреА:
рдпрд╣рд╛рдВ рдПрдХ рдлреНрд░реАрдХреЗрдб (рдХреНрд░рд╛рдпреЛрд╕реНрдЯреЗрдЯ) рдореЗрдВ рдХрд┐рдП рдЧрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ ред