def change_sheets_name(sheet_ids, template, new):
    """
    Change sheet number to replace by template

    :param sheet_ids:
    :param template:
    :param new:
    :return:
    """

    data = []
    for sheet_id in sheet_ids:
        sheet = doc.GetElement(sheet_id)
        sheet_number = sheet.SheetNumber

        if template in sheet_number:
            new_sheet_number = sheet.SheetNumber.replace(template, new)
            sheet.SheetNumber = new_sheet_number

            data.append('OK [#{} Sheet {}]'.format(sheet_id,
                                                   repr(new_sheet_number)))
            logger.debug('OK [#{} Sheet {}]'.format(sheet_id,
                                                    repr(new_sheet_number)))
        else:
            data.append('PASS [#{} Sheet {}]'.format(sheet_id,
                                                     repr(sheet_number)))
            logger.debug('PASS [#{} Sheet {}]'.format(sheet_id,
                                                      repr(sheet_number)))

    logger.info('{} Sheets was ReNumbered'.format(len(data)))
    return data
示例#2
0
def create_graphic(color_hex):
    color = hex_string_to_color(color_hex)
    graphic = DB.OverrideGraphicSettings()
    graphic.SetProjectionLineColor(color)

    logger.debug('Graphic was created')
    return graphic
示例#3
0
def main():
    logger.debug('Start')
    dwg_elems = get_dwgs()
    graphic = create_graphic(color_hex='##0080c0')
    for imp_dwg in dwg_elems:
        set_visible(imp_dwg, up=True)
        set_graphic(imp_dwg, graphic)
def get_mark_selected_or_none():
    if ui.Selection():
        element = ui.Selection()[0]
        start_number = int(element.parameters.builtins['DOOR_NUMBER'].value)

        logger.debug('Get start number [{}]'.format(start_number))
        return start_number
示例#5
0
def create_dim_for_column(column, view, k_offset=4, k_space=1, k_shift_space=0.8):
    try:
        grids = AxlesColumn(column).get_axles()

        dims = []
        for grid in grids[:1]:
            try:
                dim = create_dim_for_column_and_grid(column, grid, view, k_offset)
            except FacesNotOrto:
                logger.error('Problem with face for {} in {}-{} '.format(
                    grid.Name, grids[0].Name, grids[1].Name))
                continue

            dims.append(dim)

            # TODO add 1 segment
            if dim.Segments.Size == 2:
                text_position = Dim2TextPosition(dim, k_space, k_shift_space)
                text_position.update()
            else:
                logger.error('Dim for column at axles {}-{} have 1 segments for {}'.format(
                    grids[0].Name, grids[1].Name, grid.Name))

        logger.debug('#{} Column. Create {} dimension'.format(column.Id, len(dims)))
    except Exception:
        raise ScriptError('Can not create dim')

    return dims[0]
def add_number(element, adder_number):
    parameter = element.parameters.builtins['DOOR_NUMBER']

    new_number = int(parameter.value or 0) + adder_number
    parameter.value = new_number

    logger.debug('#{} element. Set number [{}]'.format(element.Id, new_number))
示例#7
0
def get_dwgs():
    selection_elems = ui.Selection()
    for elem in selection_elems:
        if type(elem.unwrap()) is DB.ImportInstance:
            logger.debug('Get selected dwg: {}'.format(
                elem.get_category().name))
            yield elem
 def PreprocessFailures(failures_accessor):
     failures = failures_accessor.GetFailureMessages()
     for fail in failures:
         if fail.GetFailureDefinitionId() == DB.BuiltInFailures.GeneralFailures.DuplicateValue:
             failures_accessor.DeleteWarning(fail)
             logger.debug('Suppress duplicate mark error')
     return DB.FailureProcessingResult.Continue
