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

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

Нужно посчитать кабель

Ответ
Поиск в этой теме
Непрочитано 23.10.2007, 10:25 #1
Нужно посчитать кабель
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Необходимо посчитать длину кабеля.
Есть чертеж, в нем есть есть куча однострочных текстов такого формата (всегда один и тот же) 1230-3х1 (например). Т.е сначало идет длинна кабеля, а потом его жильность.
нужно сложить все кабели например 3х1, потом 4х2, потом, 7х1, 12х2 и т.д. Полученные данные свести в таблицу. Как мне кажеться это задача не очень сложная, но проблемма в том что я совсем не знаю Лиспа.
Если кто может помочь буду признателен
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Просмотров: 62482
 
Непрочитано 23.10.2007, 10:32
#2
Кулик Алексей aka kpblc
Moderator

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


Поиск -> "сумм* длин* лин*"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2007, 10:45
#3
Admin
Administrator


 
Регистрация: 21.08.2003
Сообщений: 4,462


Так ему не сумму длин линий надо, а сумму чисел из текста
Admin вне форума  
 
Автор темы   Непрочитано 23.10.2007, 10:55
#4
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Admin спасибо! тока хотел ответить Алексею
Еслиб знал Лисп получше вопроса думаю небыло бы. Похожих тем не нашел (может плохо искал). да и переделать сильно лисп я не смогу.
Вот список кабелей которые могут встретиться:
3х1,4х1,5х1,12х1,16х1,30х1,33х1,42х1,3х2,4х2,7х2,10х2,12х2,14х2,19х2,24х2,27х2,30х2
длинна кабеля произвольная. может встретиться такая запись 123-3(2) это тоже самое что и 123-3х1. или например 456-7(2) это тоже самое что и 456-7х1
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 11:02
#5
Кулик Алексей aka kpblc
Moderator

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


Упс... Сорри. Все равно, поиск -> "сум*+текст*" выводит http://dwg.ru/f/showthread.php?t=715...E5%EA%F1%F2%2A ; http://dwg.ru/f/showthread.php?t=377...E5%EA%F1%F2%2A ; http://dwg.ru/f/showthread.php?t=217...E5%EA%F1%F2%2A - и все не то
---
Добавлено: пока искал и воевал с лагами, уже предыдущий ответ появился. Будем думать...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2007, 11:48
#6
zamtmn

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


>>(всегда один и тот же) 1230-3х1
а марки кабеля нет? могу написать парсер dxf чтоб выуживал нужные строчки и суммировал, но будет работать не внутри автокада, а автономно. если надо скинте файлик с чертежем
zamtmn вне форума  
 
Автор темы   Непрочитано 23.10.2007, 12:07
#7
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Вот пример кабельной сети.
Формат записи везде одинаковый.
Вложения
Тип файла: rar Кабельная Сеть.rar (94.1 Кб, 730 просмотров)
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 12:14
#8
zamtmn

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


>>123-3(2) это тоже самое что и 123-3х1
те. числа в скобках никак не учитываются? длинна всегда целая? 3х2 это пары, или 2 - сечение и может быть кабель 3х2,5?
zamtmn вне форума  
 
