| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | """Provides functions to create Layer objects.""" |
| | |
| | |
| | |
| |
|
| | |
| | |
| | import FreeCAD as App |
| | from draftobjects.layer import Layer, LayerContainer |
| | from draftutils import utils |
| | from draftutils.messages import _err |
| | from draftutils.translate import translate |
| |
|
| | if App.GuiUp: |
| | from draftviewproviders.view_layer import ViewProviderLayer, ViewProviderLayerContainer |
| |
|
| |
|
| | def get_layer_container(): |
| | """Return a group object to put layers in. |
| | |
| | Returns |
| | ------- |
| | App::DocumentObjectGroupPython |
| | The existing group object named `'LayerContainer'` |
| | of type `LayerContainer`. |
| | If it doesn't exist it will create it with this default Name. |
| | """ |
| | found, doc = utils.find_doc(App.activeDocument()) |
| | if not found: |
| | _err(translate("draft", "No active document. Aborting.")) |
| | return None |
| |
|
| | for obj in doc.Objects: |
| | if obj.Name == "LayerContainer": |
| | return obj |
| |
|
| | obj = doc.addObject("App::DocumentObjectGroupPython", "LayerContainer") |
| | obj.Label = translate("draft", "Layers") |
| |
|
| | LayerContainer(obj) |
| |
|
| | if App.GuiUp: |
| | ViewProviderLayerContainer(obj.ViewObject) |
| |
|
| | return obj |
| |
|
| |
|
| | def getLayerContainer(): |
| | """Get the Layer container. DEPRECATED. Use 'get_layer_container'.""" |
| | utils.use_instead("get_layer_container") |
| |
|
| | return get_layer_container() |
| |
|
| |
|
| | def make_layer( |
| | name=None, |
| | line_color=(0.0, 0.0, 0.0), |
| | shape_color=(0.8, 0.8, 0.8), |
| | line_width=2.0, |
| | draw_style="Solid", |
| | transparency=0, |
| | ): |
| | """Create a Layer object in the active document. |
| | |
| | If a layer container named `'LayerContainer'` does not exist, it is created. |
| | |
| | A layer controls the view properties of the objects inside the layer. |
| | All parameters except for `name` only apply if the graphical interface |
| | is up. |
| | |
| | All parameters that control view properties can be set to `None`. Their |
| | value, as set by the view provider (matching the current preferences), is |
| | then not changed. |
| | |
| | Parameters |
| | ---------- |
| | name: str or `None`, optional |
| | It defaults to `None`. |
| | It is used to set the layer's `Label`. If it is `None` the `Label` is |
| | set to `'Layer'` or to its translation in the current language. |
| | |
| | line_color: tuple or `None`, optional |
| | It defaults to `(0.0, 0.0, 0.0)`. |
| | If it is given, it should be a tuple of three floating point values |
| | from 0.0 to 1.0. |
| | |
| | shape_color: tuple or `None`, optional |
| | It defaults to `(0.8, 0.8, 0.8)`. |
| | If it is given, it should be a tuple of three floating point values |
| | from 0.0 to 1.0. |
| | |
| | line_width: float or `None`, optional |
| | It defaults to 2.0. |
| | It determines the width of the edges of the objects contained in the layer. |
| | |
| | draw_style: str or `None`, optional |
| | It defaults to `'Solid'`. |
| | It determines the style of the edges of the objects contained in the layer. |
| | If it is given, it should be 'Solid', 'Dashed', 'Dotted' or 'Dashdot'. |
| | |
| | transparency: int or `None`, optional |
| | It defaults to 0. |
| | It should be an integer from 0 to 100. |
| | |
| | Return |
| | ------ |
| | App::FeaturePython |
| | A scripted object of type `'Layer'`. |
| | This object does not have a `Shape` attribute. |
| | Modifying the view properties of this object will affect the objects |
| | inside of it. |
| | |
| | None |
| | If there is a problem it will return `None`. |
| | """ |
| | _name = "make_layer" |
| |
|
| | found, doc = utils.find_doc(App.activeDocument()) |
| | if not found: |
| | _err(translate("draft", "No active document. Aborting.")) |
| | return None |
| |
|
| | if name is not None: |
| | try: |
| | utils.type_check([(name, str)], name=_name) |
| | except TypeError: |
| | _err(translate("draft", "Wrong input: it must be a string.")) |
| | return None |
| | else: |
| | name = translate("draft", "Layer") |
| |
|
| | if line_color is not None: |
| | try: |
| | utils.type_check([(line_color, tuple)], name=_name) |
| | except TypeError: |
| | _err(translate("draft", "Wrong input: must be a tuple of three floats 0.0 to 1.0.")) |
| | return None |
| |
|
| | if not all(isinstance(color, (int, float)) for color in line_color): |
| | _err(translate("draft", "Wrong input: must be a tuple of three floats 0.0 to 1.0.")) |
| | return None |
| |
|
| | if shape_color is not None: |
| | try: |
| | utils.type_check([(shape_color, tuple)], name=_name) |
| | except TypeError: |
| | _err(translate("draft", "Wrong input: must be a tuple of three floats 0.0 to 1.0.")) |
| | return None |
| |
|
| | if not all(isinstance(color, (int, float)) for color in shape_color): |
| | _err(translate("draft", "Wrong input: must be a tuple of three floats 0.0 to 1.0.")) |
| | return None |
| |
|
| | if line_width is not None: |
| | try: |
| | utils.type_check([(line_width, (int, float))], name=_name) |
| | line_width = float(abs(line_width)) |
| | except TypeError: |
| | _err(translate("draft", "Wrong input: must be a number.")) |
| | return None |
| |
|
| | if draw_style is not None: |
| | try: |
| | utils.type_check([(draw_style, str)], name=_name) |
| | except TypeError: |
| | _err( |
| | translate( |
| | "draft", "Wrong input: must be 'Solid', 'Dashed', 'Dotted', or 'Dashdot'." |
| | ) |
| | ) |
| | return None |
| |
|
| | if draw_style not in ("Solid", "Dashed", "Dotted", "Dashdot"): |
| | _err( |
| | translate( |
| | "draft", "Wrong input: must be 'Solid', 'Dashed', 'Dotted', or 'Dashdot'." |
| | ) |
| | ) |
| | return None |
| |
|
| | if transparency is not None: |
| | try: |
| | utils.type_check([(transparency, (int, float))], name=_name) |
| | transparency = int(abs(transparency)) |
| | except TypeError: |
| | _err(translate("draft", "Wrong input: must be a number between 0 and 100.")) |
| | return None |
| |
|
| | obj = doc.addObject("App::FeaturePython", "Layer") |
| | Layer(obj) |
| |
|
| | obj.Label = name |
| |
|
| | if App.GuiUp: |
| | vobj = obj.ViewObject |
| | ViewProviderLayer(vobj) |
| | if line_color is not None: |
| | vobj.LineColor = line_color |
| | if shape_color is not None: |
| | vobj.ShapeColor = shape_color |
| | if line_width is not None: |
| | vobj.LineWidth = line_width |
| | if draw_style is not None: |
| | vobj.DrawStyle = draw_style |
| | if transparency is not None: |
| | vobj.Transparency = transparency |
| |
|
| | container = get_layer_container() |
| | container.addObject(obj) |
| |
|
| | return obj |
| |
|
| |
|
| | |
| |
|