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

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

Сумма длинн 3D тел

Ответ
Поиск в этой теме
Непрочитано 03.03.2010, 15:04 #1
Сумма длинн 3D тел
DonJad
 
Murmansk
Регистрация: 20.12.2005
Сообщений: 106

Помогите пожалуйста, может у кого есть програмка - есть некоторое колличество 3д тел, circle - с extrude, нужно сложить у всех них параметр height из группы Geometry.

Т.е. в идеале лисп должен позволять выбирать все 3d тела в заданной области, и если у них есть параметр height - то складывать их в одно значение.

Извлечение данных, с этой задачей не справляется .

В поиске искал, но ничего конкретного не нашел.

Хотел сначала сделать все динамическим блоком, но у меня не получилось stratch заставить работать с 3д телом, он его не тянет, а просто перемещает. Может кто нибудь знает, как эту загвоздку обойти?
Просмотров: 3960
 
Непрочитано 03.03.2010, 20:47
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от DonJad Посмотреть сообщение
Хотел сначала сделать все динамическим блоком, но у меня не получилось stratch заставить работать с 3д телом, он его не тянет, а просто перемещает. Может кто нибудь знает, как эту загвоздку обойти?
на 3-мерку дин. блоки можно сделать с помощью массива

Цитата:
Сообщение от DonJad Посмотреть сообщение
в идеале лисп должен позволять выбирать все 3d тела в заданной области, и если у них есть параметр height - то складывать их в одно значение.
Код:
[Выделить все]
(vl-load-com)
(defun c:cylplus ()
(apply '+ (mapcar 'cdr (vl-remove nil (mapcar 'getcylinderinfo
(sstolist (ssget (list (cons 0 "3dsolid")))))
))));end of cylplus

(defun getcylinderinfo (obj)
(if (and
obj 
(= (type obj) 'ename)
(= (cdr (assoc 0 (entget obj))) "3DSOLID")
(setq obj (cdr (assoc 350 (entget obj))))
(setq obj (cdr (assoc 360 (entget obj))))
(setq obj (cdr (assoc 360 (entget obj))))
(= (cdr (assoc 0 (entget obj))) "ACSH_CYLINDER_CLASS")
);end of and
(setq 	obj (member (cons 100 "AcDbShCylinder") (entget obj))
	obj (cons (cdr (assoc 41 obj)) (cdr (assoc 40 obj))
);end of setq
);end of setq
);end of if
);end of cylinderinfo

(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst
);end of sstolist
работает только с цилиндрами у которых "установлена" высота, запускать командой cylplus.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 03.03.2010, 23:16
#3
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от DonJad Посмотреть сообщение
Хотел сначала сделать все динамическим блоком, но у меня не получилось stratch заставить работать с 3д телом, он его не тянет, а просто перемещает. Может кто нибудь знает, как эту загвоздку обойти?
Возможный вариант, использовать новый объект "Сеть" ("IAcadSubDMesh"), он вроде в А2010 появился. В дин. блоке обрабатывается операцией "растянуть", к тому же обрабатывается командами _sectionplane и _flatshot не хуже 3d solid, объем вычисляется _MEASUREGEOM...
Вложения
Тип файла: dwg
DWG 2010
1.dwg (226.9 Кб, 576 просмотров)
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 04.03.2010, 11:38
#4
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


AlexV - большое спасибо!!! как раз, поставил недавно 2010й ))

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


Я так сказать попробовал на свой страх и риск,
Код:
[Выделить все]
(vl-load-com)
(defun c:cylplusE ()
(apply '+ (mapcar 'cdr (vl-remove nil (mapcar 'getcylinderinfo
(sstolist (ssget (list (cons 0 "3dsolid")))))
))));end of cylplusE