Непрочитано 23.10.2007, 12:38
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Пробуй
Код:
[Выделить все]
(defun C:REPORT-CABEL-LENGTH (/ ss items i e str-str-lst combine sort len)
(vl-load-com)
;_ Helper functions
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
(defun sort (lst predicate)
   (mapcar '(lambda (x) (nth x lst)) (vl-sort-i lst predicate))
)
(defun combine (inlist is-greater is-equal / sorted current result )
(setq sorted (sort inlist is-greater))
(setq current (list (car sorted)))
(foreach item (cdr sorted)
(if (apply is-equal (list item (car current)))
(setq current (cons item current))
(progn
(setq result (cons current result))
(setq current (list item))
)
)
)
(cons current result)
)
;_ End of Helper functions
(if (setq ss (ssget '((0 . "TEXT"))))
(progn
(repeat (setq i (sslength ss))
(setq e (ssname ss (setq i (1- i))))
(setq items 
(cons (strcase (vl-string-trim " " (cdr (assoc 1 (entget e))))) items))
)
(setq items (mapcar '(lambda(x)(mapcar '(lambda(y)(vl-string-trim " " y))(str-str-lst x "-"))) items))
(setq items (vl-remove-if '(lambda(x)(/= (length x) 2)) items))
(setq items
(combine items
'(lambda (a b)
(> (cadr a) (cadr b))
)
'(lambda (a b)
(eq (cadr a) (cadr b))
)
)
)
(textscr)
(princ "\n\nCabel    Total length Count\n")
(foreach item items
  (setq len (apply '+ (mapcar 'atof (mapcar 'car item))))
  (if (> len 0)(progn
  (terpri)(princ (cadar item))(princ "       ")
  (princ len)(princ "        ")(princ (length item))
  )
    )
)
)
)
(princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.10.2007, 12:45
#10
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Как вариант

Код:
[Выделить все]
;; cabel.lsp
(defun group-by-val (lst / ret tmp)
; by Fatty T.O.H. ()2005 * all rights removed
  (while (car lst)
    (setq tmp (list (vl-remove-if-not
		      (function	(lambda	(a)
				  (equal a (car lst) 1e-12)
				)
		      )
		      lst
		    )
	      )
    )
    (setq ret (cons (car tmp) ret))
    (setq lst (vl-remove-if
		(function (lambda (a)
			    (equal a (car lst) 1e-12)
			  )
		)
		lst
	      )
    )
    (setq tmp nil)
  )

  ret
)

(defun c:cab (/ ed en mk pos sl ss st tmp)

  (if (setq ss (ssget "_X" (list (cons 0 "*TEXT") (cons 1 "*-*"))))
    (progn
      (setq accum nil)
      (while (setq en (ssname ss 0))
	(setq ed (entget en))
	(setq st (cdr (assoc 1 ed)))
	(setq pos (vl-string-position (ascii "-") st))

	(setq sl (substr st 1 pos))
	(setq mk (substr st (+ pos 2)))
	(setq tmp (cons sl mk))
	(setq accum (cons tmp accum))
	(setq tmp nil)
	(ssdel en ss)
      )
      (setq comm (group-by-val accum))
      (setq result
	     (mapcar (function (lambda (x)
				 (list (cdar x)
				       (apply '+
					      (mapcar 'atof
						      (mapcar 'car x)
					      )
				       )
				 )
			       )
		     )
		     comm
	     )
      )
      (alert
	(apply 'strcat
	       (mapcar (function (lambda (a)
				   (strcat a "\n")
				 )
		       )
		       (mapcar (function (lambda (x)
					   (strcat "Êàáåëü "
						   (car x)
						   "  Äëèíà: "
						   (rtos (cadr x) 2 2)
					   )
					 )
			       )
			       result
		       )
	       )
	)
      )
    )
    (alert "0 texts/mtexts selected")
  )
  (princ)
)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 23.10.2007, 13:00
#11
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>123-3(2) это тоже самое что и 123-3х1 те. числа в скобках никак не учитываются?
ДА, это тоже самое
Цитата:
Сообщение от zamtmn Посмотреть сообщение
длинна всегда целая?
ДА, и причем она бывает толька кратна 5 метрам. т.е. 5,10,15, 125,275 ит.д. (в примере я брал что попало )
Цитата:
Сообщение от zamtmn Посмотреть сообщение
3х2 это пары, или 2 - сечение и может быть кабель 3х2,5?
это пары. сечение всегда одинаковое (на первом листе указано 0.9) но это не важно
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 23.10.2007, 13:41
#12
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Спсибо за коды! теперь коментарии к ним.
1й самый подходящий. 2й извините немного сырой и не подходит
есть ряд пожеланий:
-Много лишнего выбирает если весь чертеж выбрать (т.е. считает все тексты)
-Запас (в скобках) учитывать как отдельный кабель не нужно. т.е. кабель 125-10х2(3) и 255-10х2(4) нужно тоже сложить.
-если не очень сложно это реализовать то сделайте чтобы это все заносилось в таблицу которую можно будет в акад вставить.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 14:05
#13
zamtmn

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


вот че получилось из присланного файла:
30x2,930
10x2,6015
3x2,5325
24x2,2520
14x2,220
19x2,4470
7x2,11500
3x1,2955
12x2,2235
27x2,3125
4x2,1490

програмка тут: http://zcad.by.ru/SUMMATOR.rar
применять: SUMMATOR.exe "Кабельная Сеть.dxf" >result.txt
результат будет в файле result.txt, его можно вставить в exel
в файле SUMMATOR.log перечень всех посчитаных кабелей
//edit:поправил ссылку

Последний раз редактировалось zamtmn, 23.10.2007 в 14:11.
zamtmn вне форума  
 
Автор темы   Непрочитано 23.10.2007, 14:31
#14
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Спасибо zamtmn! Но данный вид программы не подходит. т.к. ей буду пользоваться не только я и она должна быть максимально проста для пользователей с которыми я работаю. твоей программой просто не захотят пользоваться. нужен конкретно лисп. (я его на кнопку потом посажу и только обезьяна не сможет ей воспользоваться )
в dxf никто чертежи переводить точно не будет и отдельно программулю запускать тоже .а суть программы то что нужно! единственное нужно как в акаде выбирать все кабели вручную. потому как кабель помеченный звездочкой другой.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 14:53
#15
zamtmn

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


ну звиняйте)) чем богаты))
zamtmn вне форума  
 
Непрочитано 23.10.2007, 15:02
#16
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Вариант:
Код:
[Выделить все]
(defun c:demo (/ adoc asel dat fst len mod pnt row str suf tbl tmp)
    (vl-load-com)
    (setq adoc (vla-get-activedocument (vlax-get-acad-object))
          asel (vla-get-activeselectionset adoc)
    )
    (vla-clear asel)
    (pl:obj-select-on-screen asel "TEXT")
    (vlax-for i asel
        (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
        (if (wcmatch str "*-#x#,*-##x#,*-#x#(#),*-##x#(#),*-#(#),*-##(#)")
            (setq dat (if (setq suf (substr (vl-string-left-trim "0123456789" str) 2)
                                len (atof (substr str 1 (vl-string-position 45 str)))
                                tmp (assoc suf dat)
                          )
                          (subst (append tmp (list len)) tmp dat)
                          (cons (list suf len) dat)
                      )
            )
        )
    )
    (if (and (setq pnt (vl-catch-all-apply (function getpoint) '("Pick point <Exit>:")))
             (not (vl-catch-all-error-p pnt))
        )
        (if (setq fst (vla-item asel 0)
                  mod (vla-get-height fst)
                  tbl (vla-addtable
                          (vla-objectidtoobject adoc (vla-get-ownerid fst))
                          (vlax-3d-point (trans pnt 1 0))
                          (+ (length dat) 2)
                          2
                          (* 1.5 mod)
                          (* 8.6 mod)
                      )
            )
            (progn (vla-put-regeneratetablesuppressed tbl :vlax-true)
                   (vla-settext tbl 0 0 "Длины кабелей")
                   (vla-setcellalignment tbl 0 0 acmiddlecenter)
                   (vla-setcelltextheight tbl 0 0 mod)
                   (vla-settext tbl 1 0 "Марка")
                   (vla-settext tbl 1 1 "Длинна")
                   (vla-setcellalignment tbl 1 0 acmiddlecenter)
                   (vla-setcellalignment tbl 1 1 acmiddlecenter)
                   (vla-setcelltextheight tbl 1 0 mod)
                   (vla-setcelltextheight tbl 1 1 mod)
                   (setq row 1)
                   (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                      (vl-sort-i (mapcar (function car) dat) (function <))
                              )
                       (vla-settext tbl (setq row (1+ row)) 0 (car i))
                       (vla-setcellalignment tbl row 0 acmiddlecenter)
                       (vla-setcelltextheight tbl row 0 mod)
                       (vla-settext tbl row 1 (rtos (apply (function +) (cdr i)) 2 0))
                       (vla-setcellalignment tbl row 1 acmiddleright)
                       (vla-setcelltextheight tbl row 1 mod)
                   )
                   (vla-put-regeneratetablesuppressed tbl :vlax-false)
                   (vla-update tbl)
            )
        )
    )
    (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
    (vla-selectonscreen
        sel
        (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
        (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
    )
)
Alaspher вне форума  
 
Автор темы   Непрочитано 23.10.2007, 15:14
#17
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Alaspher то что нужно!!! 1 ошибочка тока - запас (это то что в скобках) читывать не нужно. т.е. кабель 125-10х2(3) и 255-10х2(4) нужно тоже сложить. да и вообще его не писать в таблице.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 15:25
#18
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Попробуй:
Код:
[Выделить все]
(defun c:demo (/ adoc asel dat fst len mod pnt row str suf tbl tmp)
    (vl-load-com)
    (setq adoc (vla-get-activedocument (vlax-get-acad-object))
          asel (vla-get-activeselectionset adoc)
    )
    (vla-clear asel)
    (pl:obj-select-on-screen asel "TEXT")
    (vlax-for i asel
        (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
        (if (wcmatch str "*-#x#,*-##x#,*-#x#(#),*-##x#(#),*-#(#),*-##(#)")
            (setq str (substr str 1 (vl-string-position 40 str))
                  dat (if (setq suf (substr (vl-string-left-trim "0123456789" str) 2)
                                len (atof (substr str 1 (vl-string-position 45 str)))
                                tmp (assoc suf dat)
                          )
                          (subst (append tmp (list len)) tmp dat)
                          (cons (list suf len) dat)
                      )
            )
        )
    )
    (if (and dat
             (setq pnt (vl-catch-all-apply (function getpoint) '("Pick point <Exit>:")))
             (not (vl-catch-all-error-p pnt))
        )
        (if (setq fst (vla-item asel 0)
                  mod (vla-get-height fst)
                  tbl (vla-addtable
                          (vla-objectidtoobject adoc (vla-get-ownerid fst))
                          (vlax-3d-point (trans pnt 1 0))
                          (+ (length dat) 2)
                          2
                          (* 1.5 mod)
                          (* 8.6 mod)
                      )
            )
            (progn (vla-put-regeneratetablesuppressed tbl :vlax-true)
                   (vla-settext tbl 0 0 "Длины кабелей")
                   (vla-setcellalignment tbl 0 0 acmiddlecenter)
                   (vla-setcelltextheight tbl 0 0 mod)
                   (vla-settext tbl 1 0 "Марка")
                   (vla-settext tbl 1 1 "Длинна")
                   (vla-setcellalignment tbl 1 0 acmiddlecenter)
                   (vla-setcellalignment tbl 1 1 acmiddlecenter)
                   (vla-setcelltextheight tbl 1 0 mod)
                   (vla-setcelltextheight tbl 1 1 mod)
                   (setq row 1)
                   (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                      (vl-sort-i (mapcar (function car) dat) (function <))
                              )
                       (vla-settext tbl (setq row (1+ row)) 0 (car i))
                       (vla-setcellalignment tbl row 0 acmiddlecenter)
                       (vla-setcelltextheight tbl row 0 mod)
                       (vla-settext tbl row 1 (rtos (apply (function +) (cdr i)) 2 0))
                       (vla-setcellalignment tbl row 1 acmiddleright)
                       (vla-setcelltextheight tbl row 1 mod)
                   )
                   (vla-put-regeneratetablesuppressed tbl :vlax-false)
                   (vla-update tbl)
            )
        )
    )
    (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
    (vla-selectonscreen
        sel
        (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
        (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
    )
)
Alaspher вне форума  
 
Автор темы   Непрочитано 23.10.2007, 15:36
#19
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Спасибо Alaspher огромнейшее!!! Будешь ехать в Минск - с меня пиво
Все как нужно сделал. мелочи я уже сам доделаю, это не существенно
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 23.10.2007, 15:41
#20
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Пользуйся, на здоровье.
Пиво, коль оказия случиться - с удовольствием!
Alaspher вне форума  
 
Автор темы   Непрочитано 26.10.2007, 14:09
#21
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Эх! поюзал прожку! Супер короче получилось. Вот появилось желание ее немного усовершенствовать... Наглеть так наглеть

Модифицировать ее нужно таким образом чтобы она еще считала сколько муфт подземных нужно заложить. 1 муфта ставиться для сращивания кабеля больше 350 метров. если меньше то не ставиться. если кабель 355-700 метров то ставиться 1 муфта.705м -2, и т.д.
Т.е. алгоритм примерно так: (Lк/350)-полученное число округлить в большую сторону (например: 1100/350=3.14 =>округляем в большую сторону =4). и отнимаем 1 = 3
Но есть еще одна проблемма: для каждого кабеля свои муфты. их 3: С-35М, С-50М, С-65М с числом жил соответственно19,42,61.
т.е. нужно еще и вычислить число жил. Для этого перемножаем его и получаем число жил (например 2х3=6 жил, 24х2 =48 жил) ну а по полученным данным посчитать сколько каких муфт нужно.
Вот такая вот задачка...

А это немного исправленный лисп программы которую нужно доработать:
Вложения
Тип файла: rar LCAB.rar (1.1 Кб, 169 просмотров)
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 26.10.2007, 16:06
#22
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Сильно возиться сейчас некогда - накидал буквально за 20 минут. Посмотри, правильно ли я понял смысл:
Код:
[Выделить все]
(defun c:lcab (/ adoc asel dat fst len mod pnt row str suf tbl tmp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        asel (vla-get-activeselectionset adoc)
  )
  (vla-clear asel)
  (pl:obj-select-on-screen asel "TEXT")
  (vlax-for i asel
    (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
    (if (and (/= (setq suf (vl-string-left-trim "0123456789" str)) str)
             (= (substr suf 1 1) "-")
             (/= (setq suf (substr suf 2)) "")
             (wcmatch suf "#x#,##x#,#x#(#),##x#(#),#(#),##(#),#x#(##),##x#(##),#(##),##(##)")
        )
      (setq suf (substr suf 1 (vl-string-position 40 suf))
            dat (if (setq len (atof (substr str 1 (vl-string-position 45 str)))
                          tmp (assoc suf dat)
                    )
                  (subst (append tmp (list len)) tmp dat)
                  (cons (list suf len) dat)
                )
      )
    )
  )
  (if (and (setq dat (mapcar (function (lambda (a) (cons (car a) (lcab_multi-modc (cdr a) 350)))) dat))
           (setq pnt (vl-catch-all-apply (function getpoint) '("Точка вставки таблицы:")))
           (not (vl-catch-all-error-p pnt))
      )
    (if (setq fst (vla-item asel 0)
              mod (vla-get-height fst)
              tbl (vla-addtable
                    (vla-objectidtoobject adoc (vla-get-ownerid fst))
                    (vlax-3d-point (trans pnt 1 0))
                    (+ (length dat) 2)
                    4
                    (* 1.5 mod)
                    (* 9.6 mod)
                  )
        )
      (progn (vla-put-regeneratetablesuppressed tbl :vlax-true)
             (vla-settext tbl 0 0 "Спецификация кабеля")
             (vla-setcellalignment tbl 0 0 acmiddlecenter)
             (vla-setcelltextheight tbl 0 0 mod)
             (vla-settext tbl 1 0 "Жильность")
             (vla-settext tbl 1 1 "Длина")
             (vla-settext tbl 1 2 "Уч.")
             (vla-settext tbl 1 3 "Муфт")
             (vla-setcellalignment tbl 1 0 acmiddlecenter)
             (vla-setcellalignment tbl 1 1 acmiddlecenter)
             (vla-setcellalignment tbl 1 2 acmiddlecenter)
             (vla-setcellalignment tbl 1 3 acmiddlecenter)
             (vla-setcelltextheight tbl 1 0 mod)
             (vla-setcelltextheight tbl 1 1 mod)
             (vla-setcelltextheight tbl 1 2 mod)
             (vla-setcelltextheight tbl 1 3 mod)
             (setq row 1)
             (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                (vl-sort-i (mapcar (function car) dat) (function <))
                        )
               (vla-settext tbl (setq row (1+ row)) 0 (car i))
               (vla-setcellalignment tbl row 0 acmiddlecenter)
               (vla-setcelltextheight tbl row 0 mod)
               (vla-settext tbl row 1 (rtos (apply (function +) (cddr i)) 2 0))
               (vla-setcellalignment tbl row 1 acmiddleright)
               (vla-setcelltextheight tbl row 1 mod)
               (vla-settext tbl row 2 (- (length i) 2))
               (vla-setcellalignment tbl row 2 acmiddleright)
               (vla-setcelltextheight tbl row 2 mod)
               (vla-settext tbl row 3 (cadr i))
               (vla-setcellalignment tbl row 3 acmiddleright)
               (vla-setcelltextheight tbl row 3 mod)
             )
             (vla-setcolumnwidth tbl 1 (* 6.0 mod))
             (vla-setcolumnwidth tbl 2 (* 3.0 mod))
             (vla-setcolumnwidth tbl 3 (* 4.5 mod))
             (vla-put-regeneratetablesuppressed tbl :vlax-false)
             (vla-update tbl)
      )
    )
  )
  (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
  (vla-selectonscreen
    sel
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
  )
)
(defun lcab_multi-modc (lst mod)
  (cons (apply (function +) (mapcar (function (lambda (x) (/ (fix x) mod))) lst)) lst)
)
Если попал - гуд, если нет... Соррь! Что либо более сложное, как-нить попозже.
Alaspher вне форума  
 
Автор темы   Непрочитано 26.10.2007, 17:11
#23
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Alaspher, Спасибо тебе огромное, все правильно сделал ничего лишнего!!! считает так как надо! впринципе осталось только добавить в конце строку "ИТОГО:" с тремя пунктами:
"С-35М" -до 19 жил (сюда входить будут например(3х2, 19х1, 7х2 и.д.)
"С-50М" -до 42 жил (-\\-)
"С-65М" -до 61 жил (-\\- 30х2,24х2 и т.д.)
для их заполнения нужно просуммировать муфты всё
Если появиться время и не очень сложно добавь пожалуйста
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 26.10.2007, 19:33
#24
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Пробуй так
Код:
[Выделить все]
(defun c:lcab (/ adoc alay asel dat fst len lock mod pnt row str suf tbl tmp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        asel (vla-get-activeselectionset adoc)
        alay (vla-get-activelayer adoc)
  )
  (vla-clear asel)
  (vla-startundomark adoc)
  (pl:obj-select-on-screen asel "TEXT")
  (vlax-for i asel
    (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
    (if
      (and (/= (setq suf (vl-string-left-trim "0123456789" str)) str)
           (= (substr suf 1 1) "-")
           (/= (setq suf (substr suf 2)) "")
           (wcmatch suf "#x#,##x#,#x#(#),##x#(#),#(#),##(#),#x#(##),##x#(##),#(##),##(##)")
      )
       (setq suf (substr suf 1 (vl-string-position 40 suf))
             dat (if (setq len (atof (substr str 1 (vl-string-position 45 str)))
                           tmp (assoc suf dat)
                     )
                   (subst (append tmp (list len)) tmp dat)
                   (cons (list suf len) dat)
                 )
       )
    )
  )
  (if (and (setq
             dat (mapcar (function (lambda (a) (cons (car a) (lcab_multi-modc (cdr a) 350))))
                         dat
                 )
           )
           (setq pnt (vl-catch-all-apply
                       (function getpoint)
                       '("Точка вставки таблицы <Отказаться>: ")
                     )
           )
           (not (vl-catch-all-error-p pnt))
      )
    (progn
      (if (= (vla-get-lock alay) :vlax-true)
        (progn (vla-put-lock alay :vlax-false) (setq lock t))
      )
      (if (setq fst (vla-item asel 0)
                mod (vla-get-height fst)
                tbl (vla-addtable
                      (vla-objectidtoobject adoc (vla-get-ownerid fst))
                      (vlax-3d-point (trans pnt 1 0))
                      (+ (length dat) 2)
                      4
                      (* 1.8 mod)
                      (* 9.6 mod)
                    )
          )
        (progn
          (vla-put-regeneratetablesuppressed tbl :vlax-true)
          (vla-settext tbl 0 0 "Спецификация кабеля")
          (vla-setcellalignment tbl 0 0 acmiddlecenter)
          (vla-setcelltextheight tbl 0 0 mod)
          (vla-settext tbl 1 0 "Жильность")
          (vla-settext tbl 1 1 "Длина")
          (vla-settext tbl 1 2 "Уч.")
          (vla-settext tbl 1 3 "Муфт")
          (vla-setcellalignment tbl 1 0 acmiddlecenter)
          (vla-setcellalignment tbl 1 1 acmiddlecenter)
          (vla-setcellalignment tbl 1 2 acmiddlecenter)
          (vla-setcellalignment tbl 1 3 acmiddlecenter)
          (vla-setcelltextheight tbl 1 0 mod)
          (vla-setcelltextheight tbl 1 1 mod)
          (vla-setcelltextheight tbl 1 2 mod)
          (vla-setcelltextheight tbl 1 3 mod)
          (vla-setcolumnwidth tbl 1 (* 6.0 mod))
          (vla-setcolumnwidth tbl 2 (* 3.0 mod))
          (vla-setcolumnwidth tbl 3 (* 4.5 mod))
          (vla-put-horzcellmargin tbl (* 0.4 mod))
          (setq row 1)
          (foreach i (mapcar (function (lambda (a) (nth a dat)))
                             (vl-sort-i (mapcar (function car) dat) (function <))
                     )
            (vla-settext tbl (setq row (1+ row)) 0 (car i))
            (vla-setcellalignment tbl row 0 acmiddlecenter)
            (vla-setcelltextheight tbl row 0 mod)
            (vla-settext tbl row 1 (rtos (apply (function +) (cddr i)) 2 0))
            (vla-setcellalignment tbl row 1 acmiddleright)
            (vla-setcelltextheight tbl row 1 mod)
            (vla-settext tbl row 2 (- (length i) 2))
            (vla-setcellalignment tbl row 2 acmiddleright)
            (vla-setcelltextheight tbl row 2 mod)
            (vla-settext tbl row 3 (cadr i))
            (vla-setcellalignment tbl row 3 acmiddleright)
            (vla-setcelltextheight tbl row 3 mod)
          )
          (if (setq
                dat (lcab_mindex
                      (mapcar (function lcab_multir)
                              (vl-remove-if (function (lambda (x) (zerop (cadr x)))) dat)
                      )
                    )
              )
            (progn (if lock
                     (vla-put-lock alay :vlax-true)
                   )
                   (vla-endundomark adoc)
                   (vla-startundomark adoc)
                   (if lock
                     (vla-put-lock alay :vlax-false)
                   )
                   (vla-insertrows tbl (setq row (1+ row)) (* 1.8 mod) (1+ (length dat)))
                   (vla-mergecells tbl row row 0 3)
                   (vla-settext tbl row 0 "ИТОГО МУФТ")
                   (vla-setcellalignment tbl row 0 acmiddlecenter)
                   (vla-setcelltextheight tbl row 0 mod)
                   (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                      (vl-sort-i (mapcar (function car) dat) (function <))
                              )
                     (vla-mergecells tbl (setq row (1+ row)) row 0 2)
                     (vla-settext tbl row 0 (car i))
                     (vla-setcellalignment tbl row 0 acmiddleleft)
                     (vla-setcelltextheight tbl row 0 mod)
                     (vla-settext tbl row 3 (cadr i))
                     (vla-setcellalignment tbl row 3 acmiddleright)
                     (vla-setcelltextheight tbl row 3 mod)
                   )
            )
          )
          (vla-put-regeneratetablesuppressed tbl :vlax-false)
          (vla-update tbl)
        )
      )
      (if lock
        (vla-put-lock alay :vlax-true)
      )
    )
  )
  (vla-endundomark adoc)
  (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
  (vla-selectonscreen
    sel
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
  )
)
(defun lcab_multi-modc (lst mod)
  (cons (apply (function +) (mapcar (function (lambda (x) (/ (fix x) mod))) lst)) lst)
)
(defun lcab_multir (lst / lns str x)
  (setq str (car lst)
        lns (if (setq x (vl-string-position 120 str))
              (* (atoi (substr str 1 (1+ x))) (atoi (substr str (+ x 2))))
              (atoi str)
            )
  )
  (list (cond ((not (zerop (/ lns 62))) "N/A")
              ((not (zerop (/ lns 43))) "С-65М")
              ((not (zerop (/ lns 20))) "С-50М")
              ("С-35М")
        )
        (cadr lst)
  )
)
(defun lcab_mindex (lst / a asc ret)
  (if lst
    (if (setq ret (lcab_mindex (cdr lst))
              a   (car lst)
              asc (assoc (car a) ret)
        )
      (subst (list (car a) (+ (cadr a) (cadr asc))) asc ret)
      (cons a ret)
    )
  )
)
*Прим.: Обрати внимание на критерий разделения по муфтам - я посчитал, что до 19 жил это включительно, т.е. меньше 20, для остальных аналогично.

Последний раз редактировалось Alaspher, 27.10.2007 в 12:21. Причина: корректировка кода
Alaspher вне форума  
 
Автор темы   Непрочитано 27.10.2007, 08:25
#25
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Alaspher, Всё правильно! Просто Супер!!! Большего пока я думаю очень не скоро потребуется. Время расчета кабеля и соединительных муфт сократилось во много раз.
Видили бы вы глаза людей которым я показывал как эта программа работает. то что они раньше считали и пересчитывали вручную (от 15 мин. до нескольких часов (в зависимости от кол-ва чертежей)) теперь можно посчитать за пару секунд!!!

Ещё раз огромное спасибо Alaspher за помощь!
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 27.10.2007, 12:27
#26
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Shoorup
Рад, что получилось.
Код немного подредактировал (в предпоследнем посте), ничего не изменял в сути - добавил обраобтку блокировки текущего слоя и двухступенчатый откат. Что-б долго не объяснять в чём его смысл, просто попробуй использовать Ctrl+Z после выполнения команды lcab.
Alaspher вне форума  
 
Автор темы   Непрочитано 28.10.2007, 20:40
#27
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Чесно говоря не понял в чем фишка. для красаты можно например сделать чтобы жильность кабель отображалась по порядку. Т.Е. сначала идет не парный кабель 3х1, ит.д. а потом парный 3х2... Причем тот кабель который отображается как 3 - должен в таблице выглядеть как 3х1.
На самом деле главная цель достигнута и даже перевыполнена а красивости не самое главное в жизни, но если все будет отображаться в том порядке как положено будет немного удобней.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 28.10.2007, 21:48
#28
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Код:
[Выделить все]
(defun c:lcab (/ adoc alay asel dat fst len lock mod pnt row str suf tbl tmp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        asel (vla-get-activeselectionset adoc)
        alay (vla-get-activelayer adoc)
  )
  (vla-clear asel)
  (vla-startundomark adoc)
  (pl:obj-select-on-screen asel "TEXT")
  (vlax-for i asel
    (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
    (if
      (and (/= (setq suf (vl-string-left-trim "0123456789" str)) str)
           (= (substr suf 1 1) "-")
           (/= (setq suf (substr suf 2)) "")
           (wcmatch suf "#x#,##x#,#x#(#),##x#(#),#(#),##(#),#x#(##),##x#(##),#(##),##(##)")
      )
       (setq suf (substr suf 1 (vl-string-position 40 suf))
             suf (if (vl-string-position 120 str)
                   suf
                   (strcat suf "x1")
                 )
             dat (if (setq len (atof (substr str 1 (vl-string-position 45 str)))
                           tmp (assoc suf dat)
                     )
                   (subst (append tmp (list len)) tmp dat)
                   (cons (list suf len) dat)
                 )
       )
    )
  )
  (if (and (setq
             dat (mapcar (function (lambda (a) (cons (car a) (lcab_multi-modc (cdr a) 350))))
                         dat
                 )
           )
           (setq pnt (vl-catch-all-apply
                       (function getpoint)
                       '("Точка вставки таблицы <Отказаться>: ")
                     )
           )
           (not (vl-catch-all-error-p pnt))
      )
    (progn
      (if (= (vla-get-lock alay) :vlax-true)
        (progn (vla-put-lock alay :vlax-false) (setq lock t))
      )
      (if (setq fst (vla-item asel 0)
                mod (vla-get-height fst)
                tbl (vla-addtable
                      (vla-objectidtoobject adoc (vla-get-ownerid fst))
                      (vlax-3d-point (trans pnt 1 0))
                      (+ (length dat) 2)
                      4
                      (* 1.8 mod)
                      (* 9.6 mod)
                    )
          )
        (progn
          (vla-put-regeneratetablesuppressed tbl :vlax-true)
          (vla-settext tbl 0 0 "Спецификация кабеля")
          (vla-setcellalignment tbl 0 0 acmiddlecenter)
          (vla-setcelltextheight tbl 0 0 mod)
          (vla-settext tbl 1 0 "Жильность")
          (vla-settext tbl 1 1 "Длина")
          (vla-settext tbl 1 2 "Уч.")
          (vla-settext tbl 1 3 "Муфт")
          (vla-setcellalignment tbl 1 0 acmiddlecenter)
          (vla-setcellalignment tbl 1 1 acmiddlecenter)
          (vla-setcellalignment tbl 1 2 acmiddlecenter)
          (vla-setcellalignment tbl 1 3 acmiddlecenter)
          (vla-setcelltextheight tbl 1 0 mod)
          (vla-setcelltextheight tbl 1 1 mod)
          (vla-setcelltextheight tbl 1 2 mod)
          (vla-setcelltextheight tbl 1 3 mod)
          (vla-setcolumnwidth tbl 1 (* 6.0 mod))
          (vla-setcolumnwidth tbl 2 (* 3.0 mod))
          (vla-setcolumnwidth tbl 3 (* 4.5 mod))
          (vla-put-horzcellmargin tbl (* 0.4 mod))
          (setq row 1)
          (foreach i
                   (mapcar
                     (function (lambda (a) (nth a dat)))
                     (vl-sort-i
                       (mapcar
                         (function (lambda (a / q)
                                     (setq q (car a)
                                           i (1+ (vl-string-position 120 q))
                                     )
                                     (list (atoi (substr q 1 i)) (atoi (substr q (1+ i))))
                                   )
                         )
                         dat
                       )
                       (function
                         (lambda (a b) (or (< (cadr a) (cadr b)) (< (car a) (car b))))
                       )
                     )
                   )
            (vla-settext tbl (setq row (1+ row)) 0 (car i))
            (vla-setcellalignment tbl row 0 acmiddlecenter)
            (vla-setcelltextheight tbl row 0 mod)
            (vla-settext tbl row 1 (rtos (apply (function +) (cddr i)) 2 0))
            (vla-setcellalignment tbl row 1 acmiddleright)
            (vla-setcelltextheight tbl row 1 mod)
            (vla-settext tbl row 2 (- (length i) 2))
            (vla-setcellalignment tbl row 2 acmiddleright)
            (vla-setcelltextheight tbl row 2 mod)
            (vla-settext tbl row 3 (cadr i))
            (vla-setcellalignment tbl row 3 acmiddleright)
            (vla-setcelltextheight tbl row 3 mod)
          )
          (if (setq
                dat (lcab_mindex
                      (mapcar (function lcab_multir)
                              (vl-remove-if (function (lambda (x) (zerop (cadr x)))) dat)
                      )
                    )
              )
            (progn (if lock
                     (vla-put-lock alay :vlax-true)
                   )
                   (vla-endundomark adoc)
                   (vla-startundomark adoc)
                   (if lock
                     (vla-put-lock alay :vlax-false)
                   )
                   (vla-insertrows tbl (setq row (1+ row)) (* 1.8 mod) (1+ (length dat)))
                   (vla-mergecells tbl row row 0 3)
                   (vla-settext tbl row 0 "ИТОГО МУФТ")
                   (vla-setcellalignment tbl row 0 acmiddlecenter)
                   (vla-setcelltextheight tbl row 0 mod)
                   (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                      (vl-sort-i (mapcar (function car) dat) (function <))
                              )
                     (vla-mergecells tbl (setq row (1+ row)) row 0 2)
                     (vla-settext tbl row 0 (car i))
                     (vla-setcellalignment tbl row 0 acmiddleleft)
                     (vla-setcelltextheight tbl row 0 mod)
                     (vla-settext tbl row 3 (cadr i))
                     (vla-setcellalignment tbl row 3 acmiddleright)
                     (vla-setcelltextheight tbl row 3 mod)
                   )
            )
          )
          (vla-put-regeneratetablesuppressed tbl :vlax-false)
          (vla-update tbl)
        )
      )
      (if lock
        (vla-put-lock alay :vlax-true)
      )
    )
  )
  (vla-endundomark adoc)
  (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
  (vla-selectonscreen
    sel
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
  )
)
(defun lcab_multi-modc (lst mod)
  (cons (apply (function +) (mapcar (function (lambda (x) (/ (fix x) mod))) lst)) lst)
)
(defun lcab_multir (lst / lns str x)
  (setq str (car lst)
        lns (if (setq x (vl-string-position 120 str))
              (* (atoi (substr str 1 (1+ x))) (atoi (substr str (+ x 2))))
              (atoi str)
            )
  )
  (list (cond ((not (zerop (/ lns 62))) "N/A")
              ((not (zerop (/ lns 43))) "С-65М")
              ((not (zerop (/ lns 20))) "С-50М")
              ("С-35М")
        )
        (cadr lst)
  )
)
(defun lcab_mindex (lst / a asc ret)
  (if lst
    (if (setq ret (lcab_mindex (cdr lst))
              a   (car lst)
              asc (assoc (car a) ret)
        )
      (subst (list (car a) (+ (cadr a) (cadr asc))) asc ret)
      (cons a ret)
    )
  )
)
Так?

Особых фишек и нет, просто я сделал возможность отказаться от заполнения подсчёта муфт не удаляя подсчёт кабеля.
Alaspher вне форума  
 
Автор темы   Непрочитано 29.10.2007, 09:06
#29
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Немного не так, кабели 3х1, 12х1, идут первыми, а потом, 3х2, 7х2 и т.д.
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 29.10.2007 в 13:01.
Shoorup вне форума  
 
Автор темы   Непрочитано 24.01.2008, 16:57
#30
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Alaspher, ещё раз тебе огромное спасибо от нашей группы проектировщиков и от меня лично!!! Сегодня с помощью выше написанной программы был спасен проект! Ну очень нужная и полезная программа!
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 25.01.2008, 09:53
#31
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Спасибо, за добрые слова!
Alaspher вне форума  
 
Автор темы   Непрочитано 30.04.2009, 09:39
#32
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Появилась новая необходимость внести изменения в программу. Очень хочется чтобы тот кабель который был посчитан выделился цветом, например синим. Если не сложно, доработайте ктонить програмку плиз
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 30.04.2009, 10:04
#33
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Shoorup, Дай ссылку на код, который в итоге используешь или опубликуй снова
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.04.2009, 10:10
#34
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Это последний код который использую.
Вложения
Тип файла: lsp LCAB.lsp (7.4 Кб, 142 просмотров)
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 30.04.2009, 18:54
#35
Nikolay 2


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


А можно код подправить так, чтобы он считал записи например такого вида КВКбШвнг 19x1.0 150м, Герда-КВнг 14х2х1.0 75м, т.е. тип кабеля-жильность-(количество пар)-сечение-длина и затем раскладывал и суммировал по типу кабеля, жильности и сечению? Вот была бы вещь нужная в хозяйстве каждого электрика и КИПовца. А то действующий код немного специфичен по способу записи. Обычно записывают так КВКбШвнг 19x1.0 150м, причем метраж пишется во второй строке (если записать mtext_ом, то действующий код не обрабатывает mtext)
Nikolay 2 вне форума  
 
Автор темы   Непрочитано 01.05.2009, 17:23
#36
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Nikolay 2, точно можно. Думаю код даже можно сделать так чтобы каждый мог свою маску сделать и считать как нужно. Для меня этот код подходит как нельзя лучше. Единственное вот доработать это отметить цветом, то что посчитано. Бывает что пропускается что-то, например маска не подходит, нечаяно символ вбит лишний или совмещен текст.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 01.05.2009, 20:31
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Shoorup, Пробуй
Nikolay 2 - там разбор текста нужно писать заново. Это я к тому, что подправить=написать заново.
Вложения
Тип файла: lsp LCAB.lsp (7.9 Кб, 142 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 01.05.2009, 22:15
#38
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


VVA, спасибо большое! Всё работает как надо.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 02.05.2009, 17:38
#39
Nikolay 2


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Shoorup, Пробуй
Nikolay 2 - там разбор текста нужно писать заново. Это я к тому, что подправить=написать заново.
Ну а вообще, надеяться можно? Shoorup как то пиво предлагал, я предлагаю тарань (коли случится оказия побывать в Актау (ранее Шевченко)
Nikolay 2 вне форума  
 
Автор темы   Непрочитано 04.05.2009, 17:38
#40
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Прикольно то, что программа приносит дивиденды в виде конфет до сих пор Очень часто народ переставляя кад в очередной раз зовут "установить" программу. Ставлю уже новую версию - очень довольны мелким улучшением.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.05.2009, 21:56
#41
Nikolay 2


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


Добиваю проект, около 400 кабелей, номенклатура 26, т.к. формат записи обозначения кабеля другой приходится все в "рукопашную", в итоге целый день "сидел" на кабельном журнале, и еще видимо будут изменения в проекте, поэтому я бы не назвал ее "довольны мелким улучшением".... вот только видимо не судьба, VVA молчит...
Nikolay 2 вне форума  
 
Непрочитано 04.05.2009, 22:26
#42
zamtmn

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


>>Добиваю проект, около 400 кабелей, номенклатура 26,
Просто текстом кабели подписывать не есть правильно. Нужно юзать блоки с атрибутами + экспорт атрибутов = дальнейшее суммирование в экселе.
zamtmn вне форума  
 
Непрочитано 04.05.2009, 22:30
#43
Кулик Алексей aka kpblc
Moderator

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


Nikolay 2, лично я не электрик ни разу. Показал бы образец да и то, что хочется в результате (кстати, про формат файлов не забудь рассказать). А там и поковырять можно будет... По крайней мере, попробовать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.05.2009, 23:22
#44
Nikolay 2


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


Через день сформирую ТЗ
Nikolay 2 вне форума  
 
Непрочитано 05.05.2009, 10:16
#45
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Nikolay 2, Правильно. Для начала сформируй ТЗ с примером. Твои пару строк в предыдущем сообщении может быть понятны электрикам, а я
тоже максимум в розетке 220 дома ковырялся.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.05.2009, 10:57
#46
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Да ему все примерно тоже самое надо по ходу.
У меня так:
210-3х2(1) - это "длина"-"жильность"х"парность"(запас). 4 параметра
А у него пятый параметр добавляется впереди и подругому расположены параметры. Суть такая же. Возможно программно это не все так просто...
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 06.05.2009, 22:40
#47
Nikolay 2


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


Ну вот выношу вашему вниманию непростую задачу и то , как я себе это представляю и что необходимо автоматизировать:
1 этап.
- отрисовать в пространстве модели (чертеж № 1) условное обозначение кабелей (круг диаметром 10 мм) с номером кабеля внутри (например 1К, 2К и т.д.), при этом хотелось бы после завершения вычерчивания задать для него (кабеля 1К) в диалоговом режиме атрибуты (данные необходимые для спецификации - Марка, ГОСТ, ТУ): "тип" кабеля, "число"х"количество пар(жил)"x"сечение" жил кабеля;
- отобразить эти данные (без ГОСТа, ТУ) на чертеже (варианты размещения надписи показаны на чертеже №1), при этом поле "длина" остается пока с нулевым значением;
- "тип" кабеля, "число"х"количество пар(жил) "x" сечение" жил кабеля хотелось бы выбирались из справочника (данные либо в самом файле, либо во внешнем *.xls, *.cvs);
- предусмотреть возможность редактирования введенных данных (номер кабеля, тип, жильность, сечение);
- извлечь данные: "тип" кабеля; "число"х"количество пар(жил)"x"сечение" жил кабеля, в пределах
пространства модели и занести в таблицу на этом листе (при этом номера кабелей не отображаются и
поле "длина" пока остается не просуммированной, т.е. с нулевым значением);
- затем (или одновременно с предыдущей задачей) извлеченные данные передать в чертеж № 2 (возможно использование другого файла, либо пространства листа чертежа № 1), при этом каждый кабель заносится в свою строку (отображаются: номер кабеля 1К,2К и т.д., "тип" кабеля; "число"х"количество пар(жил)"x"сечение" жил кабеля, длина опять пока с нулевым значением;

2 этап.
- на плане (генплане) в пространстве модели (масштаб обычно 1:1) прокладываются кабельные трассы, все в одном слое, с указанием условных обозначений способов прокладки (в коробе, трубе и пр.) имеющимися
типами линий;
- затем полилинией, по проложенной ранее трассе, прокладывается трасса кабеля "Х", атрибут (параметр) "длина" берется из свойств этой полилинии, и в зависимости от единиц чертежа приводится к метрам (хотелось бы иметь возможность к ней прибавлять
запрашиваемую величину "подъем" + "опуск" в метрах, при этом номер кабеля каким то образом нужно "привязать" к этой полилинии и передать в чертеж № 1, где длина этого кабеля пропишется в соответствующих полях рядом с типом и количестов жил, и в чертеж № 2 (либо пространства листа чертежа № 1), где длина пропишется в соответствующих ячейках таблицы соединений внешних проводок;
- для каждого кабеля данные действия повторяются;
- затем производится суммирование кабелей по типам, жильности, сечению, из пространства модели и
результаты заносятся в таблицу чертежа № 1

работаю в ACad 2008ru
Вложения
Тип файла: dwg
DWG 2007
чертеж N 1.dwg (168.1 Кб, 3141 просмотров)
Тип файла: dwg
DWG 2007
чертеж N 2.dwg (131.4 Кб, 3005 просмотров)

Последний раз редактировалось Nikolay 2, 06.05.2009 в 22:42. Причина: дополнил
Nikolay 2 вне форума  
 
Непрочитано 07.05.2009, 09:06
#48
ElectroBOG

Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11


Цитата:
Сообщение от Nikolay 2 Посмотреть сообщение
Ну вот выношу вашему вниманию непростую задачу и то , как я себе это представляю и что необходимо автоматизировать:
И здесь посмотрите, многое взято от туда
http://forum.dwg.ru/showthread.php?t=12517&page=3

Только задачка попроще, и в моем случае более жизненная, а схемы подключений, соединений делаем в специализированном софте
ElectroBOG вне форума  
 
Непрочитано 07.05.2009, 10:00
#49
Nikolay 2


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


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

Последний раз редактировалось Nikolay 2, 07.05.2009 в 10:01. Причина: уточнил вопрос
Nikolay 2 вне форума  
 
Непрочитано 07.05.2009, 10:12
#50
ElectroBOG

Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11


Цитата:
Сообщение от Nikolay 2 Посмотреть сообщение
По ссылке решения для себя не нашел, т.к. предполагаю блоки не использовать...
По ссылке о блоках ничего не говорилось.
Цитата:
Сообщение от Nikolay 2 Посмотреть сообщение
Ну а жизнь у всех разная, только не понятно почему ты решил, что моя задача не жизненная??
Жизнь деиствительно у всех разная, сори если не корректно выразился,
говорил о своих задачах решаемых в ACAD
Цитата:
Сообщение от Nikolay 2 Посмотреть сообщение
Про софт скажи? или какой секретный?
Ни чего секретного,
E3 Series
Eplan
ACAD Electrical
ElectroBOG вне форума  
 
Непрочитано 07.05.2009, 10:16
#51
zamtmn

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


>>Nikolay 2
делаю подобную программу, часть Ваших требований она уже перекрывает http://forum.dwg.ru/showthread.php?t=8707
zamtmn вне форума  
 
Непрочитано 07.05.2009, 10:30
#52
Nikolay 2


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


Цитата:
Сообщение от ElectroBOG Посмотреть сообщение
По ссылке о блоках ничего не говорилось.

Жизнь деиствительно у всех разная, сори если не корректно выразился,
говорил о своих задачах решаемых в ACAD

Ни чего секретного,
E3 Series
Eplan
ACAD Electrical
Е куб смотрел давно, был еще 620 билд, т.к. не силен в написании макросов, то и прогу бросил;
Еplan тоже год как не подхожу, по Electrical 2008 даже сертификат имею, да вот приходится только в голом ACADе. И насколько знаю, внешние проводки данные проги не посчитают....хотя может и не прав. Е куб с макросами вроде бы считает, во всяком случае Денис Семенов об этом говорил.
Nikolay 2 вне форума  
 
Непрочитано 07.05.2009, 10:48
#53
ГеКИР


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


В WinELSO 7.0 всё вышесказанное делается очень просто:план с нанесенными кабелями охватывается прямоугольником и жмешь кнопку "документ" - программа выдает кабельный журнал со всеми подробностями (длина, жильность, способ прокладки, марка, от чего и к чему присоединен), спецификацию и ведомость проводов и кабелей. Очень удобно, рекомендую
ГеКИР вне форума  
 
Непрочитано 07.05.2009, 11:19
#54
ElectroBOG

Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11


Цитата:
Сообщение от ГеКИР Посмотреть сообщение
В WinELSO 7.0 всё вышесказанное делается очень просто:план с нанесенными кабелями охватывается прямоугольником и жмешь кнопку "документ" - программа выдает кабельный журнал со всеми подробностями (длина, жильность, способ прокладки, марка, от чего и к чему присоединен), спецификацию и ведомость проводов и кабелей. Очень удобно, рекомендую
Ты очень даже прав, только какова его цена
ElectroBOG вне форума  
 
Непрочитано 15.05.2009, 22:05
#55
Nikolay 2


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


Вниманию гуру лиспа!! Задание сформировал (как смог), что скажите о возможности реализовать ее лиспом?
Nikolay 2 вне форума  
 
Непрочитано 16.05.2009, 15:22
#56
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Даю некоторую поправку.
Если речь идет о специфицировании проложенных кабельных линий в модели, то есть линиями или полилиниями, обозначены конкретные кабели, с длинной в масштабе 1:1, то самое разумное, это в конкретном слое, конкретный тип линии, отнести к конкретному типу кабеля.

Можно все типы линий в конкретном слое отнести к конкретному типу кабеля, тогда слой будет по всей видимости иметь название схожее с наименованием типа кабеля.

Чтобы в данном слое, данный тип кабеля можно было приписать к нужному типу линий, надо создать динамический блок со свойствами и атрибутами типа того, что я тут выкладываю, только для кабелей определенной группы. Я такой блок сделал для труб по определенному госту, но такое же можно делать и для кабелей, и для грунта, и для чего угодно. Я называю такие блоки "виртуальными материалами".

Не путайте, господа, свойство материала с атрибутами! То, что является свойством, должно делаться свойством блока и при изменении этого свойства приводить к изменению *Unn имени блока. А атрибут, не меняет имя блока и его обрабатывать можно только распознав значение.

В Атрибуте "метод расчета" можно писать все, что угодно для лиспа, который обрабатывает модель. Можно даже лисп выражение писать.
Какую программу сделали, то и пишете.
Нашли блок - посмотрели в каком слое он лежит.
Прочли его "метод расчета" - если начинается с (, то тупо выполнили то, что там написано, а если там что-то другое, то например можно условиться, что А - все линии (все буквы это типы примитивов) 4 - сумма длин (все цифры это действия). Если написано А4, то это означает, что все линии в данном слое являются материалом, выставленным данным блоком и программа должна вычислить сумму всех длин отрезков (линий).
Этот же блок, можно в этом же слое скопировать рядом и установить в нем другое занчение материала написав в методе расчета B4 (В - 3D полилинии), к примеру. Программа, обработав его, выпишет в кабельный журнал нужные свойства блока, а посчитав длину всех 3D полилиний - напишет количество кабеля.

В одном блоке можно весь ассортимент кабелей упрятать.
Вложения
Тип файла: dwg
DWG 2004
Трубы стальные прямошовные.dwg (94.6 Кб, 3012 просмотров)
Supermax вне форума  
 
Непрочитано 17.05.2009, 08:11
#57
Nikolay 2


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


Предполагаю, что эти блоки созданы не просто ради разминки, т.е. есть программа которая их обрабатывает и делает что-то типа спецификации? Можно попробовать?
Nikolay 2 вне форума  
 
Непрочитано 17.05.2009, 20:51
#58
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Программы есть, но все кусочками. Я уже несколько лет разрабатываю эту тему, все хочу объять необъятное и этот пирог пока в глотку не пролазит.
Написать что-то простое, типа для кабельного журнала - не проблема, но мне это не интересно. Мне интересно чтобы всю модель обрабатвала, включая внешние ссылки и вложенные в них внешние ссылки. Там пару проблем нерешено.
Могу помочь кому-нибудь, кто хочет этот способ поддержать.
Supermax вне форума  
 
Непрочитано 17.05.2009, 22:50
#59
zamtmn

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


Nikolay 2
>>Вниманию гуру лиспа!! Задание сформировал (как смог), что скажите о возможности реализовать ее лиспом?
на лиспе не умею, но ИМХО есть:
На лиспе ваша задаса трудно и неудобно реализуема. основная причина - нет штатного примитива которым можно имитировать кабель.
сравнительно просто можно сделать общую спецификацию, как предлагает Supermax, ваше же ТЗ для лиспа сложновато.

>>- на плане (генплане) в пространстве модели (масштаб обычно 1:1) прокладываются кабельные трассы, все в одном слое, с указанием условных обозначений способов прокладки (в коробе, трубе и пр.) имеющимися
предлогается каждый кабель рисовать 2 раза? один для печати, другой для расчета?
zamtmn вне форума  
 
Непрочитано 17.05.2009, 23:39
#60
Кулик Алексей aka kpblc
Moderator

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


В "чистом" AutoCAD'e решение такой проблемы малорентабельно. Я бы подумал об использовании либо AutoCAD MEP, либо Civil, либо Revit - в зависимости от круга задач.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.05.2009, 08:19
#61
Nikolay 2


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


Цитата:
Supermax

Программы есть, но все кусочками....
Написать что-то простое, типа для кабельного журнала - не проблема, но мне это не интересно....
Если можно выложи что-то для того как ты в посте #59 предлагаешь решить данную задачу. Сейчас работаю так: полилинией прокладываю трассу, в свойствах смотрю длину, вношу в таблицу (acad) каждый кабель в свою строку (вручную там же прописываю тип и жильность для каждого кабеля), затем ее экспортирую в Excel (при необходимости ввожу поправки на опуски/подъемы), обрабатываю скриптом, в итоге имею в Excel таблицу с нормальными длинами по каждому кабелю и общую длину по каждому типу кабеля. Не решена задача возврата рассчитанных значений длин к Acad на свои позиции (они вообще то и не определены в Cade, не знаю как это сделать, хотя мечта есть). Думаю ваши решения могут помочь...

Цитата:
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Nikolay 2

предлогается каждый кабель рисовать 2 раза? один для печати, другой для расчета?
Обычно план сетей представлен на общем ГП на котором имеются и конкретные площадки, поэтому на печать на общем ГП выводится трасса прокладки от площадок (между площадками) до центрального пункта (перечень кабелей в трассе делается выноской). По площадкам прокладка кабелей оформляется в пространстве листа в определенном масштабе и на ней указаны все кабели (на листе общего плана сетей эти сети на площадках отключены). Поэтому получается, что для расчета рисуем все кабели, а на печать выводим определенные....

Цитата:
Кулик Алексей aka kpblc
В "чистом" AutoCAD'e решение такой проблемы малорентабельно. Я бы подумал об использовании либо AutoCAD MEP, либо Civil, либо Revit - в зависимости от круга задач.
Уже смотрю в сторону МЕР...., однако насколько я понял подоснова для моих нужд должна быть тоже сделана в нем?

Последний раз редактировалось Nikolay 2, 18.05.2009 в 08:43.
Nikolay 2 вне форума  
 
Непрочитано 18.05.2009, 11:54
#62
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Nikolay 2, для начала нужно сделать блок на какую-нибудь часто используемую группу кабелей. Можно по конкретному производителю.
Выбираем производителя, смотрим что он выпускает, составляем список его продукции и запихиваем в блок. О лиспе поговорим, когда блок будет готов.
Поскольку в блоке содержется вся информация о кабеле, который обозначен указанными типами линий, в слое, где лежит этот блок, то сформировать и проставить обозначения в модели - пустяк.
Цитата:
... вношу в таблицу (acad) каждый кабель в свою строку (вручную там же прописываю тип и жильность для каждого кабеля),...
Если программа будет заточена на промер каждого отрезка указанного типа линий, то она сама все сделает.
Цитата:
...при необходимости ввожу поправки на опуски/подъемы...
Тут тоже нужна программа, которая позволяет в 3D полилинии проставлять Z и добавлять вертикальные участки.
Цитата:
...Не решена задача возврата рассчитанных значений длин к Acad на свои позиции (они вообще то и не определены в Cade,...
Все элементы модели имеют значение последовательности создания. Если таблица значений создана с той же последовательностью, что и модель, то ее значения легко сопоставить с конкретными элементами модели. В Автокаде очень многое связано именно последовательностью создания и расположением в наборе.

Про вертикальные решения ничего сказать не могу. У меня в модели не только кабеля, но и трубы и арматура и насосы и пр. А жить ведь как-то надо.
Supermax вне форума  
 
Непрочитано 18.05.2009, 12:19
#63
Nikolay 2


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


Supermax
Цитата:
Nikolay 2 для начала нужно сделать блок на какую-нибудь часто используемую группу кабелей. Можно по конкретному производителю.
Выбираем производителя, смотрим что он выпускает, составляем список его продукции и запихиваем в блок....
В блоках не силен, да еще и запихнуть туда нужно кабели....попробую, может что и получится...посмотреть бы как это делается...
Nikolay 2 вне форума  
 
Непрочитано 18.05.2009, 12:25
#64
zamtmn

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


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


Блоки играют роль только "удобного" инструмента ввода данных в программу?

>>Если программа будет заточена на промер каждого отрезка
>>указанного типа линий, то она сама все сделает.


Нужно не только получить общую длину линий в слое, а сопоставить (поли)линию на плане с блоком на схеме подключений и проставить в этот блок ее длину. такчто без добавления дополнительных свойств в (поли)линии на планах не обойтись.

>>Тут тоже нужна программа, которая позволяет
>>в 3D полилинии проставлять Z и добавлять вертикальные участки.


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

>>Все элементы модели имеют значение последовательности создания.

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

Последний раз редактировалось zamtmn, 18.05.2009 в 12:35.
zamtmn вне форума  
 
Непрочитано 18.05.2009, 13:10
#65
Nikolay 2


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


zamtmn
Цитата:
Блоки играют роль только "удобного" инструмента ввода данных в программу?
Это я понимаю
Цитата:
Нужно не только получить общую длину линий в слое, а сопоставить (поли)линию на плане с блоком на схеме подключений и проставить в этот блок ее длину. такчто без добавления дополнительных свойств в (поли)линии на планах не обойтись.
Да это ключевая задача
Цитата:
Если человек проектирует на 2д подоснове, то это неудобно, нужно обойтись условной длиной добавляемой к измеренной длине кабелей. ее тоже нужно где то хранить
У нас пока в 99% случаев это 2D. Может быть это можно сделать в параметрах блока?
Цитата:
не знаю как сейчас, но раньше сохранность последовательности создания примитивов в автокаде не гарантировалась при дальнейшем редактировании чертежа
Тогда совсем плохо, сам знаешь, меняется все и часто...
Nikolay 2 вне форума  
 
Непрочитано 18.05.2009, 18:21
#66
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


zamtmn,
Цитата:
Блоки играют роль только "удобного" инструмента ввода данных в программу?
Блок это не инструмент ввода данных в программу, а бирка на конкретных типах линий (цвет линий тоже иожно использовать как идентификатор кабеля). В бирке свойствами устанавливаются свойства кабеля, а атрибут "метод расчета" - проволочка, с помощью которой эта бирка вешается на кабель. В атрибутах блока есть не только "Позиция в спецификации", но и "номер по схеме". Кабель, как известно, одним концом подключается к одному прибору, а другим - к другому.
Тут, я вижу, упорно пытаются именно кабелю приписать адреса подключения, но напомню, что если кабель многожильный,то с одной строны может быть один прибор, а с другой много + еще клеммы всякие.
Вы запутаетесь в блоках. Один блок с 20-тью атрибутами, другой с 10-тью, пятый с 30-тью.
Таблицу соединений нужно составлять опросив приборы. Вот к ним и надо делать атрибуты с номерами кабеля и их жил.
Кабель - это материал. Когда его сделали на заводе, еще не знали, кто и для чего его будет использовать. А блок с данными на кабель - его свойства и не более (я так считаю).
Supermax вне форума  
 
Непрочитано 18.05.2009, 18:37
#67
zamtmn

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


тут произошел глюк)) удалите пжста

Последний раз редактировалось zamtmn, 18.05.2009 в 18:44.
zamtmn вне форума  
 
Непрочитано 18.05.2009, 18:40
#68
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Добавлю.
Вот у вас 150 линий связи, каждая выполнена каким-то типом кабеля. Так получилось, что все 150 кабелей одинаковой марки. Если в блок, который символизирует марку кабеля входит еще и адреса подключений, то Вам придется копировать этот блок 150 раз. и все линии должны быть разные, либо по цвету, либо по типу линий. Это не удобно. Думаю, надо сделать отдельные блоки-маркеры, с указанием адресов подключения, а привязку к линии делать с помощью атрибутов с формулами. Программно можно прочесть указатель на линию, с которой берется длинна для атрибута и посмотреть в каком слое она лежит. Найти в этом слое блок-бирку "привязанную" к этой линии и считать данные на кабель.
В блоке-бирке даже номера по схеме не должно быть.
А блок-маркер можносделать в виде разъема.
Supermax вне форума  
 
Непрочитано 18.05.2009, 18:43
#69
zamtmn

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


>>Блок это не инструмент ввода данных в программу, а бирка на конкретных типах линий (цвет линий тоже иожно использовать как идентификатор кабеля). В бирке свойствами устанавливаются свойства кабеля, а атрибут "метод расчета" - проволочка, с помощью которой эта бирка вешается на кабель. В атрибутах блока есть не только "Позиция в спецификации", но и "номер по схеме". Кабель, как известно, одним концом подключается к одному прибору, а другим - к другому.

А если кабелей 500? на каждый вставлять блок? и ждать когда кончится разумное количество уникальных слоев или типов линий?

>>Тут, я вижу, упорно пытаются именно кабелю приписать адреса подключения, но напомню, что если кабель многожильный,то с одной строны может быть один прибор, а с другой много + еще клеммы всякие.
Вы запутаетесь в блоках. Один блок с 20-тью атрибутами, другой с 10-тью, пятый с 30-тью.


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

>>Таблицу соединений нужно составлять опросив приборы. Вот к ним и надо делать атрибуты с номерами кабеля и их жил.
Кабель - это материал. Когда его сделали на заводе, еще не знали, кто и для чего его будет использовать. А блок с данными на кабель - его свойства и не более (я так считаю).


Опрашивать можно хоть приборы хоть кабели. а лучше и то и другое. про жилы кабеля я ниче не говорю, это другой разговор. да, материал, но каждый кабель имеет свои условия прокладки, длину и т.д. это всё в проекте должно быть учтено, а не просто строка в спецификации "кввг - 5км"

>>то Вам придется копировать этот блок 150 раз
а вам придется 300 раз редактировать свойства устройств которые этот кабель соединяет.

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

Последний раз редактировалось zamtmn, 18.05.2009 в 19:06.
zamtmn вне форума  
 
Непрочитано 18.05.2009, 20:58
#70
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
...Я не предлагаю на каждый кабель вставлять блок, а говорю что без информации о каждом отрезке кабеля не обойтись. Где ее хранить - другой вопрос. имхо лучше в расширенных данных примитива имитирующего кабель ...
Если пишется программа для всех, а не только для себя, любимого, то надо очень тщательно все продумывать. Записывать данные в расширенные данные примитива - упремся в формат таких записей. Кончится тем, что созданную тобою модель может посчитать только созданная тобою же программа, а создать такую же модель другому человеку будет не легко. Формат данных - это самая гадкая штука, на которой погибло очень много хороших идей. Чем меньше мы используем расширенные данные, тем лучше.
Кто мешает в модели держать открытую, легко читаемую таблицу соединений? Не для выпуска листа документации, а для служебных целей. Если в такой таблице есть несколько М-текстов с полями, которые указывают на нужную линию и нужные объекты (приборы) - вот тебе и связь. Обрабатываем такую таблицу и делаем на основе данных, заключенных в ней любые документы.
В такой таблице и на блок-бирку можно М-текстом указатель вставить, чтобы проге легче было его выискивать. Тогда вообще отпадает необходимость в привязке блока-бирки к линиям по типу или цвету линий.
Читаем таблицу и в строке видим первый М-текст указывающий на нужную линию, второй - на блок-бирку, третий - на прибор №1 (контакт прибора), четвертый - на прибор №2 (или конктретный контакт) и т. д.
Все легко редактируется, копируется, читается и понятно даже полным блондинкам.
Блок-бирка - один на все кабели такого типа, просто он в таблице связан с кучей М-текстов. Чтобы посчитать общий расход кабеля достаточно его найти и обработать его "метод расчета".

Короче, я за служебную таблицу, а не за расширенные данные.
Supermax вне форума  
 
Непрочитано 18.05.2009, 21:29
#71
zamtmn

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


>>Если пишется программа для всех, а не только для себя, любимого, то надо очень тщательно все продумывать. Записывать данные в расширенные данные примитива - упремся в формат таких записей. Кончится тем, что созданную тобою модель может посчитать только созданная тобою же программа, а создать такую же модель другому человеку будет не легко. Формат данных - это самая гадкая штука, на которой погибло очень много хороших идей. Чем меньше мы используем расширенные данные, тем лучше.


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

Кто мешает в модели держать открытую, легко читаемую таблицу соединений? Не для выпуска листа документации, а для служебных целей. Если в такой таблице есть несколько М-текстов с полями, которые указывают на нужную линию и нужные объекты (приборы) - вот тебе и связь. Обрабатываем такую таблицу и делаем на основе данных, заключенных в ней любые документы.
В такой таблице и на блок-бирку можно М-текстом указатель вставить, чтобы проге легче было его выискивать. Тогда вообще отпадает необходимость в привязке блока-бирки к линиям по типу или цвету линий.
Читаем таблицу и в строке видим первый М-текст указывающий на нужную линию, второй - на блок-бирку, третий - на прибор №1 (контакт прибора), четвертый - на прибор №2 (или конктретный контакт) и т. д.
Все легко редактируется, копируется, читается и понятно даже полным блондинкам.
Блок-бирка - один на все кабели такого типа, просто он в таблице связан с кучей М-текстов. Чтобы посчитать общий расход кабеля достаточно его найти и обработать его "метод расчета".

Короче, я за служебную таблицу, а не за расширенные данные.


Никто не мешает. но возникают большие головняки - поддерживать эту таблицу в актуальном состоянии. У меня был такой подход, пришлось отказаться и генерировать таблицу соединений-подключений только тогда когда она нужна. на словах всё вроде просто и понятно. когда начинаешь делать - всё сложнее))
zamtmn вне форума  
 
Непрочитано 18.05.2009, 21:53
#72
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Вообще-то я сторонник того, чтобы элемент нес в себе все необходимые данные, в частности "приписанные свойства" и атрибуты. Под "приписанными свойствами" я подразумеваю такие свойства, которые принадлежат не графическому примитиву, а той физической сущности, которую он изображает. Я динамические блоки взял за основу хранения данных об изделиях и материалах именно поэтому.
Расширенные данные тоже своего рода "приписанные свойства", но я их использую для хранения значений видимости по группам. У меня прога, которая формирует много вариантов видимости модели (как в динамическом блоке) и я выбирая первый, или второй, или третий и т.д. указатель в расширенных данных, устанавливаю данному элементу параметр видимости. Расширить свой формат расширенных данных для хранения "приписанных свойств" можно, но тогда каждая линия в модели превратится из примитива в сложный объект и стереть ее и прорисовать заново будет уже не просто. Хотя с таблицей тоже самое будет.

Может лучше поднапрячься и сделать распознавание места соединения начала и конца 3D полилиний с конкретными точками на приборах?
Ведь по идее, только те точки, которые имеют одинаковые координаты X, Y, Z в пространстве модели и являются местом соединения провода с проводом, провода с клеммой и т.п. Программно вполне реализуемо.
Supermax вне форума  
 
Непрочитано 18.05.2009, 22:00
#73
zamtmn

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


Другой вариант - тыкаем в линию, узнать что это за "кабель". если линия хранит в себе эту информацию - всё ок, если нет нужно шарить по таблицам, вроде не критично, но всеравно не очень правильно.

>>Может лучше поднапрячься и сделать распознавание места соединения начала и конца 3D полилиний с конкретными точками на приборах?
у меня это есть, информация о подключениях строится динамически при редактировании кабелей
zamtmn вне форума  
 
Непрочитано 19.05.2009, 07:50
#74
Nikolay 2


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


Довольно давно пробовал подключить к Каду базу данных Access (она есть у меня в составе программы для составления спецификаций), подключилась, затем выбираю любой примитив (блок, созданный просто для удобства вставки "созать блок" без атрибутов и всего прочего) на чертеже присваиваю ему значение из базы данных и теперь при наведении на него мышкой подсвечивается что это, например, кабель КВВГ или датчик давления WIKA и пр. Как дальше все прикрутить, ну типа передать данные в таблицу (спецификацию) не пойму (в каде не очень продвинут). Может быть в эту сторону порыться?
Nikolay 2 вне форума  
 
Непрочитано 19.05.2009, 11:48
#75
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Считаю необходимым разделить задачи.
Я занимаюсь моделированием строительных процессов и для этого мне надо создавать "модель тела" и "модель действий". "Модель тела" я создаю в Автокаде и от нее мне требуется точное количество и параметры всех ее элементов. Такие данные, как, кто, с кем соединен и для чего - тут не нужны, хотя где-то это тоже должно быть.
Все мои потуги направлены на специфицирование модели в зависимости выбора условий (этап строительства, участок строительства, вид работ по разделам проекта и т.п.).
Здесь же, как я понимаю, идет базар о кабельных журналах и увязке элементов друг с другом по факту их совместной деятельности. Единственное что объединяет эти две задачи, это то, что и там, и там все делается на основе модели объекта, выполненной в масштабе 1:1.
Правда тут и про геоподоснову тоже пару слов есть, но поскольку она хоть и 2D, но 1:1 будем считать, что она тоже модель объекта.

Хочу также заметить, что таблицы соединений и принципиальные схемы хоть и показывают кабели, но их длинна там не соответствует действительности. Но зато там есть все данные о соединениях. По принципиальным схемам никто спецификцию не составляет. Только по монтажным. В кабельный журнал безусловно надо вносить длинну кабеля, но только после того, как кабель проложен в модели.
А как он там прокладывается? - рисуем линию, определяем ее цвет, тип, слой; вешаем на нее блок-бирку; вешаем на нее блок-указатель для связи с кабельным журналом. С чем еще надо связывать? да больше не с чем. Блок-бирку видно? - видно. Блок-указатель для связи с кабельным журналом видно? - видно. Если убить линию, то блок-указатель потеряет с этим объектом связь (там полем М-текста связь установлена). Прога легко найдет такой потерянный блок-указатель. Если на линию не ссылается ни один блок-указатель, но эта линия привязана к блоку-бирке, то прога начнет ругаться и укажет вам, где вы пропустили блок-указатель.
Мне блоки-указатели в модели не нужны, поэтому я их просто выключу. А вам они надо - вы их включите.
Можно прогу написать так, что линию вы будете строить из под проги, а она автоматически будет создавать блоки-указатели и приписывать к блокам-биркам. Блоки-указатели можно в стороне группировать в кучку, чтобы модель не нагружать, и с помощью все той же проги, выделив блок-указатель, подсвечивать нужную линию в модели (и наоборот).
С расширенными данными раз плюнуть забыть их в линию вставить или отредактировать. Их ведь не видно!
По сути, поле М-текста связывает два примитива в одну группу и это по сути почти блок. В М-ткст можно вставить связь сразу на несколько линий или примитивов.
Supermax вне форума  
 
Непрочитано 19.05.2009, 21:43
#76
Nikolay 2


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


Supermax
Цитата:
Здесь же, как я понимаю, идет базар о кабельных журналах и увязке элементов друг с другом по факту их совместной деятельности.
Это уже в идеале увязка между элементами нужна, но на данном этапе я это не планирую.
Цитата:
Хочу также заметить, что таблицы соединений и принципиальные схемы хоть и показывают кабели, но их длина там не соответствует действительности. Но зато там есть все данные о соединениях.
Здесь тоже должна быть увязка значения реальной длины кабеля проложенного в модели с длиной кабеля отображаемой на схеме соединений внешних проводок...
Цитата:
По принципиальным схемам никто спецификацию не составляет. Только по монтажным. В кабельный журнал безусловно надо вносить длину кабеля, но только после того, как кабель проложен в модели.
Да это конечно так
Цитата:
А как он там прокладывается? - рисуем линию, определяем ее цвет, тип, слой; вешаем на нее блок-бирку; вешаем на нее блок-указатель для связи с кабельным журналом. С чем еще надо связывать? да больше не с чем.
Как сказал ранее еще надо связать с этим же номером кабеля на схеме соединений внешних проводок
Цитата:
Блок-бирку видно? - видно. Блок-указатель для связи с кабельным журналом видно? - видно. Если убить линию, то блок-указатель потеряет с этим объектом связь (там полем М-текста связь установлена). Прога легко найдет такой потерянный блок-указатель. Если на линию не ссылается ни один блок-указатель, но эта линия привязана к блоку-бирке, то прога начнет ругаться и укажет вам, где вы пропустили блок-указатель.
Мне блоки-указатели в модели не нужны, поэтому я их просто выключу. А вам они надо - вы их включите.
Все логично
Цитата:
Можно прогу написать так, что линию вы будете строить из под проги, а она автоматически будет создавать блоки-указатели и приписывать к блокам-биркам. Блоки-указатели можно в стороне группировать в кучку, чтобы модель не нагружать, и с помощью все той же проги, выделив блок-указатель, подсвечивать нужную линию в модели (и наоборот).
Вот в этом то и дело, кто бы взялся ее написать?
Цитата:
В М-текст можно вставить связь сразу на несколько линий или примитивов
Для моей задачи получается нужно связать два поля, это возможно?
Nikolay 2 вне форума  
 
Непрочитано 20.05.2009, 11:26
#77
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Прежде, чем сесть за написание проги, надо создать пару-тройку блоков-бирок и блоков-указателей. Ведь состав свойств и атрибутов этих блоков имеет принципиальное значение для написания проги.
Цитата:
Для моей задачи получается нужно связать два поля, это возможно?
Что-то не догнал. Поле может показывать содержимое другого поля. В М-тексте можно вставить хоть сто полей и каждое из них будет указывать на значение свойства нужного примитива.
Supermax вне форума  
 
Непрочитано 20.05.2009, 12:33
#78
zamtmn

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


Поля не самое удачное решение
- много возни при копировании/вставке
- нет арифметики. те не зделать (фактическая длина +3м на подъем/опуск +0.5м на разделку кабеля) * 0.1 потомучто это фрагмент плана в такомта масштабе
zamtmn вне форума  
 
Непрочитано 20.05.2009, 12:48
#79
Nikolay 2


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


Supermax
Цитата:
Прежде, чем сесть за написание проги, надо создать пару-тройку блоков-бирок и блоков-указателей. Ведь состав свойств и атрибутов этих блоков имеет принципиальное значение для написания проги.
Состав то я могу определить-сказать, а вот с блоками не очень силен..
Цитата:
Что-то не догнал. Поле может показывать содержимое другого поля. В М-тексте можно вставить хоть сто полей и каждое из них будет указывать на значение свойства нужного примитива
Имею в виду, что поле значения, например, "длина кабеля КВВГ4х1" должно быть связано с кабельным журналом и схемой соединений внешних проводок
zamtmn
Цитата:
- много возни при копировании/вставке
Supermax написал же выше:
Цитата:
Можно прогу написать так, что линию вы будете строить из под проги, а она автоматически будет создавать блоки-указатели и приписывать к блокам-биркам.
если так можно сделать, то почему бы и не попробовать...
Цитата:
- нет арифметики. те не зделать (фактическая длина +3м на подъем/опуск +0.5м на разделку кабеля) * 0.1 потомучто это фрагмент плана в такомта масштабе
а что в полях разве нельзя формулу завести?

Последний раз редактировалось Nikolay 2, 20.05.2009 в 12:53.
Nikolay 2 вне форума  
 
Непрочитано 20.05.2009, 12:51
#80
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
- много возни при копировании/вставке
Ничего копировать и вставлять не надо. Все создается программой.
Цитата:
- нет арифметики. те не зделать (фактическая длина +3м на подъем/опуск +0.5м на разделку кабеля) * 0.1 потомучто это фрагмент плана в такомта масштабе
Во-первых, модель в 1:1. Во-вторых, и подъем и опуск в модели уже есть. В-третьих, все прекрасно наращивается любыми прибавками.
Если вы "рисуете", а не моделируете, то ручками и калькулятором длины вычисляйте. Я, всякие умозрительные представления о компоновке, даже мысленно делать не хочу. Только 3D модель и ее развертки в окнах Layout.
Supermax вне форума  
 
Непрочитано 20.05.2009, 12:56
#81
zamtmn

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


>> и подъем и опуск в модели уже есть
подоснова - 2Д. на ней городить 3Д - себе дороже
>>Если вы "рисуете", а не моделируете, то ручками и калькулятором длины вычисляйте.
Вы видимо слабо представляете электротехнические разделы)). 3Д - пока, и еще очень долго в электрике будет только на выставках и прочих презентациях
zamtmn вне форума  
 
Непрочитано 20.05.2009, 13:46
#82
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


zamtmn,
Цитата:
Вы видимо слабо представляете электротехнические разделы)). 3Д - пока, и еще очень долго в электрике будет только на выставках и прочих презентациях
Во-первых, если кажется - креститься надо. Слабо я что-то представляю или нет только я могу сказать.
Во-вторых, то, что вы считаете будет еще очень не скоро, на самом деле уже лет 7 бодро шагает по проектам. Электрика давно разводится в 3D. Во всяком случае - компановка шкафов. Даже есть много программ заточеных на это.
Не знаю из каких вы краев, но в Москве Мосгеотрест уже пару лет как освоил выдачу геоподоснов с 3D ландшафтом. И совсем не обязательно превращать 2D геоподоснову в 3D для того чтобы добавить на 3D полилинии вертикальный участок нужной длинны и выставить вершины по отметкам. Перевод 2D полилинии в 3D давно уже есть. Спроси у VVA.
На этом форуме о-о-чень давно есть темы о проставлении узлов 3D полилинии в соответствии с отметками поверхности на геоподоснове.
Это все ЭЛЕМЕНТАРНО!
Кстати, геоподоснова - модель, хоть и условная. Многое там с ошибками и неточностями, но это модель. Рисовать на геоподоснове линии-кабели есть моделирование их прокладки, а значит, если геоподоснова имеет масштаб 1:1, то длинна этих линий (при условии, что вы выставили вершины по отметкам и вертикальные участки добавили) дает точную длинну кабеля.
Надо заказать VVA сделать такую функцию (я про добавление вертикального участка и символа опуска у него).

Nikolay 2, давай, определяйся с производителем и его номенклатурой. Журнал будет формироваться по модели. Не связь с ним будет, а автоматическое его создание. Если расположить журнал и принципиальные схемы в одном файле, то и связь будет обеспечена.

Последний раз редактировалось Supermax, 20.05.2009 в 13:53.
Supermax вне форума  
 
Непрочитано 20.05.2009, 14:28
#83
zamtmn

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


>>Во-первых, если кажется - креститься надо. Слабо я что-то представляю или нет только я могу сказать.

Вы сами писали что занимаетесь не электрикой такчто мне не кажется)). Если обидел этой фразой - сорри

>>Во-вторых, то, что вы считаете будет еще очень не скоро, на самом деле уже лет 7 бодро шагает по проектам. Электрика давно разводится в 3D. Во всяком случае - компановка шкафов. Даже есть много программ заточеных на это.

шагает. и неплохо. Но 3Д не всегда экономически выгодно. Я понимаю автомобили проектировать, самолеты... Но когда ОВ дали 3Д задание, ВК - 2Д, а технологи вообще в карандаше? Зачем мне всё это дорабатывать, терять время и деньги? Шкафы тут вообще не аргумент. их полностью проектирую я и не от кого не завишу 2д или 3д - как мне выгодней.

>>Перевод 2D полилинии в 3D давно уже есть. Спроси у VVA.
На этом форуме о-о-чень давно есть темы о проставлении узлов 3D полилинии в соответствии с отметками поверхности на геоподоснове.
Это все ЭЛЕМЕНТАРНО!


не спорю. но просто добавить 5м еще элементарней. какая бы не была подоснова, и чем бы не был фактически выполнен кабель - возможность чтото добавить к длине или полностью переопределить длину (вбил 100м и пофиг как там проложено - меня заказчик "попросил" столько заложить) должна быть обязательно. Заметьте мой подход не отменяет вашего - если кабель проложен 3д в соответствии с реальной трассой - не заполняем поле "добавлять" - имеем фактическую длину

Последний раз редактировалось zamtmn, 20.05.2009 в 14:38.
zamtmn вне форума  
 
Непрочитано 20.05.2009, 15:11
#84
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я занимаюсь "виртуальным строительством" (сорри за саморекламу) это имитация строительных процессов, проще говоря строительство, но только в компьютере. Я уже охрип говорить об этом. Я по готовым проектам (а иногда и по эскизам) "строю" дома, ЦТП, наружные сети, благоустройство и т.п. В этой связи, я как прораб (коим я когда-то был) обязан знать все виды проектной документации. А до "вольных хлебов" я был руководителем отдела проектирования, и тоже, по роду службы обязан знать все и вся. И уж я-то не понаслышке знаю, какая это туфта наши проекты (и у меня до сих пор заказчики, как гири на ногах, мешают делать не туфту).
Я не хочу никого обидеть, но думаю каждый человек, способный на самокритику, знает где и что он может еще доработать.
Цитата:
Я понимаю автомобили проектировать, самолеты...
Да вы себе представляете, сколько бабла закапывается в землю только потому, что проекты не в 3D! Я в 3D теплотрассы развожу и вот что скажу, из-за того, что я ставлю точную копию тройников, отводов, шаровых кранов и пр. при пересчете на Старте нагрузок приходится часто менять направление прокладки глобально!
Вот когда просто условно линии рисуешь - все проходит, а тройник "в натуре" не лезет. Камеры - вообще молчу, без 3D и реальных моделей запоной арматуры даже представить трудно результат.
Сам, лично, участвовал в переделке камеры, где запорную арматуру поставили в принципе правильно, только человеку туда залезть и покрутить просто было не возможно.
Я в своих моделях вынужден все время 3D человечков расставлять, чтобы видно было ситуацию собслуживанием. А чтобы все это разрисовать - даже страшно подумать! Только за счет 3D и могу существовать.

Про добавление в М-тексте лишних метров/километров даже в поля лезть не надо. Поле вообще нужно только для пивязки к объекту, а на какое свойство оно смотрит - дело не принципиальное. Формат строки в М-тексте предлагаю такой:
К1 Ж1 поле1 цифра1 поле2 поле3
разделительнаый символ - пробел
К1 - номер кабеля
Ж1 - номер жилы в кабеле
поле1 - поле с указанием на линию, имитирующую кабель и ее свойство длинну.
цифра1 - прибавка к длинне на раздел и утруску-усушку
поле2 - поле с указанием на динамический блок-изделие, где Lookup-ом оформлен контакт блока. Поле указывает и на блок и на его Lookup.
поле3 - поле с указанием на динамический блок-изделие, где Lookup-ом оформлен контакт блока. Поле указывает и на блок и на его Lookup.
Supermax вне форума  
 
Непрочитано 20.05.2009, 22:05
#85
Nikolay 2


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


Supermax
Цитата:
Nikolay 2, давай, определяйся с производителем и его номенклатурой
В каком виде представить?
Цитата:
Да вы себе представляете, сколько бабла закапывается в землю только потому, что проекты не в 3D!
на 100% согласен, представь: вечная мерзлота, свайное поле, термостабилизация грунта сделана...и канализация-такой тоненькой ровненькой линией, а в жизни то это труба которую в 3D там просто не получается проложить!
Цитата:
А чтобы все это разрисовать - даже страшно подумать!
Все разрисовано, и вроде бы все путем, но при построении 3D модели не сростается. Я за 3D во всем.
Цитата:
К1 - номер кабеля
имеется ввиду типа 321К, ЁКЛМН?
Цитата:
Ж1 - номер жилы в кабеле
имеется ввиду именно жила или под жилой понимается тип кабеля, вроде бы говорилось, что тип прописывается в свойствах блока? Или номер жилы для этого:
Цитата:
Кабель, как известно, одним концом подключается к одному прибору, а другим - к другому.
Тут, я вижу, упорно пытаются именно кабелю приписать адреса подключения, но напомню, что если кабель многожильный,то с одной строны может быть один прибор, а с другой много + еще клеммы всякие.
Nikolay 2 вне форума  
 
Непрочитано 21.05.2009, 00:33
#86
Кулик Алексей aka kpblc
Moderator

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


Во народ дает!.. Не, ну представьте пару-тройку примеров, без этого же вообще разговаривать невозможно!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.05.2009, 07:44
#87
Nikolay 2


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Во народ дает!.. Не, ну представьте пару-тройку примеров, без этого же вообще разговаривать невозможно!
А пост#47?
Nikolay 2 вне форума  
 
Непрочитано 21.05.2009, 13:49
#88
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Nikolay 2, я посмотрел твои схемы и отмечу один недостаток. Не то чтобы серьезный, но на постановку задачи влияет.
Многожильные кабеля бывают с разным сечением жил, ты знаешь это. Бывают такие навороченные, что и описать сложно. Поэтому, как правило, на отдельном листе дают сечение кабеля и маркировку его жил. Там может быть и несколько экранов, и словые линии и даже оптоволоконные.
Имея условные обозначения жил (ж1, ж2, или просто 1, 2), в разьеме не только адресат указывается, но и обозначение жилы кабеля (три столбца контакт-адресат-номер жилы). Это не простой случай, но программу надо затачивать по полной.
Миниатюры
Нажмите на изображение для увеличения
Название: бронированный КМБ8-6.jpg
Просмотров: 100
Размер:	23.6 Кб
ID:	20810  

Последний раз редактировалось Supermax, 21.05.2009 в 13:57.
Supermax вне форума  
 
Непрочитано 21.05.2009, 16:24
#89
Nikolay 2


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


Supermax
Цитата:
Бывают такие навороченные, что и описать сложно. Там может быть и несколько экранов, и словые линии и даже оптоволоконные.
думаю, что этот случай не нужно рассматривать, давай использовать более простые. Считаю, что в повседневной работе, кабель с парным экранированием жил (несколько экранов) в одном кабеле и еще комбинированный: силовые и сигнальные жилы, встречается довольно часто, остальное очень редко. ИМХО
Цитата:
Поэтому, как правило, на отдельном листе дают сечение кабеля и маркировку его жил.
сделать то ее можно...
Цитата:
Имея условные обозначения жил (ж1, ж2, или просто 1, 2), в разьеме не только адресат указывается, но и обозначение жилы кабеля (три столбца контакт-адресат-номер жилы). Это не простой случай, но программу надо затачивать по полной.
а если как вариант, на первом этапе подключение производим просто к "устройству" без расключения жил, а дальше будет видно не в тупике ли...
Nikolay 2 вне форума  
 
Непрочитано 21.05.2009, 20:17
#90
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну давай.
Берем такую ситуацию:
Консоль, два блока с одной стороны консоли и другой.
1. случай.
Кабель один, входит как в блок1, так и в блок2 через гермоввод. То есть мы имеем только длинну кабеля, НО!
И блок1, и блок2 - 3D динамические блоки, имеющие свойства-контакты (lookup-ами сделанные).
Прога требует
- ткнуть в кабель
- задать название кабеля (1К по твоему)
- просит указать название жилы (1ж или 1э если экран)
- ткнуть в блок1
- появляется список контактов, надо выбрать нужный (в имя контакта входит и название разьема)
- ткнуть в блок2
- появляется список контактов блока2, надо выбрать нужный
- задать прибавку для длинны на раздел
- указать место, куда будет вставлен М-текст - блок-указатель.

Сколько связей в этом кабеле, столько раз надо проделать такую процедуру.

Появляются М-тексты состоящие из
- 1к (название кабеля)
- 1ж (название жилы) (как-то "название" глаз режет)
- поле с длинной кабеля
- поле с именем блока1
- Поле с данными lookupa блока1 (его контакт)
- поле с именем блока2
- Поле с данными lookupa блока2 (его контакт)
- длинна прибавки

Последний раз редактировалось Supermax, 21.05.2009 в 20:38.
Supermax вне форума  
 
Непрочитано 21.05.2009, 21:42
#91
Nikolay 2


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


Supermax
Цитата:
Прога требует
- ткнуть в кабель
- задать название кабеля (1К по твоему)
- просит указать название жилы (1ж или 1э если экран)
- ткнуть в блок1
- появляется список контактов, надо выбрать нужный (в имя контакта входит и название разьема)
- ткнуть в блок2
- появляется список контактов блока2, надо выбрать нужный
- задать прибавку для длинны на раздел
- указать место, куда будет вставлен М-текст - блок-указатель.

Сколько связей в этом кабеле, столько раз надо проделать такую процедуру.
если алгоритм работы проги позволяет не выходя из цикла ввода данных для кабеля 1К последовательно "соединить" контакты блока 1 с контактами блока 2, то количество будет равно удвоенному количеству жил+экраны+разделка (которую можно сделать фиксированной)+место вставки М-текста. Или я не о том?
Nikolay 2 вне форума  
 
Непрочитано 23.05.2009, 10:46
#92
zamtmn

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


Supermax
Зачем заморачиваться с жилами? это информация "берется" не из плана или схемы подключений, а из схемы электрической принципиальной и вставляется в схему подключений.
zamtmn вне форума  
 
Непрочитано 25.05.2009, 02:34
#93
zamtmn

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


Родилось "хитромудрое" решение. работает без автокада
http://download.shamangrad.net/zcad/cad.rar

на подоснову *.dxf подготовленую в акаде расставляем блоки оборудования (меню - план\КИПиА\расстановка оборудования) и соединяем все кабелями (план\кабельная трасса\новая трасса), всё называем и присвваиваем материалы.

свойства оборудования:


свойства кабеля:


свойства подъема\опуска (добавляет к длине проходяшего через него кабеля определенное значение, если кабельная трасса выполнена 2D)


на подготовленную снова в акаде схему подключений расставляем блоки маркировки кабелей и задаем им обозначения (по ним будет связь с кабелями на плане)



меню план/КИПиа/маркировка кабелей - длины и материалы кабелей обновляются из плана



попутно тыкаем кнопки КЖ и ВМ - экспортируем в эксель (CSV) кабельный журнал и суммарную ведомость материалов



В конце получаем:



Картинки из примера sample\test_dxf\KIPiA\

Последний раз редактировалось zamtmn, 25.05.2009 в 13:19.
zamtmn вне форума  
 
Непрочитано 25.05.2009, 14:11
#94
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Моя позиция по поводу увиденного - однозначно, не катит.
А катит с моей колокольни следующее:
- Рисуем принципиальную схему (без длин)
- Строим в 3D модели объекта реальную прокладку кабелей, со штрабами, лотками, подвесами и пр.
- Обрабатываем модель и составляем все нужные документы, включая прописывание длин туда, куда надо.
Лично мне надо такой способ моделирования, при котором автоматически создаются нужные документы. Автоматизировать устаревшие принципы производства документации не разумно.

У меня в модели, кроме электрики еще и весь остальной дом с коммуникациями.
Supermax вне форума  
 
Непрочитано 25.05.2009, 14:48
#95
zamtmn

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


Тоже самое 3D. но нужно ли оно в данном случае?

ИМХО, только лишнее усложнение

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

Последний раз редактировалось zamtmn, 25.05.2009 в 18:04.
zamtmn вне форума  
 
Непрочитано 25.05.2009, 15:20
#96
Nikolay 2


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


Supermax
Цитата:
- Рисуем принципиальную схему (без длин)
- Строим в 3D модели объекта реальную прокладку кабелей, со штрабами, лотками, подвесами и пр.
- Обрабатываем модель и составляем все нужные документы, включая прописывание длин туда, куда надо.
а если нет 3D модели используем 3D полилинию?
Цитата:
Лично мне надо такой способ моделирования, при котором автоматически создаются нужные документы.
Хотел бы я увидеть того, кто этого не хочет...
Цитата:
Автоматизировать устаревшие принципы производства документации не разумно.
просто хочется уже сейчас хоть немного облегчить работу.
Цитата:
У меня в модели, кроме электрики еще и весь остальной дом с коммуникациями
А у КИПовцев 3D модель площадок не часто бывает...
Supermax, хоть какие то подвижки в направлении
Цитата:
Прога требует
- ткнуть в кабель
- задать название кабеля (1К по твоему)
- просит указать название жилы (1ж или 1э если экран)
- ткнуть в блок1
- появляется список контактов, надо выбрать нужный (в имя контакта входит и название разьема)
- ткнуть в блок2
- появляется список контактов блока2, надо выбрать нужный
- задать прибавку для длинны на раздел
- указать место, куда будет вставлен М-текст - блок-указатель.
есть?
Nikolay 2 вне форума  
 
Непрочитано 25.05.2009, 21:49
#97
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Понимаете друзья, в задницу (надеюсь не сочтут это ругательством) село не проектирование, а само строительство. 3D моделирование нужно в первую очередь чтобы объект был построен хоть по какому-то плану. Имитация строительства в компьютере - вот для чего нужно 3D.
Да, в случае с геоподосновами 3D существует паралельно с 2D, но это ничего не меняет.
Анализ процесса проектирования показывает, что проектировщик все равно, в мозгу, строит (представляет) в 3D. Достаточно минимальных принятых решений в концепции, чтобы строить вообще без проекта, что не зачастую, а постоянно и происходит "в натуре".
Прорабы "кладут" на проекты и используют их только как сборник установок для строительства. Тезис "по такому проекту строить невозможно" реет над всеми стройками нашей многострадальной родины.
Поэтому, замена первого, пилотного объекта на виртуальное строительство не только единственный выход из этого тупика, но и самое эффективное средство для создания проектной документации.

Если вы имеете на руках проект - постройте объект в компьютере. До последнего винтика, да не просто "красивые картинки", а в той же последовательности, что в реальном строительстве. И вы получите опыт, который обычно получают построив объект живьем. Вот за что идет борьба.

Если у вас в руках модель, где можно каждый винтик и каждый арматурный прутик, каждый кусочек штукатурки и даже воздух потрогать руками, вы можете построить тоже самое не особо всматриваясь в условные значки и схемы. И никто уже не скажет "кабеля по факту ушло больше, чем заложено в спецификации" Модель любого вора выведет на чистую воду.

Но если есть модель, то почему бы с нее не "снять показания"? Составить смету не по укрупненным нормам, а по фактически примененным при моделировании объемам?

Если вас не устраивает результат - всегда можно "откатится назад", это же не реальный объект. Тут стену можно подвинуть за пять минут, а в жизни такое не получится.

Хоть электрика, хоть канализация, хоть что угодно, всегда надо с начала строить модель, показывать заказчику и только потом выпускать документацию полностью.

Для того, чтобы сделать 3D модель своего раздела не обязательно иметь 3D модель здания. Берете план в 2D и монтируете лотки, разнося их по Z в тех уровнях, которые нужны. В Автокаде, слава богу, нет гравитации

Nikolay 2, я пока в запарке и даже в темах ответы оперативно давать не могу. Жди.

Последний раз редактировалось Supermax, 25.05.2009 в 21:59.
Supermax вне форума  
 
Непрочитано 26.05.2009, 00:06
#98
zamtmn

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


>>Прорабы "кладут" на проекты и используют их только как сборник установок для строительства. Тезис "по такому проекту строить невозможно" реет над всеми стройками нашей многострадальной родины.

Это зависит не от проекта, а от прораба)) Бывает проект - дерьмо, слепят всё по проекту, бывает с хорошим проектом делают по своему.

>>Если у вас в руках модель, где можно каждый винтик и каждый арматурный прутик, каждый кусочек штукатурки и даже воздух потрогать руками, вы можете построить тоже самое не особо всматриваясь в условные значки и схемы. И никто уже не скажет "кабеля по факту ушло больше, чем заложено в спецификации" Модель любого вора выведет на чистую воду.
до какого винтика не разрабатывай - всеравно фактический расход будет отличаться. и не только изза "вора". ПРОВЕРЕНО

"Откатиться назад" - на словах красиво. на деле головняков такие откаты сильно добавляют при любом подходе к проектированию.

Хозяин-барин, нравится "виртуальное строительство" - очень хорошо. Еще лучше если за это доплачивают. Но качество проекта зависит не только от этого, не надо считать другие подходы "устаревшими"
zamtmn вне форума  
 
Непрочитано 27.05.2009, 21:27
#99
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Рискую уйти от темы, но все же надо правильно концепцию определить.
Дело не в "устаревших" способах проектирования. Что устарело? Устарел способ получения данных для выпуска чертежей. Сами чертежи, их внешний вид, состав, стиль оформления, все осталось по прежнему.
Спор сводится к тому, от куда брать данные для специфицирования. Из головы (вооружившись калькулятором), или из модели.
Сейчас даже моделирование узлов никто не заказывает. Проектировщики сами моделируют, так им легче. Естественно, любой труд должен оплачиваться, но один труд вытесняет другой и даже иногда больше вытесняет, чем он сам.
Потом 3D модели не рисуют, а собирают из библиотечных 3D элементов. Это быстро и эффективно. Гораздо быстрее, чем калькулятором считать длины стен и пр.

Цитата:
... до какого винтика не разрабатывай - всеравно фактический расход будет отличаться. и не только изза "вора". ПРОВЕРЕНО
Если плита перекрытия одна, то она одна и будет. Различие модели от факта может быть только если не учитывать процент на передел, брак и пр. А также, если модель сделана не полностью. Также будет отличаться, если строить по проекту не захотят.
Supermax вне форума  
 
Непрочитано 27.05.2009, 23:00
#100
Nikolay 2


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


Supermax
Цитата:
Что устарело? Устарел способ получения данных для выпуска чертежей.....Спор сводится к тому, от куда брать данные для специфицирования. Из головы (вооружившись калькулятором), или из модели.
Cпорить будет, как минимум, глупец. Концепция получения данных из модели конечно на 100% соответствует современному подходу к процессу проектирования. Как известно, "голова не дом Советов", вот прошло уже 3 дня как сдал работу, начал просматривать и упорядочивать проект, уже вижу глюки, хотя и калькулятор и карандаш всегда были рядом....
Nikolay 2 вне форума  
 
Непрочитано 27.05.2009, 23:04
#101
zamtmn

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


>>Спор сводится к тому, от куда брать данные для специфицирования. Из головы (вооружившись калькулятором), или из модели.

Про голову я ничего не говорил. говорил о возможности обойтись 2d моделью.
Всли задании нет 3д планов - строить их самому всеравно что брать данные из головы
zamtmn вне форума  
 
Непрочитано 07.07.2009, 08:16
#102
Behemoth


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


[quote=Alaspher;177001]

У меня похожая задача с подсчетом длин кабелей, да только спецификацию я выполнил в таблице.
Одна графа-марка кабеля, другая-метраж. Теперь необходимо посчитать длины кабелей одинаковой марки.

Как это можно выполнить?
У меня AutoCAD 2008 rus/
Behemoth вне форума  
 
Автор темы   Непрочитано 02.03.2010, 10:54
#103
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Поднимем старую тему.
Появилась необходимость дополнить данную программу
LCAB.lsp
Код:
[Выделить все]
(defun c:lcab (/ adoc alay asel dat fst len lock mod pnt row str suf tbl tmp text_color count countL)
  (vl-load-com)
  (setq text_color 5) ;_Номер цвета для посчитанного текста (256 для "послою")
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        asel (vla-get-activeselectionset adoc)
        alay (vla-get-activelayer adoc)
	count 0 countL 0
  )
  (vla-clear asel)
  (vla-startundomark adoc)
  (pl:obj-select-on-screen asel "*TEXT")
  (vlax-for i asel
    (setq str (vl-string-translate "х" "x" (strcase (vla-get-textstring i) t)))
    (if
      (and (/= (setq suf (vl-string-left-trim "0123456789" str)) str)
           (= (substr suf 1 1) "-")
           (/= (setq suf (substr suf 2)) "")
           (wcmatch suf "#x#,##x#,#x#(#),##x#(#),#(#),##(#),#x#(##),##x#(##),#(##),##(##)")
      )
      (progn           ;;; add VVA
	(setq count (1+ count)) ;;; add VVA
       (if (vlax-write-enabled-p i)
	   (vla-put-color i text_color)
	   (setq countL (1+ countL))
	 )
       (setq suf (substr suf 1 (vl-string-position 40 suf))
             suf (if (vl-string-position 120 str)
                   suf
                   (strcat suf "x1")
                 )
             dat (if (setq len (atof (substr str 1 (vl-string-position 45 str)))
                           tmp (assoc suf dat)
                     )
                   (subst (append tmp (list len)) tmp dat)
                   (cons (list suf len) dat)
                 )
       )
       )               ;;; add VVA
    )
  )
  (if (and (setq
             dat (mapcar (function (lambda (a) (cons (car a) (lcab_multi-modc (cdr a) 300))))
                         dat
                 )
           )
           (setq pnt (vl-catch-all-apply
                       (function getpoint)
                       '("Точка вставки таблицы <Отказаться>: ")
                     )
           )
           (not (vl-catch-all-error-p pnt))
      )
    (progn
      (if (= (vla-get-lock alay) :vlax-true)
        (progn (vla-put-lock alay :vlax-false) (setq lock t))
      )
      (if (setq fst (vla-item asel 0)
                mod (vla-get-height fst)
                tbl (vla-addtable
                      (vla-objectidtoobject adoc (vla-get-ownerid fst))
                      (vlax-3d-point (trans pnt 1 0))
                      (+ (length dat) 2)
                      4
                      (* 1.8 mod)
                      (* 9.6 mod)
                    )
          )
        (progn
          (vla-put-regeneratetablesuppressed tbl :vlax-true)
          (vla-settext tbl 0 0 "Спецификация кабеля")
          (vla-setcellalignment tbl 0 0 acmiddlecenter)
          (vla-setcelltextheight tbl 0 0 mod)
          (vla-settext tbl 1 0 "Жильность")
          (vla-settext tbl 1 1 "Длина")
          (vla-settext tbl 1 2 "Уч.")
          (vla-settext tbl 1 3 "Муфт")
          (vla-setcellalignment tbl 1 0 acmiddlecenter)
          (vla-setcellalignment tbl 1 1 acmiddlecenter)
          (vla-setcellalignment tbl 1 2 acmiddlecenter)
          (vla-setcellalignment tbl 1 3 acmiddlecenter)
          (vla-setcelltextheight tbl 1 0 mod)
          (vla-setcelltextheight tbl 1 1 mod)
          (vla-setcelltextheight tbl 1 2 mod)
          (vla-setcelltextheight tbl 1 3 mod)
          (vla-setcolumnwidth tbl 1 (* 6.0 mod))
          (vla-setcolumnwidth tbl 2 (* 3.0 mod))
          (vla-setcolumnwidth tbl 3 (* 4.5 mod))
          (vla-put-horzcellmargin tbl (* 0.4 mod))
          (setq row 1)
          (foreach i
                   (mapcar
                     (function (lambda (a) (nth a dat)))
                     (vl-sort-i
                       (mapcar
                         (function (lambda (a / q)
                                     (setq q (car a)
                                           i (1+ (vl-string-position 120 q))
                                     )
                                     (list (atoi (substr q 1 i)) (atoi (substr q (1+ i))))
                                   )
                         )
                         dat
                       )
                       (function
                         (lambda (a b) (or (< (cadr a) (cadr b)) (< (car a) (car b))))
                       )
                     )
                   )
            (vla-settext tbl (setq row (1+ row)) 0 (car i))
            (vla-setcellalignment tbl row 0 acmiddlecenter)
            (vla-setcelltextheight tbl row 0 mod)
            (vla-settext tbl row 1 (rtos (apply (function +) (cddr i)) 2 0))
            (vla-setcellalignment tbl row 1 acmiddleright)
            (vla-setcelltextheight tbl row 1 mod)
            (vla-settext tbl row 2 (- (length i) 2))
            (vla-setcellalignment tbl row 2 acmiddleright)
            (vla-setcelltextheight tbl row 2 mod)
            (vla-settext tbl row 3 (cadr i))
            (vla-setcellalignment tbl row 3 acmiddleright)
            (vla-setcelltextheight tbl row 3 mod)
          )
          (if (setq
                dat (lcab_mindex
                      (mapcar (function lcab_multir)
                              (vl-remove-if (function (lambda (x) (zerop (cadr x)))) dat)
                      )
                    )
              )
            (progn (if lock
                     (vla-put-lock alay :vlax-true)
                   )
                   (vla-endundomark adoc)
                   (vla-startundomark adoc)
                   (if lock
                     (vla-put-lock alay :vlax-false)
                   )
                   (vla-insertrows tbl (setq row (1+ row)) (* 1.8 mod) (1+ (length dat)))
                   (vla-mergecells tbl row row 0 3)
                   (vla-settext tbl row 0 "ИТОГО МУФТ")
                   (vla-setcellalignment tbl row 0 acmiddlecenter)
                   (vla-setcelltextheight tbl row 0 mod)
                   (foreach i (mapcar (function (lambda (a) (nth a dat)))
                                      (vl-sort-i (mapcar (function car) dat) (function <))
                              )
                     (vla-mergecells tbl (setq row (1+ row)) row 0 2)
                     (vla-settext tbl row 0 (car i))
                     (vla-setcellalignment tbl row 0 acmiddleleft)
                     (vla-setcelltextheight tbl row 0 mod)
                     (vla-settext tbl row 3 (cadr i))
                     (vla-setcellalignment tbl row 3 acmiddleright)
                     (vla-setcelltextheight tbl row 3 mod)
                   )
            )
          )
          (vla-put-regeneratetablesuppressed tbl :vlax-false)
          (vla-update tbl)
        )
      )
      (if lock
        (vla-put-lock alay :vlax-true)
      )
    )
  )
  (princ "\nПодсчитано текста : ") (princ(itoa count))
  (princ "\nЦзменен цвет :  ") (princ (itoa (- count countL)))
  (princ "\nна заблокированном слое : ") (princ(itoa countL))
  (vla-endundomark adoc)
  (princ)
)
(defun pl:obj-select-on-screen (sel enttype)
  (vla-selectonscreen
    sel
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))
  )
)
(defun lcab_multi-modc (lst mod)
  (cons (apply (function +) (mapcar (function (lambda (x) (/ (fix x) mod))) lst)) lst)
)
(defun lcab_multir (lst / lns str x)
  (setq str (car lst)
        lns (if (setq x (vl-string-position 120 str))
              (* (atoi (substr str 1 (1+ x))) (atoi (substr str (+ x 2))))
              (atoi str)
            )
  )
  (list (cond ((not (zerop (/ lns 62))) "N/A")
              ((not (zerop (/ lns 43))) "С-65М")
              ((not (zerop (/ lns 20))) "С-50М")
              ("С-35М")
        )
        (cadr lst)
  )
)
(defun lcab_mindex (lst / a asc ret)
  (if lst
    (if (setq ret (lcab_mindex (cdr lst))
              a   (car lst)
              asc (assoc (car a) ret)
        )
      (subst (list (car a) (+ (cadr a) (cadr asc))) asc ret)
      (cons a ret)
    )
  )
)
Ещё некоторыми примочками. А именно:
  • необходимо по команде возвращать первоначальный цвет для посчитанного кабеля
    Код:
    [Выделить все]
    (setq text_color 5) ;_Номер цвета для посчитанного текста
  • необходимо по команде выбирать кабель по маске (например выбираем 1950-7х2(2)).Затем считаем количество используемых жил (7*2)-2=12 жил. И командой редактирование текста подправить количество жил в чертеже.
  • необходимо по команде вставлять текст с количеством жил в кабеле. По сути это предыдущая команда, за исключением того что вместо редактирование текста идет его создание
Вот как выглядит это всё:
Миниатюры
Нажмите на изображение для увеличения
Название: 11.JPG
Просмотров: 3050
Размер:	11.6 Кб
ID:	34518  
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 12.10.2010, 10:49
#104
Kostalom


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


Добрый день. Просьба помочь дундуку в лиспе. Все что тут говорилось о подсчете кабеля подходит больше для слаботочников. Может кто глянет на вложеный файл и поможет сделать подсчет кабеля и труб при такой форме записи как в файле (в красном круге, необходимые параметры выделены красным).
Вложения
Тип файла: dwg
DWG 2007
Схема.dwg (192.7 Кб, 3344 просмотров)
Kostalom вне форума  
 
Непрочитано 12.10.2010, 11:52
#105
zamtmn

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


Вообще, было бы неплохо написать УНИВЕРСАЛЬНУЮ программу считающую что угодно (в пределах разумного конечно) по заданным маскам. Поправил маску - посчитал что надо, без вопросов в данном топике
zamtmn вне форума  
 
Непрочитано 14.10.2010, 12:53
#106
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


Интересная программа, но очень специфическая.
Подсчет длины кабеля происходит только в том случае, когда нужный кабель и его длинна записана в одном _mtext или _text.
А вот для отделов КИП и не только это не совсем подходит.
Есть другой способ и как по мне довольно универсальный. Который я не могу довести до ума. Может кто и поможет.
1) Расстановка дин блоков по чертежу. (см. вложение Вариант №1.dwg)
2) Запуск программы http://forum.dwg.ru/showthread.php?t=54936
3) Вывод результата в таблицу AutoCad либо с выбором в Excel

Довести до ума не получается.
1) Поиск и сравнение одинаковых атрибутов КАБЕЛЬ.
2) Если значение атрибутов КАБЕЛЬ одинаковые то просуммировать их длинны.
3) Сортировка результата построчно в таблицу. Метод сортировки неплохо бы сделать с выбором.
а) По алфавиту,
б) По перечню определенных слов вписываемых пользователем.
в) Рандом.
Если в сортировке попадаются цифры то:
КВВГ 4Х1,0
КВВГ 5х1,0
...
КВВГ 37х1,0
4) Выбор вставки этой же таблицы но в Excel (при этом не создавать новый файл .xls а предложить запись в уже существующий .xls)

