Изменение масштабных коэффицентов перед экспортированием
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение масштабных коэффицентов перед экспортированием

Изменение масштабных коэффицентов перед экспортированием

Ответ
Поиск в этой теме
Непрочитано 11.10.2013, 19:33 #1
Изменение масштабных коэффицентов перед экспортированием
elnino
 
Регистрация: 08.02.2013
Сообщений: 41

Здравствуйте.
Нужна программа, которая делает следующее:
1. Находит все блоки (включая те, что находятся внутри других блоков) у которых масштабный коэффициент по одной из осей имеет значение"-1".
2. Разбивает эти блоки.
3. Создает из разбитых частей новые блоки с другими именами.
Возможно есть уже такая программа, кто нибудь знает?
А нужно это для следующего, когда из автокада импортируется step, то все блоки имеющие отрицательный масштабный коэффициент меняют его на положительный, таким образом на выходе получается ерунда.
Отрицательные масштабные коэффиценты получаются при использовании функции зеркало на блоках.
Заранее благодарю за ответы.

Последний раз редактировалось elnino, 14.10.2013 в 18:36.
Просмотров: 3413
 
Непрочитано 11.10.2013, 21:30
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от elnino Посмотреть сообщение
Здравствуйте.
Нужна программа, которая делает следующее:
Вы ошиблись разделом, Вам сюда: http://forum.dwg.ru/forumdisplay.php?f=33
Boxa вне форума  
 
Автор темы   Непрочитано 12.10.2013, 09:24
#3
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Я ищю любую похожую программу, помогающую решить эту проблему.
Проблема эта не нова, любой, кто делал экспорт step из автокада, должен был с ней сталкиваться, а значит нашлись и те, кто написал несколько строчек кода.
Вот выдержка из лога экспорта.
Цитата:
WARNING: The block reference includes scaling which is not allowed
in this STEP AP. The scaling will be lost in the translation.

Последний раз редактировалось elnino, 12.10.2013 в 11:44.
elnino вне форума  
 
Непрочитано 12.10.2013, 21:17
#4
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Цитата:
Сообщение от elnino Посмотреть сообщение
Отрицательные масштабные коэффиценты получаются при использовании функции зеркало на блоках
а вы используйте динамику в блоках, а конкретно - flip
__________________
Алексей
bargool вне форума  
 
Автор темы   Непрочитано 14.10.2013, 10:38
#5
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Как это поможет, блок то один, если я провожу какие то изменения в зеркальной копии, они происходят и в оригинале.
elnino вне форума  
 
Непрочитано 14.10.2013, 11:37
#6
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


