<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Комментарии на: Отмена обработки undo</title>
	<atom:link href="https://autolisp.ru/2014/04/02/undo-record-cancel/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2014/04/02/undo-record-cancel/</link>
	<description>LISP для AutoCAD</description>
	<lastBuildDate>Tue, 24 Feb 2026 16:11:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59428</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Tue, 19 Jan 2016 20:16:12 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59428</guid>
		<description><![CDATA[&lt;blockquote&gt;P.S.: Леша. Блог заменяет двойные кавычки на двойной апостроф.&lt;/blockquote&gt;
Благодаря помощи Админа, ошибка исправлена.]]></description>
		<content:encoded><![CDATA[<blockquote><p>P.S.: Леша. Блог заменяет двойные кавычки на двойной апостроф.</p></blockquote>
<p>Благодаря помощи Админа, ошибка исправлена.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Евгения</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59413</link>
		<dc:creator><![CDATA[Евгения]]></dc:creator>
		<pubDate>Tue, 19 Jan 2016 04:53:33 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59413</guid>
		<description><![CDATA[Алексей, спасибо за подсказки, все получилось. С помощью кода получилось выполнять отмену удаления любого примитива любое количество раз! :)
Видимо главное было в правильном месте разместить startundo- endundo.]]></description>
		<content:encoded><![CDATA[<p>Алексей, спасибо за подсказки, все получилось. С помощью кода получилось выполнять отмену удаления любого примитива любое количество раз! <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br />
Видимо главное было в правильном месте разместить startundo- endundo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59408</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 19:05:31 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59408</guid>
		<description><![CDATA[Евгения, AutoCAD отменяет операции, а не примитивы. В остальном - нужен код, потому что я уже запутался, что Вы хотите и в каком объеме.]]></description>
		<content:encoded><![CDATA[<p>Евгения, AutoCAD отменяет операции, а не примитивы. В остальном - нужен код, потому что я уже запутался, что Вы хотите и в каком объеме.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Евгения</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59407</link>
		<dc:creator><![CDATA[Евгения]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 18:58:58 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59407</guid>
		<description><![CDATA[На счет типа выбранных элементов - ведь Автокаду все равно, что отменять - будь то блок, штриховка, или что-то другое. Сложность только в том, что удаляется не один примитив, а несколько. И стандартная функция отмены восстанавливает сразу все удаленные одинаковые блоки.
В итоге, самая последняя строчка меня спасла :)
Я сделала двойное подтверждение удаления, сразу после того, как был выбран примитив, и уже после того, как он был удален. Правда после второго подтверждения приходится все равно завершать программу и отменять по Ctrl+Z.
Мне кажется, я даже знаю, почему не отменяется удаление. Когда в программе пошагово иду по коду, то в момент выполнения строки: (command &quot;_undo&quot; &quot;1&quot; &quot;&quot;), в командной строке пишет: &quot;Неизвестная команда &quot;DELETESELECT&quot;.&quot; Не понятно совершенно почему он обращается к функции, которая в данный момент выполняется, и не понятно, почему она неизвестная, ведь она загружена в Автокаде? Может решение этого вопроса и позволит придти к нужному результату. :)]]></description>
		<content:encoded><![CDATA[<p>На счет типа выбранных элементов - ведь Автокаду все равно, что отменять - будь то блок, штриховка, или что-то другое. Сложность только в том, что удаляется не один примитив, а несколько. И стандартная функция отмены восстанавливает сразу все удаленные одинаковые блоки.<br />
В итоге, самая последняя строчка меня спасла <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br />
Я сделала двойное подтверждение удаления, сразу после того, как был выбран примитив, и уже после того, как он был удален. Правда после второго подтверждения приходится все равно завершать программу и отменять по Ctrl+Z.<br />
Мне кажется, я даже знаю, почему не отменяется удаление. Когда в программе пошагово иду по коду, то в момент выполнения строки: (command "_undo" "1" ""), в командной строке пишет: "Неизвестная команда "DELETESELECT"." Не понятно совершенно почему он обращается к функции, которая в данный момент выполняется, и не понятно, почему она неизвестная, ведь она загружена в Автокаде? Может решение этого вопроса и позволит придти к нужному результату. <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59405</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 17:41:52 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59405</guid>
		<description><![CDATA[Так, стоп. Блок - это блок. Штриховка - это штриховка. Предлагаю не вносить сумятицу и соблюдать терминологию :)

Как пример можете рассмотреть мой код по удалению маскировок из всех блоков текущего чертежа: http://autolisp.ru/wp-content/uploads/2013/11/erase-wipeout.lsp

P.S. Обычно я ставлю марки начала-конца отмены только на область, где вносятся изменения в чертеж.
P.P.S. Если (подчеркиваю - если!) я правильно понимаю, то обработка получается такая:
1. Запрос у пользователя типа примитива, который надо удалить (отрезок, штриховка, маскировка, &lt;strong&gt;вхождение блока&lt;/strong&gt;...)
2. Если п.1 успешен (т.е. пользователь не нажал Esc), то:
2.1. Метка начала отмены
2.2. Разблокировать и разморозить слои (по желанию)
2.3. Проходим по всем описаниям блоков
2.4. Внутри каждого описания каждого блока находим примитив, аналогичный выданному в п.1., и удаляем его. Если п.2.2 не был выполнен, то перед удалением проверяем состояние слоя для примитива. Тут же будет &quot;головняк&quot; на предмет того, что делать, если примитив входит в блок, примитив находится на слое &quot;0&quot;, а блок - на каком-то другом слое.
2.5. Восстанавливаем состояние слоев (если был п.2.2)
2.6. Метка конца отмены
3. При необходимости - возврат к п.1.

В результате по Ctrl+Z будет отменяться только последнее удаление.

Можно сделать по-другому, поместив отмену до запроса и после п.1. Тогда отменяться будут сразу все удаления.]]></description>
		<content:encoded><![CDATA[<p>Так, стоп. Блок - это блок. Штриховка - это штриховка. Предлагаю не вносить сумятицу и соблюдать терминологию <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Как пример можете рассмотреть мой код по удалению маскировок из всех блоков текущего чертежа: <a href="http://autolisp.ru/wp-content/uploads/2013/11/erase-wipeout.lsp" rel="nofollow">http://autolisp.ru/wp-content/uploads/2013/11/erase-wipeout.lsp</a></p>
<p>P.S. Обычно я ставлю марки начала-конца отмены только на область, где вносятся изменения в чертеж.<br />
P.P.S. Если (подчеркиваю - если!) я правильно понимаю, то обработка получается такая:<br />
1. Запрос у пользователя типа примитива, который надо удалить (отрезок, штриховка, маскировка, <strong>вхождение блока</strong>...)<br />
2. Если п.1 успешен (т.е. пользователь не нажал Esc), то:<br />
2.1. Метка начала отмены<br />
2.2. Разблокировать и разморозить слои (по желанию)<br />
2.3. Проходим по всем описаниям блоков<br />
2.4. Внутри каждого описания каждого блока находим примитив, аналогичный выданному в п.1., и удаляем его. Если п.2.2 не был выполнен, то перед удалением проверяем состояние слоя для примитива. Тут же будет "головняк" на предмет того, что делать, если примитив входит в блок, примитив находится на слое "0", а блок - на каком-то другом слое.<br />
2.5. Восстанавливаем состояние слоев (если был п.2.2)<br />
2.6. Метка конца отмены<br />
3. При необходимости - возврат к п.1.</p>
<p>В результате по Ctrl+Z будет отменяться только последнее удаление.</p>
<p>Можно сделать по-другому, поместив отмену до запроса и после п.1. Тогда отменяться будут сразу все удаления.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Евгения</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59404</link>
		<dc:creator><![CDATA[Евгения]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 17:33:27 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59404</guid>
		<description><![CDATA[Сейчас еще немного поиграла с кодом и получилось следующее: я поставила startundo-endundo после проверки какой был выбран элемент на чертеже, и он хорошо отрабатывает из командной строки отмену. Но если я пытаюсь сделать отмену из лисп-программы, то он ругается:
&quot; Команда: _DELETESELECT Неизвестная команда &quot;DELETESELECT&quot;.  Для вызова справки 
нажмите F1.&quot;
Где DELETESELECT - это моя функция удаления выбранных элементов (defun C:DeleteSelect......)
Может ошибка как раз из-за подчеркивания? откуда оно может появляться?]]></description>
		<content:encoded><![CDATA[<p>Сейчас еще немного поиграла с кодом и получилось следующее: я поставила startundo-endundo после проверки какой был выбран элемент на чертеже, и он хорошо отрабатывает из командной строки отмену. Но если я пытаюсь сделать отмену из лисп-программы, то он ругается:<br />
" Команда: _DELETESELECT Неизвестная команда "DELETESELECT".  Для вызова справки<br />
нажмите F1."<br />
Где DELETESELECT - это моя функция удаления выбранных элементов (defun C:DeleteSelect......)<br />
Может ошибка как раз из-за подчеркивания? откуда оно может появляться?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Евгения</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59403</link>
		<dc:creator><![CDATA[Евгения]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 16:32:35 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59403</guid>
		<description><![CDATA[Алгоритм у меня именно такой. 
При выборе пользуюсь командой ssget, т.к. есть возможность выбора рамкой. Все работает, если выбран один элемент или рамкой выбрано несколько элементов. Перестает работать отмена удаления только в том случае, если удаляется не один блок (штриховка или текст), а все подобные блоки (штриховки, тексты) из чертежа и из блоков. Т.е. получается при отмене должен восстановиться не один блок, а все подобные в чертеже. 
Возможно нужен как раз таки для таких случаев другой алгоритм. 
1. Выбор блока
2.Удаление всех блоков с таким именем
3.Запрос правильно ли удален блок? Если да, переход на п.1. А если нет - даже не могу представить что нужно сделать. Ведь если отмену делать стандартную, то она нажимается один раз и восстанавливаются все удаленные блоки сразу.
И вот еще вопрос, где конкретно нужно ставить startundo-endundo? непосредственно перед и после команды delete, или в момент проверки типа выбранного примитива, или может вообще после выбора примитива?]]></description>
		<content:encoded><![CDATA[<p>Алгоритм у меня именно такой.<br />
При выборе пользуюсь командой ssget, т.к. есть возможность выбора рамкой. Все работает, если выбран один элемент или рамкой выбрано несколько элементов. Перестает работать отмена удаления только в том случае, если удаляется не один блок (штриховка или текст), а все подобные блоки (штриховки, тексты) из чертежа и из блоков. Т.е. получается при отмене должен восстановиться не один блок, а все подобные в чертеже.<br />
Возможно нужен как раз таки для таких случаев другой алгоритм.<br />
1. Выбор блока<br />
2.Удаление всех блоков с таким именем<br />
3.Запрос правильно ли удален блок? Если да, переход на п.1. А если нет - даже не могу представить что нужно сделать. Ведь если отмену делать стандартную, то она нажимается один раз и восстанавливаются все удаленные блоки сразу.<br />
И вот еще вопрос, где конкретно нужно ставить startundo-endundo? непосредственно перед и после команды delete, или в момент проверки типа выбранного примитива, или может вообще после выбора примитива?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59399</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 11:42:43 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59399</guid>
		<description><![CDATA[Я не очень понимаю общую логику, поэтому совет может и не сработать:
[cc]1. Если выбран блок
1.1. startundo-удаление-endundo
1.2. Запрос: результат нормален? Если да, то переход на п.1. Если нет, послать в ком.строку (&quot;_.undo&quot; &quot;1&quot;), и на п.1

Продолжать, пока выбран блок[/cc]
Может быть, общий алгоритм будет таким?]]></description>
		<content:encoded><![CDATA[<p>Я не очень понимаю общую логику, поэтому совет может и не сработать:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">1. Если выбран блок<br />
1.1. startundo-удаление-endundo<br />
1.2. Запрос: результат нормален? Если да, то переход на п.1. Если нет, послать в ком.строку (&quot;_.undo&quot; &quot;1&quot;), и на п.1<br />
<br />
Продолжать, пока выбран блок</div></td></tr></tbody></table></div>
<p>Может быть, общий алгоритм будет таким?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Евгения</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59398</link>
		<dc:creator><![CDATA[Евгения]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 11:28:10 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59398</guid>
		<description><![CDATA[Все верно, человек может отменить, но для этого надо завершить программу удаления, а я бы хотела сделать это в коде. Может как-то описать в коде реакцию на UNDO или лучше другой способ?]]></description>
		<content:encoded><![CDATA[<p>Все верно, человек может отменить, но для этого надо завершить программу удаления, а я бы хотела сделать это в коде. Может как-то описать в коде реакцию на UNDO или лучше другой способ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2014/04/02/undo-record-cancel/comment-page-1/#comment-59397</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Mon, 18 Jan 2016 11:19:22 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=1913#comment-59397</guid>
		<description><![CDATA[Так обычный Ctrl + Z корректно отменяет метки vla-startundomark .. vla-endundomark. Если был удален блок &quot;не тот&quot;, то увидит это только человек, человек же и отменит действие. Или я что-то не понимаю?]]></description>
		<content:encoded><![CDATA[<p>Так обычный Ctrl + Z корректно отменяет метки vla-startundomark .. vla-endundomark. Если был удален блок "не тот", то увидит это только человек, человек же и отменит действие. Или я что-то не понимаю?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