Универсальность заключается в том, что каждый создаст себе нужный ему вид записи кабеля, далее программа отработаем все необходимые действия.
Вложения
Тип файла: dwg
DWG 2007
Вариант №1.dwg (92.6 Кб, 3407 просмотров)
Eddicordo вне форума  
 
Непрочитано 15.10.2010, 15:58
#107
vies


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


Мне понравилась програмка для подчета кабелей, но она не подходит под мои условия, она так сказать заточена под определённый вид записи.
А так как ЛИСП для меня абсолютно новый язык и лазение по английскому хелпу в котором не все команды описаны даёт покачто мало результатов.
Отсюда бооольшая просьба к тем кто разобрался в принципах работы этой проги НАПИШИТЕ ПЛИЗ коментарии к каждой строчке, это сильно упрастит мне нелегкое дело изучения ЛИСПА.
Заранее благодарен
vies вне форума  
 
Непрочитано 15.10.2010, 18:27
#108
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Eddicordo, В качестве чернового наброска.
Команда - CountCabel
Пример см. файл из поста #106.
Вложения
Тип файла: lsp countcabel.lsp (25.2 Кб, 190 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.10.2010, 15:25
#109
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


VVA
Считает отменно.
Можно подкорректировать несколько пунктов
1) Добавить подсчет в этом блоке не только атрибут КАБЕЛЬ.
tagCabel "КАБЕЛЬ" ;_Имя тага марки кабеля
tagLength "ДЛИННА_КАБЕЛЯ" ;_Имя тага длины кабеля

