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

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

подскажите как программно начертить линии разных типов

Ответ
Поиск в этой теме
Непрочитано 24.06.2005, 14:11 #1
подскажите как программно начертить линии разных типов
Александер
 
Регистрация: 15.06.2005
Сообщений: 184

Вообщем такая проблема:

надо программно начертить сначала линию одного типа, а потом линию друго типа (тип линий тоже задается программно)

т.е. как можно программно менять тип линии?
Просмотров: 5113
 
Непрочитано 24.06.2005, 14:22
#2
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,261


Код:
[Выделить все]
...
(command 
    "-linetype" "_s" "Имя_типа_линии1" ""
    "_line" Точка1 Точка2 ""
    "-linetype" "_s" "Имя_типа_линии2" ""
    "_line" Точка3 Точка4 ""
...
)
...
Pilot вне форума  
 
Автор темы   Непрочитано 28.06.2005, 08:20
#3
Александер


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


Спасибо, теперь разобрался все работает. точно также можно и слои менять.
Александер вне форума  
 
Непрочитано 29.06.2005, 18:24
#4
Владимир В

машиностроение
 
Регистрация: 22.03.2005
Москва
Сообщений: 56


Насколько я понимаю, тип линии указывать можно только из тех, которые в данный момент подключены к документу?
А как загрузить новые типы? И на Дельфи ? :-)
Владимир В вне форума  
 
Непрочитано 30.06.2005, 07:17
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Вот как это делается в ruCAD
1. Основная функция загрузки типа линии
Код:
[Выделить все]
(defun ru-ltype-load (linetype)
  ;; Загрузка типа линии с загрузкой из ruCAD.LIN  или ACAD.LIN
  ;; возвращает имя типа линии или nil при неудаче
  ;|
  (ru-ltype-load "AXIS_RU")
 |;

  
  (defun _ltype-load (linetypename filename)
    (if (and
          (not (ru-ltype-exists linetypename))
          (vl-catch-all-error-p
            (vl-catch-all-apply
              'vla-load
              (list
                (ru-ltype-get-ltypes)
                linetypename
                filename
              ) ;_ end of list
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of vl-catch-all-error-p
        ) ;_ end of and
      nil
      t
    ) ;_ end of if
  ) ;_ end of defun
  (cond
    ((_ltype-load linetype (ru-file-acad "ruCAD.lin" t))
     linetype
    )
    ((_ltype-load linetype (findfile "acadiso.lin"))
     linetype
    )
    (t
     nil
    )
  ) ;_ end of cond
) ;_ end of defun
Вспомогательные:
Проверка существования определения типа линии

Код:
[Выделить все]
(defun ru-ltype-exists (ltype_name)
  ;;  (ru-ltype-exists "Забор_RU")  T
  ;;  (ru-ltype-exists "абор_RU")  nil

  (not
    (not
      (member
        (strcase ltype_name)
        (mapcar 'strcase (ru-ltype-list-ltypes))
      ) ;_ end of member
    ) ;_ end of not
  ) ;_ end of not
) ;_ end of defun
Установка текущим типа линии
Код:
[Выделить все]
(defun ru-ltype-set-current (Ltype)
  ;; установка типа линии с загрузкой из ruCAD.LIN  или ACAD.LIN
  ;; возвращает тип линии
  ;; При отсутствии вернет "CONTINUOUS"

  ;|
ВНИМАНИЕ!!! Для линий с текстами стиль ДОЛЖЕН быть определен до загрузки!!
(ru-ltype-set-current "НЕСУЩЕСТВУЮЩАЯ") > "CONTINUOUS"
(ru-ltype-set-current "SLOPE_5000_RU") > "SLOPE_5000_RU"
 |;
  (cond
    ((ru-ltype-load Ltype)
     (vlax-put-property
       (ru-obj-get-active-document)
       "ActiveLineType"
       (vla-item
         (ru-obj-doc-collection "Linetypes")
         ltype
       ) ;_ end of vla-item
     ) ;_ end of vlax-put-property
    )
    (t
     (princ
       (strcat "\nНевозможно установить тип линии "
               Ltype
               "!\nУстанавливаю СПЛОШНУЮ линию!"
       ) ;_ end of strcat
     ) ;_ end of ru-msg-alert
     (vlax-put-property
       (ru-obj-get-active-document)
       "ActiveLineType"
       (vla-item
         (ru-obj-doc-collection "Linetypes")
         "CONTINUOUS"
       ) ;_ end of vla-item
     ) ;_ end of vlax-put-property
    )
  ) ;_ end of cond
  (getvar "CELTYPE")
) ;_ end of defun
Здесь используются и другие вспомогательные функции, смысл которых понятен из названий. Полностью все в книге "САПР на базе AutoCAD - как это делается".

Но вообще-то во всех функциях создания объектов мы используем в качестве одного из аргументов имя типа линии или NIL, если рисовать текущим типом. Установка постоянным какого-то типа линии не есть хорошо, так как надо заботиться и о восстановлении прежнего типа после завершения рисования - таковы правила хорошего тона (нагадил - подотри).

А на Delphi надо использовать свойство "ActiveLineType" - так же, как и на LISP или VBA. Примеры для VBA в справке на все случаи.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > подскажите как программно начертить линии разных типов

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск