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

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

План кабельных сетей - алгоритм автоматизации построения и программирование?

Ответ
Поиск в этой теме
Непрочитано 20.09.2010, 11:59 4 |
План кабельных сетей - алгоритм автоматизации построения и программирование?
Frigate
 
КИП, АСУ ТП, слаботочка
 
Москва-Тюмень
Регистрация: 02.09.2010
Сообщений: 422

Добрый день, коллеги!


Программу ADV_Toolkit ver 1.1 вы можете скачать внизу этого сообщения.

Ниже я оставлю свой первоначальный первый пост. Даже самому интересно, как я вначале рассуждал, как шел к созданию уже вполне взрослой программы.

ПЕРВОНАЧАЛЬНЫЙ МОЙ ПОСТ===============================
Занимаюсь КИП и решил постепенно автоматизировать рутинные процессы проектирования.
Нужно: автоматизировать некоторые моменты создания плана кабельных сетей.
Дано: план эстакад, который берем у электриков. Таким образом, графическое представление плана трасс есть. На плане есть много позиций (блок-боксы, здания, площадки технологические), от которых кидаем кабель. ТО, что внутри площадок и блок-боксов нас пока не интересует - это делаем отдельными комплектами, попозиционно.
Итак, к примеру, от позиции 1 надо проложить 5 кабелей с маркировкой С1-1-1...С1-1-5 по уже имеющимся эстакадам (линиям).

Конкретика - что нужно получить в результате: щелкнуть в плане кабельных сетей на любой точке на линии, обозначающей трассы, и получить список (list) кабелей, проходящих через данную точку (табличку с номерами кабелей смогу и сам нарисовать, надеюсь :-) ). Для проверки нужна возможность включить отображение трассировки любого из кабелей, которые будут использоваться в проекте.

Отсюда и сам вопрос - как это можно реализовать? При помощи чего? Ну а потом уже буду пытаться это сделать, надеясь на вашу помощь.


Была сначала такая идея:
по имеющемуся плану кабельных сетей мышкой прощелкать все узлы (повороты, начало и конец) трассы, например, от позиции 1 до позиции 15 (в позиции 15 будет операторная, где стоят шкафы АСУ). Автокад должен запомнить трассу (напр., по указанным узловым точкам построить полилинию и ассоциировать ее с определенным номером кабеля (напр., С1-1-1), т.е она должна будет обозначать трассировку кабеля на плане.
Сначала хотел создать блок, напр. cable-trace с атрибутом - номером кабеля. В этот блок программно включить полилинию, обозначающую трассу. Но потом уже дошло :-) что полилиния, обозначающая трассировку кабеля С1-1-1 включится во все вхождения блока, а это уже мягко говоря не то ))). Вот и сижу пока в тупике, пытаюсь придумать другие варианты.

Буду рад идеям знающих

Сразу хочу сказать, что в "САПРе на базе Автокад" этого не нашел, хотя может плохо искал...

КОНЕЦ ПЕРВОНАЧАЛЬНОГО ПОСТА=========================================

ОБНОВЛЕНИЯ:

===============================
Выкладываю релиз 1.05 ADV_CAD

Версия 1.05. Изменения:

1) При импорте БД в схему внешних выводить инфу о недостающих кабелях один раз списком/ (было – предупредительным сообщение АВТОКАДа).
2) Поменял методику расчета длины трассы при создании и редактировании добавил более понятные комментарии при трансляции баз данных и установки длин.
3) Добавил более понятные комментарии при трансляции баз данных и установке длин кабелей (вывод имен файлов, с которых была произведена трансляция, вывод имен всех файлов, с которых транслирована информация о кабелях.
4) Сделал по кнопке проверку транслированной информации – доступна из любого чертежа, не только из плана трасс.

ДОПОЛНЕНИЕ:

- исправил неверную работу программы "Редактирование трассы кабеля": при входе в программу, но досрочном выходе из нее(по указанию <Выход из программы>), изменений в базу не вносилось (так и должно быть), но сама трасса удалялась из базы данных!

необходимо заменить в скачанном архиве файл
adv-programme-cable-routings-edit-one.fas
на новый, который находится в архиве
adv-programme-cable-routings-edit-one.rar

Релиз 1.10

Все практически сделано с нуля. Так что нет особого смысла описывать изменения.
Теперь в папке с программой ЕСТЬ HELP.
Просто скопируйте к себе на комп и распакуйте архив в корневой каталог диска C:.
В HELP есть описание дальнейшей установки, которое сводится (в самом простом варианте) к загрузка fas-модуля, выполняющего настройку AutoCADа.


