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

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

LISP. Компоновка видовых экранов на лист.

Ответ
Поиск в этой теме
Непрочитано 25.08.2011, 11:22 3 | #1
LISP. Компоновка видовых экранов на лист.
YRat
 
Support - ACD, ASD, ACA, ACM, RAC, RST
 
Stuttgart-Петербург
Регистрация: 19.10.2004
Сообщений: 238

Смысл и применение

Идем в пространство листа, жмем кнопку или вводим с клавиатуры AF
Программа прыгвет в модель, вы задаете область модели, которую хотите разместить в видовом экране, масштаб и.. и расополагаете разещенный уже на вашем курсоре видовой экран.

Код:
[Выделить все]
;Ansichtsfenster erzeugen.
;(c)2011 iLkraret ([email protected])

(defun c:af ( / )
	(setvar "cmdecho" 0) ; Turn off command line echoing
	(setq layoutname (getvar "ctab")); Store current tab name

	(if (/= layoutname "Model") ; Must be started from a layout tab to establish destination, quit quietly if on Model tab
		(progn
			(setvar "tilemode" 1) 
			(setq modellunitsmulti 1)
			
			(setq p1 (getpoint "\nУкажите одну из вершин области: "))  
			(setq p2 (getcorner p1 "\nУкажите противоположную вершину области: "))

			(setq units (getvar "insunits")); Store current insunits

			(if (equal units 1) (setq modellunitsmulti 25.4))
			(if (equal units 2) (setq modellunitsmulti 304.8))
			(if (equal units 3) (setq modellunitsmulti 1609344))
			(if (equal units 5) (setq modellunitsmulti 10))
			(if (equal units 6) (setq modellunitsmulti 1000))
			(if (equal units 7) (setq modellunitsmulti 1000000))
			(if (equal units 8) (setq modellunitsmulti 25400000))
			(if (equal units 9) (setq modellunitsmulti 25400))
			(if (equal units 10) (setq modellunitsmulti 914.4))
			(if (equal units 11) (setq modellunitsmulti 0.0000001))
			(if (equal units 12) (setq modellunitsmulti 0.000001))
			(if (equal units 13) (setq modellunitsmulti 0.001))
			(if (equal units 14) (setq modellunitsmulti 100))
			(if (equal units 15) (setq modellunitsmulti 10000))
			(if (equal units 16) (setq modellunitsmulti 100000))
			(if (equal units 17) (setq modellunitsmulti 10000000000000))
			(if (equal units 18) (setq modellunitsmulti 149597806297768))
			(if (equal units 19) (setq modellunitsmulti 9460469428493040000))
			(if (equal units 20) (setq modellunitsmulti 30856959478640800000))

			(setq mass (getreal  "\nMasstab - 1:"))
			(setq vpxd (* (/ (abs (- (car p1) (car p2))) mass) modellunitsmulti)) ; Determine horizontal length of selected window
			(setq vpyd (* (/ (abs (- (cadr p1) (cadr p2))) mass) modellunitsmulti)) ; Determine vertical height of selected window
			(setq vpc (list (/ (+ (car p1) (car p2)) 2.0) (/ (+ (cadr p1) (cadr p2)) 2.0) 0.0)) ; Determine center point of selected model window
			(setvar "ctab" layoutname)
			(command "_mview" "0,0" (strcat "@" (rtos vpxd) "," (rtos vpyd))) ; Create Paper Space viewport
			(setq ssvp (ssget "_L")) ; Start selection set with last viewport frame
			(command "_mspace") ; Open viewport window to Model Space
			(command "_zoom" "_C" vpc (rtos vpyd)) ; Center view of viewport window using determined point
			(command "_zoom" "_SCALE" (strcat (rtos (/ modellunitsmulti mass)) "xp")) ; Set zoom scale of viewport window
			(command "_vports" "_LOCK" "_ON" ssvp "") ; Lock scale and position of model in viewport
			(command "_pspace") ; Close viewport window
 
			(command "._move" ssvp "" "0,0" pause )
		)
		(princ "\nThis command must be started from a layout sheet!") ; Need to start on a layout tab so program knows where to create the new viewports
	) 
(setvar "cmdecho" 1) ; Turn on command line echoing
)
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)

Последний раз редактировалось YRat, 08.11.2011 в 23:12.
Просмотров: 36088
 
