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

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

Помощь в составлении макроса указывающего центр массы фигуры

Ответ
Поиск в этой теме
Непрочитано 10.04.2019, 20:18
Помощь в составлении макроса указывающего центр массы фигуры
mr.frai1992
 
Регистрация: 10.04.2019
Сообщений: 47

Идея такая: по нажатию клавиши сначала выполняется команда _region выделяем замкнутый контур, он преобразуется в область, далее вызывается команда _massprop которая и находит координаты центра тяжести. Остается только построить круг с центром по найденным координатам с небольшим диаметром (использовать в качестве маркера).
команда очень облегчила бы мне работу, но своих знаний чтобы написать макрос не хватает пока...
Вот то что я пробовал
^C^C_region;_masspropp;
он только определяет область а геометрия и масса не запускается.
А как извлечь полученные координаты центра масс и подставить их для центра круга (маркера) вообще не представляю (вообще это можно сделать на уровне макросов или как-то иначе нужно?).
Надеюсь на вашу помощь
Просмотров: 4954
 
Непрочитано 11.04.2019, 10:55
#21
Кулик Алексей aka kpblc
Moderator

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


Семёныч, про привязки забыл.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.04.2019, 11:25
1 | #22
Семёныч


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


Алексей, я не забыл. Это специально простая программа без всяких проверок для выяснения возможности написать по её мотивам макрос меню. Мне самому представляется, что громоздить такой макрос ни к чему. Я бы запросто мог бы усовершенствовать свою программу, но я не первый выложил пример решения, есть уже другие варианты. Что скажет автор темы?

----- добавлено через ~6 ч. -----
Поскольку автор темы пока не дает о себе знать, рискну предложить ему и другим заинтересованным товарищам свою практически окончательную программу:
Код:
[Выделить все]
 ;;; Определение центра масс контура
(defun C:CENMASS ( / echo osm *error* obj ent vobj cen)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
;;; Обработчик ошибок
(defun *error* (msg)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ msg)
(princ)
) ; *error*
(setq obj T)
(while obj
(setq obj (car (entsel "\nВыберите замкнутый контур (Enter-завершить): ")))
(if (and obj  (or (= (cdr (assoc 0 (entget obj))) "LWPOLYLINE") (= (cdr (assoc 0 (entget obj))) "SPLINE"))
    ) ; and
    (progn
    (if (= (cdr (assoc 70 (entget obj))) 0) (vl-cmdf "_PEDIT" obj "_C" ""))  ;; Замкнуть полилинию, если не замкнута
    (if (= (cdr (assoc 70 (entget obj))) 1064) (vl-cmdf "_SPLINEDIT" obj "_C" ""))  ;; Замкнуть сплайн, если не замкнут
    (vl-cmdf "_REGION" obj "")
    (setq ent (entlast))
    (if (= (cdr (assoc 0 (entget ent))) "REGION")
        (progn
        (setq vobj (vlax-ename->vla-object ent))
        (setq cen_var (vlax-get-property vobj'Centroid))
        (setq cen (vlax-safearray->list (vlax-variant-value cen_var)))
        (vl-cmdf "_CIRCLE" cen "500")
        (princ "\nКоординаты центра масс:  ") (princ cen)
        ) ; progn
        (princ "\nЭто не область.")
    ) ; if
    ) ; progn
) ; if
) ; while
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)
Текст программы можно сохранить в файле с именем, например, cenma.lsp. Файл этот должен находиться на пути доступа
AutoCAD к файлам поддержки. Тогда макрос меню на кнопке для запуска программы может иметь вид:
Код:
[Выделить все]
^C^C^P(if (not C:CENMASS) (load "cenma")) CENMASS
Семёныч вне форума  
 
Непрочитано 19.04.2019, 14:47
#23
kp+

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


Цитата:
Сообщение от h5r32 Посмотреть сообщение
А чем не подходят готовые лиспы для определения геометрических характеристик?
Цитата:
Сообщение от mr.frai1992 Посмотреть сообщение
А как извлечь полученные координаты центра масс и подставить их для центра круга (маркера)
Если что, начиная с 2016 (а то и раньше) есть совсем уж штатное средство, особая привязка - называется "геометрический центр". Идеально для рисования круга.
Проверял, результаты совпадают с результатами _massprop.
Правда, работает только с замкнутыми полилиниями, сплайнами и т.п., но этого обычно достаточно. С регионами и т.п. как-то не дружит.
kp+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помощь в составлении макроса указывающего центр массы фигуры

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить к какому объекту относится центр? Den Commander AutoCAD 4 21.03.2017 18:17
LISP: центр масс фигуры по координатам WhiteShark Готовые программы 1 13.01.2015 22:14
Помогите, пожалуйста, найти центр тяжести сложной плоской фигуры. linki770 Разное 12 16.05.2013 00:17
VBA узнать центр дуги в полилинии AnteC Программирование 3 02.02.2013 01:27
Какой учеб. центр в Киеве учит работать с продук. Autodesk Silavsale Разное 2 03.12.2007 19:01