ADV_Toolkit ver. 1.1

Изменений много.
Основное:
- автоматическая трассировка кабеля по указанным начальной и конечной точке. Более подробно - читайте в Хелпфайле в папке ADV_CAD_HELP (эту папку еще не переименовал, оказывается ). Важно: если у вас поменялась хоть как-нибудь трасса, то для корректной автотрассировки нужно нажать кнопку "Подготовить к трассировке" в диалоговом окне создания кабелей.
- создание кабелей при помощи диалогового окна. В будущем все программы будут переведены в режим диалога. Это преследовало целью уход от указания блоков кабеля на чертеже, а выбор из списка. ТОже немного подробнее читайте в хелпе.
- немного переделал блоки, теперь длина в блок кабеля вставляется сразу с суффиксом - ВНИМАНИЕ!!!
- на подкачке стоят программы из форума - перенумерация по renum, записная книжка - по NBOOK и NBOOK1 - вызов через комстроку.
- начал работу с БД изделий, пока сделал парочку кранов-вентилей (закладные конструкции) для КИПиА - по крайней мере там. где я работал, мы часто сами учитывали закладные, иногда - технологи.

Главное - хочется, чтобы вы потестили автотрассировку. Я ее гонял во всех режимах - было все ок. Но мало ли... Ну и сам диалог создания кабелей с кучей функций, сохранением настроек диалога на время сеанса - тоже стоило непало усилий.

В общем, жду конструктивной критики и пожеланий по тем моментам, что дополнил в программе

Дополнение - подредактировал программку создания трассы по аналогу. Скачайте лисп-файл и замените им такой же в папке с прогой. Теперь работает как надо! :-)

Дополнение от 21.04.2012:
добавил программку для массовой печати чертежей. Я о ней уже писал в теме, но сейчас выкладываю новую версию, где можно выбрать и самому указать стиль печати - монохром или акад (т.е. цветной) или свой стиль. Справка - в файле readme.txt

ПРограммка - в папке PRINT FORMATS, внутри папки ADV_Toolkit. Но - может работать без проги (сделана независимой).

Дополнение от 16.05.2013:

Прога печати (в архиве PRINT FORMTS_dyn.rar) теперь с динблоком моей новой рамки (саму рамку можно подгонять как вам угодно, лишь только оставьте имя блока и атрибут FORMAT, по которому прога определяет нужный формат листа печатающего устройства.

Вложения
Тип файла: rar ADV_Toolkit_ver.1.1.rar (2.39 Мб, 2585 просмотров)
Тип файла: lsp adv-programme-cable-routings-create-by-analogue.lsp (6.3 Кб, 1571 просмотров)
Тип файла: rar PRINT FORMATS.rar (6.1 Кб, 1157 просмотров)
Тип файла: rar PRINT FORMATS_dyn.rar (41.0 Кб, 816 просмотров)


Последний раз редактировалось Frigate, 16.05.2013 в 01:36.
Просмотров: 287926
 
Автор темы   Непрочитано 24.09.2010, 11:19
#41
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


А кто что может сказать по поводу использования словарей чертежа? Там хранить данные вроде бы удобно. Хотя словари я еще никак не изучал.
МОжете рассказать или дать ссылку, что такое словари и есть ли к ним доступ через стандартный интерфейс Автокада (меню там может какой особенное)?

Supermax

идея иметь полилинию как отображение кабеля, и присвоить ей данные о кабеле - это здорово! Я ее обязательно буду воплощать в жизнь, но только не на плане трасс. Кабель - это не трубы. Мне не нужно пару сотен слоев, в которых будут изображены кабели. А по другому нельзя будет при необходимости увидеть трассу именно одного конкретного кабеля. Мое решение подходит целиком моим требованиям - все трассы хранятся где-либо (внешний файл, блок или может даже в словаре чертежа) в виде списков точек. При желании всегда можно увидеть любую трассу любого кабеля - она нарисуется по сохраненным данным. Это, как мне кажется, вполне легко и очевидно - но именно для такого плана трасс, какой есть у меня - см. внимательнее первый пост, я там описал что именно представляет мой план изначально - это чертеж с нанесенными на него линиями, обозначающими расположение кабельных эстакад на площадке, от объекта к объекту. И опять-таки по поводу автоматической трассировки - очень редко когда случается, что есть 2 возможный варианта, как провести кабель отобъекта А к объекту Б. Чаще всего это лишь 1 вариант (идет еще и от нормативки электриков - нельзя строить параллельные эстакады!).
Пока утрясаю программы и функции, делаю хотя бы минимальную проверку ввода. Думаю, потом выложу все сюда, как результат наших дискуссий. Хотя все функции - это либо измененные под мои нужды либо вообще неизмененные коды, взятые с этого форума. Моя работа - это лишь написание главных управляющих функций каждой программы и сортировка прикладных функций по библиотекам. К моему сожалению, пока не могу найти бумажного варианта книги "САПР на базе Автокад", а скачанный электронный вариант как-будто специально (даже уверен, что именно специально :-) ) не содержит очень многих важнейших страниц


