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

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

Длина линий всего слоя

Ответ
Поиск в этой теме
Непрочитано 20.07.2006, 13:45 #1
Длина линий всего слоя
Hendrix
 
Astana
Регистрация: 20.07.2006
Сообщений: 2

Частенько требуется подсчитать сумму отрезков линий, или количество блоков, лежащих в одном слое.
Как это можно быстренько сделать?
Возможно есть какая либо команда?
Просмотров: 6130
 
Непрочитано 20.07.2006, 14:02
#2
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


есть лисп для подсчета всех длин отрезков всех слоев
написал не я, но я им пользуюсь и очень благодарен автору
(скорее всего автора КРЫС, но может быть доделывал лисп кто-то другой :) )
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 20.07.2006, 14:05
#3
slv

проектирование
 
Регистрация: 07.05.2006
Таллин
Сообщений: 72


Меня тоже давно интересует, нет ли у кого лиспа, который считал бы сумму значений, указанных на размерных линиях?
slv вне форума  
 
Непрочитано 20.07.2006, 14:05 Re: Длина линий всего слоя
#4
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


чуть лисп не забыл :)
Цитата:
(defun c:sdlina (/ m)
(vl-load-com)
(setq m (getreal "\nвведите маштабный коэффициент:\t"))
(princ "\n\n Общая длинна всех линейных примитивов по слоям:")
(mlen3_1 t)
(princ)
) ;_ defun
(defun mlen3_1 (i)
(if (setq i (tblnext "LAYER" i))
(progn
(mlen3_2 (cdadr i))
(mlen3_1 nil)
) ;_ progn
) ;_ if
) ;_ defun
(defun mlen3_2 (lay / SS SUM_LEN)
(if (setq
sum_len 0.
ss (ssget "_X" (list (cons 8 lay)))
) ;_ setq
(foreach item (mapcar
(function vlax-ename->vla-object)
(vl-remove-if
(function listp)
(mapcar
(function cadr)
(ssnamex ss)
) ;_ mapcar
) ;_ vl-remove-if
) ;_ mapcar
(setq
sum_len (+ sum_len
(if (vlax-property-available-p item 'length)
(vla-get-length item)
(cond
((=
(strcase (vla-get-objectname item) t)
"acdbarc"
) ;_ =
(vla-get-arclength item)
)
((=
(strcase (vla-get-objectname item) t)
"acbcircle"
) ;_ =
(* pi 2.0 (vla-get-radius item))
)
(t 0.0)
) ;_ cond
) ;_ if
) ;_ +
) ;_ setq
) ;_ foreach
) ;_ if
(princ (strcat "\n\t" lay " = " (rtos (* sum_len m) 2 4)))
) ;_ defun
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 20.07.2006, 14:05
#5
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Сначала с помощью Quick Select выбираешь необходимые объекты. Потом сюда http://dwg.ru/forum/viewtopic.php?t=953
Кочетков Андрей вне форума  
 
Непрочитано 20.07.2006, 14:32
#6
Кулик Алексей aka kpblc
Moderator

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


Автор наверняка не я Точно, не я
http://dwg.ru/forum/viewtopic.php?t=953
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.07.2006, 14:39
#7
VVA

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


LISP. Подсчет длины линий на определенном слое
VVA вне форума  
 
Непрочитано 20.07.2006, 14:40
#8
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от slv
Меня тоже давно интересует, нет ли у кого лиспа, который считал бы сумму значений, указанных на размерных линиях?
Что и как учитывать? Вопрос подобный как-то задавался. Учитываем реальные размеры или перебитые тоже? Что имеет приоритет? Учитываем только повернутые и выровненные размеры? Или радиусы и диаметры тоже? И как быть с угловыми?
Что делать, если в размер забит текст? А если текст заколочен вперемешку с цифрами?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.07.2006, 15:03
#9
slv

проектирование
 
Регистрация: 07.05.2006
Таллин
Сообщений: 72


Цитата:
Сообщение от kpblc
Цитата:
Сообщение от slv
Меня тоже давно интересует, нет ли у кого лиспа, который считал бы сумму значений, указанных на размерных линиях?
Что и как учитывать? Вопрос подобный как-то задавался. Учитываем реальные размеры или перебитые тоже? Что имеет приоритет? Учитываем только повернутые и выровненные размеры? Или радиусы и диаметры тоже? И как быть с угловыми?
Что делать, если в размер забит текст? А если текст заколочен вперемешку с цифрами?
Спасибо за отклик, kpblc!

Учитывать реальные размеры <>, учитывать только повернутые и выровненные размеры, текст и цифры не играют роли, так как учитывается только <>.
slv вне форума  
 
Непрочитано 20.07.2006, 15:18
#10
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:sumdim	(/ sum)
  (setq sum 0.)
  (foreach item
	   (vl-remove-if-not
	     '(lambda (x)
		(member	(vla-get-objectname x)
			'("AcDbRotatedDimension" "AcDbAlignedDimension")
			) ;_ end of member
		) ;_ end of LAMBDA
	     (mapcar 'vlax-ename->vla-object
		     (vl-remove-if
		       'listp
		       (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))
		       ) ;_ end of vl-remove-if
		     ) ;_ end of mapcar
	     ) ;_ end of vl-remove-if
    (setq sum (+ sum (vla-get-measurement item)))
    ) ;_ end of foreach
  (princ (strcat "\nСуммарный размер : " (rtos sum 2)))
  (princ)
  ) ;_ end of defun
