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

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

Лисп для определения номенклатуры

Ответ
Поиск в этой теме
Непрочитано 19.01.2020, 13:36 #1
Лисп для определения номенклатуры
Tesan
 
Регистрация: 21.07.2018
Сообщений: 9

Доброго дня всем, прошу помощи у людей знающих толк в создании лисп. Задача такова: необходим лисп, который делит все пространство модели на квадраты размером 1000 на 1000 единиц чертежа, отсчет идет от координат 0,0 которые в свою очередь делятся на 16 квадратов каждый с размером 250 на 250 единиц чертежа, который будет вставлять текст при указании любой точки в пространстве модели и в значении текста будет выводится: значение координаты Х только не все целиком, а вторые две цифры, перед ними стоит знак + по умолчанию, затем ставится снова знак плюс и вторые две цифры, но координаты по оси У, затем ставится ; и цифра номера от 1 до 16 в зависимости в какой квадрат размером 250 на 250 попал курсор при нажатии. Должно получиться например так: +05+65;7 Полные координаты точки изначально выглядели так X=5805583.75, Y=1165575.57, т.е. программа взяла вторые две цифры по Х, вторые по У и вычислила номер одного из 16 квадратов размером 250х250, т.е. 7. Затем программа не завершается, а снова предлагает указать новую точку вставки текста и так далее пока не нажимается esc или enter. Есть еще особенность, Х и У берутся не как в автокаде (математике), а наоборот (как в геодезии). Высота текста 20, стиль тот который установлен по умолчанию, слой 0. Прилаживаю рисунок для наглядности. Это необходимо для автоматизации определения номенклатур планшетов. Чертеж выполнен с единицами чертежа метры. Буду очень признателен за помощь.

Миниатюры
Нажмите на изображение для увеличения
Название: Пример.png
Просмотров: 126
Размер:	25.4 Кб
ID:	222125  

Просмотров: 2293
 
Непрочитано 19.01.2020, 19:33
#2
Кулик Алексей aka kpblc
Moderator

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


А что сделано самостоятельно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.01.2020, 23:00
#3
trir


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


https://geodesist.ru/threads/razgraf...7/#post-850861

На самом деле проще подключить готовую разграфку

Последний раз редактировалось trir, 19.01.2020 в 23:08.
trir вне форума  
 
Непрочитано 20.01.2020, 08:12
#4
lenivec

проектирование
 
Регистрация: 16.09.2005
KZ
Сообщений: 135


Цитата:
Сообщение от Tesan Посмотреть сообщение
необходим лисп, который делит ВСЕ пространство модели
А ваш комп потянет?
lenivec вне форума  
 
Непрочитано 20.01.2020, 08:21
#5
trir


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


Цитата:
А ваш комп потянет?
А я как то делал разграфку в dwg и таки AutoCAD помер
trir вне форума  
 
Автор темы   Непрочитано 20.01.2020, 08:58
#6
Tesan


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что сделано самостоятельно?
Сейчас все в ручную делаю, подумал спросить у знающих людей, возможно это не так трудно автоматизировать и реализовать на лисп. Если конечно это затратно и сложно, то вопрос снят.
По поводу определения номенклатур всего пространства модели, возможно я не так выразился, номенклатуры всего пространства модели определять не нужно, это необходимо задать как критерий работы программы чтобы был понятен сам принцип определения. Задача получить программу которая при ее выполнении будет определять номенклатуру в виде текста, при указании курсором интересующего места в модели.
trir спасибо за ссылку попробую может получится, но как то там все сложновато для освоения )
Tesan вне форума  
 
Непрочитано 20.01.2020, 12:57
#7
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Код:
[Выделить все]
 