Насколько я разобрался, списки с номером кабеля и набор точек трассы - это ассоциативный список, очень удобная вещица для дальнейшего использования и обработки, а также для сортировки.

А пока для начала сделал несколько кнопочек для редактирования текста (и МТекста) по одному щелчку на нем, а также для массового редактирования.

Ну, и в благодарность помогающим мне, решил вставлять такой код в программки :-)

Код:
[Выделить все]
(defun test ()
(PRINC "\n===============================================================
\n  *****Программа разработана 25.09.2010 xxx *****
\n   Выражаю свою благодарность за помощь и исходные коды 
\nучастникам форума DWG.RU и авторам настольной книги по AutoCAD
\n   *****САПР на базе AutoCAD - как это делается*****\n\n===============================================================\n")
(PRINC)
) ;_ end of defun

Последний раз редактировалось Frigate, 28.09.2010 в 13:18.
Frigate вне форума  
 
Автор темы   Непрочитано 29.09.2010, 11:44
#42
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


В общем, на данном этапе переделал под себя и оттестировал код для рисования всего и вся при помощи легковесной линии :-)

Естественно, что в основе своей этот код - честно сподсмотренныйй в различных листингах на форуме и сайте ru_CAD.
Но пока не протестировал полностью и не понял все строчки кода, не вводил эту функцию в состав своих программ.

Вот она, прошу строго не судить :-)

Код:
[Выделить все]
;|Функция: adv-draw-pline-add
Что делает:
преобразует список точек pt_lst ((0 0) (0 100) (100 100) (100 0))
в тип Variant (array of doubles) - с массивом координат:
(0 0 100 0 100 100 0 100). И по ним рисует полилинию. 
Вызов:
(adv-draw-pline-add pt_lst is_closed width color layer)
Аргументы:
is_closed - замкнутость (1-замкнута, 0-нет)
width - ширина плинии (выбираем из ряда значений веса линии)
color - цвет
layer - слой (должен уже существовать на чертеже!)
Возвращает: 
<VLA-OBJECT IAcadLWPolyline xxx> - указатель объекта полилинии.
Пример:
(adv-draw-pline-add pt_lst 0 0 0 0)
|;
(defun adv-draw-pline-add (pt_lst is_closed width color layer / safe_array_pnt_lst var_pnt_lst pline_obj)
(foreach x pt_lst
(setq safe_array_pnt_lst(append x safe_array_pnt_lst))
)
(reverse safe_array_pnt_lst)
;альтернативный вариант создания массива координат (и без реверса!): (setq safe_array_pnt_lst 'append pt_lst))
(setq var_pnt_lst 
   (vlax-make-variant 
      (vlax-safearray-fill 
         (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length safe_array_pnt_lst))))
      safe_array_pnt_lst)
   )
) 
(setq pline_obj
   (vla-addLightweightpolyline 
      (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
   var_pnt_lst)
)
(vla-put-closed pline_obj is_closed)
(vla-put-lineweight pline_obj 
   (cond 
    ((= width 0) acLnWtByLwDefault)
    ((= width 25) width)
    ((= width 40) width)
    ((= width 60) width)
    ((= width 80) width)
    ((= width 100) width)
    (T (PRINC "\nНеверно указана толщина. Будет нарисовано \"по умолчанию\".\n") acLnWtByLwDefault)
   )
)
(vla-put-color pline_obj color)
(PRINC color)
(if (= color 0)
   (vla-put-color pline_obj acByLayer)
   (vla-put-color pline_obj color)
)
(vla-put-layer pline_obj layer)
pline_obj
)
,

Пока всю отработанную уже и протестированную библиотеку храню в .doc файле, вполне удобно организованном при помощи оглавления.

Вот такое пока содержание:

