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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Пожалуйста помогите создать LISP для изменения (масштабирования) площади замкнутой полилинии (контура)

Пожалуйста помогите создать LISP для изменения (масштабирования) площади замкнутой полилинии (контура)

Ответ
Поиск в этой теме
Непрочитано 25.10.2018, 10:29 #1
Пожалуйста помогите создать LISP для изменения (масштабирования) площади замкнутой полилинии (контура)
Karloson1
 
Регистрация: 17.12.2013
Сообщений: 13

Доброго времени суток Уважаемые форумчани!

По штудировал интернет ответа не нашел.

Помогите создать LISP или что то подобное для изменения площади объекта (контура замкнутой полилинии).
Смысл прост:
1. Есть полилиния, контур блока (замкнутая) с известной площадью например 638,478 в ед. чертежа
2. Есть площадь (в ед. чертежа) которой этот блок должен соответствовать например 630,000

Руками делаю таким образом:
1. Выделяю контур-через свойства, копирую площадь (638,478), считаю на калькуляторе- 630,000/638,478=0.986721547 (масштабный коэффициент) далее возвожу в квадратный корень получаю 0.993338586.
2. Выделяю линию (контур), командой масштаба масштабирую на эту единицу, получаю площадь блока 630.000 ед. чертежа... эффект достигнут

хотелось бы получить простую операцию: вызываю команду например "изменение площади" выбираю контур блока, команда спрашивает площадь нового контура я ввожу (например 630) подтверждаю, команда спрашивает базовую точку, указываю, готово (контур масштабирован)
эту операцию выполняю много раз на дню, устал.

Сам в Lisp-е новичок (очень хочу научиться) пока дальше простых скриптов не ушел (создать слой, поменять цвет, тип линии, привязать на кнопку).

Заранее благодарен за помощь!!!
Просмотров: 1595
 
Непрочитано 25.10.2018, 10:56
#2
trir


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


ST_Scale
trir на форуме  
 
Непрочитано 25.10.2018, 11:50
#3
RrRR


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


Можешь простой лисп сам сделать, в качестве обучения неплохо будет.
Для начала, свойство площади полилинии вытягивать можно через:
Код:
[Выделить все]
 
(vl-load-com) 
(setq vl_poly (vlax-EName->vla-Object (car (entsel))))
(setq poly_area (vlax-get-property vl_poly 'Area))
----- добавлено через ~13 мин. -----
Если до vl- еще не дошёл, пробуй так:
Код:
[Выделить все]
 
(command "_area" "object")
(setq a (getvar "area"))
RrRR вне форума  
 
Непрочитано 25.10.2018, 14:07
#4
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Karloson1 Посмотреть сообщение
Пожалуйста помогите создать LISP для изменения (масштабирования) площади замкнутой полилинии (контура)
Код:
[Выделить все]
 (DEFUN c:okl_masshab_squ_block (/ vla_obj v_squ v_n_squ v_kof v_bl+point)
;|
==>Масштабирование плоского примитива по заданой площади<==
Автор: Окл
E-mail: [email protected]
Принцып работы:
1. в командной строке ввести: okl_masshab_block;
2. выбрать масштабируемый примитив (имеюший площадь);
3. ввести необходимую площать для выбранного примитива, нажать клавишу Ввод;
4. Указать опорную точку для масштабирования плоского примитива;
5. Получаем результат.
|;
  (VL-LOAD-COM)
  (SETQ vla_obj (VLAX-ENAME->VLA-OBJECT (CAR (SETQ v_bl+point (ENTSEL "\nУкажите масштабируемый объект <Cancel> : ")))))
  (SETQ v_squ (VLAX-GET-PROPERTY vla_obj "Area"))
  (SETQ v_n_squ (GETREAL (STRCAT "\nПлощадь объекта: " (RTOS v_squ) "\nВведите необходимую (новую) площадь и нажмите \"Enter\" <Cancel> : ")))
  (SETQ v_kof (SQRT (/ v_n_squ v_squ)))
  (VL-CMDF "_scale" v_bl+point "" (GETPOINT "\nОпорную точку масштаба <Cancel> : ") v_kof)
)
__________________
Вечность это:
 (while T)

Последний раз редактировалось OKJI, 26.10.2018 в 16:40.
OKJI вне форума  
 
Непрочитано 25.10.2018, 17:02
#5
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Простейшая программа:
Код:
[Выделить все]
;;; МАсштабирование Полилинии
(defun C:МАП ( / echo osm pl pll vpll apll npll scpll rpl cen)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq pl (entsel "\nУкажите замкнутую полилинию (Enter-Отказ): "))
(if (and pl (= (cdr (assoc 0 (entget (car pl)))) "LWPOLYLINE"))
    (progn 
    (setq pll (car pl))
;;; Удаление возможных совпадающих вершин
    (vl-cmdf "_-OVERKILL" pll "" "_P" "_B" "_N" "_Y" "")
    (setq vpll (vlax-ename->vla-object pll))
    (setq apll (vlax-get-property vpll 'area))
    (princ "\nТекущая площадь полилинии = ") (princ apll)
    (initget 7)
    (setq npll (getreal " Требуемая площадь: "))
    (setq scpll (sqrt (/ npll apll)))
;;; Автоматическое определение базовой точки (центра тяжести полилинии)
    (vl-cmdf "_COPY" pll "" "@" "@")
    (vl-cmdf "_REGION" (entlast) "")
    (setq rpl (entlast))
    (setq cen (vlax-get-property (vlax-ename->vla-object rpl) 'Centroid))
    (setq cen (vlax-safearray->list (vlax-variant-value cen)))
    (entdel rpl)
    (vl-cmdf "_SCALE" pll "" cen scpll)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Вариант с указанием базовой точки
;;;    (princ "\nБазовая точка: ")
;;;    (vl-cmdf "_SCALE" pll "" pause scpll)
    ) ; progn
) ; if
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ "\nСделано.")
(princ)
)
Setvar вне форума  
 
Автор темы   Непрочитано 26.10.2018, 07:13
#6
Karloson1


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


Большое всем спасибо! все работает как надо!!!

буду учиться Lisp-у...
Karloson1 вне форума  
 
Непрочитано 26.10.2018, 07:54
#7
trir


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


удобней загрузить данные в БД и обработать их SQL'ем
trir на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Пожалуйста помогите создать LISP для изменения (масштабирования) площади замкнутой полилинии (контура)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста, помогите, нужен lisp для выбора объектов macros55 LISP 33 15.01.2016 14:38
Помогите, пожалуйста, с узлом сопряжения балок. Двутавр 55Б1 в 45Б2 Житель леса Металлические конструкции 31 18.02.2014 15:04
Помогите поправить Lisp "разрез" pashafed LISP 9 21.06.2013 14:51
Пожалуйста, помогите найти техкарту на облицовку купола ! Олич Поиск литературы, чертежей, моделей и прочих материалов 2 11.05.2011 16:45
некорректно определяется площадь замкнутой полилинии elena_din AutoCAD 16 23.09.2005 17:37