Но и
tagTruba "ТРУБА" ;_Имя тага марки трубы
tagLength_tr "ДЛИННА_ТРУБЫ" ;_Имя тага длины трубы


Возможно у некоторых для универсальности могут появится еще несколько подсчетов в одном блоке см. вложение
Кабель | Длина
Труба | Длина
Метало рукав | Длина
Разное | Длина

2) Сортировку делать по треста (разделам)
Каждому атрибуту "КАБЕЛЬ" "Труба" присваивается номер треста (НОМЕР_ТРЕСТА_КАБЕЛЯ) и по тресту формируется таблица.
Только мне не удается сделать единый Лукап для всех трестов кабеля и труб.
В итоге получилось в данном случае сделать несколько Лукапов
НОМЕР_ТРЕСТА_КАБЕЛЯ
НОМЕР_ТРЕСТА_ТРУБ
НОМЕР_ТРЕСТА_ЧЕГО_УГОДНО
Может для программы осуществить единый поиск атрибутов со стандартными названиями трестов к примеру:
НОМЕР_ТРЕСТА1
НОМЕР_ТРЕСТА2
НОМЕР_ТРЕСТА3
и т.д.
Эти атрибуты с трестами и сортировать во возрастанию. Не знаю как программно написать.
Атрибуты с одинаковыми трестами сортировать по алфавиту