Цитата:
СТРУКТУРА БИБЛИОТЕКИ 2
БИБЛИОТЕКА КОДОВ 3
БИБЛИОТЕКА ФУНКЦИЙ 4
CONVERTDATATYPE (ИЗМЕНЕНИЕ ТИПА ДАННЫХ У ПЕРЕМЕННЫХ) 5
adv-convertdatatype-3D_point-to-2D_variant 5
SELECT (ВЫБОР) 6
adv-select-entsel 6
adv-select-entsel-by-type 6
DELETE (УДАЛЕНИЕ) 8
adv-delete-selset 8
BLOCKS (БЛОКИ) 9
adv-blocks-is-entity-block-with-attr 9
adv-blocks-is-entity-block-with-attr-effname 9
adv-blocks-put-attrib-value-to-block-entity 10
adv-blocks-get-attrib-value-from-block-entity 10
adv-blocks-select-block-with-attr 11
adv-blocks-select-block-with-attr-effname 12
GEOMETRY (ГЕОМЕТРИЯ) 13
adv-geom-convert-3D-point-to-2D-list 13
adv-geom-get-scale-dwg 13
DRAW (РИСОВАНИЕ) 14
adv-draw-pline-add 14
БИБЛИОТЕКА ПРОГРАММ 16
Я бы с удовольствием использовал программку для работы с библиотекой функций из ru_CAD, но не знаю где ее можно купить или скачать. Может подскажите, уважаемые гуру?

И у меня вопрос есть. Если можно, посоветуйте, как сделать:

надо вставлятьТЕКСТ или МТЕКСТ в рамку размером 5 на 10 мм. Чтобы, если не быдет влезать в рамку, коэф-т сжатия текста уменьшился. Как это реализовать?

Последний раз редактировалось Frigate, 29.09.2010 в 12:33.
Frigate вне форума  
 
Непрочитано 29.09.2010, 12:53
#43
Кулик Алексей aka kpblc
Moderator

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


