:!: Срочно. Как различные UCSы в проекте привести в World?
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > :!: Срочно. Как различные UCSы в проекте привести в World?

:!: Срочно. Как различные UCSы в проекте привести в World?

Ответ
Поиск в этой теме
Непрочитано 07.02.2007, 08:46 #1
:!: Срочно. Как различные UCSы в проекте привести в World?
Gotch
 
Регистрация: 07.02.2007
Сообщений: 200

Получаем данные с полевых работ, загоняем в программку Credo MIX, обрабатываем. Выгоняем в DXF 3D. DXF дорабатываем в акаде.

Проблема в следующем. Существует огромная куча надписей и отметок. У большинства из них различно сориентированная UCS (в разных направлениях). Объясните, пожалуйста, доступным языком как их все привести к мировой системе?

В приложенном файле после реки пошел нормальный текст с мировой UCS, а до реки по неизвестным причинам текст с неизвестным UCS.
[ATTACH]1170827165.dwg[/ATTACH]
Просмотров: 4848
 
Непрочитано 07.02.2007, 09:05
#2
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


UCS в файле одна - мировая. UCS можно применить к видовому экрану, но никак не к отдельному объекту, вроде текста. Нужно менять угол проворота текста. Если к одному значению, то самый простой путь: Ctrl+A -> В панели Свойства выбрать в списке Текст -> Задать угол (здесь - в градусах/минутах/секундах)
P.S. А где там река-то?
den001 вне форума  
 
Непрочитано 07.02.2007, 09:24
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для den001.
Не глядя в файл, можно сказать, что UCS (ПСК) очень даже можно привести к объекту, для этого и опция специальная есть. А вот текст через "Свойства" можно повернуть только в "собственной" системе координат, а не в пространстве.
Profan вне форума  
 
