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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Мои динамические блоки

Мои динамические блоки

Закрытая тема
Поиск в этой теме
Непрочитано 07.11.2006, 15:22
Мои динамические блоки
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Прогресс и опыт не стоит на месте. А по этому хочу поделиться своим опытом по созданию динамических блоков и конечно посмотреть на чужой.
Динамические блоки очень мощный инструмент, а умело им пользоваться далеко не каждый умеет. Уверен большинство идей (ухищрений, модификаций, построений) можно применить и для своей работы тем самым свести к минимуму однотонную и трудоемкую работу => что я и предлагаю на данной теме.
---
Дополнительно (спасибо VVA):
В 2010-2011-2012 в редакторе блоков при настройках по умолчанию нельзя добавлять к операциям некоторые вещи, например к операции Flip добавить Strech и т.д.
Описание проблемы:
http://forum.dwg.ru/showpost.php?p=7...postcount=2666
Решение:
http://forum.dwg.ru/showpost.php?p=7...postcount=2679
----
Тема закрыта, продолжение: http://forum.dwg.ru/showthread.php?t=66721
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Кулик Алексей aka kpblc, 09.11.2011 в 14:01.
Просмотров: 1891580
 
Непрочитано 10.09.2008, 16:01
#641
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Немного пооффтоплю.
Supermax,
Не надо насиловать пользоватеся насчет C:\TMP
Автокад сам может находить системную временную папку для создания временных файлов. Сценарий такой
Код:
[Выделить все]
(vl-load-com) ;_Это понятно
(setq fl (vl-filename-mktemp "supermax" nil ".dcl")) ;_Гарантированно получишь уникальное (не существующее)
;_ имя файла типа "c:\\temp\\super004.dcl" 
;;;=================================
;;; ПИШЕМ КОД В DCL
;;; ЗАГРУЖАЕМ и ТП
;;;=================================
(vl-file-delete fl) ;_Удаляем файл
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.09.2008, 16:49
#642
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Ребята, а не кажется вам, что нужно сделать отдельную веточку в разделе "Программирование"? А то и так за 30 страниц перевалило...
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 10.09.2008, 17:26
#643
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, блин, стоит отвлечься на минутку, как тут две страницы вывалилось!
Ша, ребята! Все будет ОК.
Есть два подхода к использованию временных файлов. Первый - создавать уникальный файл в любом доступном месте и по окончании работы его убивать. (setq fl (vl-filename-mktemp "supermax" nil ".dcl")) на это и настроен. Но при таком способе, при аварийном выходе из программы в винчестере остается "левый" файл. Таких "левых" я нахожу порою весьма много.
Второй подход - это сначала убивать файл, а потом его создавать и приминительно к DCL (setq fl (vl-filename-mktemp "supermax" nil ".dcl")) такая штука не катит. Не находит прога DCL если нет пути в Support File Search Path. Есть разница между обычным обращением из под лиспа к всевозможным файлам и (load_dialog "muve_to_visibilityset.dcl"). Тут вообще не возможно путь указать в имени файла. Не хавает пипл! А (setq fl (vl-filename-mktemp "supermax" nil ".dcl")) и иже им подобные не оставляют в автокаде инфу о пути. Вот и мается Shoorup, пытаясь открыть файл.

Для DCL должен быть прописан путь!

Аминь.
Supermax вне форума  
 
Автор темы   Непрочитано 10.09.2008, 18:17
#644
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Supermax, Я сделал так.
1. Прописал путь к TMP.
2. Запустил visibilityset.fas. Он создал в этой же папке muve_to_visibilityset.dcl
3. Удалил путь к TMP.
4. Скопировал в свою папку (прописанную) файлы Move-to-visibilityset.fas, muve_to_visibilityset.dcl.
И все у меня работает прекрасно и не знаю я горя
после парочки экспериментов понял что фас можно с любого места запустить а вот дкл должен лежать и там и там походу иначе ругается
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 10.09.2008 в 18:30. Причина: поэксперементировал
Shoorup вне форума  
 
Непрочитано 10.09.2008, 19:45
#645
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Shoorup, дело не в том, как запустить что-то конкретно где-то, а в принципе. Это тебе повезло, что я не настроен был на динамическое создание DCL. Это когда панель управления создается под конкретную ситуацию в процессе работы самого макроса.
И зачем ты прописал путь, а потом его убил? Странно...
Ну я тебе кнопочки укорочу.... Жди.

Последний раз редактировалось Supermax, 10.09.2008 в 22:31.
Supermax вне форума  
 