elnino, это просто совет по-жизни
программа будет не на несколько строк кода (по-крайней мере, на C#), подобное мне никогда не требовалось, так что помочь могу только вот таким вот бесполезным советом
__________________
Алексей
bargool вне форума  
 
Непрочитано 14.10.2013, 16:15
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от elnino Посмотреть сообщение
Проблема эта не нова, любой, кто делал экспорт step из автокада, должен был с ней сталкиваться, а значит нашлись и те, кто написал несколько строчек кода.
Судя по всему у Вас есть хорошие шансы стать тем полезным человеком кто это наконец сделает...
То модераторам - давайте добавим раздел "ищу готовую программу"...
по сути вопроса - я пока весь одновременно и в делах и в не настроении их делать - будет вдохновенье - напишу если не забуду (ну или кто другой если раньше не "заскучает").
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 14.10.2013, 16:45
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Раздел - вряд ли. Есть раздел "Поиск исполнителей". Охота - создавайте тему "Ищу программу на халяву" в "Готовых программах", описывайте весь порядок общения в ней - закрепим.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.10.2013, 12:02
1 | #9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: сегодня с утра у нас солнечно...
Код:
[Выделить все]
 (vl-load-com)
(defun mirror-block-reference(obj)
  ((lambda (new-name)
     (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name (list obj new-name)))
         ((lambda (origin new-block)
            ((lambda (xyz)
               (vlax-for x new-block
                         (if (= (vla-get-objectname x) "AcDbBlockReference")
                             (apply 'vla-mirror3d (cons (mirror-block-reference x) xyz))
                             (apply 'vla-mirror3d (cons x xyz)))
                         (vla-delete x)))
             ((lambda (pt)
                (mapcar 'vlax-3d-point 
                        (list pt
                              (list (car pt) (1+ (cadr pt)) (caddr pt))
                              (list (car pt) (cadr pt) (1+ (caddr pt))))))
              (vlax-safearray->list (vlax-variant-value origin))))
            (vla-put-origin new-block origin))
          (vla-get-origin (vla-item (vla-get-blocks (vla-get-document obj)) (vla-get-name obj)))
          (progn (vla-converttostaticblock obj new-name)
                 (vla-item (vla-get-blocks (vla-get-document obj)) new-name))))
     (vla-put-xscalefactor obj (* -1.0 (vla-get-xscalefactor obj)))
     obj)
   ((lambda (name)
      (if (= (substr name 1 7) "mirror_")
          (substr name 8)
          (strcat "mirror_" (if (= (substr name 1 2) "*U")
                                (strcat ((lambda (ef-name)
                                           (if (= (substr ef-name 1 1) "*") "" ef-name))
                                         (vla-get-effectivename obj))
                                        (vlax-get-property (vlax-create-object "Scriptlet.TypeLib") 'Guid))
                                name))))
    (vla-get-name obj))))
(defun coll->list(obj / ret)
  (vlax-for x obj (setq ret (cons x ret)))
  (reverse ret))
(defun c:correct-mirror-blocks()
  ((lambda (doc frec)
     (vla-startundomark doc)
     (frec 0)
     (vla-endundomark doc))
   (vla-get-activedocument (vlax-get-acad-object))
   (lambda (x)
     ((lambda (lst) (if lst (progn (mapcar 'mirror-block-reference lst)
                                   (frec (+ x (length lst))))
                        (princ (strcat "\nОбработанно " (rtos x) " вхождений.")) ))
      (vl-remove-if-not '(lambda (x) (and (= (vla-get-objectname x) "AcDbBlockReference")
                                          (< (vla-get-xscalefactor x) 0)))
                        (apply 'append (mapcar 'coll->list (coll->list (vla-get-blocks doc))))))))
  (princ))
Запускать correct-mirror-blocks
Для интересующихся принцип: создает mirror_xxx блок с "вывернутым" содержимым (обратно отсекает mirror), дин. блоки с "потянутыми ручками", даже одинаковые, плодяться в новые определения в общем. могут прилично увеличить БД чертежа (если их отсекать в не уникальные - то 100% будут проблемы при копировании таких из рисунка в рисунок (да и после "пурги", при удаленных "оригиналах" результат немного не предсказуемый) - поэтому решил, что так хоть и объемней, но надежней).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 20.10.2013 в 11:11.
Дима_ вне форума  
 
Автор темы   Непрочитано 18.10.2013, 10:45
#10
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Большое спасибо за старания. Программа работает, но к сожалению этого не достаточно, блоки которые находятся внутри других блоков не обрабатываются.
elnino вне форума  
 
Непрочитано 18.10.2013, 10:47
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от elnino Посмотреть сообщение
блоки которые находятся внутри других блоков не обрабатываются.
пример выкладывайте - должны все обрабатываться
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 18.10.2013, 11:25
#12
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Вот
Вложения
Тип файла: dwg
DWG 2010
пример.dwg (80.9 Кб, 969 просмотров)
elnino вне форума  
 
Непрочитано 18.10.2013, 13:13
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


А ну точно, что в блоках "невыкрученных" вхождений могут быть "выкрученные" подблоки это я не учел (смотрел только те, что образовывавались в процессе работы программы) - исправил в #9 - теперь ищет пока не останеться ни одного "вывертыша" во всех блоках.
з.ы. Алгоритм мне конечно получившийся не очень нравится... получается я делаю итерацию по коллекции и в ней-же ее меняю (blocks>>vla-converttostaticblock) приходиться смотреть что в итоге получилось и по новой проверять... вот пример "косяка" что практически все vla функции не возращают новый объект - а только умеют изменить существующий (то есть как не крути - императивка)...
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 18.10.2013 в 13:36.
Дима_ вне форума  
 
Автор темы   Непрочитано 18.10.2013, 15:12
#14
elnino


 
Регистрация: 08.02.2013
Сообщений: 41


Попробовал на реальной модели, пишет ошибку
Цитата:
; ошибка: Ошибка Automation. Неверный ввод
Но при этом делает какие то преобразования, неправильные к сожалению.
Вот модель:
Вложения
Тип файла: dwg
DWG 2010
Модель1.dwg (1.43 Мб, 857 просмотров)

Последний раз редактировалось elnino, 19.10.2013 в 10:11.
elnino вне форума  
 
Непрочитано 20.10.2013, 11:12
1 | #15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: С тебя пузырь
обновил #9.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение масштабных коэффицентов перед экспортированием