Непрочитано 25.08.2011, 11:36
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от YRat Посмотреть сообщение
(if (/= layoutname "Model") ; Must be started from a layout tab to establish destination, quit quietly if on Model tab
(progn
(setvar "ctab" "Modell")
Нет такого листа
Я бы на твоем месте лист/модель проверял по переменной Tilemode 1-модель 0-лист. Изменение значений так же приводит к смене простанства.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.08.2011, 11:38
#3
Кулик Алексей aka kpblc
Moderator

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


Одного tilemode мало, надо еще и ctab проверять.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.08.2011, 11:46
#4
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Кулик Алексей aka kpblc, угу, тогда смысла нет проверять тайлмод)
VVA, спасибо за замечание насчет модели)) - у меня лист так и называется MODELL - язык немецкий, счас поменяю для русского.
Жаль нельзя просто по индексу обратиться, как в экселе.
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 16.09.2011, 14:05
#5
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


YRat, наверно резиновая рамка будет удобней:
вместо
(setq p2 (getpoint "\nУкажите противоположную вершину области: "))
Заменить на
(setq p2 (getcorner p1"\nУкажите противоположную вершину области: "))
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 16.09.2011, 14:53
#6
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
YRat, наверно резиновая рамка будет удобней:
вместо
(setq p2 (getpoint "\nУкажите противоположную вершину области: "))
Заменить на
(setq p2 (getcorner p1"\nУкажите противоположную вершину области: "))
Спасибо, я искал, но не нашел как это сделать)
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 22.09.2011, 14:23
#7
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


Что-то через раз работает. Иногда вываливает вообще другой кусок модели и не в указанном масштабе
angel-fear вне форума  
 
Автор темы   Непрочитано 22.09.2011, 19:03
#8
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Цитата:
Сообщение от angel-fear Посмотреть сообщение
Что-то через раз работает. Иногда вываливает вообще другой кусок модели и не в указанном масштабе
Поправил, там ; было пропущено. И немного доработал.
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 22.09.2011, 22:07
#9
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


масштаб вроде бы подправился, а вот фрагмент модели по-прежнему периодически выбирается не тот
angel-fear вне форума  
 
Автор темы   Непрочитано 08.11.2011, 17:18
#10
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


angel-fear, пример в студию
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 08.11.2011, 18:02
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


вот это
Цитата:
Сообщение от YRat Посмотреть сообщение
(setq units (getvar "insunits")); Store current insunits

(if (equal units 1) (setq modellunitsmulti 25.4))
(if (equal units 2) (setq modellunitsmulti 304.8))
(if (equal units 3) (setq modellunitsmulti 1609344))
(if (equal units 5) (setq modellunitsmulti 10))
(if (equal units 6) (setq modellunitsmulti 1000))
(if (equal units 7) (setq modellunitsmulti 1000000))
(if (equal units 8) (setq modellunitsmulti 25400000))
(if (equal units 9) (setq modellunitsmulti 25400))
(if (equal units 10) (setq modellunitsmulti 914.4))
(if (equal units 11) (setq modellunitsmulti 0.0000001))
(if (equal units 12) (setq modellunitsmulti 0.000001))
(if (equal units 13) (setq modellunitsmulti 0.001))
(if (equal units 14) (setq modellunitsmulti 100))
(if (equal units 15) (setq modellunitsmulti 10000))
(if (equal units 16) (setq modellunitsmulti 100000))
(if (equal units 17) (setq modellunitsmulti 10000000000000))
(if (equal units 18) (setq modellunitsmulti 149597806297768))
(if (equal units 19) (setq modellunitsmulti 9460469428493040000))
(if (equal units 20) (setq modellunitsmulti 30856959478640800000))
убожество можно заменить на
Код:
[Выделить все]
 (setq
  modellunitsmulti
  (nth
	(getvar "insunits")
	'(1
	  25.4
	  304.8
	  1609344
	  10
	  1000
	  1000000
	  25400000
	  25400
	  914.4
	  0.0000001
	  0.000001
	  0.001
	  100
	  10000
	  100000
	  10000000000000
	  149597806297768
	  9460469428493040000
	  30856959478640800000
	)
  )
)
экономия 300 %
gomer вне форума  
 
Автор темы   Непрочитано 08.11.2011, 19:59
#12
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


gomer, спасибо конечно за предложение, учту) Ваше убожество в моём убожестве)))
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 08.11.2011, 20:59
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Идем в пространство листа, жмем кнопку или вводим с клавиатуры AF
Программа прыгвет в модель, вы задаете область модели, которую хотите разместить в видовом экране, масштаб и.. и расополагаете разещенный уже на вашем курсоре видовой экран.
автор топика, открой для себя именованные виды и не изобретай велосипед! Они, помимо прочего назначения, используются для того, чтобы на их основе создавать видовые экраны на листах, а не только для быстрого переключения между различными видами.

Offtop: п.с. ужас, а ведь ещё и обсуждают это велосипедостроение... варианты кода предлагают.... VVA, Кулик Алексей aka kpblc, gomer - ну вы то как в это втянулись?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.11.2011 в 21:06.
hwd вне форума  
 