(defun aiku-nomenclature  (/ x00)
  (and (not (initget "Завершить"))
       (setq x00 (getpoint "\nУкажите точку на планшете или [Завершить]: <Завершить> "))
       (listp x00)
       (entmake
         (list '(0 . "TEXT")
               '(40 . 20.0)
               (cons 10 x00)
               (cons 1
                     (apply (function
                              (lambda (e10 e11 e12)
                                (strcat "+" (car e11) "+" (car e10) ";" (rtos (+ (* 4 (- 4 (cadr e10))) (cadr e11)) 2 0))))
                            (mapcar (function
                                      (lambda (e10 / a10)
                                        (list ((lambda (a10) (substr a10 (1- (strlen a10))))
                                                (strcat "0" (rtos (- (setq a10 (fix (/ e10 1000))) (* 100 (fix (/ e10 100000)))) 2 0)))
                                              (+ (cdr (assoc (zerop (- (setq a10 (/ (- e10 (* 1000 a10)) 250)) (setq a10 (fix a10))))
                                                             '((nil . 1) (t . 0))))
                                                 a10))))
                                    x00)))))
       (aiku-nomenclature)))

(defun c:номенклатура () (aiku-nomenclature) (princ))
Вызывается номерклатура с кс, завершается пустым вводом.

Проверь правильность вычисления квадрата, я в этих ваших геодезических XY вечно путаюсь
__________________
На работе было скучно:shout:

Последний раз редактировалось ciril, 20.01.2020 в 16:43.
ciril вне форума  
 
Автор темы   Непрочитано 20.01.2020, 19:01
#8
Tesan


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


Спасибо, это то что нужно, работает, Х и У верно определяет, но вот только с числом одного из 16 квадратов 250х250 что то не так, я приложил чертеж, синим расставлена номенклатура верная, черным определил с помощью Вашего лиспа, цифры по X и Y совпадают, только повторюсь не корректно вычисляется последняя. Еще раз моя Вам благодарность за труды, если немного поправите программу буду Вам очень признателен

Понял зависимость получается программа рассчитывает последнюю цифру не с левого верхнего угла квадрата 1000х1000 и далее слева на право сверху вниз:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
а рассчитывает с левого нижнего угла и с низу вверх, получается как то так:
16 12 8 4
15 11 7 3
14 10 6 2
13 9 5 1

Уважаемый ciril, примете мою благодарность !!! это именно то что было нужно, если возможно поправьте пожалуйста определение последней цифры, та которая идет после ;
Вложения
Тип файла: dwg
DWG 2004
Пример.dwg (888.7 Кб, 22 просмотров)
Тип файла: dwg
DWG 2004
Тест.dwg (59.8 Кб, 16 просмотров)

Последний раз редактировалось Tesan, 20.01.2020 в 20:19.
Tesan вне форума  
 
Непрочитано 21.01.2020, 06:36
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


С разграфками планшетов все непросто... В каждом "монастыре" бывают свои "уставы".

В одних городах разграфка соответствует классической, описанной в учебниках. В других какая-то своя. Обозначения планшетов делают по-разному.
В некоторых городах даже ось Х направлена не на Восток по геодезически, а на Север - как в математике.

Поэтому когда пришлось делать универсальную программу для любого города было сделаны в INI-файлах городов настройки на конкретную систему
Наподобие
Код:
[Выделить все]
[CoordSys]
XNord=1
NameCoordSystem=Местная г.Шантарска

[HeightSys]
NameHeightSystem=Местная
GorizFrom=0.25

[PlanSys]
BaseFor500=5000
OsnPlanshet=5000
Exist5000=Y
Exist2000=Y
Exist1000=N
Exist500=Y

NumColumn=12
FirstEast=-14000.00
FirstNord=10000.00
NumFirst=1
Но для конкретного города можно и
Цитата:
Сообщение от trir Посмотреть сообщение
На самом деле проще подключить готовую разграфку
Причем сделать так, чтобы при щелчке по квадрату, обозначающему планшет подгружался именно этот планшет.

И даже в Интернете это делали, показывая при щелчках по разграфке соответствующие планшеты в DWF-формате.
ShaggyDoc вне форума  
 
Непрочитано 21.01.2020, 10:23
#10
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Код:
[Выделить все]
 (defun aiku-nomenclature  (/ x00)
  (while (and (not (initget "Завершить"))
              (setq x00 (getpoint "\nУкажите точку на планшете или [Завершить]: <Завершить> "))
              (listp x00))
    (entmake
      (list '(0 . "TEXT")
            '(40 . 20.0)
            (cons 10 x00)
            (cons 1
                  (apply (function
                           (lambda (e10 e11 e12)
                             (strcat "+" (car e11) "+" (car e10) ";" (rtos (+ (cadr e10) (* 4 (- 4 (cadr e11)))) 2 0))))
                         (mapcar (function
                                   (lambda (e10 / a10)
                                     (list ((lambda (a10) (substr a10 (- (strlen a10) 1)))
                                             (strcat "0" (rtos (- (setq a10 (fix (/ e10 1000))) (* 100 (fix (/ e10 100000)))) 2 0)))
                                           (+ (cdr (assoc (zerop (- (setq a10 (/ (- e10 (* 1000 a10)) 250)) (setq a10 (fix a10))))
                                                          '((nil . 1) (t . 0))))
                                              a10))))
                                 x00)))))))

(defun c:номенклатура () (aiku-nomenclature) (princ))
Не за что
Проверил по файлу пример.dwg - номера совпадают, считает с левого верхнего к правому нижнему. Единственно, уточнение, а точка с координатами на границе планшета - какому планшету должна принадлежать?
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 21.01.2020, 10:49
#11
Tesan


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


ciril все теперь замечательно работает, спасибо Вам большое, успехов в программировании !!! Моя Вам признательность
Tesan вне форума  
 
Непрочитано 21.01.2020, 21:43
#12
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Пожалуйста.
ciril вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для определения номенклатуры

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка лисп для оформления трасс ИОС ТКР Gotch Поиск исполнителей 1 06.07.2018 12:26
Что прописать в acad.lsp чтобы всегда загружались пользовательские лисп команды? overband LISP 43 07.02.2013 14:47
помогите написать лисп определения площади и объема dew LISP 11 16.01.2012 10:35
Лисп для копирования данных нескольких мтекстов по принципу расположения. Red Nova LISP 14 18.06.2008 22:08
Нужен лисп (пронизыватель лайаутов) dextron3 LISP 91 25.07.2007 07:37