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

Вернуться   Форум 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.
Просмотров: 1891765
 
Непрочитано 12.09.2008, 20:19
#681
Supermax

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


Ну, извиняюсь я! Это давно было написано. Тогда я все время путал Алексея с Анатолием. Ща поправлю.
Supermax вне форума  
 
Непрочитано 12.09.2008, 20:47
#682
VVA

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


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
зато, моя программа обогнала его программу!
Есть чуть побыстрее
Исходники
Код:
[Выделить все]
;; ColLetter - Given a number, returns a string that is the Excel
;; method of numbering columns.
;; 1="A", 2="B", ... 26="Z", 27="AA", 28 = "AB" ...
;;
(defun ColLetter (N			;Integer
		  /
		  Res			;resulting string
		  TMP			;work variable
		 )
  (setq Res "")
  (while (> N 0)
    (setq TMP (rem N 26)		;remainder of N divided by 26
	  TMP (if (zerop TMP)		;reset to "Z"
		(setq N	  (1- N)	;move under next order
		      TMP 26		;set to Z offset value
		) ;_ end of setq
		TMP
	      )				;use value as it is
	  Res (strcat			;Add character
		(chr (+ 64 TMP))	;Offset plus 64 ("A" = 65)
		Res
	      )				;existing string
	  N   (/ N 26)			;shift down an order
    ) ;_ end of setq
  ) ;_ end of while
  Res
) ;_ end of defun

