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
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
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
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))
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
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
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
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')
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')
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
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
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)
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
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
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
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))
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
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
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
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))
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
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 {}')
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))
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
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
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
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