В дальнейшем к каждому тресту будет присвоено свое Наименование (То что показано в таблице перечня оборудования) типа:
Кабель контрольный ГОСТ 1508-78E*

3) При длине кабеля (атрибута Длинна_кабеля) с десятыми 0,5 , запятую не понимает.
Если ничего сделать нельзя то можно каким то образом запретить ввод запятой

4) Вывод в Excel в уже созданных .xls файл.
Для того что бы можно было в Excel файле в других ячейках прописывать формулы.

А ну и чуток переделанный файл lsp прилагаю
Запуск
CountCabel
и
CountCabel_tr
Пытался сам ответить на свой 1 пункт


Да и еще пару моментов.


Подскажите какая строка отвечает за запись в Excel и какая переменная хранит в себе конечный результат?
Добавил вот такие строки
tagtruba "ТРУБА" ;_Имя тага марки трубы
tagLength_tr "ДЛИННА_ТРУБЫ" ;_Имя тага длины трубы


дописал в сохраненную переменную res теги для трубы
(setq res (cabel-count-by-attr BlockName tagCabel tagLength tagtruba tagLength_tr))
Но чет вытягивает все равно только атрибуты с кабелем

И запись в Excel насколько я понял
(xlsf (mapcar '(lambda (x / y)
(if (setq y (assoc x res))
(list (car y) (cdr y))
) ;_ end of if
) ;_ end of lambda
tmp
) ;_ end of mapcar
'("Наименование" "Кол.")
nil
nil
filename
) ;_ end of xlsf


