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

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

Создание листа и вписывание в него объекта на LISP

Ответ
Поиск в этой теме
Непрочитано 08.04.2021, 17:09
Создание листа и вписывание в него объекта на LISP
[igrik]
 
Инженер-конструктор
 
Крым
Регистрация: 04.06.2014
Сообщений: 15

Добрый день всем.
Хочу написать маленький LISP, который будет автоматически создавать 1 лист и вписывать выбранный объект/блок в этот лист.
Но сам в этом пока что ничего не понимаю. Подтолкните с чего правильнее начать, потому что в самом начале знакомства с LISP не хочется перелопатить тонну литературы. Хорошо знаю C++ и JS

Пошаговый алгоритм я придумал:
1) Жмём, например, F12;
2) Автокад просит нас указать любой объект, пользователь выбирает нужный объект;
3) Программа выводит запрос аля "^C^C^RРЛИСТ Ш Шаблоны.dwt" (в файле шаблоны уже созданы листы всех необходимых форматов с установленным в них видовым экраном по границам листов), и пользователь выбирает необходимый формат из предложенного списка форматов; (мы точно уверены, что у нас гарантированно есть 1 и только 1 видовой экран на листе)
4) После данного выбора формата (пусть будет А3), программа:
5.1) создаёт лист А3 из шаблона и переименовывает его в "л.(номер следующего листа)", например л.(1);
6.2) точно по границам видового экрана вписывает этот объект в созданный лист;
6.2*) при необходимости: из пространства листа программа возвращает нас в модель;
6.3) действие программы закончено: передать пользователю управление и выход из программы;

Файл шаблона прилагаю (https://disk.yandex.ru/d/-1yLcgBEtHsqiw)
Программа должна работать в AutoCAD 2011 и 2016

Хотелось бы помощи в виде:
1) это можно сделать с помщью команды name
2) это можно сделать с помщью команды name
3) тут нужно сохранить параметры объекта (например в массив) и с помощью команды name выполнить что-то
и т.д.

UPD 15.04.2021
Код:
[Выделить все]
 ; БЫСТРОЕ РУЧНОЕ СОЗДАНИЕ ЛИСТА (ИЗ ШАБЛОНА)

; автор: [igrik]
; дата: 14.04.2021
; лицензия: GPL (Свободное ПО)

; требования: для работы скрипта необходим файл "Шаблоны.dwt" по пути
; C:\Users\<имя_пользователя>\AppData\Local\Autodesk\AutoCAD <год>\<версия>\rus\Template

; функционал:
; - при вызове функции "QuickCreateNewLayout" пользователь должен
;    1) указать в пространстве модели 2 крайние (по диагонали) точки абстрактного прямоугольника,
;   	который в дальнейшем будет вписан в создаваемый лист;
;    2) выбрать формат создаваемого листа;

; - после этого скрипт:
;   - создаст лист с видовым экраном по шаблону;
;   - впишет в него выбранное пространство
;   - и переименует новый лист в следующее число (а-ля "1", "2", "3" и т.д.)


(defun c:QuickCreateNewLayout ( / layoutName tabMax p1 p2 lastViewport )
    
    ; Turn OFF command line echoing
    (setvar "cmdecho" 0) 

	; Отключаем пространство листа и делаем текущим пространство модели
	(setvar "tilemode" 1) 

	; получаем от пользователя 2 вершины области
	(setq p1 (getpoint "\nУкажите одну из вершин области: "))  
	(setq p2 (getcorner p1 "\nУкажите противоположную вершину области: "))

    ; необходим для вызова старой версии команды "_layout"
    (InitCommandVersion 2) 
    ; создание листа по шаблону
    (command "_layout" "_t" "Шаблоны.dwt" ) 

    ; инициализация переменных
    (setq layoutName "igrik") 
    (setq tabMax 0)

    ; Загрузка функций ActiveX
    (vl-load-com) 

    ; получаем список листов
    (vlax-for lyt 
        (vla-get-layouts
            (vla-get-activedocument (vlax-get-acad-object)) 
        )  
        ; исключаем из цикла "Модель"
        (if (not (eq "MODEL" (strcase (vla-get-name lyt))))
            (progn 
                ; по номеру закладки листа ищем id последнего листа
                (if (< tabMax (vla-get-TabOrder lyt) )
                    (progn            
                        (setq tabMax (vla-get-TabOrder lyt))
                        (setq layoutName (vla-get-name lyt))
                    )
                )
            )
        )
    )

    ; переименовываем полдений лист в "цифру"
    (command "_layout" "_r" layoutName (itoa tabMax))
    (setq layoutName (itoa tabMax))

    ; Проверяем название листа (если Модель, то выход)
    (if (/= layoutName "Model") 
        (progn
            ; переходим в новосозданный лист
            (setvar "ctab" layoutName)

            ; запомнить название видового экрана (для блокировки оного)
            ; (setq lastViewport (ssget "_L")) 

            ; Открыть видовой экран
            (command "_mspace") 
            ; вписываем выбранную область по точкам (через функцию зуммирования)
            (command "_zoom" "_w" p1 p2) 

            ; Блокировка видового экрана
            ; (command "_vports" "_LOCK" "_ON" lastViewport "") 

            ; Закрыть окно видового экрана
            (command "_pspace") 

            ; Делаем лист на весь экран
            (command "_zoom" "_e") 

            ; Переходим на вкладку Модель
            (setvar "ctab" "Model") 
        )
        ; с случае ошибки: информируем пользователя
        (alert "\nЭта команда может быть запущена только на вкладке ЛИСТ!") ; 
    ) 
    ; Turn ON command line echoing
    (setvar "cmdecho" 1) 
)

; end script
Видео-инструкция:
https://youtu.be/K0F9IdW9ulQ

Вложения
Тип файла: lsp QuickCreateNewLayout.lsp (3.3 Кб, 80 просмотров)


Последний раз редактировалось [igrik], 28.04.2021 в 22:19. Причина: Добавлена видео инструкция
Просмотров: 9007
 
Непрочитано 22.08.2023, 15:54
#21
Serafym


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


В моём шаблоне в отличии от родного нет заранее подготовленных видовых экранов, соответственно лисп с ним не работал а очень хотелось, и я его слегка подправил тапками не кидайтесь ежели чего не так.
Вложения
Тип файла: lsp QuickCreateNewLayout.lsp (3.6 Кб, 11 просмотров)

Последний раз редактировалось Serafym, 22.08.2023 в 21:10.
Serafym вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Создание листа и вписывание в него объекта на LISP



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание таблицы координат. 741520 LISP 2 30.03.2016 09:22
Создание Lisp для расчета глубины траншеи Тимур С. LISP 17 24.03.2016 20:57
Как создать объект SPDS Extension из visual lisp? Владас LISP 5 26.05.2015 15:12
Lisp. Создание слоя(слоёв) из мастер-списка. Изменения в программу CLAY от JefferyPSanders 99xt1 LISP 24 01.12.2014 12:24
Lisp - ошибка определения длины объекта Лиспер LISP 8 30.11.2010 00:37