(defun getcylinderinfo (obj)
(if (and
obj 
(= (type obj) 'ename)
(= (cdr (assoc 0 (entget obj))) "3DSOLID")
(setq obj (cdr (assoc 350 (entget obj))))
(setq obj (cdr (assoc 360 (entget obj))))
(setq obj (cdr (assoc 360 (entget obj))))
(= (cdr (assoc 0 (entget obj))) "ACSH_EXTRUSION_CLASS")
);end of and
(setq 	obj (member (cons 100 "AcDbShExtrusion") (entget obj))
	obj (cons (cdr (assoc 41 obj)) (cdr (assoc 40 obj))
);end of setq
);end of setq
);end of if
);end of cylinderinfo

(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst
);end of sstolist
но Акад ругается:
Код:
[Выделить все]
; ошибка: неверный тип аргумента: numberp: nil
DonJad вне форума  
 
Непрочитано 04.03.2010, 11:46
#5
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


DonJad, если хочешь работать с 3d solid, используя возможности программирования, то вот программка очень ничегошная: vba.3d-сортамент
Создание разного рода профилей с присвоением им определенных свойств, подсчет спецификации.. Очень интересно реализовано редактирование: профиль солида привязывается к осевой линии, и при изменении линии перечерчивается солид.. Исходники открыты, может на основе идей Mikka что-нибудь свое создашь..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 04.03.2010, 12:53
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Я уж не помню - давно в тех DXF рылся - они не сильно хорошо документированны, там получаеться что для каждого типа надо сделать свою процедурку и все это в кучу сложить (в твоем варианте даже если с кодом угодал - то цилиндры бы уже не считало), получаеться - нужны еще процедуры для box и просто вытянутой области - для ящика там все аналогично - а для области не так просто - там вектор который как-то надо пересчитывать чтоб правильную высоту получить.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 04.03.2010, 16:39
#7
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


to Дима_
Еще раз спасибо! попробую разобратся.

Если не затруднит, объясни, что происходит в этой строке?

Код:
[Выделить все]
оbj (cons (cdr (assoc 41 obj)) (cdr (assoc 40 obj))
в хелпе кстати сейчас нашел:

Код:
[Выделить все]
210
 Extrusion direction (fixed)

DXF: X value of extrusion direction

APP: 3D extrusion direction vector
AlexV Спасибо! Только програмка пока не работает под 2010м, ругается на VBA, буду следить за веткой!
DonJad вне форума  
 
Непрочитано 04.03.2010, 20:42
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от DonJad Посмотреть сообщение
Если не затруднит, объясни, что происходит в этой строке?
создает пару - радиус . высота цилиндра
p.s. про 210 пару не смотри - это не отнсится к нашему делу - это направление вектора экструзии.
p.p.s По этому поводу я пару лет назад выкладывал вот это.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 04.03.2010 в 20:51.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.03.2010, 10:02
#9
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


Порыл DXF (2010).
собственно нужное мне значение хранится здесь:

ACSH_EXTRUSION_CLASS
AcDbShSweepBase
30
xxx - искомая величина
DonJad вне форума  
 
Непрочитано 05.03.2010, 10:33
#10
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
AlexV Спасибо! Только програмка пока не работает под 2010м, ругается на VBA, буду следить за веткой!
Это, может, сам модуль VBA не подключен? Он по умолчанию отсутствует как класс в A2010, надо (если есть необходимость) скачать с сайта автодеска и устанавливать дополнительно.. Но ты, я так понимаю, с лиспом дружишь, так что необходимости видимо нет..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 05.03.2010, 10:46
#11
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


AlexV
Лисп я могу читать, и чуть-чуть править. не более того :/
DonJad вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Сумма длинн 3D тел



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять ломаное отображение тел при 3D Hidden mikmiron AutoCAD 4 04.01.2011 13:24
Извлечение данных из 3D тел Antonio555 AutoCAD 7 19.05.2010 09:15
Юмор 2009 DEM Разное 1736 01.01.2010 22:51
Вычитание 3D тел. hprx AutoCAD 1 04.04.2009 13:54
Отображение объемных тел в 3d игорёк AutoCAD 27 02.10.2007 16:02