А именно
) ;_ end of lambda
tmp
) ;_ end of mapcar
tmp - конечная переменная хранящая данные на вывод в Excel

Или я не прав?
Вложения
Тип файла: dwg
DWG 2007
Вариант №1-1.dwg (93.7 Кб, 3365 просмотров)
Тип файла: lsp countcabel.lsp (26.3 Кб, 116 просмотров)

Последний раз редактировалось Eddicordo, 19.10.2010 в 12:03.
Eddicordo вне форума  
 
Непрочитано 19.10.2010, 19:38
#110
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Новая версия.
Пример смотреть в посте #109
Основные принципы
1. Символ "|" зарезервирован и не должен встречаться в значениях атрибутов
2. Ф-ция cabel-count-by-attr подсчитывает значения длин и марок для кабеля в соответствии с переданными именами тагов. На самом деле передав ей имена тагов атрибутов для труб - подсчитает трубы и т.д
В команде CountCabel пользователь выбирает набор блоков, а потом к этому набору мы дважды (а можно и трижды для металлорукавов и т.п) применяем функцию countcabel с разными именами тэгов атрибутов. Результат объединяем в один список и его сортируем. Затем выводим в Excell
3. Вывод осуществляется в новый файл Excell, в уже созданный столбцы копируй ручками
Вложения
Тип файла: lsp countcabel.lsp (28.8 Кб, 149 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 10.11.2010 в 11:21. Причина: Новая версия
VVA вне форума  
 
Непрочитано 21.10.2010, 09:48
#111
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


VVA
Респект
Вроде все работает отлично.
Осталось протестировать и воплотить в проект. Далее возможно и чет вылезет.

Ну вот результаты тестирования.
1) Присвоил я атрибут "КОД_КАБЕЛЯ" к атрибуту "КАБЕЛЬ" Нужно что бы этот код выводило в таблице 4 столбце.
Почти получилось но не могу понять как мне перенести в 4 столбец и убрать подсчет количества. Да и как то съехало в лево
Кусок кода.
Код:
[Выделить все]
;;; Relis 2010-10-19
;;;http://forum.dwg.ru/showthread.php?p=639362#post639362
;;;http://forum.dwg.ru/showthread.php?t=17333