; Number2Alpha - Converts Number into Alpha string
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
;   Num# = Number to convert
; Syntax example: (Number2Alpha 731) = "ABC"
;-------------------------------------------------------------------------------
(defun Number2Alpha (Num# / Val#)
  (if (< Num# 27)
    (chr (+ 64 Num#))
    (if (= 0 (setq Val# (rem Num# 26)))
      (strcat (Number2Alpha (1- (/ Num# 26))) "Z")
      (strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#)))
    );if
  );if
);defun Number2Alpha

(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)
                ) ;_ end of -
       ) ;_ end of get-num
     ) ;_ end of append
    ) ;_ end of cond
  ) ;_ end of cond
) ;_ end of defun

; Пример применения: (vl-list->string(get-num 16380))
(defun conv(x)(if(< x 26)(chr(+ 65 x))(strcat(conv(1-(/ x 26)))(conv(rem x 26)))))
(defun convert-26 (x / ); Функция конвертирования числа в буквенное обозначение столбцов Экселя
(if (= (/ x 26) 0) (chr (+ x 65))
 (if (and (> (/ x 26) 0) (<= (/ x 26) 26)) 
  (strcat (chr (+ (1- (/ x 26)) 65)) 
          (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 (+ das_1 65)) 
                  (chr (+ (1- (/ das_2 26)) 65))
                  (chr (+ 65 (- das_2 (* 26 (/ das_2 26))))
)))))))
Benchmark
Код:
[Выделить все]
(BENCHMARK '(
	     (convert-26 16380)
	     (VL-LIST->STRING (get-num 16380))
	     (conv 16380)
             (ColLetter 16380)
             (Number2Alpha 16380)
	     )
  )
Результат
Цитата:
Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s):

(NUMBER2ALPHA 16380)..................1469 / 1.23 <fastest>
(CONV 16380)..........................1531 / 1.18
(CONVERT-26 16380)....................1594 / 1.14
(COLLETTER 16380).....................1609 / 1.13
(VL-LIST->STRING (GET-NUM 16380)).....1812 / 1 <slowest>
Огорчает одно: результат выполнения разный
Код:
[Выделить все]
(convert-26 16380)                ;_"XFA" 
(VL-LIST->STRING (get-num 16380)) ;_"XGA"
(conv 16380)                      ;_"XFA"
(ColLetter 16380)                 ;_"XEZ"
(Number2Alpha 16380)              ;_"XEZ"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.09.2008, 20:59
#683
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
Есть чуть побыстрее
можно и обогнать, но потеряется красота программы.

Цитата:
Сообщение от VVA Посмотреть сообщение
Огорчает одно: результат выполнения разный
я взял за шаблон разъяснение Supermax, из поста 653

Цитата:
(CONVERT-26 0) - вернет "А"
(CONVERT-26 255) - вернет "IV"
(CONVERT-26 16383) - вернет "XFD"
Елпанов Евгений вне форума  
 
Непрочитано 12.09.2008, 21:39
#684
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


ускоренная версия
Код:
[Выделить все]
(defun conv1 (x)
 (cond
  ((< x 16384)
   (strcat (chr (+ 64 (/ x 676)))
           (chr (+ 64 (rem (/ x 26) 26)))
           (chr (+ 65 (rem x 26)))
   ) ;_  strcat
  )
  ((< x 702)
   (strcat (chr (+ 64 (/ x 26))) (chr (+ 65 (rem x 26))))
  )
  ((< x 26) (chr (+ 65 x)))
 ) ;_  cond
)
проверяем
Код:
[Выделить все]
(BenchMark '((Number2Alpha 16380) (conv 16380) (conv1 16380)))
получаем результат
Код:
[Выделить все]
Benchmarking ...................Elapsed milliseconds / relative speed for 65536 iteration(s):

    (CONV1 16380)............1545 / 1.16 <fastest>
    (NUMBER2ALPHA 16380).....1716 / 1.05
    (CONV 16380).............1794 / 1 <slowest>
Елпанов Евгений вне форума  
 
Непрочитано 12.09.2008, 21:40
#685
Supermax

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


Значит так:
Я специально 2007 эксель поставил, чтобы цыфры сечь.
XEZ - это если считать с 0 16379, или если с 1 - 16380
следующий столбец, как сами понимаете, XFA
XFA - это 16380, если считать с 0 и 16381 если с 1.

От сюда вывод - то что красненьким и синеньким работает правильно, а черненькое - где-то ошибка.

Я чуток свой перл "упаковал" и немножко переименовал, чтобы сравнить можно было. Проверьте теперь.

Код:
[Выделить все]
(defun conv-26 (x / )
(setq das_0 (/ x 26))
(setq das_1 (/ (1- das_0) 26))
(setq das_3 (/ (setq das_2 (+ 26 (- x (* (1+ (* das_1 26)) 26)))) 26))
(if (= das_0 0) (chr (+ x 65))
 (if (and (> das_0 0) (<= das_0 26)) 
  (strcat (chr (+ (1- das_0) 65)) 
          (chr (+ 65 (- x (* 26 das_0)))))
  (if (and (> das_0 0) (<= x 16383)) 
   (strcat (chr (+ das_1 64)) 
           (chr (+ (1- das_3) 65))
           (chr (+ 65 (- das_2 (* 26 das_3))))
)))))
И хочу отметить, что у меня проверки по диапазону правильные. При выходе за него nil вернет и вываливаться с ошибкой переполнения списка не будет.

А Елпанова Евгения функция мне нравится. Красивая!

Последний раз редактировалось Supermax, 12.09.2008 в 21:58.
Supermax вне форума  
 
Непрочитано 12.09.2008, 21:46
#686
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


нет проблем...

Код:
[Выделить все]
(BenchMark '((Number2Alpha 16380) (conv1 16380)(conv-26 16380)))
Код:
[Выделить все]
Benchmarking ...................Elapsed milliseconds / relative speed for 65536 iteration(s):

    (CONV1 16380)............1592 / 1.17 <fastest>
    (NUMBER2ALPHA 16380).....1762 / 1.05
    (CONV-26 16380)..........1857 / 1 <slowest>
Елпанов Евгений вне форума  
 
Непрочитано 12.09.2008, 22:06
#687
Supermax

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


Евгений! Твой последний перл - самый, самый, самый!
Оформляй и в библиотеку клади, а то потеряется в темах.
Supermax вне форума  
 
Непрочитано 12.09.2008, 22:10
#688
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Евгений! Твой последний перл - самый, самый, самый!
Оформляй и в библиотеку клади, а то потеряется в темах.
Мне, больше понравился предыдущий...
По поводу библиотеки - если хочешь - клади.
Елпанов Евгений вне форума  
 
Непрочитано 12.09.2008, 22:11
#689
Supermax

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


Не, пока рано пиво пить.
Евгений!
(CONV1 0)
"@@A"
(CONV1 1)
"@@B"

и так далее. Чини.
Supermax вне форума  
 
Непрочитано 12.09.2008, 22:13
#690
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Не, пока рано пиво пить.
Евгений!
(CONV1 0)
"@@A"
(CONV1 1)
"@@B"

и так далее. Чини.
Код:
[Выделить все]
(defun conv1 (x)
 (cond
  ((< 701 x 16384)
   (strcat (chr (+ 64 (/ x 676)))
           (chr (+ 64 (rem (/ x 26) 26)))
           (chr (+ 65 (rem x 26)))
   ) ;_  strcat
  )
  ((< 25 x 702)
   (strcat (chr (+ 64 (/ x 26))) (chr (+ 65 (rem x 26))))
  )
  ((< x 26) (chr (+ 65 x)))
 ) ;_  cond
)
Код:
[Выделить все]
Benchmarking ...................Elapsed milliseconds / relative speed for 65536 iteration(s):

    (CONV1 16380)............1591 / 1.14 <fastest>
    (NUMBER2ALPHA 16380).....1731 / 1.05
    (CONV-26 16380)..........1810 / 1 <slowest>
Елпанов Евгений вне форума  
 
Непрочитано 12.09.2008, 22:55
#691
Supermax

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


Во! Вот теперь - классика!
Supermax вне форума  
 
Непрочитано 14.09.2008, 20:11 Мои дин. блоки
#692
vn


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


Цитата:
Сообщение от wetr Посмотреть сообщение
Так получше будет: при вставке блока уже существуют поля с зависимостью внутри вхождения блока. Как всегда спасибо Kriegerу,
Wetr! Объясните темному, как поменять без взрыва например 5 на А в Вашем блоке.
vn вне форума  
 
Непрочитано 15.09.2008, 09:13
#693
Supermax

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


vn, прицепи к своему сообщению файл с блоком, тогда ясно будет что ты хочешь.
Всем,кто жаждит дополнительных Visibility Set-ов вот сюда:
http://dwg.ru/f/showthread.php?p=285705#post285705
Специально тему создал и там все расписал.
Supermax вне форума  
 
Непрочитано 15.09.2008, 09:22
#694
wetr

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


vn, никак. Все дело в том, что Nomber - это длина отрезка со всеми вытекающими. Если хочешь ставить букву, то без атрибута не обойтись. Блок с атрибутом лежит выше того, что ты указал
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 17.09.2008, 15:26
#695
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Пробежался по сообщениям за последние две недели. Отстал я от прогресса оказывается.
Тут у Supermax, программа была на прошлых страницах, называется move-properties.fas. Не пойму как ее использовать. Да и вообще что за расширение fas, не пойму? Просветите пожалуйста.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 18.09.2008, 08:09
#696
Shoorup


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


Red Nova, ну ёмаё!!! Что ж ты так!
Программа супер просто! Фас это скомпилированный лисп типа. А программа дает возможность менять местами параметры в окне свойств.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 18.09.2008, 09:06
#697
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Shoorup,
Наверное ты неверно понял. Я имел ввиду что запустить не могу, а не то что программа не пригодная. Объясни как запустить.
Я ж не виноват что раньше с этим добром не встречался.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 18.09.2008, 10:19
#698
Scribe


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


Большое, большое СПАСИБО!!!
Scribe вне форума  
 
Автор темы   Непрочитано 18.09.2008, 11:59
#699
Shoorup


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


Red Nova, Supermax же все расписал как запускать. Мог бы и перечитать посты про эту прогу. Создаешь папку TMP в корне, потом пишешь к ней путь в настройках. Потом запускаешь ее (например простым перетаскиванием в окно акада) файла. Вот и все. А там разберешься.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 18.09.2008, 14:03
#700
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо. Теперь понял. Получается это программа начинает работать при загрузке, да? А командой ее запустить нельзя как лисп?
__________________
Блог
Red Nova вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Мои динамические блоки