示例#9
0
    def get_perpendicular_faces_by_dir(self, direct):
        if self._is_parallel(direct, self.vertical):
            logger.debug('Get {} vertical faces for element as perpendicular'.format(len(self.horizontal_faces)))
            return self.vertical_faces

        elif self._is_parallel(direct, self.horizontal):
            logger.debug('Get {} horizontal faces for element as perpendicular'.format(len(self.vertical_faces)))
            return self.horizontal_faces
示例#10
0
def hex_string_to_color(hex_str):
    """Получения цвета из HEX"""
    hex_str = hex_str.lstrip('##')
    r, g, b = (int(hex_str[i:i + 2], 16) for i in (0, 2, 4))
    color = DB.Color(System.Byte(r), System.Byte(g), System.Byte(b))

    logger.debug('Color was created')
    return color
示例#11
0
def main():
    selection = ui.Selection()
    adder_number = get_adder_number_from_user(count=len(selection))

    for element in selection:
        add_number(element, adder_number)

    logger.debug('End Script')
示例#12
0
    def _get_one_face(faces):
        for face in faces:
            normal = face.FaceNormal
            if normal.X > 0 or normal.Y < 0:
                logger.debug('Face for outline was found')
                return face

        raise ScriptError('Face for outline not found')
示例#13
0
    def get_grids_by_multi(multi_grids):
        grids = []
        for grid_id in multi_grids.GetGridIds():
            grid = doc.GetElement(grid_id)
            grids.append(grid)

        logger.debug('Multi-grids was divided by {}'.format(len(grids)))
        return grids
示例#14
0
    def find_nearest_grid(self, multi_grids):
        grids = self.get_grids_by_multi(multi_grids)
        origin = self.column.Location.Point

        nearest_grid = self._find_nearest_grid(grids, origin)

        logger.debug('Nearest grid for {} was found'.format(multi_grids.Name))
        return nearest_grid
示例#15
0
def get_outer_diameter(element):
    if isinstance(element, DB.Plumbing.Pipe):
        return element.get_Parameter(
            DB.BuiltInParameter.RBS_PIPE_OUTER_DIAMETER).AsDouble()
    if isinstance(element, DB.FamilyInstance):
        for connector in element.MEPModel.ConnectorManager.Connectors:
            for sub_con in connector.AllRefs:
                logger.debug(sub_con.Owner)
                get_outer_diameter(sub_con.Owner)
示例#16
0
def get_adder_number_from_user(count):
    prompt = 'Выбрано [{}]. Введите число, которое нужно добавить к марке:'.format(count)
    user_number = ask_for_string(default='0', prompt=prompt, title='Add number to mark')
    if user_number is None:
        raise UserCancelOperation
    adder_number = int(user_number)

    logger.debug('Get adder number from user [{}]'.format(adder_number))
    return adder_number
示例#17
0
    def text_ratio(self):
        if self._text_ratio is None:
            scale = doc.ActiveView.Scale
            width = self._get_width_by_dim_type(self.dimension.DimensionType)

            self._text_ratio = SCALE_WIDTH_TEXT_1_1 * scale * width
            logger.debug('Get text ratio: ' + str(self._text_ratio))

        return self._text_ratio
示例#18
0
    def create_reference_arr_by_dir(self, direction):
        faces = self.get_parallel_faces_by_dir(direction)

        ref_arr = DB.ReferenceArray()
        for face in faces:
            ref_arr.Append(face.Reference)

        logger.debug('Create ReferenceArray for {} face'.format(ref_arr.Size))
        return ref_arr
示例#19
0
    def _get_elem_by_name_and_cat(name, category):
        collector = DB.FilteredElementCollector(doc)
        elems = collector.OfCategory(category).WhereElementIsNotElementType()
        for elem in elems:
            if elem.Name == name:
                logger.debug('Elements with name {} was found'.format(name))
                return elem

        raise ElemNotFound('Not found. Element with name "{}" and category "{}"'.format(name, category))