;;;===============================================================================
;;; Основные принципы
;;;  1. Символ "|" зарезервирован и не должен встречаться в значениях атрибутов
;;;  2. Ф-ция cabel-count-by-attr подсчитывает значения длин и марок для кабеля
;;;                               в соответсвии с переданными именами тагов
;;; На самом деле передав ей имена тагов атрибутов для труб - подсчитает трубы и т.д
;;; В команде CountCabel пользователь выбирает набор блоков, а потом к этому
;;;    набору мы дважды (а можно и трижды для металлорукавов и т.п) применяем
;;;    функцию countcabel с разными именами тэгов атрибутов. Результат объединяем в один список и его сортируем
;;; Затем выводим в Excell

(defun C:CountCabel (/ res lst tmp)
  (vl-load-com)
;;;=================================================================
;;;   Задаем значение тэгов атрибутов для поссчета кабеля
;;;=================================================================

  (setq tagCabel  "КАБЕЛЬ"  ;_Имя тага марки кабеля / трубы

tagKod  "КОД_КАБЕЛЯ"  ;_Имя тага марки  трубы

        tagLength "ДЛИННА_КАБЕЛЯ"  ;_Имя тага длины кабеля / трубы
        tagSort   "НОМЕР_ТРЕСТА_КАБЕЛЯ" ;_Имя тага для сортировки кабеля / трубы
        BlockName "*"       ;_ Маска для имени блока
  ) ;_ end of setq
;;; Формируем набор блоков для обработки.
  (princ "\nSelect cabel block < all drawing >: ")
  (if (null (setq ss (ssget '((0 . "INSERT") (66 . 1)))))
    (setq
      ss (ssget
           "_X"
           (list '(0 . "INSERT") '(66 . 1) (cons 410 (getvar "CTAB")))
         ) ;_ end of ssget
    ) ;_ end of setq
  ) ;_ end of if
  (setq lst (mip-conv-pickset-to-vlalist ss)) ;_ ФОрмируем список из набора
  (setq tmp (cabel-count-by-attr Lst BlockName    tagCabel  tagKod   tagLength tagSort)) ;Подсчитываем результат для кабеля
 (setq res (append res tmp)) ;_ Результат объединяем в один список
;;;=================================================================
;;;   Задаем значение тэгов атрибутов для поссчета труб
;;;=================================================================

  (setq tagCabel  "ТРУБА"  ;_Имя тага марки  трубы
tagKod  "КОД_ТРУБЫ"  ;_Имя тага марки  трубы
        tagLength "ДЛИННА_ТРУБЫ"  ;_Имя тага длины трубы
        tagSort   "НОМЕР_ТРЕСТА_ТРУБ" ;_Имя тага для сортировки трубы
        BlockName "*"       ;_ Маска для имени блока
  ) ;_ end of setq
  
(setq tmp (cabel-count-by-attr Lst BlockName    tagCabel tagKod    tagLength tagSort)) ;Подсчитываем результат для кабеля
(setq res (append res tmp))
  

  (if (setq tmp (SortStringWithNumberAsNumber (mapcar 'car res) t)) ;_Сортируем список
    (progn
      (xls (mapcar '(lambda (x / y)
                         (if (setq y (assoc x res))
                             (append (str-str-lst (car y) "|")(list (cdr y)))
                         ) ;_ end of if
                       ) ;_ end of lambda
                      tmp
              ) ;_ end of mapcar
              '("Трест" "Наименование" "Кол.")
              nil
              nil
        ) ;_ end of xls
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

(defun cabel-count-by-attr (Lst BlockName    tagCabel   tagKod  tagLength tagSort
                            / tagCabelValue tagKodValue tagLengthValue tagSortValue tmp  res)
;;;Подсчитывает блоки с атрибутами и возвращает ассоциативный список
;;; Lst - список Vla объектов  
;;; BlockName - имя блока или "*"   - любое имя
;;; tagCabel - имя тага атрибута, в котором содержится наименование кабеля  / трубы
;;; tagLength - имя тага атрибута, в котором содержится длина кабеля  / трубы
;;; tagSort -   Имя тага для сортировки кабеля / трубы
;;;  (setq tagCabel "КАБЕЛЬ"
;;;        tagLength "ДЛИННА"
;;;        BlockName "*"
;;;        )
  (setq tagCabel  (strcase (mip-conv-to-str tagCabel))

        tagKod (strcase (mip-conv-to-str tagKod))

        tagLength (strcase (mip-conv-to-str tagLength))
        tagSort (strcase (mip-conv-to-str tagSort))
        BlockName (strcase (mip-conv-to-str BlockName))
  ) ;_ end of setq
  (foreach item Lst
    (and
      (wcmatch (strcase (get-block-name item)) BlockName)
      (setq tmp (mapcar '(lambda (x) (cons (strcase (car x)) (cdr x)))
                        (get-all-atts item)
                ) ;_ end of mapcar
      ) ;_ end of setq
      (setq tagCabelValue (mip-conv-to-str(cdr (assoc tagCabel tmp))))

      (setq tagKodValue (mip-conv-to-str(cdr (assoc tagKod tmp))))

      (setq tagLengthValue (mip-conv-to-str(cdr (assoc tagLength tmp))))
      (setq tagLengthValue (atof (vl-string-translate "," "."  tagLengthValue)))
      (setq tagSortValue (strcat (mip-conv-to-str(cdr (assoc tagSort tmp))) "|"))
      (setq tagCabelValue (strcat tagSortValue tagCabelValue))

      (if (member tagCabelValue (mapcar 'car res))
        (setq res
               (subst
                 (cons tagCabelValue
                       (+ tagLengthValue (cdr (assoc tagCabelValue res)))
                 ) ;_ end of cons
                 (assoc tagCabelValue res)
                 res
               ) ;_ end of subst
        ) ;_ end of setq
        (setq
          res (append res (list (cons tagCabelValue tagLengthValue)))
        ) ;_ end of setq
      ) ;_ end of if




(if (member tagKodValue (mapcar 'car res))
        (setq res
               (subst
                 (cons tagKodValue
                       (+ tagLengthValue (cdr (assoc tagKodValue res)))
                 ) ;_ end of cons
                 (assoc tagKodValue res)
                 res
               ) ;_ end of subst
        ) ;_ end of setq
        (setq
          res (append res (list (cons tagKodValue tagLengthValue)))
        ) ;_ end of setq
      ) ;_ end of if
    ) ;_ end of and
  ) ;_ end of foreach
  res
) ;_ end of defun
Да и можешь показать мне где указанно в lisp-е, в какие столбцы вставляться результат. Просмотрел первый и второй файл countcabel.lsp
и сравнил функции (defun xls
Они идентичны но во втором случае появился столбец с трестами. Странно наверное не туда смотрю.

2) Можно добавить количество просуммированных длин кабелей и труб и т.д. (Тобиш сколько tagLength было между собой просуммировано).

3) Есть необходимость в блоке указывать Одну марку кабеля и несколько длин этого же кабеля. Так же и с трубами и т.д.
(Тобиш Один атрибут tagCabel "КАБЕЛЬ" и несколько tagLength "ДЛИННА_КАБЕЛЯ".) Тоесть появляются следующие атрибуты "ДЛИННА_КАБЕЛЯ1" , "ДЛИННА_КАБЕЛЯ2" и т.д. Которые между собой так же должны просуммироваться.

Что то вроде такого
Код:
[Выделить все]
  (setq tagCabel  "КАБЕЛЬ"  ;_Имя тага марки кабеля / трубы
        tagLength "ДЛИННА_КАБЕЛЯ1"  ;_Имя тага длины кабеля №1 / трубы №1
        tagLength "ДЛИННА_КАБЕЛЯ2"  ;_Имя тага длины кабеля №2/ трубы №2
        tagSort   "НОМЕР_ТРЕСТА_КАБЕЛЯ" ;_Имя тага для сортировки кабеля / трубы
        BlockName "*"       ;_ Маска для имени блока
  ) ;_ end of setq
По идее должно было бы просуммировать, но просуммировало только все "ДЛИННА_КАБЕЛЯ2"

Последний раз редактировалось Eddicordo, 21.10.2010 в 17:21.
Eddicordo вне форума  
 
Непрочитано 03.11.2010, 21:06
#112
Frigate

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


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

Пытаюсь решить схожие проблемы.
Хотя сейчас больше занимаюсь планом трасс, как основой для получения длин кабеля.
http://forum.dwg.ru/showthread.php?p=640116

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


Цитата:
Сообщение от Eddicordo Посмотреть сообщение
По идее должно было бы просуммировать, но просуммировало только все "ДЛИННА_КАБЕЛЯ2"
Потому что переменной tagLength окончательно присвоено "ДЛИННА_КАБЕЛЯ2".
Frigate вне форума  
 
Непрочитано 04.11.2010, 12:44
#113
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


Frigate, Добрый.
Цитата:
Сообщение от Frigate Посмотреть сообщение
Хотя сейчас больше занимаюсь планом трасс, как основой для получения длин кабеля.
Эта работа необходима которую вы проделали.
И я бы с удовольствием ее потестил.

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

А вообще вы забыли про самую первую "Схему автоматизации" в которой указываются абсолютно все приборы с номерами позиций к ним. Которые между прочим отражаются на плане. От чего и тянется собственно наш кабель.

Цитата:
Сообщение от Frigate Посмотреть сообщение
Сейчас уже подошел к написанию программ для автоматического подсчета кабеля (суммирование по типам)
Автоподсчет кабеля по типам смотри выше. Много уважаемый VVA написал программу которая это делает изумительно за что ему огромное Спасибо. Но с некими корректировками которые чет у мня не получаются.
Ну и так же вставкой таблицы перечня оборудования во "Внешние соединения" с указанной сортировкой по трестам.
Смотрю без изучения лиспа никуда и минимум месяца на изучение его.
Eddicordo вне форума  
 
Непрочитано 04.11.2010, 16:53
#114
Frigate

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


Eddicordo,

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

Да, я уже пытыюсь по косточкам разложить программу VVA. Во-первых, алгоритмы, во-вторых сам уровень программирования - то, чему у него мне еще учиться и учиться, как и у многих других участников. Так что программку я переработаю, обязательно.

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

Схему автоматизации и схему внешних соединений пока не пытался автоматизировать - тут нужно сначала продумать всю концепцию, учитывая при этом реальные возможности ЛИСПа (не хотел бы еще основательно изучать С++ - я все-таки не программист по профессии, лишь на прикладном уровне).
Frigate вне форума  
 
Непрочитано 08.11.2010, 11:47
#115
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Eddicordo, Обновил код в #110
Теперь считает и количество

Цитата:
Сообщение от Eddicordo Посмотреть сообщение
Есть необходимость в блоке указывать Одну марку кабеля и несколько длин этого же кабеля. Так же и с трубами и т.д.
Тобиш Один атрибут tagCabel "КАБЕЛЬ" и несколько tagLength "ДЛИННА_КАБЕЛЯ".) Тоесть появляются следующие атрибуты "ДЛИННА_КАБЕЛЯ1" , "ДЛИННА_КАБЕЛЯ2"
Я изменил вызов ф-ции countcabel/ Теперь в нее передается результирующий список Res. Так же выделил фрагмент кода, который нужно копировать при добавлении тэгов
Код:
[Выделить все]
;;;= 1 START========================================================
;;;   Задаем значение тэгов атрибутов для подсчета кабеля
;;;=================================================================
код
;;;= 1 END ==========================================================
;;;= 2 START========================================================
;;;   Задаем значение тэгов атрибутов для подсчета кабеля
;;;=================================================================
код
;;;= 2 END ==========================================================
Чтобы просуммировать несколько tagLenth нужно несколько раз вызвать countcabel с разными значениями тагов. Фрагмент кода (основное выделено красным)
Код:
[Выделить все]
;;;= 1 START========================================================
;;;   Задаем значение тэгов атрибутов для подсчета кабеля
;;;=================================================================

  (setq tagCabel  "КАБЕЛЬ"  ;_Имя тага марки кабеля / трубы
        tagLength "ДЛИННА_КАБЕЛЯ"  ;_Имя тага длины кабеля / трубы
        tagSort   "НОМЕР_ТРЕСТА_КАБЕЛЯ" ;_Имя тага для сортировки кабеля / трубы
        BlockName "*"       ;_ Маска для имени блока
  ) ;_ end of setq
  ;;;В списке res накапливаем марки кабеля, длинны и количество
  ;;; Причем список как передается в ф-цию cabel-count-by-attr? так и возвращается обратно
  (setq tmp (cabel-count-by-attr Lst BlockName tagCabel tagLength tagSort res));Подсчитываем результат для кабеля
  (setq Res tmp)
;;;= 1 END ==========================================================

;;;= 2 START========================================================
;;;   Задаем значение тэгов атрибутов для подсчета кабеля
;;;=================================================================

  (setq tagCabel  "КАБЕЛЬ"  ;_Имя тага марки кабеля / трубы
        tagLength "ДЛИННА_КАБЕЛЯ2"  ;_Имя тага длины кабеля / трубы
        tagSort   "НОМЕР_ТРЕСТА_КАБЕЛЯ" ;_Имя тага для сортировки кабеля / трубы
        BlockName "*"       ;_ Маска для имени блока
  ) ;_ end of setq
  ;;;В списке res накапливаем марки кабеля, длинны и количество
  ;;; Причем список как передается в ф-цию cabel-count-by-attr? так и возвращается обратно
  (setq tmp (cabel-count-by-attr Lst BlockName tagCabel tagLength tagSort res)) ;Подсчитываем результат для кабеля
  (setq Res tmp)
;;;= 2 END ==========================================================
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 10.11.2010 в 11:06.
VVA вне форума  
 
Непрочитано 10.11.2010, 10:06
#116
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


VVA, Вот молодца...

Есть один недочет.
При вставке в блоке
1 шт. атрибут КАБЕЛЬ
4 шт атрибута ДЛИННА_КАБЕЛЯ, ДЛИННА_КАБЕЛЯ2, ДЛИННА_КАБЕЛЯ3, ДЛИННА_КАБЕЛЯ4

Если я вписал длинны только в атрибуты ДЛИННА_КАБЕЛЯ, ДЛИННА_КАБЕЛЯ2. Остальные атрибуты с длинами пустые.

То подсчет количества длин (Count) в шт. не верное. Посчитает 4 шт.
А реально нужно всего 2 шт. поскольку вписано только в двух атрибута длинны.
Eddicordo вне форума  
 
Непрочитано 10.11.2010, 11:26
#117
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Обновил #110. Код не проверял, но должен работать. Принцип такой: Если в атрибуте, отвечающем за длину кабеля, длина 0 - то количество не наращивается. Алгоритм ф-ции atof (преобразования текста в число) таков - если текст содержит цифры, то преобразуется в число. Иначе получаем 0. Поэтому значение атрибута может быть пустым, после преобразования в число там все равно будет 0.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.11.2010, 23:50
#118
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Eddicordo Посмотреть сообщение
ДЛИННА_КАБЕЛЯ
Гы! в каком месте ударение ставить
gomer вне форума  
 
Непрочитано 29.11.2010, 18:20
#119
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


VVA, Считает отменно.
Идея с несколькими длинами одного кабеля заключается в том что вдин блоке присутствует состояние видимости. Тоесть:
1) Вставка дин блока.
2) Рядом параметр видимости "Кол. Длин"
3) Пользователь выбирает сколько длин будет относится к одной марке кабеля (tagCabel "КАБЕЛЬ")
4) Прописывает в каждом атрибуте длину кабеля.
Ну и вот возникает проблема. После указания всех длин кабеля в ходе работы нужно скрыть ненужную длину. Естественно "Тетка" уже не будет очищать проставленную длину, а просто скроет ее параметром видимости. LISP считает все длинны и их количества включая те что невидимые.
Можно скорректировать LISP так, что бы подсчет именно длин кабеля, считались только видимые атрибуты. Уточняю ИМЕННО ДЛИНЫ кабеля. Поскольку (tagSort "НОМЕР_ТРЕСТА_КАБЕЛЯ") У меня как раз находятся в невиде.

И еще одно. Дописал еще 1 атрибут в блок "Наименование_оборудование" которое нужно вытягивать и вставлять рядом со столбцом "Marka"
К примеру по столбцам:
"Trest"
1
"Наименование"
Кабель контрольный
"Marka"
КВВГ 4х1,0
"Length"
50
"Count"
2

Пытался переделать LISP но без результатно.

Да еще кое какой момент. Если использовать параметр видимости и к примеру я включаю 5 длин одного кабеля, проставляю длины.
В процессе работы нужно убрать не последнюю длину, а 3 к примеру.
А параметр видимости уберет именно последнюю.
Были мысли сделать на каждую длину свой параметр видимости. Вкл. Выкл. Вариант интересный, НО если сделать таких параметров с десяток и в каждой видимости несколько параметров движения то ПК нагружается очень сильно.
Может кто знает как решить эту проблему?

30.11.2010
По программе
Обнаружил недочеты. Необходимо предусмотреть отлов ошибок.
2 и более атрибутов жестко связанны между собой
tagCabel "КАБЕЛЬ"
и
tagLength "ДЛИННА_КАБЕЛЯ"
tagLength "ДЛИННА_КАБЕЛЯ2"
tagLength "ДЛИННА_КАБЕЛЯ2"
и.т.д.
Если длина кабеля не указана, то в список сам кабель с его пустой длиной не попадает.
Не проставлена длина это значит либо пустой атрибут либо с буквой "м" (метры). Пока не разобрался как к атрибуту присоединить суфиксы. И можно ли вообще.
Можно ли в таком случае выдавать сообщение о том что "Не все длины проставлены" продолжить подсчет и выделять цветом те блоки в которых не вписаны длины. При повторном использовании программы и подсчетах те блоки что были выделены цветом и вписаны длины убирать выделение цветом.

Последний раз редактировалось Eddicordo, 30.11.2010 в 12:46.
Eddicordo вне форума  
 
Непрочитано 18.09.2019, 17:04
#120
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


VVA, Добрый день.
Второй день мучаюсь пытаясь дописать в C:CountCabel дополнительный тег:
tagNamber "N1" ;_Имя тага позиционное обозначение кабеля / трубы
Значение тега tagNamber должно вписываться в таблицу столбец "Поз. обозначение" схема работы аналогичная тегу tagCabel.
Но никак не получается (.
Саму прогу дописывал господин Frigate, добавил вставку "м" в столбец примечания
Можешь помочь?
Прикладываю сам блок и lisp не корректно рабочий. countcabel_gotovo_Frigate+.lsp


Видимо будет сложно добавить этот тег в чужой код.
Если можно просто добавить tagNamber "N1" в написанную прогу выше пост 110. Для вывода этого тега в первый столбец экселя "Poz"
Poz Trest Marka Length Count


Прикладываю заново рабочий код и чертеж
Вложения
Тип файла: dwg
DWG 2007
1.dwg (174.6 Кб, 23 просмотров)
Тип файла: lsp countcabel_gotovo_Frigate.lsp (41.1 Кб, 16 просмотров)

Последний раз редактировалось Eddicordo, 19.09.2019 в 10:12.
Eddicordo вне форума  
 
Непрочитано 23.09.2019, 14:42
#121
Eddicordo

КИП и А
 
Регистрация: 28.04.2010
Киев
Сообщений: 101
<phrase 1=


Подправил лисп.
(setq tagCabel "NAME_CABINET" ;_Имя тага марки кабеля / трубы
tagNamber "POZ_1" ;_Имя тага позиция кабеля / трубы
tagLength "NAME_CABINET_SUM" ;_Имя тага длины кабеля / трубы
tagSort "ТРЕСТ_2" ;_Имя тага для сортировки кабеля / трубы

1) Вытягивает с атрибута "POZ_1" позицию оборудования и записывает в таблицу перечня столбец "Поз. обозначение". (если нет такого атрибута вставляет " ")
2) Вытягивает с атрибута "NAME_CABINET" наименование оборудования и записывает в таблицу перечня столбец "Наименование". АТРИБУТ ОБЯЗАТЕЛЕН (сравнивает значение атрибута NAME_CABINET на идентичность, если совпадает суммирует атрибуты NAME_CABINET_SUM)
3) Вытягивает с атрибута "NAME_CABINET_SUM" количество оборудования и записывает в таблицу перечня столбец "Кол.". АТРИБУТ ОБЯЗАТЕЛЕН (суммирует согласно п.2, ЕСЛИ "0" или нет атрибута вставки не будет)
4) Вытягивает с атрибута "ТРЕСТ_2" сортировка по строкам. Если будут указаны значения от 1 до 11 значит записывает в таблицу перечня столбец "Примечание" текст "м". Все остальные значения пусто. В коде можно подправить см. ниже
((and (>= group_n 1) (<= group_n 11)) "м")
((and (>= group_n 12) (<= group_n 21)) "")

Для вставки таблицы "перечень оборудования" в AutoCad, в самом чертеже необходим блок (adv_table_list_of_elem)
Вложения
Тип файла: dwg
DWG 2007
1.dwg (226.7 Кб, 38 просмотров)
Тип файла: lsp countcabel_gotovo_Frigate.lsp (46.3 Кб, 27 просмотров)
Eddicordo вне форума  
 
Непрочитано 30.09.2019, 02:48
#122
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 334


Меня конечно запинают адепты программирования, ибо я залез в их тему, но для ищущих решения по подсчетам все же порекомендую альтернативу.
Использование наименований слоев, использование малопригодной вещи под названием "гиперссылка" - и выгрузка с фильтрацией нужностей в эксель путем "извлечения данных". Так можно справиться в ряде случаев без желания изучить лисп или ВБА.
Theodor вне форума  
 
Непрочитано 06.02.2020, 14:09
#123
mclaud72


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


Лисп на #110 - прям то, что доктор прописал. Как еще туда добавить строчку заголовка таблицы Эксель с объединением столбцов A, B, C?
mclaud72 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужно посчитать кабель

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно ли сгущение арматуры под колонной при наличии металлич Aleks ManaeFF Прочее. Программное обеспечение 3 19.07.2007 12:02
Нужно ли показывать с спецификации болты, гвозди, анкеры? Колян Прочее. Архитектура и строительство 9 14.09.2006 08:09
Дали задачку на плаксисе посчитать rust-resisting Прочее. Программное обеспечение 1 25.03.2006 13:42
на какие ключи в реестре нужно дать полный доступ stanislav AutoCAD 1 19.10.2005 20:40
Когда нужно утеплять стены подвала? Колян Конструкции зданий и сооружений 15 02.10.2005 00:58