Непрочитано 10.09.2008, 22:30
#646
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Исправил очень серьезный хомут, который вы так и не нашли. Вот, думаю, выложу, ребята покрутят и огрехи найдут - ха, ха, ха!
Сам, все сам.
Кнопки так и не подрезал с огорчения, но обязательно подрежу. Мне и самому не нравятся такие палки, а не кнопки.
Вложения
Тип файла: rar Move-to-visibilityset.rar (4.4 Кб, 215 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 11.09.2008, 00:15
#647
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Supermax, да еще успеем покрутить спать только пора уже идти, завтра на работе и покручу
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 11.09.2008, 10:43
#648
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


В качестве отдыха попытался сделать 26-ричный счетчик для экселя-лукупа. У меня 2003 эксель и в нем огрничение 256 столбцов это последний столбец "IV". Я не знаю распостраняется это ограничение и в последней версии экселя. У кого последний офис, плииз, проверьте ограничение по количеству столбцов. Скопируйте что-нибудь строке.
Supermax вне форума  
 
Автор темы   Непрочитано 11.09.2008, 10:59
#649
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Эксель у меня тоже 2003й.
Программу попробовал. Работает отлично. Сделал уже пару блоков которые отложил из-за того что слишком нагромождено объектов которые нужно сделать и видимыми и нет.
Supermax, было бы хорошо все эти программы видеть в одной.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 11.09.2008, 11:21
#650
vasilyis

Инженер
 
Регистрация: 05.05.2008
Москва
Сообщений: 1,074


В MS Excel 2007 нумерация колонок трехзначная до XFD.
__________________
Рапик отдай папе кость, Ты ведь не собака. /анекдот АРМЯНСКОГО РАДИО/
vasilyis вне форума  
 
Непрочитано 11.09.2008, 12:00
#651
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Спасибо. Значит будем делать до XFD.
Supermax вне форума  
 
Непрочитано 11.09.2008, 14:52
#652
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Что-то не клеится. Если первый столбец - 0. Второй 1 и дале 1+, то XFD это какое число?
Также для проверки моей функции надо несколько промежуточных значений.
Supermax вне форума  
 
Непрочитано 11.09.2008, 22:06
#653
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Все. Все решил.
Функция конвертирующая число от о до 16383 что соответтвует от "А" до "XFD" в эти самые буковки.
Запускается (CONVERT-26 x) где х - конвертируемое число.
Возвращает строку с буквами.
(CONVERT-26 0) - вернет "А"
(CONVERT-26 255) - вернет "IV"
(CONVERT-26 16383) - вернет "XFD"
Все остальное, что выходит за рамки 0-16383 - вернет nil.
Применяется для обращения к столбцам экселя в программах.

Код:
[Выделить все]
(defun convert-26 (x / )
(if (= (/ x 26) 0) (chr (+ 65 x))
 (if (and (> (/ x 26) 0) (<= (/ x 26) 26)) 
  (strcat (chr (+ 65 (1- (/ x 26)))) 
          (chr (+ 65 (- x (* 26 (/ x 26))))))
  (if (and (> (/ (1- (/ x 26)) 26) 0) (<= x 16383)) 
   (progn (setq das_1 (1- (/ (1- (/ x 26)) 26)))
          (setq das_2 (+ 26 (- x (* (1+ (* (1+ das_1) 26)) 26))))
          (strcat (chr (+ 65 das_1)) 
                  (chr (+ 65 (1- (/ das_2 26))))
                  (chr (+ 65 (- das_2 (* 26 (/ das_2 26))))
)))))))
Пришлось вспомнить алгебру.

Последний раз редактировалось Supermax, 12.09.2008 в 08:32.
Supermax вне форума  
 
Непрочитано 11.09.2008, 22:27
#654
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Если в теле функции изменить число 16383 на большее, то прога будет корректно переводить аж до "ZZZ", но эксель там не пашет, вот я и ограничил, чтобы в случае ошибки ввода вываливаться.
Дарю всем борющимся с выводом и вводом из экселя.
Могу оформить и выложить в библиотеку функций, хотя я в ней разочаровался.
Supermax вне форума  
 
Автор темы   Непрочитано 11.09.2008, 23:51
#655
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


ну и математика!!!
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 12.09.2008, 00:55
#656
Кулик Алексей aka kpblc
Moderator

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


Можно эту "математику" сделать рекурсией. Правда, в скорости выигрыш вряд ли будет
Код:
[Выделить все]
(defun get-num (code / tmp val)
  (cond
    ((minusp code)
     nil
     )
    ((<= code 26)
     (list (+ code 65))
     )
    (t
     (setq tmp (/ code 26)
           val (expt 26 2)
           ) ;_ end of setq
     (append
       (get-num
         (if (<= code val)
           (1- tmp)
           tmp
           ) ;_ end of if
         ) ;_ end of get-num
       (get-num (- code
                   (* tmp 26)
                   (if (<= code val)
                     1
                     0
                     ) ;_ end of if
                   ) ;_ end of -
                ) ;_ end of get-num
       ) ;_ end of append
     )
    ) ;_ end of cond
  ) ;_ end of defun

; Пример применения: (vl-list->string(get-num 16380))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 12.09.2008 в 01:00. Причина: Случайно засунул лишний код
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2008, 08:11
#657
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Во! А где ж ты раньше был? Или это ты только сейчас наваял?
Весьма полезные функции, кстати.Может их и в самом деле в библиотеку функций оформить?
Если бы была тема про обращение из под лиспа к файлам экселя, где подробно разбираются методы получения данных из него и записи туда данных, то эти функции очень были бы там к месту. На их основе и 16-тиричный конвертер можно сделать.
Supermax вне форума  
 
Непрочитано 12.09.2008, 08:26
#658
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, у твоего варианта есть пару минусов.
1 - если число отрицательное выдает пустую строку, а должно выдавать nil. Так правильнее.
2 - При очень большом числе (vl-list->string(get-num 9000000000))
выдает ; error: bad char code in list: 65.1205 что совсем уж не годится.Надо ограничение на диапазон ставить. К чему четвертая буква, если ее некуда тулить?. Делов-то в начале функции проверить число на ограничение по величине.
А так, очень и очнь недурственно.
Supermax вне форума  
 
Непрочитано 12.09.2008, 08:27
#659
Кулик Алексей aka kpblc
Moderator

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


Только сейчас (точнее, вчера, увидев твои мытарства) сделал.
Понимаешь, Евгений Елпанов в свое время показывал код обращения к xls-файлу вообще без Excel'a (через ADO, насколько я помню). Так что я бы поискал его решение и попытался с ним разобраться, чем свое рисовать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2008, 08:42
#660
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Кстати метод, по которому сделана функция называется "конвейерный". Это после параллельного самый быстый метод.
Это так, детство вспомнил.
Supermax вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Мои динамические блоки