示例#20
0
    def _calc_shift(self, segment):
        width_dim = segment.Value
        space = (self.k_shift_space * self.text_ratio) / 304.8
        width_text = len(segment.ValueString) * self.text_ratio / 304.8

        shift = width_dim / 2 + space + width_text / 2

        logger.debug('Calc shift: {}'.format(shift))
        return shift
示例#21
0
def delete_pcp_file(folder, name):
    path = os.path.join(folder, name + '.pcp')

    if os.path.isfile(path):
        try:
            os.remove(path)
            logger.debug('Delete .pcp file by path <{}>'.format(path))
        except Exception:
            pass
示例#22
0
def get_file_name_for_config():
    if doc.IsWorkshared:
        path = DB.BasicFileInfo.Extract(doc.PathName).CentralPath
    else:
        path = doc.PathName

    file_name = os.path.split(path)[-1]

    logger.debug('Get file name: {}'.format(file_name))
    return file_name
示例#23
0
def get_dwg_option(option_name):
    if is_valid_export_option(option_name):
        dwg_option = DB.DWGExportOptions.GetPredefinedOptions(doc, option_name)
        dwg_option.FileVersion = DB.ACADVersion.R2013

        logger.debug('Option name is valid: "{}"'.format(option_name))
        return dwg_option

    raise ElemNotFound(
        'Setup name for export not found with name "{}"'.format(option_name))
示例#24
0
def make_valid_name(name):
    import string

    NON_VALID_CHARACTERS = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']

    valid_name = ''.join(ch if ch not in NON_VALID_CHARACTERS else ' '
                         for ch in name)

    logger.debug('Name {}. Make valid -> {}'.format(name, valid_name))
    return valid_name
示例#25
0
    def _get_solid(self):
        opt = self.create_option()
        geometry = self.column.get_Geometry(opt)

        for elem in geometry:
            if type(elem) is DB.Solid and elem.Volume:
                logger.debug('Get Solid')
                return elem

        raise ScriptError('Valid solid not found {}')
示例#26
0
    def get_parallel_faces_by_dir(self, direct):
        if self._is_parallel(direct, self.vertical):
            logger.debug('Get {} horizontal faces for element as parallel'.format(len(self.horizontal_faces)))
            return self.horizontal_faces

        elif self._is_parallel(direct, self.horizontal):
            logger.debug('Get {} vertical faces for element as parallel'.format(len(self.vertical_faces)))
            return self.vertical_faces

        raise FacesNotOrto('Direction not valid {}'.format(direct))
示例#27
0
    def get_axis_by_name(self, name):
        try:
            multi_grids = self._get_elem_by_name_and_cat(name, DB.BuiltInCategory.OST_GridChains)
            grid = self.find_nearest_grid(multi_grids)
            return grid

        except ElemNotFound:
            logger.debug('Multi-grids with name {} not found'.format(name))
            grid = self._get_elem_by_name_and_cat(name, DB.BuiltInCategory.OST_Grids)
            return grid
示例#28
0
def get_dwg_option_name(is_config=True):
    if is_config:
        name_option = get_name_option_from_config_or_none()
        if name_option and is_valid_export_option(name_option):
            return name_option

    name_option = get_option_name_from_user()
    set_option_to_config(name_option)

    logger.debug('DWG option: "{}"'.format(name_option))
    return name_option
示例#29
0
def get_option_name_from_user():
    setup_names = DB.BaseExportOptions.GetPredefinedSetupNames(doc)

    res = forms.SelectFromList.show(setup_names,
                                    title='Predefined setup Names for export',
                                    width=300,
                                    height=300,
                                    button_name='Select option for export')

    logger.debug('Get name from user "{}"'.format(res))
    return res
示例#30
0
    def _get_axis(self):
        axles_names = self._get_axles_name()
        axles = []
        for axis_name in axles_names:
            try:
                axis = self.get_axis_by_name(axis_name)
                logger.debug('Axis with name {} selected'.format(axis.Name))
                axles.append(axis)
            except ElemNotFound:
                logger.error('Can not found axles with name: "{}"'.format(axis_name))

        return axles