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

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

сумма площадей объектов

Ответ
Поиск в этой теме
Непрочитано 14.09.2011, 14:21 #1
сумма площадей объектов
baaba
 
архитектор
 
Москва
Регистрация: 07.07.2007
Сообщений: 644

Код:
[Выделить все]
 
(defun c:calcar (/ aaset)
;|Программа суммирует площади выбранных примитивов.
Суммарная площадь выводится в единицах чертежа.
Для архитектурно-строительных измерений надо заменить
в коде программы (calcar aaset (1- (sslength aaset)))
на (/ (calcar aaset (1- (sslength aaset))) (expt 10 6))
Конечно это не отменяет комманду "Area" с опцией "Add" -)|;
(setq aaset (ssget))

(defun calcar (aaset num)
  (if (<= 0 num)
    (progn
      (command "_.area" "_ob" (ssname aaset num))
      (+ (getvar "area") (calcar aaset (1- num)))
    ) 0 )
)

(calcar aaset (1- (sslength aaset))) 
)

Последний раз редактировалось baaba, 14.09.2011 в 14:44.
Просмотров: 6452
 
Непрочитано 14.09.2011, 14:59
#2
Кулик Алексей aka kpblc
Moderator

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


А что будет, если я подсуну в программу, например, отрезок? Или текст?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.09.2011, 16:36
#3
baaba

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что будет, если я подсуну в программу, например, отрезок? Или текст?
Имелось в виду это:
Код HTML:
Selected object does not have an area
?
В ближайшее время добавлю проверку.
baaba вне форума  
 
Непрочитано 14.09.2011, 21:47
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


А чем ObjectARX. GeomProps — площадь, длина, объем выбранных примитивов не устроил?
Или это процесс изучения AutoLisp?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.09.2011, 11:22
#5
baaba

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
А чем ObjectARX. GeomProps — площадь, длина, объем выбранных примитивов не устроил?
Или это процесс изучения AutoLisp?
Процесс. И потом я хочу менять код, дополнять, перерабатывать под свои нужды. arx мне не очень подходит на данном этапе. C++ я не знаю, исходники никто выкладывать не собирается. С лисп кажется проще.
К сожалению пока не пришло мне в голову как модифицировать код, что бы избежать ошибки на которую указал kpblc. Загвоздка в выхлопе "command "_.area" "_ob" если передать ей отрезок функция просит повторно ввести объекты. Может быть фильтры ssget попробовать? Но тогда очень много исключений.
baaba вне форума  
 
Непрочитано 15.09.2011, 11:46
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от baaba Посмотреть сообщение
исходники никто выкладывать не собирается.
Исходники уже публиковались в книге "Н.Н.Полещук. "AutoCAD: разработка приложений, настройка и адаптация".
Цитата:
Сообщение от baaba Посмотреть сообщение
Загвоздка в выхлопе "command "_.area" "_ob" если передать ей отрезок функция просит повторно ввести объекты.
Решение должно быть радикальным - не использовать командные методы (т.е. (command ...)), а ActiveX-модель AutoCAD (функция (vla-get-area)). Примеры найдёшь поиском.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 29.08.2014, 15:33
#7
baaba

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Исходники уже публиковались в книге "Н.Н.Полещук. "AutoCAD: разработка приложений, настройка и адаптация".

Решение должно быть радикальным - не использовать командные методы (т.е. (command ...)), а ActiveX-модель AutoCAD (функция (vla-get-area)). Примеры найдёшь поиском.
Да, абсолютно согласен!
Нашёл готовый вариант с vla-get-area и ssget, седьмой вариант. Модифицировал его немножко, что бы считал в квадратных метрах:

Код:
[Выделить все]
 
(defun C:APOLI ()
 (setq grupoli(ssget '((0 . "LWPOLYLINE")))
       area 0.00
       index 0
 )      
 (repeat (sslength grupoli)
  (if (= (vla-get-Closed (vlax-ename->vla-object (ssname grupoli index))) :vlax-true)
   (setq area(+ area (vla-get-area (vlax-ename->vla-object (ssname grupoli index)))))
  )
  (setq index(1+ index))
 )
;area
;если результат нужен в квадратных метрах - делю на 10^6
(/ area (expt 10 6))
)
baaba вне форума  
 
Непрочитано 29.08.2014, 15:39
#8
Кулик Алексей aka kpblc
Moderator

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


Для справки: в некоторых условиях полилиния может быть замкнута, а конструкция
(= (vla-get-closed ent) :vlax-true) вернет nil
Советую использовать equal вместо =
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.08.2014, 18:42
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Советую использовать equal вместо =
Не поможет, Леша. При помощи equal в этом случае нужно проверять первую и последнюю вершину, а не свойство Closed
Александр Ривилис вне форума  
 
Непрочитано 29.08.2014, 23:31
#10
Кулик Алексей aka kpblc
Moderator

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


Саш, я не помню, на какой версии я увидел, что свойство Closed равно True, а проверка типа (= (vla-get-closed ...) :vlax-true) возвращала nil - в то время как замена = на equal решила проблему. В последних версиях я этого не проверял - все время использую equal, пока проблем не видел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.08.2014, 23:47
#11
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Я не на это хотел акцентировать внимание. А на то, что замкнутая полилиния может быть как физически замкнутая (совпадают первая и последняя вершина) или логически (флаг замкнутости).
По поводу = или equal - очень может быть, что ты прав.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > сумма площадей объектов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма площадей Rianna AutoCAD 33 01.07.2022 14:58
Техническое задание на ремонт R.Stupakov Поиск литературы, чертежей, моделей и прочих материалов 15 27.07.2011 10:17
Сумма площадей фигур Владимир Сергеевич AutoCAD 2 09.12.2009 22:57
Сумма площадей выбранных штриховок selvinsky Программирование 2 02.10.2008 01:04
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35