Непрочитано 08.11.2011, 21:34
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от YRat Посмотреть сообщение
учту) Ваше убожество
Еще не мешало бы обнулить cmdecho, чтоб убрать мусор из ком. строки...
К тому же мы не столь педантичны, как немцы, а обработчик прерываний в программе отсутствует
gomer вне форума  
 
Автор темы   Непрочитано 08.11.2011, 23:03
#15
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


hwd, ну, раз Вы зело умный, расскажите пожалуйста, как правильно употреблять видовые экраны и компоновать чертежи. Я с удовольствием поучусь и буду делать так, как Вы скажете, ежели это действительно окажется дельным.

gomer, не закидывайте меня умными словами, есть предложения - помогите реализовать. Кто э против, станет лучше - прекрасно!
Кстати, "Еще не мешало бы обнулить cmdecho, чтоб убрать мусор из ком. строки..." - это я понял, спасибо, исправил)

Насчет ловли ошибок, я правда не знаю..

Еще, что такое "nth", рассказывайте чтоли.. нечто наподобие старого case я так понимаю?
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)

Последний раз редактировалось YRat, 08.11.2011 в 23:14.
YRat вне форума  
 
Непрочитано 09.11.2011, 00:04
#16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от YRat Посмотреть сообщение
Еще, что такое "nth", рассказывайте чтоли..
буквально "н-ный" (с аглицкого, вероятно) элемент списка, нумерация которого начинается с нуля. функция выбирает элемент из с писка по порядковому номеру... Чтобы понять "мое" убожество, достаточно представить диапазон значений переменной "insunits" в виде списка

Цитата:
Сообщение от YRat Посмотреть сообщение
я понял, спасибо, исправил)
Ничего вы не поняли cmdecho нужно обнулить непосредственно перед использованием функции command а после ее использования сразу же вернуть обратно, иначе вы не сможете проверить правильность ввода данных в командной строке
примерно так,
Код:
[Выделить все]
 (setvar "ctab" layoutname)
(setvar "cmdecho" 0)
(command "_mview" ...
... (command "._move" ssvp "" "0,0" pause )
(setvar "cmdecho" 1)...
а при более детальном рассмотрении (setvar "cmdecho" 1) вообще может оказаться в теле функции command
насчет обработчика, это
Код:
[Выделить все]
 (if (and (setq p1 (getpoint "\nУкажите одну из вершин области: "))  
		      (setq p2 (getcorner p1 "\nУкажите противоположную вершину области: "))
                             (setq mass (getreal  "\nMasstab - 1:")))(progn ;| далее наши махинации|;))
самый простой вариант... дальше больше: для учета прерывания по Esc нужно определить локально функцию *error* ... Подходов тут два и примеров тьма если пользователь нажал Ctrl+Z, то нужно отменять все наши команды, для этого нужно установить метки отмены... тут тоже подходов два, примеров найти можно
hwd, мелкие проекты я печатаю тупо макромувом и купринтом - это однозначно быстрее, чем переназначать область печати или открывать 6-10 листов один за другим... подшивкой не пользуюсь, ибо нету... к сожалению... да и часто густо приходится перекомпоновывать чертежи, так что хоть именованные, хоть неименованные виды тут для одного места...
gomer вне форума  
 
Автор темы   Непрочитано 09.11.2011, 00:28
#17
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Цитата:
Сообщение от gomer Посмотреть сообщение
буквально "н-ный" (с аглицкого, вероятно) элемент списка, нумерация которого начинается с нуля. функция выбирает элемент из с писка по порядковому номеру... Чтобы понять "мое" убожество, достаточно представить диапазон значений переменной "insunits" в виде списка
Спасибо


Цитата:
Сообщение от gomer Посмотреть сообщение
Ничего вы не поняли cmdecho нужно обнулить непосредственно перед использованием функции command а после ее использования сразу же вернуть обратно, иначе вы не сможете проверить правильность ввода данных в командной строке
примерно так,
Вы неправы, все прекрасно работает.


Цитата:
Сообщение от gomer Посмотреть сообщение
насчет обработчика, это
И снова спасибо.

Я не знаю, зачем надо нажимать нечто, что не предусмотрено программой, но постараюсь сделать) Как в анекдоте про японскую пилу и русских мужиков..

Цитата:
Сообщение от gomer Посмотреть сообщение
hwd, мелкие проекты я печатаю тупо макромувом и купринтом - это однозначно быстрее, чем переназначать область печати или открывать 6-10 листов один за другим... подшивкой не пользуюсь, ибо нету... к сожалению... да и часто густо приходится перекомпоновывать чертежи, так что хоть именованные, хоть неименованные виды тут для одного места...
А главное, если мне нужно 10-20 деталей на лист посадить, мне нужно 20 раз полный размер до нужных занмеров уменьшать?
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
 