===
Добавлено:
Учитываются только реальные размеры. Перебитые значения игнорируются
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.07.2006, 16:42
#11
slv

проектирование
 
Регистрация: 07.05.2006
Таллин
Сообщений: 72


Спасибо, kpblc!
slv вне форума  
 
Автор темы   Непрочитано 22.07.2006, 07:16
#12
Hendrix


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


Ну хорошо а к примеру у меня есть блок - MyBlok.
Как можно подсчитать количество блоков?

И ещё ребята! Каму не сложно подскажите пошагово как дальше бороться с лисп-кодом? что в Visual Lispe нажимать?
Hendrix вне форума  
 
Непрочитано 22.07.2006, 11:35
#13
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


Цитата:
Сообщение от Hendrix
Ну хорошо а к примеру у меня есть блок - MyBlok.
Как можно подсчитать количество блоков?
Самый простой способ посчитать блоки - это считать их аттрибуты.
Для тех, кто в лиспе не силен, функция AutoCad под названием ИЗВЛЕЧЕНИЕ АТТРИБУТОВ - это просто находка.
Вобщем алгаритм действий прост до безобразия:
предистовие:
допустим у вас есть чертеж, на котором нужно сосчитать блоки. Вы включаете в состав каждого блока аттрибут невидимый (точнее будет сказать, вы редактируете блоки, те которые будут считаться, и добавляете туду аттрибут невидимый и постоянный).
далее: теперь у вас на чертеже блоки с аттрибутами, которые надо сосчитать. Вам остается только запустить "ИЗВЛЕЧЕНИЕ АТТРИБУТОВ" и все. Получаем таблицу, которая еще и автоматически меняться будет при изменении колличества блоков или собедрагия аттрибутов.
НО! Если вы добавите в чертеж еще один блок, то помните! надо изменить параметрыизвлечения у таблицы
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 22.07.2006, 12:02
#14
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


Ой, оказывается извлечение аттрибутов работает даже если в блоках нет аттрибутов. Так что никаких дополнительных действий даже делать не надо. Просто запускаете извлечение аттрибутов, указываете какие блоки будете считать, указываете как вы их будете считать (На всем рисунке, на выделеной области или из нескольких рисунков), и указываете что вы будете считать - Имя.
И в итоге получаете таблицу с именами блоков и их колличеством. Таблицу кстати можно экспортировать с Excel, только экспортируется она с каким-то странным разрешением *.csv
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 24.07.2006, 09:27
#15
VVA

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


>Hendrix
>Pave1

Если стоит Express, то в командной строке bcount

csv - Comma-separated values
VVA вне форума  
 
Непрочитано 24.07.2006, 09:31
#16
Zouss


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


о старых простых способах подсчета не забываем - qselect или filter - выбор объектов (любых) с определенными свойствами..
Zouss вне форума  
 
Непрочитано 24.07.2006, 10:23
#17
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от VVA
>Hendrix
>Pave1

Если стоит Express, то в командной строке bcount

csv - Comma-separated values
Я лично предпоxитаю SSX из тех же ExpressTool'ов. считае т блоки ка хошь: скопом. поименно, послойно, вперемешку...
Лентяй вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Длина линий всего слоя