Непрочитано 07.02.2007, 09:25
#4
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:tr (/ *kpblc-activedoc* selset _kpblc-ent-modify-autoregen)
;;;;|=============================================================================
;;;*** Компонент интегрированной системы CADWare
;;;*******************************************************************************
;;;*** Автор системы: Кулик Алексей aka kpblc
;;;*** www: www.my.opera.com\kpblc\
;;;*** При разработке системы были использованы материалы:
;;;*	ruCAD (www.kurganobl.ru)
;;;*	"САПР на базе AutoCAD - как это делается", авторы Зуев С.А., Полещук Н.Н.
;;;*		при участии Лоскутова П.В.
;;;*	конференций www.dwg.ru; www.autocad.ru; www.arcada.com.ua; 
;;;*		www.thswamp.com; www.cadtutor.net; www.forums.augi.com
;;;*** Автор выражает самую искреннюю благодарность всем, принимавшим участие в
;;;*** разработке системы.
;;;*******************************************************************************
;;;*** Разрешено использование компонента в любых целях при указании автора и при
;;;*** условии поставки этой части с исходными текстами
;;;*******************************************************************************
;;;
;;;*    Функция модификации указанного бита примитива
;;;*    Параметры вызова:
;;;*	entity	- примитив, полученный через (entsel), (entlast) etc
;;;*	bit	- dxf-код, значение которого надо установить
;;;*	value	- новое значение
;;;*	regen	- выполнять или нет регенерацию примитива сразу. t/ nil
;;;*    Примеры вызова:
;;;(_kpblc-ent-modify-autoregen (entlast) 8 "0" t)	; перенести последний примитив на слой 0
;;;(_kpblc-ent-modify-autoregen (entsel) 62 10 nil)	; установить выбранному примитиву цвет 10
;;;*    Возвращаемое значение:
;;;*	примитив с модифицированным dxf-списком. Примитив перерисовывается в
;;;* зависимости от значения ключа ext_regen
;;;=============================================================================|;
  (defun _kpblc-ent-modify-autoregen (ent        bit        value
                                      ext_regen  /          ent_list
                                      old_dxf    new_dxf    layer_dxf70
                                      )
    (setq ent ent)
    (if (not
          (and
            (or
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
              ) ;_ end of or 
            (= bit 100)
            ) ;_ end of and 
          ) ;_ end of not 
      (progn
        (setq ent_list (entget ent)
              new_dxf  (cons bit
                             (if (and (= bit 62) (= (type value) 'str))
                               (if (= (strcase value) "BYLAYER")
                                 256
                                 0
                                 ) ;_ end of if 
                               value
                               ) ;_ end of if 
                             ) ;_ end of cons 
              ) ;_ end of setq 
        (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
          (progn
            (entmod (if old_dxf
                      (subst new_dxf old_dxf ent_list)
                      (append ent_list (list new_dxf))
                      ) ;_ end of if 
                    ) ;_ end of entmod
            (if ent_regen
              (entupd ent)
              (redraw ent)
              ) ;_ end of if
            ) ;_ end of progn 
          ) ;_ end of if 
        ) ;_ end of progn 
      ) ;_ end of if 
    ent
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (setq selset (ssget (list '(0 . "TEXT")
                                '(-4 . "<NOT")
                                (cons 210 '(0. 0. 1.))
                                '(-4 . "NOT>")
                                ) ;_ end of list
                          ) ;_ end of ssget
            ) ;_ end of setq
    (progn
      (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
        (vl-catch-all-apply
          '(lambda ()
             (_kpblc-ent-modify-autoregen
               ent
               10
               (trans (cdr (assoc 10 (entget ent))) ent 0)
               t
               ) ;_ end of _kpblc-ent-modify-autoregen
             (if (or (cdr (assoc 72 (entget ent)))
                     (cdr (assoc 73 (entget ent)))
                     (/= 0 (cdr (assoc 72 (entget ent))))
                     (/= 0 (cdr (assoc 73 (entget ent))))
                     ) ;_ end of or
               (_kpblc-ent-modify-autoregen
                 ent
                 11
                 (trans (cdr (assoc 11 (entget ent))) ent 0)
                 t
                 ) ;_ end of _kpblc-ent-modify-autoregen
               ) ;_ end of if
             (_kpblc-ent-modify-autoregen ent 210 '(0. 0. 1.) t)
             ) ;_ end of lambda
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 09:32
#5
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Profan
У текстового объекта нет свойства UCS (ПСК). Есть только угол поворота, угол наклона и т.п.
Я прошелся по предложенному самим собой пути - все работает.
den001 вне форума  
 
Непрочитано 07.02.2007, 09:36
#6
Кулик Алексей aka kpblc
Moderator

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


У текста (точно так же как и у lwpolyline, к примеру) есть ОБЪЕКТНАЯ система координат. Вот она-то в некоторых объектах файла и отличается от мировой.
P.S. для VBA-представления это свойство Normal объекта. Проверь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 09:40
#7
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


А вот взгляд с точки зрения юзера:
текст пишется в текущей системе координат, которая может отличаться от мировой поворотом не только вокруг оси Z, но и вокруг осей X и Y со всеми вытекающими последствиями. В Вашем предложении можно вращать текст только вокруг оси Z
Хмурый вне форума  
 
Автор темы   Непрочитано 07.02.2007, 09:43
#8
Gotch


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


а можно по русски насчет той лисповской комманды
для чего как и почему??

Ден ты не прав
посмотри свойства разных текстов
и посмотри их UCS
тогда увидешь разницу
Gotch вне форума  
 
Непрочитано 07.02.2007, 09:50
#9
Кулик Алексей aka kpblc
Moderator

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


http://www.autocad.ru/cgi-bin/f1/boa...part_faq=23#44
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2007, 09:56
#10
Gotch


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


Кулик Алексей aka kpblc ОГРОМНОЕ спасибо за помощь!!!
лисповский файл помог!
Ещё раз СПАСИБО!!!!!!
Gotch вне форума  
 
Непрочитано 07.02.2007, 10:00
#11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Хмурый
А вот взгляд с точки зрения юзера:
текст пишется в текущей системе координат, которая может отличаться от мировой поворотом не только вокруг оси Z, но и вокруг осей X и Y со всеми вытекающими последствиями. В Вашем предложении можно вращать текст только вокруг оси Z
Ну можно еще и угол поворота отслеживать, но вроде бы и так работает
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 10:07
#12
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Sorry!
Мое сообщение за №7 адресовано den001
Хмурый вне форума  
 
Автор темы   Непрочитано 07.02.2007, 10:16
#13
Gotch


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


Всё замечательно, только после обработки предложенным лисповским файлом, немного меняется толщина обработанного текста - т.е. он становится как бы "жирным", хотя свойства становятся такими же как и у нормального (необработанного) текста Как это можно исправить?
И ещё вопросик. Этот лиспик работает ТОЛЬКО с текстом или с полилиниями тоже?
Gotch вне форума  
 
Непрочитано 07.02.2007, 10:18
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


И я уточню для den001.
У текста нет, конечно, свойства UCS (а про это никто и не говорит), зато у команды "_UCS" есть опция "_OBject" ("ОБъект").
Profan вне форума  
 
Непрочитано 07.02.2007, 10:23
#15
Кулик Алексей aka kpblc
Moderator

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


> Gotch : Только с текстом. Увеличения толщины на представленном файле я не заметил, если честно. Приложи скриншоты "кривых" объектов, если не трудно. Возможно, просто требуется регенерация чертежа?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2007, 10:25
#16
Gotch


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


Всем спасибо! особенно Кулику Алексею
Разобрался! Надо ещё подредактироватать Position Z скинуть на 0,00
Gotch вне форума  
 
Непрочитано 07.02.2007, 10:29
#17
Кулик Алексей aka kpblc
Moderator

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


Чтоб не мучиться и не выставлять все Z в 0, спробуй:
Код:
[Выделить все]
(defun c:tr (/ *kpblc-activedoc* selset _kpblc-ent-modify-autoregen tmp)
;;;;|=============================================================================
;;;*** Компонент интегрированной системы CADWare
;;;*******************************************************************************
;;;*** Автор системы: Кулик Алексей aka kpblc
;;;*** www: www.my.opera.com\kpblc\
;;;*** При разработке системы были использованы материалы:
;;;*   ruCAD (www.kurganobl.ru)
;;;*   "САПР на базе AutoCAD - как это делается", авторы Зуев С.А., Полещук Н.Н.
;;;*      при участии Лоскутова П.В.
;;;*   конференций www.dwg.ru; www.autocad.ru; www.arcada.com.ua;
;;;*      www.thswamp.com; www.cadtutor.net; www.forums.augi.com
;;;*** Автор выражает самую искреннюю благодарность всем, принимавшим участие в
;;;*** разработке системы.
;;;*******************************************************************************
;;;*** Разрешено использование компонента в любых целях при указании автора и при
;;;*** условии поставки этой части с исходными текстами
;;;*******************************************************************************
;;;
;;;*    Функция модификации указанного бита примитива
;;;*    Параметры вызова:
;;;*   entity   - примитив, полученный через (entsel), (entlast) etc
;;;*   bit   - dxf-код, значение которого надо установить
;;;*   value   - новое значение
;;;*   regen   - выполнять или нет регенерацию примитива сразу. t/ nil
;;;*    Примеры вызова:
;;;(_kpblc-ent-modify-autoregen (entlast) 8 "0" t)   ; перенести последний примитив на слой 0
;;;(_kpblc-ent-modify-autoregen (entsel) 62 10 nil)   ; установить выбранному примитиву цвет 10
;;;*    Возвращаемое значение:
;;;*   примитив с модифицированным dxf-списком. Примитив перерисовывается в
;;;* зависимости от значения ключа ext_regen
;;;=============================================================================|;
  (defun _kpblc-ent-modify-autoregen (ent        bit        value
                                      ext_regen  /          ent_list
                                      old_dxf    new_dxf    layer_dxf70
                                      )
    (setq ent ent)
    (if (not
          (and
            (or
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
              ) ;_ end of or
            (= bit 100)
            ) ;_ end of and
          ) ;_ end of not
      (progn
        (setq ent_list (entget ent)
              new_dxf  (cons bit
                             (if (and (= bit 62) (= (type value) 'str))
                               (if (= (strcase value) "BYLAYER")
                                 256
                                 0
                                 ) ;_ end of if
                               value
                               ) ;_ end of if
                             ) ;_ end of cons
              ) ;_ end of setq
        (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
          (progn
            (entmod (if old_dxf
                      (subst new_dxf old_dxf ent_list)
                      (append ent_list (list new_dxf))
                      ) ;_ end of if
                    ) ;_ end of entmod
            (if ent_regen
              (entupd ent)
              (redraw ent)
              ) ;_ end of if
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of progn
      ) ;_ end of if
    ent
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (setq selset (ssget (list '(0 . "TEXT")
                                '(-4 . "<NOT")
                                (cons 210 '(0. 0. 1.))
                                '(-4 . "NOT>")
                                ) ;_ end of list
                          ) ;_ end of ssget
            ) ;_ end of setq
    (progn
      (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
        (vl-catch-all-apply
          '(lambda ()
             (_kpblc-ent-modify-autoregen
               ent
               10
               (list (car (setq tmp (trans (cdr (assoc 10 (entget ent))) ent 0)))
                     (cadr tmp)
                     0.
                     ) ;_ end of list
               t
               ) ;_ end of _kpblc-ent-modify-autoregen
             (if (or (cdr (assoc 72 (entget ent)))
                     (cdr (assoc 73 (entget ent)))
                     (/= 0 (cdr (assoc 72 (entget ent))))
                     (/= 0 (cdr (assoc 73 (entget ent))))
                     ) ;_ end of or
               (_kpblc-ent-modify-autoregen
                 ent
                 11
                 (list
                   (car (setq tmp (trans (cdr (assoc 11 (entget ent))) ent 0)))
                   (cadr tmp)
                   0.
                   ) ;_ end of list
                 t
                 ) ;_ end of _kpblc-ent-modify-autoregen
               ) ;_ end of if
             (_kpblc-ent-modify-autoregen ent 210 '(0. 0. 1.) t)
             ) ;_ end of lambda
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun
Этот код не тестировал вообще, так что если что не так - сообщи
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 11:13
#18
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Ладно, черти, убедили! Был неправ, извиняюсь.
den001 вне форума  
 
Непрочитано 07.02.2007, 12:05
#19
Zouss


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


вот и всплывает старый спор
210 dxf группа задает направление вектора выдавливания и использовать ее как "индикатор" системы координат объекта несколько опрометчиво
если для размеров этот номер проходит (их нельзя выдавить) то текст в данном случае получается выдавленным наискось и при взгляде сверху на этот текст он действительно кажется полужирным, так как вектор выдавливания не совпадает с нормальным направлением выдавливания

как то не очень внятно написал да? в общем раньше, когда были только shx шрифты таким хитрым образом можно было изготовить bold в тексте чертежа
Zouss вне форума  
 
Автор темы   Непрочитано 07.02.2007, 12:32
#20
Gotch


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


Кулик Алексей aka kpblc - спасибо большое!!!!!
очень сильно выручил!!!!!!
спасибо!!!!!
если нужна будет в чем помощь и что в моих силах тем помогу!!!!!
спасибо!!!!!!!!!!
Gotch вне форума  
 
Непрочитано 07.02.2007, 12:40
#21
Кулик Алексей aka kpblc
Moderator

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


> Zouss: А что ж тогда еще использовать как индикатор OCS? Свойство Normal после перевода в лисп-вид все одно принимает значения 210-й группы.
> Gotch: Рад что помогло
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 12:45
#22
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Zouss
Что касаемо bold'a, то сейчас можно просто вес линии к shx-шрифту применить
den001 вне форума  
 
Непрочитано 07.02.2007, 14:18
#23
Zouss


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


в общем всем огромная уважуха - подкинули идею на мысль по поводу этих самых OCS счас сижу думаю её - интересное что будет отпишусь
Zouss вне форума  
 
Непрочитано 07.02.2007, 18:43
#24
Perezz!!

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 3,587


Цитата:
Сообщение от Gotch
Кулик Алексей aka kpblc - спасибо большое!!!!!
очень сильно выручил!!!!!!
спасибо!!!!!
если нужна будет в чем помощь и что в моих силах тем помогу!!!!!
спасибо!!!!!!!!!!
Лучше деньгами отблагодарили бы! :P
Perezz!! вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > :!: Срочно. Как различные UCSы в проекте привести в World?