Непрочитано 09.11.2011, 01:28
#18
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от YRat Посмотреть сообщение
Вы неправы, все прекрасно работает.
Э, ну погорячился, время позднее... не проверял... а думал о другом... Если вы нажали esc или enter в ответ на запрос точек или масштаба, то точек и масштаба у вас нет - они равны nil и программа вылетит с ошибкой... с другой стороны cmdecho вы уже обнулили и в единицу оно уже не вернется, так как программа прервана... это важно потому, что есть более скверные переменные, например osmode, которые в обязательном порядке нужно возвращать в исходное состояние, дабы не мучить пользователя. К тому же если ничего не задано и никаких действий не предвидется, то нет смысла обнулять переменную, это два потенциально холостых действия... вот поэтому и стоит перенести (setvar "cmdecho" 0) в ветку условного выбора if. Самый тяжелый случай, когда вычисления тоже могут выдать ошибку... ситуация аналогичная... следовательно спускаем еще ниже нашу переменную и получаем #16. Из всего этого делаем вывод.. программа делится (грубо) на три части:
1. ввод данных пользователем
2. расчеты
3. построения или другие действия

В каждом из этапов потенциально может возникнуть своя ошибка. Их нужно предвидеть, исключать и обрабатывать

Последний раз редактировалось gomer, 09.11.2011 в 01:42.
gomer вне форума  
 
Непрочитано 09.11.2011, 08:40
1 | #19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от YRat Посмотреть сообщение
hwd, ну, раз Вы зело умный, расскажите пожалуйста, как правильно употреблять видовые экраны и компоновать чертежи. Я с удовольствием поучусь и буду делать так, как Вы скажете, ежели это действительно окажется дельным.
Набираем команду _view, в открывшемся диалоговом окошке "View Manager" давим пальчиком кнопку "New..." - откроется очередной ларец в виде окошка "New View / Short Properties". В нём кликаем по кнопке Help и о чудо: откроется "зело"(с) полезый свиток, именуемый среди непосвящённых не иначе как "справочная система". Причём откроется сразу на нужной страничке - т.е. искать ничего не придётся (вообще сказка)... Не разобраться в том, что там написано - это ещё и постараться нужно... "Поучитесь с удовольствием"(с), почитав указанную мною "тайну великую". Надеюсь, что Вы сочтёте "действительно дельным"(с) родной инструмент от Autodesk, решающий ту задачу, на решение которой Вы потратили столько времени. Кроме того, у "родного" инструмента есть то, чего нет в вашем решении - он позволяет сохранять виды под указанными Вами именами, тем самым давая возможность их многократного использования.

Хотя, конечно же, можно и со своим велосипедом остаться, допиливая его до кондиции - что же, зря Вы столько времени потратили? Хотя окромя себя в этом винить, по совести, и некого...

п.с. Это не я злой, это нужно прежде чем садиться писать код, убедиться, что в ПО действительно отсутствует искомый функционал. А то ведь это заразно - юзеры подхватят и начнут себе устанавливать, не подозревая, что всё это уже и так имеется (причём в более лучшем исполнении). Вот такие пряники...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 09.11.2011 в 08:46.
hwd вне форума  
 
Автор темы   Непрочитано 09.11.2011, 11:48
#20
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


hwd, спасибо, вероятно, так и было задумано Автодеском, но
1. это долго
2. хотя и приносит свои позитивные фичи, мне они не нужны.. нет двух одинаковых окон, которые я располагаю на листах
3. Сидеть и выдумывать названия, в которых сам потом запутаешься, когда на лист захочешь расположить.

Пример: подпорная стенка с анкеровкой, 12 листов с детялями и обзорами. Я не считал, но примерно могу сказать, то там порядка 50-60 видов надо создавать. Я с ума сойду работая так)

Посему клиент спросил, а нет ли возможности из листа нажать кнопочку и быстренько сделать участок модели в моем масштабе...

Так что большое спасибо, и правду полезный свиток, но он не подхлжит под поставленные задачи.

gomer, согласный я, буду думать)
__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)
YRat вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Компоновка видовых экранов на лист.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование видовых экранов с листа на др. лист Алексий K AutoCAD 26 29.01.2021 11:36
Фатал эррор при переходе с модели на лист с большим количеством видовых окон Serikdjan AutoCAD 14 28.04.2011 10:03
Ищу листы Специальной карты Европейской России М:1дюйм-10верст KSI Поиск литературы, чертежей, моделей и прочих материалов 6 19.04.2009 12:04
Содержимое видовых экранов (в ПЛ) плавает при кручении колеса мыши JokerrSergh AutoCAD 29 29.12.2008 13:16