Во-первых, я бы все же задумался о применении http://autolisp.ru/2009/10/21/lisp-overloading/
Во-вторых, http://dwg.ru/search.php?zone=1&mod=2&sName=ruCAD&type= никуда не делся.
В-третьих, вот мой вариант создания lwpolyline:
Код:
[Выделить все]
(defun _kpblc-ent-create-lwpline (lst point-list / res point_list)
                                 ;|
*    Функция добавления полилинии в указанное пространство.
*    Параметры вызова:
*	lst	- список точечных пар вида:
*		'(("where" . <Куда добавлять>)	; в какой блок / пространство
*				добавлять полилинию (vla-указатель). nil -> активное пространство
*		("closed" . t / nil)		; замкнутая полилиния. nil -> нет
*		("lineweight" . aclnwt025)		; вес полилинии. nil -> aclnwt000
*		("ltype" . "Continuous")	; тип линии. nil -> Continuous (только английский, нижний регистр)
*		("ltypefile" . "acadiso.lin")	; файл, из которого грузить тип линии (nil -> acadiso.lin)
*		("color" . 0)			; цвет. nil -> (getvar "cecolor")
*		("layer" . "test")		; слой. nil -> "0"
*		("width" . 0)			; изменение глобальной ширины
						; полилинии (группа 39). nil -> 0
*		(cons "normal" '(0. 0. 1.))	; система координат, в которой
			; создавать примитив. nil -> текущая
		(cons "round"(list (cons 0 -1)(cons 1 -2)))	; список участков полилинии
			; с устанавливаемой кривизной (тангенс четверти
			; центрального угла)
*		)
*	point-list	список точек (переводится в 2Д)
*    Возвращает vla-указатель на созданную полилинию либо nil в случае неудачи
*    Примеры вызова:
(_kpblc-ent-create-lwpline (list
	(cons "closed" t)
	(cons "round" '((0 . -1.) (2 . 0.5))))
	'((0. 0.)(10. 10.)(0. 20.)(-10. 10.)))
|;
  ;(_kpblc-is-debug-print "_kpblc-ent-create-lwpline")
  (_kpblc-error-catch
    (function
      (lambda ()
        (setq point-list (apply
                           (function append)
                           (mapcar (function (lambda (x) (list (car x) (cadr x))))
                                   point-list
                                   ) ;_ end of mapcar
                           ) ;_ end of apply
              res        (vla-addlightweightpolyline
                           (if (and (assoc "where" lst)
                                    (cdr (assoc "where" lst))
                                    ) ;_ end of and
                             (cdr (assoc "where" lst))
                             (_kpblc-get-active-space-obj)
                             ) ;_ end of if
                           (vlax-make-variant
                             (vlax-safearray-fill
                               (vlax-make-safearray
                                 vlax-vbdouble
                                 (cons 0 (1- (length point-list)))
                                 ) ;_ end of vlax-make-safearray
                               point-list
                               ) ;_ end of vlax-safearray-fill
                             ) ;_ end of vlax-make-variant
                           ) ;_ end of vla-addlightweightpolyline
              ) ;_ end of setq
        (if (cdr (assoc "round" lst))
          (foreach item (cdr (assoc "round" lst))
            (_kpblc-error-catch
              (function
                (lambda ()
                  (vla-setbulge res (car item) (cdr item))
                  ) ;_ end of lambda
                ) ;_ end of function
              '(lambda (x)
                 (princ (strcat "\nНевозможно задать кривизну "
                                (car item)
                                " участку полилинии"
                                ) ;_ end of strcat
                        ) ;_ end of princ
                 ) ;_ end of lambda
              ) ;_ end of _kpblc-error-catch
            ) ;_ end of foreach
          ) ;_ end of if
        (foreach item (list (list "closed" "closed" :vlax-false)
                            (list "lineweight" "lineweight" aclnwt000)
                            '("ltype" "linetype" "Continuous")
                            (list "color" "color" (getvar "cecolor"))
                            '("layer" "layer" "0")
                            '("width" "ConstantWidth" 0)
                            ) ;_ end of list
          (if (member (car item) lst)
            (setq lst (subst (cons (cadr item) (cdr (assoc (car item) lst))) (assoc (car item) lst) lst))
            (setq lst (append lst (list (cdr item))))
            ) ;_ end of if
          ) ;_ end of foreach
        (foreach item lst
          (vl-catch-all-apply
            (function
              (lambda ()
                (vlax-put-property res (car item) (cadr item))
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of foreach
        ) ;_ end of lambda
      ) ;_ end of function
    (function
      (lambda (x)
        (_kpblc-error-print "_kpblc-ent-create-lwpline" x)
        (setq res nil)
        ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun
Используется масса библиотечных функций, но суть, думаю, понятна.
P.S. Код тестировался прежде всего для мировой системы координат, в пользовательских вроде бы работал нормально для версий 2005 и 2006. Дальше не гонял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.09.2010, 14:04
#44
ShaggyDoc

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


Вот мой рабочий вариант создания полилиний:
Код:
[Выделить все]
(defun ru-pline-add (points is_closed width lineweight ltype / obj)
                    ;|
(ru-pline-add (list (list 0 0) (list 10000 1000) (list 10000 20000) (list 0 20000)) nil  0 50 "HIDDEN")

|;
  (ru-error-catch
    (function
      (lambda ()

        (setq
          obj (vla-addlightweightpolyline
                (ru-obj-active-space)
                (ru-conv-list-points-to-variant-array
                  (apply
                    'append
                    (mapcar 'ru-conv-3dpoint-to-2dpoint
                            points
                    ) ;_ end of mapcar
                  ) ;_ end of apply
                ) ;_ end of ru-conv-list-points-to-variant-array
              ) ;_ end of vla-addlightweightpolyline
        ) ;_ end of setq
        (cond
          ((and
             (vlax-read-enabled-p obj)
             (vlax-write-enabled-p obj)
           ) ;_ end of and
           (if is_closed
             (vla-put-closed obj :vlax-true)
           ) ;_ end of if
           (if width
             (vla-put-constantwidth obj width)
           ) ;_ end of if
           (ru-lw-set-for-obj obj lineweight)
           (if Ltype
             (ru-ltype-apply obj Ltype)
           ) ;_ end of if
           (vla-update obj)
           obj
          )
        ) ;_ end of cond
      ) ;_ end of lambda
    ) ;_ end of function
    (function (lambda (x)
                (princ (strcat "\nОШИБКА RU-PLINE-ADD " x))
                nil
              ) ;_ end of lambda
    ) ;_ end of function
  ) ;_ end of ru-error-catch                

) ;_ end of defun
Обратите внимание - как и у Алексея имеется ловушка ошибок. Без этого нельзя.
В этом варианте аргументов меньше, чем у Алексея, но для практических целей ничего дополнительного в сотнях программ и не понадобилось.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 29.09.2010, 19:12
#45
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Алексей, спасибо большое за ссылки!

Очень хотелось этот просмотрщик. Уже хотел сам в Visual Studio такой писать. В WORD никак не смог сделать предпросмотр

ShaggyDoc,

я с Вами согласен, что нужен обработчик ошибок. Но на все нужно время. Я пока не начал серьезно разбираться с алгоритмом облработки ошибок, лишь использовал Ваши функции для выбора объекта (entsel и entsel by type). Я такой человек, что не могу использовать что-то , не понимая полностью сути работы этого "что-то". Код Ваш и Алексея еще пока сложен для меня. Но я учусь и быстро

Сейчас я понимаю, что аргументов в моей функции вполне достаточно, чтобы иметь возможность дальше развить ее, как и другие функции, но УЖЕ СЕЙЧАС иметь возможность ее применять и тестировать в разных рабочих ситуациях.

Надеюсь, когда я вернусь через несколько недель после командировки, вы не сочтете за труд пркомментировать некоторые строки своего кода? Пока об этом не прошу, ибо для этого надо сначала самому поразбирться в нем и сформулировать чтко, что не ясно.

Кстати, спасибо за примеры - теперь знаю, что можно не менять реальное число аргументов, а при дополнении функции просто можно запрашивать сразу несколько аргументов списком
И список может быть любым - может и сключать и не включать в себя разные элемнты, которые для функции просто будут равны нулю либо nil.

А сейчас хочу попросить:
1) объяснить, где у Lightweightline параметр WIDTH? Width сегмента есть, а где глобальная ширина? Что-то ее не нашел в описалове объекта.

2) как, интересно, во многих стндартных функциях организован алгоритм, что можно опускать какой-то аргумент? Ведь если внутри функции аргумент и может быть равным Nil, то при инициализации функции nil задавать нельзя, только 0...

Последний раз редактировалось Frigate, 29.09.2010 в 19:55.
Frigate вне форума  
 
Непрочитано 29.09.2010, 22:47
#46
ShaggyDoc

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


Цитата:
Но на все нужно время.
Если пожалеть время на ловушку ошибок, потом во много раз больше придется его тратить на ручную "ловлю блох".

Цитата:
Width сегмента есть, а где глобальная ширина?
В моей функции здесь устанавливается - (vla-put-constantwidth obj width). По общему правилу ConstantWidth и есть это свойство.

Цитата:
как, интересно, во многих стндартных функциях организован алгоритм, что можно опускать какой-то аргумент
Эти функции написаны на C++, а там можно делать переменное количество аргументов. В функции, написанной на LISP переменное количество аргументов делать нельзя.

Но "если очень хочется, то можно" - в виде списка. В _kpblc-ent-create-lwpline это аргумент lst. Но этот аргумент слишком сложен для поседневного применения и наверняка у хитрого Алексея есть дополнительные функции-обертки поверх этой "низкоуровневой" функции. Неспроста у нее имя начинается с "_".
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 30.09.2010, 09:17
#47
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


ShaggyDoc

Цитата:
наверняка у хитрого Алексея есть дополнительные функции-обертки поверх этой "низкоуровневой" функции
да, думаю есть

Про списки то я понял. Если что-то нужно будет поменять в функции - получать еще один аргумент, то можно будет изначальный входной аргумент принимать как первый элемент списка.

Подскажите, пожалуйста, какое свойство все-таки лучше использовать для LWpolyline - constantWidth или lineWidth? Чем обуславливать выбор - только внешним видом при уменьшении масштаба чертежа?

Кстати, как я понимаю, ConstantWidth имеет приоритет перед весом линии.

Последний раз редактировалось Frigate, 30.09.2010 в 09:25.
Frigate вне форума  
 
Непрочитано 30.09.2010, 11:11
#48
ShaggyDoc

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


Когда-то ширина полилинии и только полилинии (Width) было единственным средством делать "жирные" (основные) линии на экране. Ширину можно менять и у каждого сегмента, достигая интересных эффектов. Физическая ширина имеет ряд преимуществ, но и недостатки есть.

Linewight - средство более гибкое. Но тоже не без недостатков. Например, плохо смотрятся на экране стыки. Главное преимущество - постоянная визуалная ширина. При любом масштабе будет заданная ширина, только надо правильно смотреть - через видовой экран.

Да, для полилиний ConstantWidth имеет приоритет. Легко проверяется опытным путем.

Что применять - решает каждый сам, благо выбор есть. Я лично остановился на использовании Lineweight, за исключением некоторых случаев, когда обязательно, по характеру изображения, нужна фиксированная ширина. Или когда нужна переменная ширина, да ещё неотключаемая. Например, при рисовании всяких стрелок.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 30.09.2010, 12:47
#49
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Спасибо за ответ. Я тоже считаю, что могут быть разные варианты, и думаю добавить в аргументы ConstantWidth.
Frigate вне форума  
 
Непрочитано 01.10.2010, 09:23
#50
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Frigate
Цитата:
все еще впереди - дойду и до автоматического создания трасс )))
Хотя пока не представляю, при помощи какого алгоритма можно заставить трассу идти от объекта-начала до объекта-конца по нарисованным линиям? МОжет подскажешь, где копать?
чета както проглядел пост. копать надо в сторону поиска пути на графе. Возможно стоит объедениться с автором топика http://forum.dwg.ru/showthread.php?t=57194 и делать чтото подходящее и киповцам и сксникам и любым другим товарищам тянущим провода и кабели.
zamtmn вне форума  
 
Непрочитано 05.10.2010, 09:37
#51
NEDIS

Инженер СКС
 
Регистрация: 21.08.2009
г. Домодедово МО
Сообщений: 72


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
NEDIS, к любому примитиву и даже неграфическим объектам можно добавить расширенные данныех, которые и будут храниться в DXF коде объекта, и в которых ты можех хранить нужную тебе информацию
Понимаю, что немного не по вопросу темы, а есть пример как это делается? Как полилинии добавить не свойственный ему DXF-код и чтобы он там хранился?

Цитата:
Сообщение от zamtmn Посмотреть сообщение
чета както проглядел пост. копать надо в сторону поиска пути на графе. Возможно стоит объедениться с автором топика http://forum.dwg.ru/showthread.php?t=57194 и делать чтото подходящее и киповцам и сксникам и любым другим товарищам тянущим провода и кабели.
Алгоритм поменял на Дейкстры, сейчас перезалью лиспы. Работать стало шустрее, но есть некоторые нюансы, в своем топике я отпишусь по ним.
NEDIS вне форума  
 
Непрочитано 05.10.2010, 11:01
#52
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


NEDIS, пример добавления расширенных данных

Код:
[Выделить все]
; регистрация приложения (можно и не "NEDIS")
(regapp "NEDIS")
; получения списка данных последнего примитива
(setq ed (entget (entlast)))
; формирование подсписка расширенных данных (добавим текст и число 100)
(setq edata (list (list -3 (list "NEDIS" (cons 1000 "Какой-то текст") (cons 1070 100)))))
; включение в список расширенных данных
(setq ed (append ed edata))
; присоединение расширенных данных к примитиву, обновление примитива
(entmod ed)
; проверка данных примитива (обязательно указывать зарегистрированное приложение "NEDIS")
(entget (entlast) '("NEDIS"))
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 05.10.2010, 13:28
#53
NEDIS

Инженер СКС
 
Регистрация: 21.08.2009
г. Домодедово МО
Сообщений: 72


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
NEDIS, пример добавления расширенных данных
TararykovDG, спасибо большое на выходных поиграюсь.
NEDIS вне форума  
 
Непрочитано 05.10.2010, 22:07
#54
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


тоже озабочен подобной задачей. тружусь в области автоматики, вторичной коммутации.
Вот некоторые соображения.
1. Надо определиться какая информация является "первичной" (исходной), а какая "вторичной" (производной). Чем выше уровень автоматизации, тем больше информации переходит в разряд "вторичной".
В моем случае "первичная" информация это:
а) принципиальные схемы (само собой);
б) схемы расстановки оборудования;
в) планы кабельных трасс (эстакады, лотки, траншеи и т.п.).
Все остальное - вторично.
В идеале инженер должен разрабатывать только первичные данные.
2. "Первичная" информация (исходные данные) должна быть наглядной. Сам разработчик (не программист, а разработчик КИПиА, АСУТП, РЗА ... !!! ) или другой специалист должен иметь возможность проверять и корректировать исходные данные, пользуясь, по возможности, привычными способами - черчение в граф. редакторе, редактирование таблиц и т.п.
3. Крайне нежелательно дублирование "первичной" информации - это потенциальный источник ошибок.
4. Получение выходной документации выполняется несколькими этапами. Надо дать пользователю возможность видеть промежуточный результат каждого этапа и, если требуется, вносить коррективы.
Пример:
инженер разработал принципиальные схемы (ПС),
на основе ПС автоматически создается таблица соединений (ТС),
на основе ТС создается кабельный журнал (КЖ) (пока без длин - для расчета длин требуется предоставить и обработать другую исходную информацию - расстановку оборудования и план кабельных трасс).

вот как-то так.
Может немножко сумбурно, но, надеюсь, мысль понятна.
В последние месяцы совершенно нет времени продолжать разработку такой само-сапр , но я не оставляю эту идею.
Lesha вне форума  
 
Непрочитано 05.10.2010, 22:24
#55
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Lesha
>>а) принципиальные схемы (само собой);
В чем вы делаете принципиальные схемы?

>>В последние месяцы совершенно нет времени продолжать разработку такой само-сапр , но я не оставляю эту идею.
Хоть чтото из перечисленных пунктов реализовано?
zamtmn вне форума  
 
Непрочитано 06.10.2010, 22:45
#56
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


Принципиальные схемы делаю а autocad. Наработал необходимые блоки для элементов схем, использую отдельные слои для линий связи, устройств и элементов принципиальной схемы и для всего остального (вспомогательного).
Из того что есть и нет:
Есть экспорт данных из принципиальной схемы в отдельный файл. Данные это содержимое слоев, содержащих линии связи и устройства.
Нет (пока) первичной обработки данных принципиальной(-ых) схемы. Обработка должна будет заключаться в преобразовании экспортированных данных (координаты вершин линий, точек соединения, зажимов блоков и их обозначений в таблицу соединений). Так что от экспорта пока толку нет . Таблицу соединений пока приходится заполнять вручную.
Есть автоматическое разбиение эл. цепей на кабели на основе таблицы соединений и типов цепей.
Есть авт. подбор типа кабеля по типу эл. цепи (количества и сечения жил), но только для контрольных кабелей. Вручную можно указать любой тип кабеля.
Нет (пока) авт. расчета длин кабелей. Длины задаются вручную.
Есть авт. создание кабельного журнала и подсчет суммарной потребности кабелей.
Есть контроль правильности исходных и промежуточных данных (например, подключение к одной точке цепей с разным обозначением или подключение к одной клемме более 2х проводов вызовут предупреждающее сообщение).
Ну есть еще кое-какие удобности и улучшайзеры.
Нет (пока) еще очень многого...

Начиная с таблицы соединений все делается в excel.
Lesha вне форума  
 
Непрочитано 06.10.2010, 23:00
#57
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Есть экспорт данных из принципиальной схемы в отдельный файл.
>>Данные это содержимое слоев, содержащих линии связи и устройства.
на стороне обрабатывать данные, выдергивая связи - ИМХО самый неудобный вариант... при нахождении ошибок лезть в чертеж по координатам ошибки?
почему не Electrical?
zamtmn вне форума  
 
Непрочитано 06.10.2010, 23:35
#58
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>Есть экспорт данных из принципиальной схемы в отдельный файл.
>>Данные это содержимое слоев, содержащих линии связи и устройства.
на стороне обрабатывать данные, выдергивая связи - ИМХО самый неудобный вариант... при нахождении ошибок лезть в чертеж по координатам ошибки?
почему не Electrical?
А по моему, обработка на стороне - это не самый неудобный вариант.
Как быть иначе, если схем несколько десятков? В каждую открытую принципиалку подгружать данные из других схем и потом эти данные разбирать? Как говорится - те же яйца...
Во-вторых внешняя обработка меньше завязывает на конкретный граф. редактор. Разонравится вот мне завтра акад, перейду на визио. Перепишу функцию экпорта данных и продолжу работать в привычной среде.
В третьих, разделение труда. Я разрабатываю принципиалки, а какой-нибудь студент на основе моих схем все остальное. И не нужен будет ему для работы ни акад, ни визио.
Electrical мне показался бедноват функционалом. Не дает он всего, что нам нужно.
Lesha вне форума  
 
Непрочитано 07.10.2010, 10:23
#59
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от Lesha Посмотреть сообщение
Перепишу функцию экспорта данных и продолжу работать в привычной среде.
Дык это (наверно) самое сложное.
Цитата:
Сообщение от Lesha Посмотреть сообщение
Electrical мне показался бедноват функционалом. Не дает он всего, что нам нужно
Таблицу соединений по принцип. схеме - дает. А это самое-самое важное

Цитата:
Сообщение от Lesha Посмотреть сообщение
а какой-нибудь студент на основе моих схем все остальное. И не нужен будет ему для работы ни акад, ни визио.
На кульмане?
kp+ вне форума  
 
Непрочитано 07.10.2010, 11:01
#60
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Как говорится - те же яйца...
Яйца теже. тут всё решает удобство работы. Как вы будете поступать с отчетами на листах схем? т.е. обратная связь планируется?

Цитата:
Я разрабатываю принципиалки, а какой-нибудь студент на основе моих схем все остальное. И не нужен будет ему для работы ни акад, ни визио.
Надо стремиться к тому чтоб по нормально подготовленной принципиалке и компоновке всё отчеты генерировались нажатием одной кнопки - студент не нужен))
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > План кабельных сетей - алгоритм автоматизации построения и программирование?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте программу для построения профилей наружных сетей? dextron3 Вертикальные решения на базе AutoCAD 18 11.03.2012 16:37
Сводный план сетей proekt_mep Инженерные сети 42 16.06.2011 23:09
Ищу книгу "Проектирование кабельных сетей и проводок" под редакцией Г.Е.Храпченко 1980 Инзиля Поиск литературы, чертежей, моделей и прочих материалов 8 03.02.2009 14:47