|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Я об объекте "BLOCK" впервые слышу.
Цитата:
Код:
Такого быть не должно! |
||||
![]() |
|
||||
У Insert нету, а вот у block есть, только зачем два "Block name"
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Помогите, пожалуйста разобраться со свойством Alignment для объекта текст. Как мне получить, точнее задать дополнительную точку для выравнивания текста, а то как и положено, текст ускакивает в точку 0,0
![]() Текст добавляю методом Vla-AddText, хотелось бы, что бы он попадал в заданную точку именно своим центром (аттрибут 4 - acAlignmentMiddle), а не левым нижним углом. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Код:
|
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
ShaggyDoc, я вроде бы так и делал, только упрощенно
Все, понял, надо ввести точку вот таким макаром: (vla-put-alignment insert_text acAlignmentMiddle) (vla-put-textalignmentpoint insert_text insert_point) Спасибо! Последний раз редактировалось alex8888, 21.09.2010 в 10:42. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
ShaggyDoc, объясни, пожалуйста, как работает твоя конструкция:
Код:
Пробовал поэкспериментировать таким образом и со своей программой, результат тот же - мало параметров. Есть возможность как то обойти такую неприятность? |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Когда требуется заведомо переменное количество каких-то аргументв, их можно передать списком. Список будет одним аргументом для функции, его надо анализировать внутри. В разбираемой функции вместо аргумента justification можно передать NIL в качестве аргумента, тогда внутри функции аргументу будет присвоено значение по умолчанию acalignmentleft. Но опускать аргумент нельзя. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
![]() Ну, ладно, надо писать (= (type a) 'STR) |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ПОдскажите, пожалуйста, в таком вопросе:
поняв, что EffectiveName менять нельзя, поменял для всех блоков Name (в том числе и для блоков с "*Ux"). То есть теперь в программах можно обращаться к Name, я верно понимаю? Проверил еще раз - все блоки отлично переименовываются. Нет ли здесь каких подводных камней? Последний раз редактировалось Frigate, 23.09.2010 в 08:50. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
ShaggyDoc, не будешь против, если я твои функции буду у себя в программах использовать?
![]() Если нет, то можешь посмотреть у меня в коде, правильность использования "ru-error-catch", да и вообще сам код? Это моя "почти" первая попытка в ООП. Код:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Цитата:
1. vla-explode взрывает выбранный блок, но странно как-то – выбранный блок остается, но поверх него мы получаем взорванный блок??? Это так и должно быть??? 2. На этом форуме (или схожих) видел чертеж, где были очень интересные блоки. При попытке открыть их редактором пишет : «Блок содержит объекты-заместители. Не может быть открыт редактором.». Что это за блок такой? Как создать такой блок? 3. Словари в чертежах. Можете дать ссылку на описание, что это такое? Как они хранятся в чертеже? Насколько это надежный источник для хранения пользовательских данных? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
1. Да, так и должно быть. ОБъект блока надо удалять программно.
2. Наверняка прокси-объекты и отсутствует соответствующий ObjectEnabler 3. Достаточно надежный. Без определенной квалификации добраться до них невозможно (хотя зачастую вопрос "как снести" решается на ура)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Некоторые примеры есть здесь с поста #27 Еще подборка (требуется регистрация)
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 26.09.2010 в 13:38. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В дополнение к #1016. Надежность хранения данных в словарях такая же, как и всего остального. А вот надежность создания, изменения, удаления данных из словарей зависти от используемых функций. Штатных недостаточно, необходим примерно десяток дополнительных - чтобы было удобно работать. Как именно словари хранятся - фирменный секрет. Впрочем, как и всё остальное в DWG. Формат официально закрыт, все сведения получаются "разведывательными" методами. Конечного программиста не должно волновать, "как они хранятся". Важно другое - "как с ними работать". |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Благодарю за ответы.
До пратики со словарями я еще не дошел, но уже много инфы отсортировал, в том числе и разных программ от местных гуру :-) Сегодня разюирался с тем, как наиболее безболезненно вешать код программ на кнопки. В итоге, методом проб и ошибок, понял кое-что. Прошу подтвердить или опровергнуть мои выводы. Итак, понял, что для сохранности код от "очумелых ручек" на данном этапе внедрения своих программок в наш отдел, буду пользоваться vlx скомпилированным файлом всех вункций и программ. ПРоверил на 2-х программах. После первого вызова файла, все функции сразу становятся доступными. Теперь понимаю, как можно организовать общую библиотеку, о чем, кстати, в форуме читал дебатов немало. НАсколько верные выводы? |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Не спешите компилировать ради собственно компиляции или чтоб собрать все в кучу... наверняка вас попросят что-нибудь подредактировать... с другой стороны... для любопытных... если что-то перестало работать... переустановка лисп-библиотек плевое дело...
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Я вообще-то говорил про то, что при некоторых операциях, таких, как _.wblock, можно запросто "потерять" свои словари.
P.S. Скорость выполнения компилированного кода может в разы превышать скорость выполнения некомпилированного...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
Еще непродуманный диалоговый интерфейс... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
gomer, ну ты еще сюда и время на включение компьютера добавь, а еще и установку с запуском и настройкой AutoCAD'a... Совсем все медленно получится.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Можно еще вопрос?
Про такой свойство объектов, как password. Что этот пароль дает? Если его поставить на чертеж, то чертеж уже нельзя будет изменять? Или вообще просматривать? А если поставить пароль на блок, то что это даст? :-) |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А почитать справку? Ни у документа, ни у блока нет такого свойства, как password
Интересно.... если загрузить все и сразу... как это скажется на производительности... |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
а это что тогда?
Код:
А реально есть ли какой способ защитить блоки от редактирования??? Чтобы можно было снять только программно. Подскажите, пожалуйста, по функции из ru_CAD, приведенной на сайте ru_CADа: Код:
а дальше идет описание, что делает функция lambda и уже приводится такой код Код:
Код:
И еще вопрос - для чего именно нужна функция function - только для компиляции и оптимизацией кода? Ведь и без function все должно работать в лисп-файле. ИЛи я не так понял? Тогда прошу объяснить. Последний раз редактировалось Frigate, 27.09.2010 в 08:21. |
|||
![]() |
|
||||
Цитата:
Но мне лень писать слово function, и в надежде, что у меня программки маленькие и лёгкие, я пишу Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Disney
спасибо за ссылку, теперь я понял, что именно для оптимизации кода и нужна function Подумал тут... эти 2 кода равнозначны, что ли (lambda (x) (if (= key (car x)) x)) и (lambda (x) (= key (car x)))) ??? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Не совсем. Первый вариант вернет в случае успеха значение х, второй же - всего лишь t.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc
спасибо, Алексей, а то неверно код расшифровывал, вот и была сумятица в голове... в общем это ошибка на сайте ru_CAD. Можете подсказать что делает функция logior. Справку читал - не помогло ) Слишком все коротко и смутно: Цитата:
Что конктерно эта функция делает в этом коде, подскажите, пожалуйста Код:
Последний раз редактировалось Frigate, 27.09.2010 в 12:16. |
|||
![]() |
|
||||
Чистой воды "понт"
![]() Можно смело заменить на функцию + P.S. Смотри функцию vlax-make-variant и константы, обозначающие типы вариантов. Последний раз редактировалось Do$, 27.09.2010 в 12:36. |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
![]() т.е. я могу здсь просто поставить (+vlax-vbDouble vlax-vbArray) ? ![]() Кстати в справке почему-то в примере присваивания variant массива не используется аргумент "тип"... Может и так будет работать? Попробую ща все варианты... |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Можно и "смело заменить". Но потом когда-то и наткнуться на последствия. Цитата:
По поводу function правильно объяснено по ссылке у Алексея Но главное - компиляция. Да ещё раньше был другой вид компиляции в файлы формата BI2 и BI4. Вот там применение function было вообще обязательным. А в ruCAD многие функции еще от версии R10 остаются. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ShaggyDoc ,
объясните пожалуйста нам, неучам, что ж за хитрость зарыта в этой строке и чем может грозить пропуск ее? Еще раз повторю, что согласно примеру справке в АКАДе, вообще не используют тип в функции vlax-make-variant, предоставляя, судя по всему, функции выбирать самой тип данных. Это тоже, наверное, может грозить сбоем в самый неожиданный момент... Сидим и ждем умных разъяснений :-) Просто хочется понять, где ж написано было, что именно таком образом надо "складывать" типы переменных. В справке? Можно ткнуть носом в раздел? Вообще в источник? :-) Дополнение - еще раз перечитал справку... по умолчанию (без указания типа данных) vlax-make-variant для safearray поставит тип данных vbArray. Судя по логике, если вставлять такое выражение Код:
![]() ![]() Что-то уже больше часа бь.сь и никак не могу присвоить верхней границе массива переменную... вот Код:
Цитата:
Когда вводишь вместо верхней границы просто число, то все ок, а так... Какой эе тип данных должен быть, если не Integer??? Последний раз редактировалось Frigate, 27.09.2010 в 15:26. |
|||
![]() |
|
||||
Цитата:
Код:
Последний раз редактировалось Do$, 27.09.2010 в 16:11. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Как сказать
![]() Да, кстати! ShaggyDoc, прошу поправить меня, если я ошибаюсь (достаточно будет просто сказать, что я неправ): logior -> операция поразрядного ИЛИ. Работает только над целыми числами. Результат - целое число. Например: Код:
Код:
Код:
Аналогично с logand: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 27.09.2010 в 23:21. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
![]() Вот про "понты". Есть формула площади прямоугольника A*B. Допустим, A и B равны 2. Зная, что 2*2=4 и 2+2=4 некоторые могут сделать вывод, что в формулу можно поставить сложение. Для частного случая результат будет правильный, но методически - неверно. Что делает logior если объяснять "по-крестьянски"? Эта функция формирует из переданных целых чисел (назовем их битами) некое число (флаг), анализируя которое можно узнать, какие биты в него входят. Биты должны быть из ряда 0 1 2 4 8 16 .... Пример Код:
Код:
Код:
|
|||
![]() |
|
||||
Цитата:
![]() ![]() Но я останусь при своем мнении - тип данных для массива варианта задается как сумма битового флага массива и битового флага типа элемента массива, каждый из них по отдельности не может включать другой бит (по определению). Поэтому, я считаю, что применение logior именно в этом случае не оправдано. ![]() |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Offtop: ShaggyDoc, ну надо же было закошмарить ситуацию, чтобы получить внятные и ясные объяснения
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Прошу прощения, но про побитовое ИЛИ я то как раз понимаю, Не стоит считать инженеров "недопрограммистами".
Мой вопрос был в другом - почему надо именно так складывать значения констант типов, если в самой справке, к примеру, при присвоении VARIANT безопасного массива из doubles, это вообще пропускается? Если пропустить, то, в случае преобразования списка точек в координаты для полилинии, все работает безукоризненно. Тогда, как я понимаю, логическое ИЛИ может применяться в других ситуациях при работе с константами Автокада. Подумал, посчитал... В общем, соглашаюсь с гуру Вот почему: скажем, нам нужен массив из длинных целых чисел. У Array константа 9, у Long Integer - 3. Если просто суммируем - получим 12. А вот если побитово сложим, то 1001 OR 0011 1011 получим 11 :-) Для моего случая, когда нужен массив из Doubles Если складываем: 9+5=14 А побитово 1001 OR 0101 1101 , т.е. 9 OR 5 = 13 Теперь уже и сам убедился. Копаем дальше. Если общий флаг типа данных - 1101, то это может быть и 9+5 и 9+4, т.е. либо Double, либо Single... А что и з этого следует? В таком массиве точность станет какой? Как АвтоКАД определит тогда тип данных? Может он все-таки здесь работает не по-битово, а с целыми числами, как с константами? Или, скажем, берет тип данных массив и тип данных его членов (Doubles)? В общем, вопросов появляется больше, чем ответов. МОжет потому и нет в справке при создании Variant составного типа массива и Doubles? ;-) И когда я сам пропускаю этот (logior ...) и этот (+...) в своей функции, то все замечательно считается. Последний раз редактировалось Frigate, 28.09.2010 в 10:39. |
|||
![]() |
|
||||
Цитата:
Нужно определить, содержит ли 9071 значения 128 и 4, и если нет - добавить. Именно это и можно сделать с помощью logior: Код:
9199-9071=128. То есть, бит 4 присутствовал изначально, а бит 128 добавился. Здесь сложением logior заменять нельзя. Последний раз редактировалось Do$, 28.09.2010 в 10:46. |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Do$
благодарю, про привязки понял. Посмотри пожалуйста, на мое дополнение к пред. моему сообщению (точнее, я полностью почти изменил сообщение). Там я вопрос задал, и уже не первый раз, про справку автокада. Там не используются в примере общие коды (сумма или logior). И без них кстати полилиния замечательно так создается. А по поводу привязок все хотел спросить - нужно ли их отключать перед тем, как программно строить полилинию? Если да, то почему? Точнее, какая именно ситуация может вызвать неправильную прорисовку полилинии? Ведь она задается массивом координат. Как же тогда привязки могут на нее повлиять? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
vlax-make-variant создает тип variant, насколько я понимаю. На основе стандартных типов данных (vbInteger, vbDouble, vbString и т.д.). Не, можно, конечно, из variant сделать еще один variant и так до бесконечности (у попа была собака) - но смысл?
Для преобразования списка координат вида '((0. 0.) (10. 0.) (20. 10.)) в значение, понимаемое vla-addlightweightpolyline, делаем следующее: Код:
![]()
Пока по рабочим делам бегал, много воды утекло... Может, уже и не надо никому ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Елпанов Евгений,
кратко и емко Кулик Алексей aka kpblc , Алексей, код-то я как раз уже понимаю и написал его для своей программы. Вопрос в другом :-) Наверное, я не точно все описал. Впрочем ясно, что вообще можно не указывать сумму констант типов массив и Double при задании vlax-make-variant. Вот, кстати, из справки цитата: Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Заодно учитывать, что при использовании функций command и vl-cmdf координаты всегда должны быть в текущей ПСК. При использовании entxxx и объектных методов - всегда в МСК. Учитывать, что getpoint возвращает координаты в текущей ПСК. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Безусловно так, но хотелось-бы добавить, что такое применение оправдано, ну скажем в ассемблере (в общем оно там на каждом шагу), гораздо более интересные вещи при помощи логических операций делаются применительно к проверке условий (не спроста они созвучны с or и and) - при правильном подходе (да еще и с применением lsh) - количество проверок сокращается в разы, но это тема для отдельного большого обсуждения.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
Цитата:
Код:
![]() Последний раз редактировалось gomer, 29.09.2010 в 00:15. Причина: может я не ту кнопку нажал? |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
gomer,
да, я тоже пришел к такому выводу Задам еще корифеям вопрос: Если можно, посоветуйте, как сделать: надо вставлятьТЕКСТ или МТЕКСТ в рамку размером 5 на 10 мм. Чтобы, если он не будет влезать в рамку, коэф-т сжатия текста уменьшился до нужных размеров. Как это реализовать? на лисп? Последний раз редактировалось Frigate, 29.09.2010 в 12:36. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
1. проверяй габаритную рамку vla-GetBoundingBox и сравнивай со своей.
2. Для текста textbox Хотя мтекст да еще с форматированием та еще штучка. Почитай эти (особенно последнюю) темы Как получить координаты рамки text? Автоматический подбор высоты текста Еще дельные ссылки: http://forums.autodesk.com/t5/AutoCA...ps/m-p/2076942 (там выложен ShrinkwrapMText v2a.zip) MText - Set Limits Box to minimum (смотреть коды T Willey и fx.lsp выложенный C Witt)
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Цитата:
большущее спасибо ![]() Сильное упрощение процесса ))) Век живи, век учись... Есть напр. номера кабелей С1-1-1, с1-1-2 и тп, а есть С1-49-12... То есть автоматически при выравнивании слишком пестро смотрятся вставки. Придумал, что можно контролировать количество символов в строке кабеля. И если, напр., в строке, определяющей номер кабеля, меньше 10 символов, то добавляем по одному символу "пробел" слева и справа. Естественно, что "пробелы будут добавляться лишь к временным переменным (одной переменной), для придания "ляповатого вида" ![]() Код завтра напишу, пора и спать ))) Последний раз редактировалось Frigate, 29.09.2010 в 22:03. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Надеюсь, не имелось в виду "сделать атрибут с выравниванием по ширине"?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Если же действительно иногда вылезает за пределы бокса, то можно и по ширине сделать, с добавлением, как и догадался Frigate, в необходимых случаях пробелов для "ляповатого" вида. Это легко делать программно. А можно и со сжатием шрифта побаловаться, а выравнивание всегда по центру делать. Чуть больше сжатый шрифт атрибута в таких этикетках нормально смотрится. Да и растяжение на мизерной длине в 10 мм не так уж плохо смотрится, если там несколько символов. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Все уже сказано:
Цитата:
Границы-10% <= ШиринаТекста <= Границы+30% В противном случае текст становится трудночитаемым.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc
ну да, я понял, о чем ты. Я в блоке левую точку привязки текста расположил прямо на рамке 10 на 5, а правую точку расположил на 9.7 мм, т.е. на 0.3 мм левее правой стороны рамки - все очень даже нормально смотрится ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Подниму опять вопрос про Password, ибо опять наткнулся на такое свойство. Пароль не связан с блоком, но связан со вставкой блока.
Вот из справки: Цитата:
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Frigate, про Password у меня такое предположение. Вообще-то свойство Password относиться не к блоку, а к объекту "SecurityParams", использование которго позволяет задать дополнительный атрибуты для чертежа. А так как для вставки блока может использоваться другой dwg чертеж, у которого есть пароль, то его, этот пароль и нужно будет указать в RetVal = object.InsertBlock(InsertionPoint, Name, Xscale, Yscale, ZScale, Rotation [, Password]).
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Нужна помощь. Что-то не получается сделать вставку блока никак
![]() Блок "ДГК-1" сам создан и его можно вставить в чертеж обычными средствами. Код:
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Алексей,
твой код загрузил, ткнул точку вставки и получил Код:
А не нужно ли, при вставке имени блока как переменной, использовать Код:
у меня вот так получилось: Код:
возможно дело все в таком непонятном списке Код:
Что там должно быть? ![]() Последний раз редактировалось Frigate, 30.09.2010 в 14:26. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Поменяй местами строки (vlax-3d-point inx_pt) и blk_name:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Кстати, проверять введена ли именно точка, всегда надо. Лучше сделать отдельную функцию наподобие
Код:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
ShaggyDoc, я проверял через type вот почему:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Да, можно и как-то так. Но я стараюсь в мелких функциях, по возможности, не использовать особенностей последних версий VL. Иногда приходится делать "downgrade" программ... Вот даже версию для AutoCAD 14 в рабочем состоянии держу, а один очень уважаемый мною клиент до сих пор версию 10 (не 2010, а именно 10) использует. Так уж сложилось...
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
По поводу низкоуровневых функций с отловом ошибок... В некоторых случаях (особенно это касается вертикальных приложений предыдущих версий) "вложенность" vl-catch-* функций не может превышать некоторого значения (по-моему, 4). Абсолютно недокументированная особенность, в свое время немало мне подпортившая мне жизнь: код просто вылетал с сообщением о переполнении.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но использовать их надо с умом, где действительно необходимо. А если можно сделать простую проверку, лучше обойтись ею. Утрированный пример - всем известно, что на 0 делить нельзя. Не умеет делать никакой процессор. Можно "перебдеть" и обертывать в ловушку все операции деления. И я даже реально видел такой код. А можно просто проверять на "нолистость" на верхнем уровне, не проуская неверные числа. Для ловушек много и человеческих аналогов. Не обязательно каждого заставлять креститься или выпивать горилки для проверки на "правильность". Или дубиной по голове бить, или еще что... Обычно есть более простые способы. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Подскажите, пожалуйста, как обработать формулу (см. вложение) при нескольких значениях угла альфа. Список из необходимых углов альфа и величина R известны, но количество альф может быть различным. Требуется получить список из Lx или конкретные значения L0, L1, L2 ... и т.д.
Через обработку списка из альф посредством команды nth получаю значения L0, ....Ln, но сама запись очень громоздкая: Код:
![]() Не получается подставлять в выражение значение из списка - требуют всегда число, а как без nth до него добраться? |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
alex8888, попробуй так
Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
TararykovDG, спасибо, получилось.
![]() Вопрос другой, у метода AddSpline в качестве аргументов нужно задавать начальную и конечную касательные. Как они будут выглядеть, если необходимо получить замкнутый сплайн, где начало и конец совпадают и дополнительные точки я не просчитывал? Последний раз редактировалось alex8888, 07.10.2010 в 15:09. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Это старая версия. Последняя версия ruCAD-2008 "замечает" и работает со всеми AutoCAD начиная с 2008 (R17.1) до R18.2 (если такая будет). Более ранние не поддерживаются.
|
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
ShaggyDoc, а в 2011 каде получится запустить? И где скачать, если можно?
Как привести список типа ((x1 y1)(x2 y2)(x3 y3)...(xn yn)) к виду (x1 y1 x2 y2 x3 y3 .... xn yn) ? Offtop: (Туплю чего то сегодня ![]() Последний раз редактировалось alex8888, 07.10.2010 в 18:15. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Ограничения младших версий вызваны тем, что выполнен полный переход на возможности 3D, аннотативность и прочее, появившееся в 2008. А старшие версии ограничены 18.2, да и то "от фонаря". Технических ограничений нет, так как не используется OA, в котором есть контроль версий. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Интересная особенность VLISP редактора - если создавать мастером приложение и файлы .lsp лежат в папке создаваемого приложения, то длина имени таких .lsp файлов не может превышать 24 символа. Если файлы-исходники находятся в др. папках, то таких ограничений нет. Но добавлять больше чем по 5 файлов-исходников (.lsp) не получается. Может кто знает, как можно за одно выделение добавить все свои исходные .lsp файлы в состав приложения?
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Файлы можно группировать, вставлять комментарии как в LISP за символами ";", располагать в подкаталогах. Запись файла в список надо делать с относительным путем от файла проекта. Например "3d/draw/pipe/support/erico/ru-3d-steel-erico-bracket-2-channel-draw" Неудобство - после изменения проект надо заново загружать. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Очень нужен совет опытных пользователей Автокада. Создал команду, подцепил ее на кнопку. Файл .lsp с командой разместил в папке, которую прописал в путях доступа к вспомогат. файлам. Теперь меняю код в .lsp файле, но подкачивается старый вариант файла. ВАообще удалил файл и папку. Все равно откуда-то подгружается файл )))
Прошу помощи ) Иначе придется просто менять название программсы и прописывать новое уже название на кнопке. |
|||
![]() |
|
||||
Цитата:
Если автоматически, то возможно, что команда с таким именем уже существует в др. lisp-файле, который грузится после вашего. п.с. я не силён в лиспе, это предположение.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
|||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
в общем щас более подробно опитшу ситуацию.
Программа (имя ее) - adv-programme-routing-cable-routing-create. Сейчас такая ситуация-ни одного файла с таким названием нет. Открываю Автокад. Набираю в ком. строке название этой команды: Цитата:
Цитата:
Цитата:
Цитата:
Прошу помощи ) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Попробуй указать загрузку так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ответ автокада
Цитата:
Все нормально теперь, еще раз проверил - уже не находит эту программку. Видимо, есть глюк у Акада какой-то, но сейчас он исчез (после переименования программы) gomer, а как сделать загрузку основного VLX файла через CUI? Последний раз редактировалось Frigate, 17.10.2010 в 11:50. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
если б так все просто я б не переживал даже ))) Уже жалею, что изменил название программы и макрос на запуск программы (что на кнопке)
![]() а кто что посоветует, как мне подгружать файл VLX с библиотекой функций? (программы я подгружаю отдельно, макросом на кнопке). |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Никак, но можно его загружать из лиспа прописанного в CUI
зы основной VLX файл? ИМХО одна задача - одна команда - один файл (приложение)... Для загрузки приложений создается файл - центр загрузки, желательно с открытым кодом (mnl, lsp - не столь важно), в котором прописывается что необходимо подгрузить... зызы посмотри, как организовано тут... Не идеал, но все же... Последний раз редактировалось gomer, 17.10.2010 в 12:25. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
gomer
в той программе используется диалоговое окно .dcl? Это в нем создано описание свойств проката, да? что-то не распаковывается архив с той программкой, к сожалению. Ну если объяснить на пальцах? У меня есть мой файл частичной адаптации. В нем мне подгрузить .lsp, который загружает VLX с функциями? Так сделал, но автоматом такой файл не лоадится (.lsp в CUI). В справке по адаптации написано, что автоматически подгружаются файлы с .mnl. Попробовал - создал файл mnl с именем как у CUI. Туда просто вписал: Код:
![]() ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Frigate, Почитай эту тему Игры с CUI Там было и про лисп и много чего еще интересного
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
ребят, подскажите, не могу дотумкать
В mnl файле прописал загрузку небезызвестных программ Александра Ривилиса Код:
Но недавно всплыла нужда в проверке на 64-битность. Для 64 битных систем нужен соответственно другой arx. Слямзил с VetCAD_а идею: Код:
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14) Последний раз редактировалось wetr, 02.11.2010 в 01:51. |
||||
![]() |
|
||||
Извините за флуд, не удержался от соблазна присвоить пост номер 1111 себе как аФтору
![]() ![]()
__________________
Блог |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Здравствуйте, подскажите, какой английский аналог команды ПОРЯДОК в русифицированном АКАДе?
А вообще, можно ли где-нибудь скачать справку для пользователя оригинальной (англ.) версии Автокада? А то неоткуда брать команды, а они иногда так нужны. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Frigate, можно ипользовать функцию getcname Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
См. ф-цию Acad64Bit-version с поста #6 Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Всем спасибо!
Код:
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14) |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Здравстуйте, уважаемые ГУРУ форума.
Прошу помочь с функцией выделения рамкой ячеек в таблице: SelectSubRegion (wpt1, wpt2, wvwVec, wvwxVec, seltype, bIncludeCurrentSelection, rowMin, rowMax, colMin, colMax) wvwvec Variant 3D vector in WCS specifying the view direction of the selection. Берется из системной переменной (vlax-3d-point (trans (getvar "VIEWDIR") 1 0)). А вот где найти wvwxvec Variant 3D vector in WCS specifying the view orientation of the hit test. ??? Или может кто скинет примеры использования этой функции? Последний раз редактировалось Frigate, 07.11.2010 в 18:56. |
|||
![]() |
|
||||
Регистрация: 12.07.2008
Сообщений: 211
|
нет, я не поклонник лиспа, но случайно встретил в интернете книженцию Land of Lisp: Learn to Program in Lisp, One Game at a Time!. Подумал, что возможно, кому-нибудь будет интересно почитать)
__________________
Users are not stupid, they are busy. |
|||
![]() |
|
||||
Регистрация: 12.07.2008
Сообщений: 211
|
Переведешь - будет! А не переведешь - будешь ждать пока переведет кто-нибудь другой, пропустив всю информацию в книге через свое восприятие))
Имхо, программер, в первую очередь, должен знать английский (хотя бы технический), а потом уже браться за изучение программирования...
__________________
Users are not stupid, they are busy. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
VVA,
спасибо. Я именно по одному из твоих примеров и разобрался с методом hittest. Владимир (если не ошибаюсь), можешь мне помочь мою проблему решить? Мне нужно хранить VLA-object в атрибуте. Но даже если и запихнуть VLA-object в строку, то потом его вытащить никак не получается. Я правда с ENAME не пробовал еще такого проделать. Подскажи, плиз, что мне делать. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Frigate, Запоминай в атрибуте ID VLA-object'а Код:
Код:
__________________
cadtools Последний раз редактировалось TararykovDG, 12.11.2010 в 20:15. |
|||
![]() |
|
||||
Уважаемые форумчане, пожалуйста объясните правила работы и зачем вообще нужны функции отлова ошибок (типо *error*). Можно ли это как-то применить к следующему:
в программе во время диалога с пользователем, автокад отправляет некоторые данные в лист екселя. Предположим, пользователь нажимает escape и прерывает программу. Тогда в памяти остаётся открытым объект екселя а в нём активная книга. Как сделать так, чтобы в случае ошибки книга закрывалась? |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
TararykovDG, ID объекта хранится только в текущей сессии. Хэндлы более живучи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Да-да, Алексей, верно, совсем забыл про потерю ID в другой сессии. Ну метки должны работать, так что, Frigate, используй вариант с ename
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
То есть 2-ой способ указанный мной в посте #1124 (слово "вариант" здесь это не тип данных)
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Лиспер, я не пойму, Ты че прикалываешся? Или Тебе поговорить охото. Второй код из поста #1124, по-моему там все очевидно, во всяком случае для Тебя должно быть очевидно... То есть хендлы (а по-русски метки)
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
спасибо за советы, но они пока никак мне не помогут. Мне нужно хранить список в аргументе блока. Напр., такой: ((<Имя объекта: 7ef085e8> 52.9463) (<Имя объекта: 7ef084a8> 54.0)) Или HANDLE вместо entity. Но: чтобы запихнуть список в аргумент, его надо преобразовать в строку (vl-princ-to-string ... ). А там все свойства теряются. Что посоветуете? Желательно оставить вариант, что инфа хранится в атрибуте блока. (на всякий слычай уточню - entity хранится совсе не этого блока). |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
)
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 20.02.2009
Сообщений: 260
|
Многоуважаемый Кулик Алексей aka kpblc используя ваш lisp по созданию слоев и загрузки типов линий в вашем реакторе обнаружил, что если, например, чертится ось на слое с пунктирным типом линий, то при повторном вызове производится сброс на обычный тип. Хотя понимаю, что lisp только для создания слоев, а не для изменений их св-в, но очень уж удобный. Возможно ли вот такое корявое изменение (кириллица слетела, за что прошу прощения):
Код:
Последний раз редактировалось puma, 13.11.2010 в 14:50. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
вышел из ситуации по-другом - в переменную просто сохранял всю матрицу. Все равно значения ее лишь временно нужны. А те, что нужны и после матобработки, сохраняю в атрибутах. За советы благодарю. Наверняка и они пригодятся потом. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
В свое время обдумывал где и как хранить информацию о "контактных" точках блоков.
То есть точек блока, которые могут соединяться меж собой в схеме или графике каком... В моем случае было достаточно 4 групп "контактных" точек по квадрантам - верх, низ, лево, право. В итоге решил хранить в самих блоках, добавляя в них с помощью простейшего лиспа отрезки, которые: 1 имеют строго определенную длину, которая на несколько порядков меньше размеров блока; 2 содержат группу невидимости (60 . 1). Другой лиспик извлекает список "контактных" точек при указании на вставленный в чертеж блок. Примитивно, но это работает ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
puma, а можно полный код напомнить? Я просто подобных ошибок не ловил...
P.S. Проверить смогу только завтра вечером ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.02.2009
Сообщений: 260
|
Полный код той версии реактора, что использую, (без изменений) со всеми доп.функциями. Если где затесались мои комментарии - сорри, пока разбирался - комментировал что где делается. Ошибка появляется при таком порядке:
Требуется создать объект на слое со штрихпунктирным типом линий (подгружаю из стороннего файла, не acadiso; наименование типа линий на русском - добавлял в список, и он находился). После создания первого - создаем второй объект. Слой при этом меняет тип линий на обычный. Возможно я не то исправил, но, кажется, если тип линий загружен и снова происходит обращение к функции подгрузки типов линий - она выдает nil, что приводит к загрузке стандартной линии. Исправление по русскому/английскому наименованию делал почти наугад, так как после того как функцию подгрузки линии исправил, чтобы выдавала T - начала вылетать функция создания слоя с ошибкой. Хотя скорее всего у меня просто кривые руки. Спасибо за чудесный реактор, и заранее за ответ ![]() Код:
Последний раз редактировалось puma, 14.11.2010 в 18:11. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Li6-D,
не очень понятно, как эти отрезке в блоке помогают тебе и главное - когда именно? МОжно, ксати, ставить объект-точку. Я бы хранил возможные точки подключения в расширенных данных. Или в словаре примитива - или это одно и то же? ))) Но вот как эти данные получать для записи? Откуда? |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Frigate,
во вложенном чертеже приведен фрагмент графика Ганта, блоки которого содержат "контактные" точки, служащие для соединения блоков между собой. Просмотреть список точек можно так: (label_block (car (entsel))), где label_block: Код:
Точки с кодом 0 соединяются только с 2, а 1 с 3. При необходимости можно еще и тип линии загружать. Последний раз редактировалось Li6-D, 14.11.2010 в 20:04. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Frigate,
как я уже говорил, в dxf-коде отрезков содержится группа (60 . 1), делающая примитивы невидимыми. Добавь эту группу в любой примитив с помощью (entmod (cons '(60 . 1) (entget (car (entsel))))) и он станет невидимым, не будет захватываться рамкой. Но этот примитив никуда из чертежа не делся, его можно даже захватить опциями "_Last", "_All". Посмотреть dxf-список всех примитивов чертежа, включая невидимые объекты, можно так: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
puma, я сейчас проверил код - ни команда создания отрезков, ни команда создания полилиний в реакторе не отслеживаются. Создание текста в слое с типом линии "не-Continuous" корректно вернуло все настройки обратно. Может, еще есть какие-то дополнительные приложения?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.02.2009
Сообщений: 260
|
Насчет полилиний и отрезков - извините, ввел вас в заблуждение, но при тексте также повторяется ошибка при том коде, что я выложил. Все дополнительные приложения временно были удалены. Autocad 2011. Скорее всего просто у вас в коде уже это исправлено. Извините за беспокойство
![]() Последний раз редактировалось puma, 15.11.2010 в 01:54. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Li6-D,
а ты DXF-код отрезков где менял? Программно, когда запущен редактор блоков? Или уже в чертеже? Прошу знающих помочь со следующими 2 вопросами: 1. Как для блока задать цвет? Через TrueColor? А дальше как? Если можно - дайте пример. 2. Создание Группы ( в семействе блоков). Имеется - список (list) VLA-указателей на блоки: obj_list. Всего в списке 17 блоков (указателей на блоки). Надо сгруппировать эти блоки в единую группу, чтобы можно было их разом всех вместе выделять и перетаскивать. ВОт так пытался сделать: Код:
Цитата:
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Frigate, а не проще ли запихнуть нужные блоки в набор
Код:
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
но этот набор сразу же исчезнет после любой операции, так ведь? Тогда это не совсем то. Хотелось бы, чтоб пользователь мог легко перетащить весь набор в любой момент времени, да и скопировать, если что - не выбирая каждый блок. Что посоветуешь - в чем моя ошибка в коде? Последний раз редактировалось Frigate, 15.11.2010 в 11:39. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Для описания блока или для вхождения блока? В любом случае есть vla-put-color, который понимает индексированные цвета.
Тут вообще ничего не понял. О создании групп объектов см., например, http://www.cadtutor.net/forum/showth...-about-groups&
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Frigate, а зачем Тебе объединять объекты в блок, только для того чтобы потом работать с ними всему сразу при копировании и др. операциях. В моем варианте я запихнул все нужные объекты в набор nbr_blocks и теперь (если конечно этот набор не переопределить) я могу в любой момент сделать (sssetfirst nil nbr_blocks). Подсветяться ручки наших объектов и делай с ними что надо.
Если хочешь посмотри еще такой вариант Повтор предыдущего выбора элементов
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
вот уж спасибо ![]() а все-таки, ради интересе - что неверного в моем коде? Вроде все по описанию объектной модели делал... TararykovDG а после закрытия чертежа ведь этот набор исчезнет, так? Или его можно как-то сохранить? |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Ну можно сделать чтобы сохранялся и после закрытия чертежа. Способов сохранения информации много, но в данноч случая ИМХО лучше всего создать словарь и в него записать набор. Во-первых никаких доп. файлов, никаких заморечей с реестром и для каждого чертежа будет свой словарь в котором своя инфа именно с этого чертежа + при копировании /переносе/переименовании чертежа даже на разные компы вся инфа сохраняется вместе с самим чертежом
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
ну внешней сылкой я его вставлять не буду - это точно. А просто группа будет перетаскиваться вся целиком если ее мышкой ухватить? TararykovDG, со словарями уже немного знаком - набил руку. Хорошо, наверное такой способ мне подойдет. Последний раз редактировалось Frigate, 15.11.2010 в 13:40. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
ты был прав. Я разобрался с sssetfirst. Очень полезная команда. Подскажите пожалуйста, возможно ли при помощи ЛИСП выбрать папку, а не файл в папке (по getfiled или еще может какие команды есть) ? Сейчас мне приходится выбирать любой файл в папке, чтобы "подхватить" из этого выбора путь папки. А хочется, чтобы только папки показывало окно выбора, без файлов. Последний раз редактировалось Frigate, 16.11.2010 в 07:36. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 10.05.2010
Сообщений: 3
|
Доброго времени суток!
Вот такой вопрос: почему такой код (entmake (list '(0 . "TEXT") '(10 216422.0 22222.09 0.0) '(40 . 150.0) '(1 . "X") '(71 . 0) '(72 . 0) '(73 . 0))) (entmake (list '(0 . "TEXT") '(10 222422.0 22222.09 0.0) '(40 . 150.0) '(1 . "XY") '(71 . 0) '(72 . 1) '(73 . 0))) исполняется так: "Х" отображается по координате (216422.0 22222.09 0.0), а "XY" по координате (0.0 0.0 0.0), а не по (222422.0 22222.09 0.0)? |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
E-degtyarev,
о, спасибо большое!!! ТО, чот нужно! а есть возможность по браузеру выбирать и файлы? Чтобы у меня вид окон был одинаков для папок и для файлов. Никак не могу еще один вопрос решить - тормозит автокад и все тут, даже виснет. Подскажите, пожалуйста, как можно в таблице все границы между ячейками сделать толщиной 0,4? Пробовал вот такой код: Код:
Но если этот код применить в цикле и ко многим ячейкам, то автокад просто виснет... что-то не так делаю. Прошу поделиться ссылкой или код, как массово менять толщину границ ячеек ![]() Заранее благодарен. Последний раз редактировалось Frigate, 16.11.2010 в 14:47. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Если вес линий нужно поменять для всех ячеек, а не для каких-то отдельных, то вместо vla-setcellgridlineweight в цикле для каждой ячейки попробуй использовать vla-SetGridLineWeight для всей таблицы.
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
я немного неточно спросил. Мне нужно, чтобы вертикальные линии выбранного диапазона ячеек стали толстыми, а горизонтальные остались по умолчанию - тонкими. И чтобы этот код не тормозил, как у меня происходило. В итоге пришлось просто создать шаблон таблицы. Но ведь хочется самому иметь возможность подправить таблицу - вернее, выбранный диапазон ячеек. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
У меня для таблицы 30х30 при модификации ячеек с 1 по 20 по столбцам и с 1 по 25 по строкам затратилось примерно 17 секунд. Какие у Тебя результаты?
__________________
cadtools |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
TararykovDG,
я когда игрался с таблицами, задавал в цикле, чтобы вертик. границы 8 ячеек стали толстыми. Очень сильно тупил АКАд, пока не щалкнешь мышкой, он так и висит, а как щелкнешь - задумается и все-таки родит - сделает вертик. границы толстыми. Щас попробую-ка еще разок Проверил. В общем в прошлый раз я что-то напутал в коде. Таблица 30 на 30. Задавал вертик. границы первым 25 строкам, всем 30 столбцам. Примерно 20-25 секунд выполнялось. ВОт код: Код:
Последний раз редактировалось Frigate, 17.11.2010 в 19:29. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Почему-то в AutoCAD 2011 Rus 64 bit отказывается обрабатывать последние две строки. Хотя должно...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Уважаемые гуру,
подскажите пожалуйста, как сделать такой вариант запроса: "Укажите точку вставки перечня кабелей [1 - указать количество столбцов самому]:" Т.е. чтобы по умолчанию пользователь мог ввести точку, но в то же время, при желании, мог ввести единицу (или букву, напр.). Типа как в автокадовскиъ командах, когда можно ввести следующую точку, но можно поменять настройки, ввести численно длину и тп. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Код:
__________________
cadtools |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
Доброго времени суток!
Вот написал программку, суть которой скопировать объект на рассчитанное предварительно расстояние и после скопированному объекту надо сделать stretch с каждой стороны. делаю выделение, а он его (этот объект не видит). Код:
Видимо "свежескопированный" объект не видим для stretch. помогите, как сделать чтобы заработала прога |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
Алексей, БРАВО :-) Сразу видно мастера ЛИСПа. А то я тут через Камчатку в Москву всю видимо пытаюсь ехать ![]() А можешь код модифицировать так, чтобы после указания количества столбцов пользователь уже выбрал точку вставки? Только объясни мне, пожалуйста, какой кусок кода отвечает за прорисовку временной линии от первой точки до точки вставки перечня кабелей? ![]() Добавлено: Я понял, Алексей, как теперь сделать ![]() Благодарю за просвещение :-) А то я что-то плохо очень знал возможности getpoint. Зато полез в дебри grread ![]() В общем вывод - изучать возможности основных функций АвтоЛиспа. Последний раз редактировалось Frigate, 19.11.2010 в 06:27. |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
![]() Последний раз редактировалось Li6-D, 19.11.2010 в 19:00. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
to Li6-D
да. да. именно так и происходит. я получаю этот объект посредством копирования пред идущего. Подскажи, а как это реализовать через ActiveX ? задача в общем-то такая: нужно выбранный объект скопировать, перетащить в другой слой и сделать уже перетащенному stretch с двух сторон на заданное расстояние. А потом тоже самое сделать с полученным после трима объектом. Спасибо! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Frigate, просто можно повторно запросить точку в случае выбора "Количество столбцов", это не сложно. Я-то полной задачи не знаю, потому такой код и нарисовал.
Michael!, я не очень понял. Есть исходный объект: (setq ent (car (entsel))) Потом он копируется: (command "_.copy" ent "" pause pause) А потом к нему выполняется _.stretch: (command "_.stretch" (entlast) <...>) Так? Можно вариант переделать (пишу без проверок): Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
to Кулик Алексей aka kpblc
А поясните пожалуйста строки вашего кода. entsel, я не пользовал ни разу. задумка у меня такая: Код:
|
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Michael!,
Много буков, а леса не видно. Опять фрактальные построения что ли? Наведу критику: 1) Не объявлены локальные переменные (хотя сойдет для отладки). Создана команда, а не функция. Если она не вызывается юзером, а используется другой функцией, то незачем ее делать командой. 2) Почитай про функцию setvar. 3) Зачем строковое представление точек? Точки-списки нормально воспринимаются в command-функции. 4) Если нужно получить точку, смещенную на определенный вектор относительно исходной можно написать: (setq Pt1 (mapcar '+ Pt0 '(-2 2 0))), где '(-2 2 0) - вектор смещения. Если есть две точки Pt0, Pt и надо найти точку Pt1 на отрезке их соединяющем и делящую этот отрезок в заданной пропорции. Варианты решения: (setq Pt1 (polar Pt0 (angle Pt0 Pt) (/ (distance Pt0 Pt) 3))) (setq Pt1 (mapcar '(lambda (x y) (/ (+ x x y) 3)) Pt0 Pt)) 5) Ни одного примитива код не создает, какого рода объекты копируются? Если примитивы простые, то может их проще создавать entmake, а не копировать. 6) Пиши так: (command "_.stretch" "_Crossing"... ) - у многих стоит локализованная версия. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
согласен.
1. они будут объявлены позже. пока она вызывается именно так. поэтому я и написал что С: 2. почитаю ![]() 3. так понятнее для меня было - исправлю. 4. не знал что так можно/нужно делать 5. копируются полилинии замкнутые 6. тут я для себя пишу. на моем компе и так работает. так всетаки, как сделать смену слоя и stretch для полученного объекта? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Michael!, я так и не понял конечного смысла использования _.stretch (кстати, код не будет работать в русской версии). Что, надо переместить объект вправо-влево? Приложи dwg-файл, с которым работаешь. Точнее, интересны объекты, над которыми выполняются настолько непонятные операции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
to Кулик Алексей aka kpblc
вот приложил файлик-пример. Объекты - это полилинии. Невсегда симметричные, разных размеров. Это контуры объектов. Работаю я в 2004 autocad английской версии. Поэтому работоспособность для русских версий я не рассматриваю. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
В качестве первого прикидочного варианта:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
to Кулик Алексей aka kpblc
спасибо огромное! А можно с пояснениями чуть чуть. Хочу разобраться всетаки что к чему. Не понял как она делает уменьшение. Уменьшение происходит только с одной стороны. хотелось бы уменьшать на одинаковое расстояние с двух сторон. причем stretch делать с 1/3 длины объекта Последний раз редактировалось Michael!, 21.11.2010 в 00:00. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А "треть длины" - это по какому направлению считать?
Offtop: Код сделан был только для того случая, который был представлен.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А как изменять верхнюю часть?
Вообще-то я бы, наверное, сделал просто блок и его вставлял с разными масштабами по разным осям. Может, неэтично, зато дешево, надежно и практично ![]() --- Добавлено:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 21.11.2010 в 23:18. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
круто! спасибо за разъяснения.
на счет вставки блока с разными масштабами по осям - интересная мысль. а как копировать и вставлять блок. ведь после вставки вновь появившийся объект опять не будет виден программе. потом, не хотелось бы трогать 2/3 середины, а уменьшать только по 1/3 с краев фигур. (кстати, формы бывают абсолютно разные. Не обязательно это многоугольник. это может быть совокупность дуг и отрезков. пробовал свой код с "костылем" по методу Li6-D - не помогает. Всеравно после него объект не виден. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Надо делать простейшую функцию рисования трапеции полилинией по заданным аргументам, которая еще тысячу раз пригодится. Вот примеры: Код:
Код:
|
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
то ShaggyDoc
спасибо за совет. Но, я писал выше что трапецию я просто для примера привел. в качесве контура могут быть любые фигуры симметричные-несимметричные, совокупности образованные и дугами и линиями вместе. и уменьшать их надо по краям на одинаковое расстояние. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Michael!, отлично! В VLIDE выполни такой код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 28.04.2009
Сообщений: 15
|
Всем доброго времени суток
Собственно просьба у меня к знатокам LISP . Дело в том что я в LISP полный профан. Но вот сегодня возникла необходимость в одной функции на LISP (на С# для меня это было бы делом 10 минут в самом прямом сысле) Попытался сделать но увы ![]() Понимаю, что на любом языке это не займет больше 10 минут как уже упомянул – для того кто знает. Но отвечу честно – вникать в замысловатый синтаксис LISP просто нет времени. (хотя конечно учиться никогда не поздно) просто функция нужна сейчас. Поэтому зараннее благодарен за помошь тому кто откликнется |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Michael!, сорри, запарка...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Michael!, я не про это на самом деле говорил (кстати, обрати внимание на пост ShagyDoc - к мнению этого человека настоятельно рекомендую прислушиваться, он плохого не посоветует). Встречные вопросы: как вычисляется закон на рисунке выделения magenga-области? А что будет, если в область попадет дуга, которую придется "замыкать"? Встречных вопросов тьма...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
магента область - эта 1/4 или 1/3 (что не существенно важно, от 1/3 до 1/4 - для определенности можно взять 1/3) от всей длины детали. Используемые дуги всегда имеют радиус значительно больший длины детали, поэтому замыкаться они не будут/не смогут. Смещение в магента областях возможно максимум 30 мм. общие размеры деталей - от 300 мм до 2000 мм приблизительно по мин/макс.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
По периметру? Или по указанному направлению?
Кстати, 157 447 / 374 = 41.3, но никак не 0.(3) Я все же рекомендую сначала выполнять все вычисления (координат точек, углов и радиусов дуговых сегментов), и только потом строить полилинию. На команде _.stretch я уже в свое время обжегся, повторения не хочу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Команда STRETCH не для программирования! Это очень удобное (иногда незаменимое) средство для интерактивной работы, но не для программиста. Хотя формально, конечно, можно и её использовать.
STRECH изменяет координаты точек (вершин полилиний, точек ставок блоков и т.д.). Программист все эти координаты может вычислить и изменить. Тем более, если надо нарисовать новые объекты. Я приводил пример с трапециями, но даже если Цитата:
|
|||
![]() |
|
||||
Регистрация: 28.04.2009
Сообщений: 15
|
Li6-D
Цитата:
(мне не нужно брать точки с экрана) хотел нарисовать хотя бы одну линию но ничего не вышло Код:
|
|||
![]() |
|
||||
Регистрация: 28.04.2009
Сообщений: 15
|
alex8888
Цитата:
Цитата:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
![]() |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
Код:
Код:
Последний раз редактировалось Li6-D, 23.11.2010 в 22:47. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
to ShaggyDoc
Цитата:
Я ведь этого не знаю. Покажите как это сделать - объясните. команду стретч я взял потому, что я хотел написать программу по своим действиям. А как вычислить координаты точек, и при этом сохранить контур неразрывным после его уменьшения мне абсолютно непонятно. Или ручками все передвигать как раньше и незаморачиваться с программой. то Кулик Алексей aka kpblc по длине детали - это по размеру по оси "Х" |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 20.02.2009
Сообщений: 260
|
Не подскажете, каким самым простым способом через lisp можно изменить масштаб динамического блока относительно базовой точки, не трогая (так чтобы не менялись) определенные динамические характеристики? заранее спасибо
![]() Последний раз редактировалось puma, 23.11.2010 в 23:58. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Michael!, я ж алгоритм показал. ShaggyDoc предоставил пример функции по созданию полилинии.
Все просто: формируется список координат, а потом уже строится новый объект. Цитата:
Цитата:
Если через ActiveX, то vla-put-scale. А "определенные динамические характеристики" - это какие?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.02.2009
Сообщений: 260
|
например, есть динамический блок разреза, после увеличения он сбивается, что не очень хорошо, чтобы вернуть все назад надо полярному параметру вернуть все обратно. Единственное, что приходит в голову - чтение сначала необходимых значений и после увеличения - снова их установить, просто может есть более простой путь? про vla-put-scale - спасибо, никак не могу в activeX влезть, слишком много там всяких команд
![]() |
|||
![]() |
|
||||
актуальная проблема
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14) |
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Подскажите, пожалуйста - может у кого была похожая проблема:
в блоке есть атрибут. После вставки программно меняю этому атрибуту выравнивание с "По ширине" на "по центру", и степень растяжения соответственно тоже меняю. И дома и на работе стоит русифицированный АКАД 2009. Если такой модифицированный блок копирую, то при вставке у аргумента выравнивание восстанавливается ("по ширине"), т.е. текст и местоположение атриблута сползают. В АКАДе дома такого не происходит. В чем может быть причина? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Во-первых, меня пугает слово "русифицированный". Во-вторых, читалось ли http://autolisp.ru/2010/04/06/text-and-attrib-entities/ ? В-третьих, как выполняется копирование?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Нужна помощь...
Есть чертеж, в котором куча блоков. Блоки выполнены в "неправильных" слоях (при вставке такого блока он не будет изменяться, даже если вставлен в другой слой с другим цветом). Это очень затрудняет проверку чертежа на регламентируемые слои... А если чертежей не один и не два, то вообще труба... Так вот, как перевести выбранные на чертеже блоки в слой "0" со всеми настройками "по слою"??? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Цитата:
![]() ![]() Еще просьба... Есть lisp для вставки блоков Код:
1. Выбор примитива (так понимаю - функция entsel?) 2. Если примитив является отрезком - точка выбора становится точкой вставки блока (по привязке). Если нет - сообщение о неправильном выборе 3. Если отрезок горизонтальный (координаты Y одинаковые) - вставка без поворота, если вертикальный (координаты X одинаковые) - поворот на 90 градусов. Последний раз редактировалось superkot007, 27.11.2010 в 11:52. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
1. просто русский Автокад 2009. 2. да, Алексей, это я читал. Именно вычислением я и менял координты точки вставки. 3. КОпирование при помощи обычных Ctrl+C Ctrl+V. На домашнем компе при копировании блоков с измененным выравниванием атрибута все копируется как надо. Т.е. вырвнивание копированной вставки блока не становится изначальным для блока (по ширине). На рабочем компе выравнивание меняется на "по ширине". Но если копировать при помощи команды "кп", то все копируется нормально, без изменений. Завтра еще раз поэкспериментирую на своем рабочем омпе и на других компах. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Offtop: Frigate, ну ты хоть указывай примерную область поиска вопроса
![]() Update на 2009 установлен? Если да, то на оба компа или как?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
кажется нет особого глюка. Такой глюк проявился только в одном файле, в других не проявляется - никаким путем не смог этого добиться в других файлах. Завтра скину сам файл, может ты, Алексей, и сможешь выяснить, что там не так. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
В таком случае я начинаю подозревать, что либо в блоке есть атрибуты с одинаковыми тэгами, либо определения блоков разнятся. Либо автоматом после вставки выполняется команда _.attsync (или ее аналог)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А чем не устраивает DesignCenter / _.insert / _.xref ?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
- DC - не практикуется у нас (удобно, но для многих проблемно, я же не только себе хочу...)
- Просто "_.insert" - нет наглядности (по названию блока можно и не понять, что вставляется)... - через Инструментальные палитры - мелкие изображения; с мозаичным меню тоже мелко... А тут случайно в книге Полещука наткнулся... ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Вообще-то в окне _.insert можно и предварительный просмотр получить. И там же, нажимая кнопку Обзор, увидеть (в зависимости от настроек проводника) сохраненный вид чертежа.
Палитры инструментов (точнее, размер значков) настраиваются примерно за 3..5 секунд.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Цитата:
![]() Цитата:
![]() Ну так что, моя просьба найдет понимание? ![]() Offtop: А то, по-моему оффтопить начинаем... Многим это на мыло идет,... ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
superkot007, лично я ни разу не сталкивался с тем, чтобы программно делать sld из стороннего файла. Из текущего еще как-то можно попробовать, но это решение - на полраза (ИМХО).
Значит их надо объединять. Или в одну папку, или в один dwg-файл. И вставлять уже блоками оттуда. И потом, схемы схемами, а название и пояснение к ним никто не мешает сделать информативными...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Здесь нет никаких слайдов, иллюстрации делаются на лету, прямо с экрана. Код же, который просишь "подправить" всего лишь учебный пример. Как делать диалог с отображением слайдов. Сами слайды и библиотеки слайдов давно устарели. Когда ничего не было иного - возились с ними. А теперь-то зачем? Не облегчат и не ускорят они работу по сравнению со штатными средствами. Если же надо лучше, чем через Design Center - см. рисунок. Как сделать - описано в книге "САПР на базе AutoCAD - как это делается". |
|||
![]() |
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Цитата:
Пожалуйста... |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Цитата:
Алексей, в продолжение темы (опять выплыл глючные блок): Изначально в одном чертеже получился отчего-то такой глючный блок, который при копировании (Copy Paste) возвращает атрибуту выравнивание, установленное в самом определении блока. Если вставлять блок через панель инструментов (не через копирование) - то все нормально, можно самому менять выравнивание и степень растяжения атрибута. Вроде в других файлах этот же блок нормально работает. Но все-таки хочется докопаться до истины - что не так с этим блоком. Может ты сможешь разобраться? Прикрепляю файл, где есть такой глючный блок и нормальный блок. Они абсолютно идентичны (в описании). В чем дело - так и не понимаю. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Во-первых: что в файле делают следы ПО от CSoft?
Во-вторых: AutoCAD 2011 Eng 64 bit, AutoCAD 2011 Rus 64 bit - ситуацию после Код:
У тебя в самом определении блока (насколько я понял) уже установлено для атрибута выравнивание Fit, так что еще вопрос - какое вхождение корректно ![]() ИМХО - можно заносить в список багов ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
1. Не знаю, брал чистый чертеж, просто копируя туда глючный и нормальный блок. Хотя на компе утсановлена СПДС Графикс. 2. У меня после этого PURGE на АКАД 2009 РУС ничего не устраняется. Ну ты это и так понял. 3. А вхождения должны быть такими, какими я их устанавливаю при размещении (insert). Если в номере кабеля больше 7 символов - то "по ширине" остается. Если меньше 7 символов, то программно выравнивание ставится "по центру" + сдвигаю точку вставки. Но заметь, Алексей, что неглючный блок всегда копирует правильно - в т.ч. и через буфер обмена. Так что скорее всего это глюк автокада. Только жаль, что я не могу уже повторить этот баг - т.е. сделать глючный блок из нормального, для локализации проблемы. Итог - использовать автокад 2011 ![]() Кстати, 2011 в каком формате сохраняет чертежжи по умолчанию? В 2007м или уже в другом? |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Здравствуйте, уважаемые Гуру форума.
Опять у меня траблы с таблицами, созданными программным методом. Итак: написал прогу, которая у указываемой таблицы проставляет все границы ячеек 0.4 мм. Работает прога вполне нормально, но такая проблема: если после работы проги (делает толстыми все границы таблицы) сделать стандартное Undo (нажать кнопку на панели инструментов), то при повторной попытке сделать все границы той же таблицы толстыми - акад вешается. Уже на 3 секунды работает моя прога, а минуты 2-3. Прошу помочь советом. Или это баг Автокада? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Помогаю: RegenerateTableSuppressed
Читать здесь, начиная с 4 поста или здесь При запуске Lisp идет утечка памяти
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Здравствуйте!
Прошу объяснить непонятную ситуацию: у меня прога видит локульную переменную своей внутренней функции. Вернее, не сама прога, а функция обработки ошибок *error* Значит, обработчику ошибок доступны локальные переменные внутренних функций програмы??? ПРикольно - только что попробовал еще с одной переменной - просто локальной переменной внутренней функции присвоил некое значение. А в обработчике ошибок в самой программе написал PRINC эту локальную переменную внутренней функции - и ВЫВОДИТ ))) Во чудеса-то. Или так и должно быть? Хочу уточнить, что сама программа НЕ ВИДИТ локальной переменной внутренней функции, т.е. я задал все верно. А вот обработчику ошибок доступно все... даааа... наводит на интересные мысли ))) Последний раз редактировалось Frigate, 22.12.2010 в 18:40. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Frigate, ничего необычного. В обработчике ошибок *error* будут видны только те локальные переменные которые были определены в той функции из которой был вызван обработчик ошибок *error*
Пример Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Frigate, Еще логичнее делать ф-цию *error* локальной. Тогда ей будут доступны все переменные функции верхнего уровня и не переопределяется стандартная ф-ция *error*. В этом примере ф-ция *error* объявлена локальной по отношению к ф-ции C:R2E и ей доступна переменная Doc без дополнительного объявления.
Вот примерный шаблон программы
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
VVA,
я именно так и делал, вроде бы... Взял код-шаблон у Алексея (КРЫС): Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
А ещё лучше программировать так, чтобы до *error* вообще дело не доходило. Эта функция срабатывает, когда "поздно пить боржоми". Обычно, если пользователь ESC нажал. В *error* можно только попытаться что-то исправить, обычно востановить какую-то обстановку (системные переменные). Когда-то это было единственное средство.
Но давно уже есть ловушки ошибок - функции vl-catch-all-apply, vl-catch-all-error-p, vl-catch-all-error-message. Они предотвращают саму возможность ошибок пользователя, чтобы при нажатии ESC программа не прерывалась. На мой взгляд это самое полезное нововведение в LISP после AutoCAD-14. В очередной раз привожу высокоуровневую функцию обработки ошибок. Она упрощает использование "святой троицы". Пример использования в комментарии: Код:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
имя шаблону-то зачем? ))) Да, может твой код и логичнее, но по-сути он ничего не меняет. Кстати, а как же определение adoc уже после определения функции *error*? Какой тогда смысл так переставлять определение обработчика ошибок? В любом случае, при таком раскладе никакие системные переменные не изменяются, ничего еще не нарисовано, так что не фатально. ShaggyDoc, да, я так и стараюсь везде делать - чтобы выполнение функции или программы могло быть прервано только при ошибке, когда пользователь нажал ESC. С ситуацией возможного деления на ноль - иногда может быть полезна обертка из vl-catch. Уже столкнулся с такой ситуацией в своих прогах, что при определенных обстоятельствах при длинных вычислениях происходило деление на ноль. Но возникшая ошибка помогла мне исправить код - просто убрать возможность появления нуля: Код:
Например, при необходимости указания точки пользователем (точка вставки таблицы, к примеру), пользователь отказывается от продолжения, тупо нажав ESC (даже если есть штатный вариант выхода из проги при помощи if). Что в таком случае нужно посылать в программу? Какую точку? ПО -моему, никакой не нужно, а нужно корректно убрать все внесенные изменения. Но ведь это же самое можно сделать и при помощи *error*. Может я что-то недопонимаю тут? Тогда был бы рад объяснению от мастеров ЛИСПа :-) Последний раз редактировалось Frigate, 12.01.2011 в 07:21. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Frigate, просто я предпочитаю сначала объявлять локальные функции, а потом уже основной код. Если код достаточно длинный и функций много, можно легко запутаться.
Ничего не нужно посылать. Выполняется отмена выполненных действий - и все.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
ESC не предназначена для отмены каких-то ранее выполненных действий! Для этого должна быть или специальная кнопка (опция), или надо, в стиле штатных команд, давать возможность использовать UNDO/REDO. Вот тут программист и должен позаботиться об расстановке меток для отката. Цитата:
Современные программы работают не последовательно, а "параллельно". Программа, в стиле AutoCAD, имеет всякие опции. Одной из опций может быть "действие по умолчанию", т.е. нажатие Enter (пустой ввод). Таким действием может быть и выход. Может быть и ESC, но не в момент ввода, а в момент ожидания чего-то. Т.е. само нажатие ESC не надо запрещать, а разрушение программы предотвращать надо. Примерно как для выключения компьютера надо закрывать Windows, а не выдергивать шнур из розетки. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
так и я о том же - что *error* в таких ситуациях, как я описал, ничем особо не хуже, чем эти три новые функции. Едингственное, чем новые функции лучше (хорошо подумав) - в случае с vl-catch можно заранее понять, какие действия отменять, а в случае с *error* - нужно сначала проверять, стоит ли отменять энное действие. Напр., нужно проверить, имеется ли полилиния, которая создается в процессе выполнения программы. Если имеется - удаляем. В общем в этом есть определенное преимущество функций vl-catch. Может именно поэтом их так любят спецы ЛИСПа? ![]() ShaggyDoc, сказано более чекм убедительно. Думаю, одну из следующих программ попробую написать с применением vl-catch. Еще одна причина моего "недорастания" до этих новомодных функций - использовал функцию Алексея (КРЫС), переделал немного под себя, но vl-catch оставил. В нескольких местах накосячил с кодом. Но где - не смог понять, пока не убрал все vl-catch. Т.е. возможно vl-catch и можно использовать, но обязательно с возможностью вывода сообщения о том, какая ошибка произошла. Собственно, пример Вы дали на предыдущей странице. Буду разбираться ![]() Последний раз редактировалось Frigate, 12.01.2011 в 12:53. |
|||
![]() |
|
||||
Регистрация: 10.12.2010
Сообщений: 5
|
Уважаемые!!!, добрый день.
Нужна помощь, запарился ужо... Задача.. Запускаю ABC.lsp , открывается вторая сессия acad, выполняется произвольная ф-я, сессия закрывается. 1. Как программно сделать активным окно второй сессии acad. 2. Как запустить мою функцию во второй сессии 3. Как из .lsp выделить все объекты на чертеже (vla-activate docdwg); до этой ф-ии все отлично работает, вторая сессия открыта (vla-sendcommand docdwg (defun cod (cd obj))...) ; эта ф-я не хочет выполнять мою ф-ю, просто игнорирует, что-то делаю не так.. Надеюсь на вашу помощь. Заранее благодарен |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Iogan, lisp может выполняться только в активном документе, из которого он и был запущен. При смене фокуса (то есть смене активного документа) выполнения лиспа приостанавливается до возврата в исходный файл.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 10.12.2010
Сообщений: 5
|
Лиспер, спасибо за быстрый ответ
Собственно дело в следующем во второй сессии выполняются простейшии ф-ии (вставка текста "strcat", нарисовать что нибудь и т.д.) но вот выполнять мою ф-ю написанную ранее и прекрасно работающую (подсчет количества блоков и их автоматическую нумерацию) не желает. Я хочу следующее - из командного файла (первой сессии) выполнить операции над блоками в других файлах .dwg и получить конечный результат в основном документе. Вот такая закавыка... |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
при вводе точки тоже можно пользоваться безопасными фунциями - это фунции, возвращающие nil по ошибке (esc) Например: Код:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
gomer,
я диалоговые окна привел просто как пример - считаю, если возможно, надор пользователю обеспечить возможностьвыхода из программы при вводе данных не только "штатным вызходом проги", но и по ESC. Код где-то на caduser видел. У меня сейчас еще один вопрос стоит: как через объектную модель можно обновить поля в блоке? (если вообще это реально) см. тему http://forum.dwg.ru/showthread.php?p=604338#post604338 Просто Если делать обновление полей блока командными методами через sendcommand, то по завершении работы callback-функции исчезает выделение самого блока. А нужно, чтобы оно не исчезало. Вернуть выделение через setfirst тоже не удалось... Прошу помочИ ![]() 2 Алексей (КРЫС) и всем кажется я выявил глюк блоков в автокаде. Сейчас я понял, как они создаются :-) Это касается ЛЮБЫХ динамическийх блоков с атрибутами! Итак: имеем динблок с атрибутом. Заходим в свойства атрибута (_eattedit) и меняем степень растяжения текста. После этого пошевелим любое из динсвойств блока (видимость, выбор, линейное растяжение - у меня при любом варианте глюк возникает). Далее копируем блок и вставляе (Ctrl+C / Ctrl+V). Степень растяжения вернулась к исходной для блока. Затем копируем этот блок. Да, через _copy или кп все копируется без глюка. Причем ТО ЖЕ САМОЕ происходит с любыми свойствами блока, кроме динамических - те то хорошо копируются ))) Шрифт например может так же слететь, толщина... Вывод - копировать через _copy (НЕ через буфер). А лучше всего вставлять блок только программно, с уже внесенными изменениями в свойства атрибутов типа текстового стиля, толщины линий блока и тп Последний раз редактировалось Frigate, 14.01.2011 в 10:13. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Cтолкнулся с проблемой - часть будущих пользователей работает в однодокументном режиме автокада (SDI равна "1"). А у меня обмен между документами сделан через "внедокументные переменные". Но эти переменные видны только в одном приложении автокада. Есть ли какая возможность обмениваться информацией между такими вот отдельно запущеннымы файлами автокада (каждый в своем приложении)?
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
значит другого пути нет. Ладно, пока сделаю примечание в справке, в каком режиме надо работать с моими командами (вернее, всего лишь с двумя пока, которые отвечают за запись и чтение внедокументной переменной). А потом уже буду создавать временный файлик. |
|||
![]() |
|
||||
Регистрация: 19.01.2011
Сообщений: 6
|
Где можно взять описание этих самых команд?
Пролистал несколько книг по лиспу (по оглавлениям прошелся) во всех подразумевается, что я эти команды уже знаю. _line _arc _circle я еще понял как делать, а вот на _spline застрял. И размеры как описывать не совсем понятно. (у меня сейчас 2007 AutoCAD стоит). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
В.Свет, "Язык макрокоманд и создание кнопок". Есть в местном Download,
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.01.2011
Сообщений: 6
|
Читать начал но это не то что мне нужно.
Я лучше напишу, что сделать пытаюсь, а то похоже я вопрос не правильно задаю. Сделал я программку (в VB) я в нее закидываю координаты XY, а она создает .lsp файл в котором такой текст Цитата:
И еще вопрос. В одной из книг было написано, что при появлении в AutoCADе новых команд, старые сохраняют. И в той же книге была описана команда _dimradial. Вот только AutoCAD говорит, что такой команды не знает. Может у меня отключено что-то? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
1. Не обрабатываются привязки
2. Что в команде делает неинициализированная переменная _enter? Нажатие Enter эмулируется двойными кавычками. 3. Кто-то мешает использовать нормальную объектную модель? И методы типа AddLine, AddSpline?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А разве кто-то заставляет использовать именно command? Если написано внешнее приложение, то можно сделать наподобие:
Код:
P.S. Код пишу без проверки и "насухую".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Прежде чем копировать, советую все же определиться: пишется внешнее приложение, обращающееся к AutoCAD как к СОМ-серверу? Или что-то внутреннее?
И обязательно, обязательно! проверить работу кода.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Можно, почему нет...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
"Последнюю" - имеется в виду последнюю по построению? Тогда так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ничего не понял. Ну используй привязки, в чем трудность?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
С привязкой нужно в ручную доводить точку до окружности, хочется что бы это сделал за меня лисп ).
Я хочу сделать, свою мультивыноску. Стандартная меня не устраивает... У нее сплайн либо слева, либо снизу, либо сверху, либо справа и другого не дано. Смотрится по колхозному... Была идея довести сплайн до центра окружности, а потом нужную часть обрезать... Но так и не смог придумать как это сделать, что бы не приходилось выбирать нужный конец сплайна. Последний раз редактировалось ashas-, 22.01.2011 в 09:44. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А просто свой вариант стиля почему не настроить?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Какая программа? И потом, в этой теме как бы обучают лиспу. Помогают решить проблему в разделе "Программирование"...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
gomer, я этого не говорил.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Прошу прощения, если разместил свой вопрос не в том разделе. Я вроде как тоже пытаюсь научиться поэтому решил, что здесь самое место. Программа все та же ), мультивыноска... Все таки стандартная мне все равно не устраивает ))). Я зациклил с помощью While, что бы постоянно ставилась мультивыноска, и когда все проставил, нужно что бы привязка и орто вкл. (до этого я их выкл.). Но они включается только когда я жму Enter. Было бы вообще здорово если бы при любом раскладе, привязка и орто включались обратно... Но не знаю как это сделать.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Тогда показывай, каким кодом у тебя идет вставка выноски.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
А я из вредности предложу сделать другой размерный стиль
![]() Теперь по коду: Зачем выполняются строки (getvar "osmode") и (getvar "orthomode"), если возвращаемые значения нигде не используются? А если в ответ на приглашение "Введите № позиции <1> " я нажму Esc? (command "_.clayer" - и дальше на каком языке опция? А если такого слоя нет? И, кстати, это меняет значение системной переменной, которую неплохо было бы вернуть обратно... А если в ответ на приглашение "Укажите точку № позиции " я отвечу Esc (кстати, про какой там номер позиции-то разговор)? Зачем вообще менять osmode, если вместо (command "_.circle" t1 40.) можно использовать (command "_.circle" "_none" t1 40.) - я не понимаю. (command "_.hpname" <>) тоже меняет системные переменные AutoCAD. Обратно кто вертать все будет? Почему в командах все опции на русском языке? А если у пользователя английский AutoCAD? Почему принудительно возвращается orthomode в 1? А если на момент вызова не был установлен режим орто? Почему сначала osmode устанавливается в 1, а потом через неизвестно какие опции устанавливается новое значение (которое, кстати, тоже не факт что совпадает со стартовым)? --- В общем и целом, я бы задумался о применении ToolPalettes - там можно попроще организовать, и все получится более целостное. Настроить только надо ![]()
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 19.01.2011
Сообщений: 6
|
Попробовал вставить кусок из примера.
Отработатл вроде нормально (линию построил), но со смещением. Вот если я использую Цитата:
А если из VB вызываю Цитата:
|
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Что за размерный стиль?
(getvar "osmode") и (getvar "orthomode"), сделал просто потому что видел что их пишут, решил тоже написать... ). Если после "Введите № позиции <1> " ввести ESC то программа закончит свою работы, да еще и не в лучшем виде. (command "_.clayer") использовал потому что делал программу только под себя, и не планировалось что бы она у кого то еще работала, и если она не вернется в прежнее значение, это не на что не повлияет. "Укажите точку № позиции " - некорректно я здесь поставил подсказку. Имелось введу где должен находиться кружок с позицией. Поменял osmode что бы ничего лишнего не цеплялось, дальше рисуеться сплайн и маленький кружок. Если стоит привязка "конточка" (если не ошибаюсь) то центр маленького круга и сплайн почему то не совпадают... Что делает "_none"?? Все опции на русском, потому что у меня русифицированная версия, и я не долга мучаясь написал по русски что б можно было хотя бы проверить работоспособность. Орто возвращается обратно в "1", потому что у меня всегда орто включено... (command "_.hpname" <>) изменение этой переменной и не возвращение ее обратно тоже не несет для меня никакой проблемы, я бы сказал, наоборот, если ее восстановить то понесет... ToolPalettes - как ее применить? Что именно ты подразумеваешь? Стандартная выноска меня не устраивает. Вопрос кстати, так и остался открытым, можно как нибудь ескейп обойти? И еще: как после команды entget вытащить определенную точечную пару, или изменить ее? |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
ashas-, по полной аналогии с тем, что я показывал чуть ранее.
Не стоит так делать. Надо обрабатывать только те системные переменные, которые необходимы программе - не больше и не меньше. Цитата:
![]() Временно отключает привязку при указании точки. Можно попробовать, это не страшно ![]() Цитата:
Можно. Например, так: Код:
См. subst
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Спасибо, за подробные разъяснения!
![]() В стандартной мультивыноске мне не нравится что она постоянно сплайн с боку цепляет ... Кулик Алексей aka kpblc, скинул мне два файла, я че то там сделал и он (сплайн) стал цепляться как надо ![]() И еще мне не нравится что нельзя цвет текста поменять (можно только вместе с кружком). Да и вообще сейчас написание мультивыноски стало как способ изучения автолиспа ) С функцией "subst" и "assoc" вроде разобрался... внес изменения в весть список примитива, до этого названный с помощью setq (в моем случае это круг)), но эти изменения не применились к примитиву. Почему? Как правильно это делается ? Вот что я делал: Код:
Последний раз редактировалось ashas-, 28.01.2011 в 19:13. Причина: Возник вопрос ) |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
Доброго времени суток!
Знающие люди, подскажите пожалуйста, как проверить в лиспе есть ли слой с данным именем в файле чертежа? И если он есть, его свойства на данный момент времени - скрыт-не скрыт, заморожен-разморожен, заблокирован-разблокирован. спасибо! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
(tblobjname "layer" ИмяСлоя) вернет nil, если слоя не существует. Если есть - возвращает ename-указатель на него. А дальше - DXF Reference в руки
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
От чего самые удаленные? И в какую сторону? И в какой системе координат?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
самые удаленные друг от друга по оси Х и по оси Y в World системе координат. (как бы это сказать - самую минимальную координату Х, самую максимальную координату Х, самую минимальную координату Y, самую максимальную координату Y которые принадлежат этой фигуре (замкнутой полилинии)).
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Как программно узнать, что выделенный примитив (напр., по entsel) входит группу? И как определить, в какую группу он входит?
Всегда ли группа (GROUP) в entget-списке находится после пары 102 AcadReactors (102 . "{ACAD_REACTORS") (330 . <Имя объекта: 7ef0cd10>) (102 . "}") ? Если я прав, тогда эта функция поможет определить, входит ли указанный примитив в группу: Код:
Последний раз редактировалось Frigate, 10.02.2011 в 15:26. |
|||
![]() |
|
||||
Добрый день.
Есть желание написать програмку для операции с буфером обмена. На VBA все понятно ( получить буфер обмена в текстовую переменную, заменить "/P" на пробел, передать обратно в буфер) Суть программы: сбросить форматирование текста, и убрать деление на строки (в мультитексте) если такое есть. Вопрос как это на Lisp`e сделать? |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ПОдскажите пожалуйста, как решить такую задачу:
имею множествр отрезков на чертеже - напр., по Код:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
что-то оверкилл не соединяет отрезки... он точно должен обрезать и соединять конточками отрезки, которые наложены один на другой? Добавил: все, разобрался - просто забыл галочку игнорирования цвета поставить. Но вот дублированные вершины полилиний не удаляет никак ( Последний раз редактировалось Frigate, 21.02.2011 в 12:49. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
PL-VxOpt -Удаление совпадающих вершин из полилинии
Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 21.02.2011 в 13:28. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
VVA,
я уже использую твою функцию по удалению совпадающих вершин :-) Просто захотел посмотреть, как Экспресс с этим справляется. Цитата:
|
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Всем доброго времени суток.
Прошу помощи магистров! ![]() Я с помощью функции entget получил коды к таблице. В которой в последствии нужно будет изменить содержимое ячеек. Исходя из списка получается что содержимое ячеек храниться под кодом "1" и "302". Но как изменить их содержимое? Если я меняю код "1", то код "302" остается прежним и содержимое ячейки не меняется. То же самое с кодом "302". Если пытаюсь изменить сначала "1" потом "302", то они остаются прежними... Не пойму, что ни так делаю. Пример списка: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Работать с таблицей через DXF - удовольствие из разряда "врагу не пожелаешь". Настоятельно советую разобраться с vla-представлением и работой с ним.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Сложно сказать, не видя что ты делаешь. Но лучше прислушатьсмя к совету предыдущго поста
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Правильно говорят, пока не прижмет, не разберешься...
Спасибо за правильный вектор ![]() Дима_, спасибо ![]() Последний раз редактировалось ashas-, 25.02.2011 в 20:03. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Поищи - или кто нибудь добрый даст ссылку как "переводить" команды из справочника автокада по VB на VisualLisp. Она тут раз 100 уже приводилась - мне сейчас просто искать лень. Если коротко берешь любой объект (из справочника VB), к методам добавляешь vla-, для чтения свойств vla-get-, для установки - vla-set- первым параметром идет непосредственно объект - далее остальные параметры. Если параметр имеет "объектное" представление - смотри функции преобразования vlax-... События (events) - реализованны несколько по другому (реакторами) - на них отдельный синтаксис смотри функции vlr-...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 01.03.2011
Сообщений: 7
|
Всем доброго здоровья!
Подскажите, пожалуйста, как отключить ( а потом снова активировать) 3D привязку? Другими словами, как реализовать нажатие клавиши F4, используя код. В Help-е не нашел ни переменной ни команды, подходяшей для дальнейшего использованя в коде. Пока в тупике! :-( |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Доброе время суток!
Прошу помощи: что надо "скормить" функции (command "-refedit" <объект>) нужно подставить указатель на динблок, но ename Код:
Код:
А без refedit не сделать контекстного редактирования блока и преобразование динблока в блок. Если вручную выделять блок (по совету Супермакса) - то все Ок, но это не то, нужно автоматом разбивать. Функции типа U2B и тп пробовал - не подходят. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Контекстное редактирование блока - зачем под это дело программу ваять? Что-то одно - либо редактирование полностью ручное, либо полностью программное.
Преобразование дин.блока в обычный блок - а это-то зачем? Я реально не понимаю конечной цели...
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
это нужно, чтобы сильно замороченные блоки разбивать, почему-то у меня и знакомого они не разбиваются программно, как у VVA: http://forum.dwg.ru/showthread.php?p...d=1#post711939 Код:
Дима_, большое спасибо :-) Интересный ход! Да уж, автодеск - еще тот перец ))) Последнее время при углубленном изучении автокада все чаще попадаются глюки - как например опции к той же команде _refedit - на русском автокад "не понимает", только оригинальные опции надо вводить ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если "слезешь" с командных методов - глюков станет в разы меньше.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Ответил в теме
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
VVA,
я об опциях понимаю, что их надо на англ. писать, просто в руссифицированном автокаде с переведенными командами всегда можно было вводить опции и по русски - не в программе, а непосредственно при черчении, а с некоторыми командами, типа refedit (или ССЫЛРЕД) этого нельзя - не до конца переведена команда. ДИМА, благодаря VVA удалось обойтись без командных методов. Вместо refedit заменил масштаб по Z на 1.001 - и вставка блока утрачивает динамику (как проекция динблока). А все остальное - дело техники. Последний раз редактировалось Frigate, 05.03.2011 в 09:32. |
|||
![]() |
|
||||
Регистрация: 01.03.2011
Сообщений: 7
|
Всем крепкого здравия! Спасибо Вам всем за форум.
![]() Но к делу: Если стандартными средствами вызвать окошко свойств такого примитива как box,то там черным по белому(при стандартных цветовых настройках :-)) можно узнать его Length Width и Heigth. Пробую получить те же параметры с помощью кода: Код:
![]() Тот же запрос, но вид сбоку: Код:
Вопрос к клубу Знатоков - мож кто знает заветных три слова? - Поделитесь пожалуйста! P.S. "Иди на ![]() ![]() Последний раз редактировалось gnostic, 11.03.2011 в 15:35. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Посмотри сюда
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 01.03.2011
Сообщений: 7
|
Блииин! Я так признателен и мне так стыдно
![]() Спасибо огромнейшее! И еще раз извините за разгильдяйский подход к поиску ответа на вопрос. Те 8 строк из #10 поста -просто волшебство! ![]() ![]() ![]() Честно искал по форуму, но пока все еще у разбитого корыта. Исходные условия - куча примитивов "разбросанных" на группе слоев (скажем dt[ 1-20]) Хочу создать набор только из тех, что лежат на слоях из требуемого диапазона индексов, например dt3-dt7. Царапаю код: Код:
Все в шоколоде! Но... стоит слегка изменить значение фильтра : Код:
Поделитесь пожалуйста, своими замечаниями по этому поводу. Последний раз редактировалось gnostic, 13.03.2011 в 14:50. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Замени (ssget "_X" '((8 . "dt[3-10]"))) на нечто типа (ssget "_X" '((8 . "dt[3-9],dt10")))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 01.03.2011
Сообщений: 7
|
Не сочтите за труд - ткните носом.
(Спустя пару минут) В силу того, что очень не люблю неоднозначность, решил уточнить некоторые моменты. Перевести на LISP схему создания фильтра, от которого он (LISP) не срыгнет - как бы в вопросах не числится! Если есть какие то основополагающие моменты (даже из школьного курса математики), о которых я не догадываюсь(говорю честно), то буду очень признателен за то что обратите на них внимание. А так, по принципу : "Вы, товарищ студент, дурак! - А Я мост Патона строил!" либо "Не плюйте рядом с членом Масонской ложи!" по меньшей мере, на этом ресурсе выглядит комично. Последний раз редактировалось gnostic, 14.03.2011 в 01:37. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Доброго времени суток!
Столкнулась с такой вот непоняткой: Код:
Господа, не сочтите за труд, помогите -откуда может появляеться лишний элемент списка? |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Gomer, спасибо, но мне не понятно именно откуда берется лишний мусор при применении ssnamex, поскольку г-н Полищук утверждает, что если функция ssnamex без указания номера должна возвращать список, то длина этого списка будет равна количеству элементов набора. Однако, если выбирать не кликом мыши по объекту, а прямоугольником, то появляется лишнее значение.
Последний раз редактировалось Aminka, 14.03.2011 в 17:22. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Еще способ преобразовать набор в список примитивов (без vla функций) _dwgru-conv-pickset-to-list
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Ооо! Спасибо, еще куча всяких интересностей..
![]() Дивная штука автолисп..для решения одной простенькой задачи я уже накатала два варианта ![]() Последний раз редактировалось Aminka, 16.03.2011 в 02:16. |
|||
![]() |
|
||||
...код может оказаться далеко не простым, если учитывать многочисленные ньюансы.
Цитата:
![]() Цитата:
|
||||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Здравствуйте!
Как хорошо, что уже есть тема для чайников) У меня вопрос. Поиском ответ найти не удалось. Подскажите, пожалуйста, как значения координат точек при создании объектов привязать к значениям переменных? Например, как для отрезка: Код:
|
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
День добрый!
Прошу помощи по программной работе с OpenOffice. Копал везде - в ЛИСП не нашел примеров работы с OpenOffice. Только компилированный модуль. Проверил - модуль работет вроде корректно. Но - нужно, чтобы приложение (сам файл) (Calc=Excel) было открыто. А как его открыть программно? Напр., для Excel делают так: Код:
Буду благодарен з аподсказку. Если советов не будет, придется работать через АДО c xls. И проверять, что я там наворотил в файле, открывая файл xls из OpenOffice. Либо упрощенный вариант - создавать файл csv формата. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Спросить у гугла
![]() how to create object (word/excel) for openoffice Если за xls зарегистрирован OpenOffice (т.е. по даблклику на файле грузится OpenOffice), то можно так Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
VVA,
Владимир, спасибо аз ответ. Этот код мне пригодится. Но хотелось бы все-таки понять, как из ЛИСПа забраться в OpenOffice - может кто уже дошел до этого и не прочь поделиться? Для меня описание, как из Делфи,С++ и тп попасть в OpenOffice пока сродни китайским иероглифам. Если б видеть хоть какой-нить аналог на ЛИСПе, то дальше б уже разобрался по этому аналогу. А так - остается лишь пользоваться скомпилированным модулем по обмену с OpenOffice (лежит в download), либо (что проще и надежнее) создавать файл crv в ЛИСПе. |
|||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Еще раз, здравствуйте!)
Подскажите, пожалуйста, можно ли в лиспе задавать относительный путь к файлу? В программе Елпанова Евгения, которую я взял за основу, файлы Excel выбираются через getfiled. Когда файлов много, это неудобно. Я нашел только как жестко закрепить пусть к файлу. Но намного удобнее было бы с относительным. Это возможно? |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В прямую нет - автолисп не знает из какого файла загруженна программа, поищи - обсуждалось - есть варианты через поиск .lsp файлов (кривенький), (getenv "appdata") и пр.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Хорошая программа должна их уметь найти. А в плохой можно и записать "C:/SuperPuper" |
|||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Цитата:
Учитывая, что я только начал осваивать лисп и раньше с программированием совсем не сталкивался, сейчас у меня уйдет слишком много времени на то, чтобы разобраться. И я просто не успею. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Fynjy87,
можно найти путь относительно файла чертежа, из которого ты вызываешь программу. У меня так организовано - есть директория проекта, в ней лежат чертежи и папки с определенной иерархией. Зная эту иерархию и путь к чертежу, несложно понять, как "пробежаться" по всем папкам директории проекта. Пусть к твоему файлу чертежа находишь по Код:
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Акад2006-пропадают внешние ссылки пост 9
PL_XRefChgr Функция глобальной замены абсолютных путей ссылок и растров на относительные и обратно, версия: 0.91
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Здорово!) Бывает же так просто. Очень забавно смотрится после всего того, что я сказал про нехватку времени для того, чтобы в этом разобраться
![]() Но без вас я бы действительно это долго искал. Спасибо! VVA Сасибо, хорошие программы. Пригодятся на будущее. Последний раз редактировалось Fynjy87, 29.03.2011 в 22:53. |
|||
![]() |
|
||||
Код:
если пользователь ввёл текст, ничего не делаю с переменной, оставляю как есть, если ввёл число, преобразую оператором atof в число: Код:
Как проверить содержимое переменной что бы затем присвоить ей тип? |
||||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Почитайте тему
{Конкурс} Lisp. Пребразование в число при возможности
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
entupd забыл - это раз; вместо (atoi (getstring <...>)) можно использовать (getint) - это два; на форуме были функции по изменению DXF-кодов - это три
![]() В частности: а что будет, если я захочу поменять, например, 100 группу? Или -1? Или 5? Или 330? А что будет, если для примитива с цветом "ПоСлою" (группа 62) я захочу поменять цвет на 1? ![]()
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Цитата:
Плииз, ссылку на тред!! И можно-ли по-быстрому прикрутить меню на DSL? Последний раз редактировалось baaba, 30.03.2011 в 17:01. |
||||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Здравствуйте!
Столкнулся с такой ситуацией. Мне нужно обрезать линии, выходящие за прямоугольную область (высотой H и длиной L). Если делаю это через лисп Код:
Когда вводишь те же самые команды по очереди просто в командной строке, точки ввода остаются на своих местах. Почему такой косяк, и как от него избавиться? Или как отключить в лиспе привязку так, чтобы не сбрасывались пользовательские режимы привязки? |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
__________________
cadtools |
|||
![]() |
|
||||
Вполне нормальная реакция для пользователя автокада - завершать команды нажатием Enter или Esc. Вот если б по Alt+F4 - это уже ненормально
![]() Поэтому, нужно и такие ситуации обработать. Если интересно как - поиск по форуму по словам "отлов ошибок".
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Цитата:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
lastloch, хотя Do$, уже ответил я все-таки добавлю.
Во-первых, Вы процетировали не моё сообщение, а мою подпись, поэтому Ваше сообщение выглядит не много неоднозначно. Во-вторых, вопрос Fynjy87, не касался обработчика ошибок и отлова нажатия Esc. А для этого есть функции vl-catch-all-error-p и vl-catch-all-apply, с помощью которых все это обрабатывается и все пользовательские настроки (в том числе и режим привязок) восстанавливается после завершения работы программы! P.S. Пока писал сообщение Disney уже все для всех разжевал
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
http://autolisp.ru/2009/09/22/programming-style/
http://autolisp.ru/2009/09/13/error-catch/ http://autolisp.ru/2009/09/20/howto_undo/
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Добавлю еще к постам #1391-#1393
Все это уже обсуждалось почти в самом начале темы и касалось использования command 1. Правило 2. Osmode 3. *Error* 4. Помимо сброса OSMODE в 0, привязку можно отключать (аналог F3) disable_osmode
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 29.04.2009
Сообщений: 21
|
Спасибо всем за ответы!
Очень много полезной и интересной информации. Потихоньку все читаю. Особенно то, что на русском (с английским проблемы). Цитата:
Согласен, что они нестрашные, и использую их для создания объектов. Но разве можно с их помощью осуществить подрезку? |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
День добрый!
Решил не создавать новую тему. а спросить тут. Вопрос о различии между взрывом блока с маскировкой внутри при помощи _burst в Express и (vla-explode ent). А различие во в чем: если взорвать при помощи (vla-explode ent), то маска может закрыть видимую часть блока после взрыва. Команда _burst взрыввает все корректно - маска находится там, где была поставлена при определении (создании) блока. Пока лишь один вариант напрашивается - ставить маску после разбиения блока "под" остальными объекты блока при помощи _draworder. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Это дело определяется порядком создания примитивов. ИМХО желательно поменять именно его, не прибегая к _.draworder.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Прошу помочь разобраться.
Как сделать в моем выражении, чтобы вместо строковых значений переменных, в них были бы вещественные? Что нужно вместо setq y? Код:
Код:
![]() По одному переводить проблемы нет, но хотелось бы все скопом |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
alex8888, если правильно понял Твой вопрос, то
Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
TararykovDG,
спасибо, именно то что нужно. ![]() А если немного по другому, можно ли обойтись вообще без составления списка? Например, имею переменные, а,б,в,г и тд, в которые записаны строковые значения из полей диалогового окна (на DCL). Хочу эти значения получить числами, при этом без разницы, введены ли они с разделителем - запятой или точкой и записать их в те же переменные. Как я говорил, по отдельности труда не составляет использовать конструкцию типа (distof (vl-string-subst "." "," x) 2). Как работать со списком теперь тоже понятно. Но из списка снова нужно восстанавливать эти переменные, той же nth. Есть другие алгоритмы решения задачи? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
alex8888,
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
alex8888, все-таки я не до конца правильно понял что было нужно и хотя VVA уже написал как надо, вот еще вариант, хотя те же "..." только сбоку
Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
TararykovDG,
а это как раз то, что пытался изобразить я, но никак не врубался, куда же "ваучер засунуть" (гусары-молчать!). ![]() Оказывается, просто надо было докопаться до (eval x), остальное, вроде бы как и правильно начинал делать. Еще раз спасибо. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Еще обрати внимание, что используется set x..., а не setq x ... . Иначе работать не будет, так как функция setq x ... присваивает некоторое значение переменной x, а set x ... присваивает значение символу, на который ссылается x, в нашем случает x поочередно ссылается на переменные a b c d и как раз им уже и присваиваются значения полученные выражением (distof (vl-string-subst "." "," (eval x)) 2)
__________________
cadtools |
|||
![]() |
|
||||
Цитата:
Я бы проверял значение ещё при его вводе в диалоге Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? Последний раз редактировалось Disney, 13.04.2011 в 13:18. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Такую (или любую другую) проверку лучше прятать в библиотечную функцию, чтобы не писать в каждой конкретной программе. Эта функция должна блокировать какой-то при "tile" при неверных параметрах ввода. Сообщение об ошибке должно быть как можно более информативным. Можно и в alert вывести (что проще), а можно и в специальный элемент самого диалога. Вот пример такой функции Код:
|
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
До "суровой" проверки руки пока не дошли, по простому, считаем, что вводится число, хотя и уже без разницы в виде с "," или "." Если будет не число, то программа не сработает - покажет ошибку, хотя и неизвестно где конкретно.
А вот action_tile в виде библиотечной функции что то не получается создать - есть ли тут какие-то подводные камни и подвохи? В качестве примера попытка создать модуль на основе кода 1408: Код:
Код:
Код:
|
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
1. открыть описание блока в текущем файле и внести изменения
2. открыть описание блока в файле-библиотеке, внести изменения и сохранить. Вообще-то можно было бы сделать совсем по-хитрому: внести изменения в библиотечный файл, а потом при импорте проверять соответствия элементов имеющегося блока и библиотечного блока. При необходимости заменить состав. Только долго это и не всегда корректно работает... P.S. Хотя, если использовать ToolPalettes, то там есть возможность повторного импорта указанного блока (с возможностью переопределения), насколько мне помнится.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
"MIP_LIB_DYN" - имя dwg файла библиотеки
"MIP_WELL_DYN_P" - имя блока в библиотеке Frigate, В этой ф-ции используется команда _-insert, отсюда нюансы: 1. В текущем чертеже не должно быть блока и именем, совпадающем с именем файла библиотеки. Если такой блок есть, нужно дать ему новое имя. 2. Если хочешь обновить сам блок, так же дай ему новое имя. Тогда после insert вставится обновленный блок
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Disney, перечитал справку, книгу Полещука по нескольку раз в указанных местах и так ничего не понял, на что ты советовал обратить внимание, извини.
По action_tile наверное, что выражение надо писать в кавычках вот так: Код:
quote для обработки выражения без вычисления. Ну а теперь как связать все воедино? Получается, что в action_tile мы передаем Лисп-выражение в виде строки. Но почему нельзя передать вместо нее вызов функции с той же строкой внутри? Или надо как то по другому записать? Если не лень, можешь разжевать поподробнее ![]() |
|||
![]() |
|
||||
Цитата:
Я честно наверно минут 30 пытался ответить не разжёвывая, так, намёками, чтоб сам разбирался, но ни фига не получилось. Вот так будет работать, разбирайся: Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
А зачем 58? Не проще ли сделать один аргумент, но списком? http://autolisp.ru/2009/10/21/lisp-overloading/
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Лиспер, да я в курсе, и тема недавно подобная была.
Конкретный пример, есть у меня в диалоге 4 edit_box, допустимые значения:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Вот и я про тоже, но это не пункты, а разные допустимые значения для разных edit_box, которые вы предлагаете проверять одной библиотечной функцией.
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Поясняю, как использовать библиотечную функцию ru-dcl-check-tile-param для контроля ввода во множестве программ.
Библиотечная - это функция, которая уже находится в памяти, наподобие штатных. Т.е. она доступна всегда, в любой программе. Допустим, есть программа с диалоговым окном, в котором вводятся длина, ширина и отметка отверстия. Ввод описан в соответствующих action_tile: Код:
Контроль ввода спрятан в локальные функции _edit_*: Код:
Код:
|
|||
![]() |
|
||||
а так
Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Можно полностью отказался от action_tile и пользоваться функцией отклика диалога, которая указывается третим аргументом функции new_dialog. А в ней уже обрабатывать события, используя переменные действия диалога. В таком варианте вопросов по формированию строки вообще не возникает.
|
||||
![]() |
|
||||
А не чего, что этот третий аргумент является строкой?
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Ну, и попробуй, какой будет получаться результат, учитывая последовательное применение функций. А ведь в action_tile надо всего лишь передать имя в виде строки. Или выражение, которое надо выполнить. На других языках сделать это чрезвычайно сложно. |
|||
![]() |
|
||||
Последний раз редактировалось Do$, 15.04.2011 в 11:24. |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
ALFMario, приложи файл с примером где не работает
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Повторюсь здесь... ну очень уж интересная задачка... Вот условие...
На железнодорожных путях стоит товарный состав состоящий из цистерн и товарных вагонов. Определить сколько цистерн в составе и первую максимальную по количеству цистерн цепочку, ее начало и длину. Состав может выглядеть так: '( 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1 ... ) '( 0 0 1 0 1 1 1 0 0 0 1 2 1 1 0 0 1 1 1 ... ) общий случай, когда в нем не только цистерны и вагоны... где 1 - цистерны, 0 - вагоны 2 ... - еще чего нибудь прицепили Нужно решение именно на лиспе ... |
|||
![]() |
|
||||
Вполне простая задачка, другой вопрос как её максимально изящно решить в пару действий...
вот мой вариант: Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Я специально выбрал именно эту тему... так как интересовало решение именно на лиспе... воть
![]() Хотелось бы увидеть решение от Димы_ ... ... ... Disney, пасиб... и hwd тоже... Мое решение... 1. Сгруппировать вагоны и цистерны по спискам: '((0 0) (1) (0) ... ) 2. найти максимальный по длине, а заодно и его длину 3. отрезать его вместе с хвостом 4. собрать остальное и вычислить длину получившегося списка... Вопрос собственно в том, как объединить по п.1 Последний раз редактировалось gomer, 22.04.2011 в 21:52. |
|||
![]() |
|
||||
gomer, я тебе удивляюсь, там же совсем всё просто, или тебе рекурсии ни как покоя не дают?
Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
У меня вот такой вариант. Без рекурсии правда, но и без вложенного цикла.
Код:
__________________
cadtools |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Ой, вот именно не дают... Кажется, мой мозг отбился от рук... В последнее время одни только идеи... например dcl библиотека блоков с деревом по xml-файлу, наподобие того, что ты сделал здесь
я то надеялся обойтись одной простой рекурсивной функцией... но не тут-то было... |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Друзья мои я сейчас занят "люто" (большой проект делаю) - заскавиваю на форум чтоб от писанины отдохнуть - где то рядом Дисней еще про прямоугольники спрашивали - будет время обязательно отпишусь - здесь "конечно" я бы сделал рекурсией в один проход
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Тут главное понять не как, а для чего. Про стили программироваия неплохо расписанно в "Структура и интерпритация компьютерных программ", ну а в целом - почитайте про функциональное программирование.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Просто я никогда в книгах по visualLisp не встречал как работает конструкция
Код:
Код:
Я бы разбивал список так. Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Лямбда - функция высшего порядка от произвольного числа аргументов возвращающая новую (пользовательскую) функцию - где первый аргумент - это список имен аргументов будующей функции, все остальные - тело функции. В отличие от большинства остальных функций - функция запускается "сразу" - до вычисления вложенных аргументов (т.н. специальная форма - так-же как и if, and, or,cond...). По сути defun и setq это обертка т.н. "синтетический сахар" от lambda (в defun добавляется параметр имени функции, в setq - область определения лямбды "расширяется" на все окружение).
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
1) Спасибо за разъяснения - уже становится понятно, что это настоящий лисп, а то что я писал до этого, это обычный старый паскале-подобный код написанный на лиспе. Применять лисп как раз и нужно, через вот эти lambda т.к. сложные функциональные задачи проще и понятнее расписать через настоящий лисп, нежели пытаться превратить это все в циклы.
Автодеск то забил, но и у нас есть возможность забить на автодеск. Интерпретатор в бриксе например работает ощутимо быстрее. Но это все равно не то чего хотелось бы. То что автодеск забил, вообще никого не волнует, хочется вооружиться нормальными фраймворками, получать данные о примитивах АВТОКАДА (если вообще автокада, может быть ревитиа, инвентора и т.д.) через API, а уже с данными о примитивах работать на настоящем функциональном лиспе (я где то видел проект где народ пишет компилятор лиспа в MSIL - вот это сила) т.е. я хочу писать лисп-код для "умной" работы с данными для того чтобы получить конечный результат. А вот получение введенных данных и вывод конечного результата, это удел C# .NET API, для того они и развивались долгие годы в бизнесс-приложениях и добились в этом отличных результатов. Существуют и обычные интерпретаторы под JAVA видимо скоро появятся и для C#, но я сомневаюсь что они будут сильно быстрее чем нынешний лисп в автокаде, а вот компилятор LISP - MSIL - это мне кажется будет серьезный рост производительности, а также кросплатформенность соответствующая самым современным требованиям к ПО. Но саму идею о том что: "Лисп-программист не разбивает алгоритм на отдельные элементарные шаги, не использует циклы, ветвления, присвоения значений переменным, а строит функцию, решающую поставленную задачу. При этом структура функции почти дословно соответствует математической формулировке решаемой задачи. Подобная методология сейчас называется функциональным программированием. Лисп – первый функциональный язык программирования и, вероятно, первый язык, который явно приветствовал использование рекурсии." ее нельзя убить, пока останутся умные люди на земле, она будет жить в веках. Эта задачка с вагонами не особо сложна, но дает отличную возможность сравнить два стиля императивный и функциональный, попробую разобраться с твоим кодом (Дима_ ) и применять подобный подход, в своем проекте, надо же когда-нибудь учиться прекрасному. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
gomer, там (в #1440) кстати ошибка. В конце, вместо lst_out должно быть (append lst_out (list lst_current)), а то конец списка не возвращается. Это я от спешки не досмотрел. А вот и рекурсия, правда не очень-то изящно Код:
__________________
cadtools |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Уж поверьте мне, я наверняка больше всех на форуме и программ и функций написал. И "лямбды" использую (когда надо), и переменные, и (ужас!) циклы и ветвления. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
При всем уважении Вы здесь загнули. Я буквально неделю назад "смалодушничал" и ввел в f# переменную, а потом замучился потоки синхронизировать - вовремя одумался и убрал ее от греха подальше. Посмотрите на 4 .Net - там и динамическую типизацию ввели, да и в общем все что добавили - корнями упирается в 52 год. Я не сомневаюсь что это действительно вопрос времени т.к. автоматическая оптимизация на порядок отличается в фунуциональных программах, а в рукопашную далеко не уедешь. На наш век конечно "дураков хватит", но ИХМО путь тупиковый.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Дима_, а при чем тут f# и .Net?
Тут идеи "которые будут жить в веках" про Лисп-программистов. Причем в конкретной реализации - Автолисп (слабенький, конечно, диалект). Вот бы вместо идей предъявить полезную прикладную программу (не этюд). Например, как чрезвычайно популярные PlTools или Прокат от Василия Кондрата. Они же ужасно, с точки зрения "вечной идеи" написаны, но нужны людям. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
ShaggyDoc, а где Ваш "ответ Чемберлену" (тоже ведь рекурсия
![]() Вот пока мой... Вроде бы стало все на свои места... но мне все равно не нравится... Код:
Цитата:
Вот вам еще: расставить вагоны по боксам для ремонта в зависимости от типа вагона... имеем два списка: состав и боксы... Если в программе нет кнопачек то она не перестает быть программой по определению... важен именно алгоритм... а язык и способ реализации вторичны... зы Насчет pltools не скажу, но 'прокат' потому и развивается "никак", что написан на "бейсике". Последний раз редактировалось gomer, 25.04.2011 в 02:11. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Боксы и вагоны - это наподобие "ханойских башен" - практически никому не интересны. А прокат - то, что всем надо. Да еще в 3D. Никакого "абстракционизьма", сплошной "реализьм". |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
ИХМО накрутили Вы коллега здесь лишнего - простое правило - если алгоритм простой, то и рекурсия должна выглядеть просто (без надобности я стараюсь не использовать list и append внутри рекурсии - т.к. в итоге это только код усложняет):
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
![]()
__________________
cadtools |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
![]() Насчет башен согласен, а насчет не интересно - увы, хотя каждому свое: строителям - прокат, машиностроителям - болты, железнодорожникам - цистерны и вагоны Дима_, это как раз то, что я хотел... ![]() ![]() Код:
![]() Последний раз редактировалось gomer, 25.04.2011 в 12:05. |
|||
![]() |
|
||||
Сообщений: n/a
|
/ Перенесено из http://forum.dwg.ru/showthread.php?t=7411 / kpblc /
Почему лисп рисует объект по введённым параметрам на запросы командной строки для предпоследних введённых параметров? Последний раз редактировалось Кулик Алексей aka kpblc, 06.05.2011 в 23:29. |
|||
|
||||
Сообщений: n/a
|
Нет
![]() Другое уже. Код:
Особо не критикуйте.Пишу код как могу-с книжкой в руках. В общем проблема в следующем:загружаю активное окно редактора лиспа,перехожу в автокад,из буфера в командую строку вставляю razvertka,дальше по просьбам ком.строки-первый результат нулевой (пусто).В ком.строке какаято ошибка.Повторный ввод-отрисовывает развёртку по ппервым данным. p.s.Код недоделанный. Последний раз редактировалось Владимир Егорьев, 06.05.2011 в 22:55. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Либо читайте внимательно книжку, особенно про локальные переменные или функцию (initget 1) или про то, как не стоит забывать вписывать функции в скобки... например... progn... либо чаще смотреть в командную строку
|
|||
![]() |
|
||||
Сообщений: n/a
|
Да gomer.Спасибо.Уверен что справлюсь.
Дело в том что практики нет и поэтому функции лиспа ищу долго.Да и описание не всегда понимаю в книге(ах). Добавлено->gomer Всё решилось. У меня ещё вопрос. Мне нужно в этом коде выбрать созданный обект (грань многогранника) для того чтобы его ARRAYрить.Функция entlast подходит? Последний раз редактировалось Владимир Егорьев, 06.05.2011 в 23:41. |
|||
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Попробовал немного помочь.
Однако, на мой взгляд, не стоит в принципе вводить исходные данные таким последовательным образом, лучше сделать диалог, например dcl, либо еще каким нибудь образом, но сразу все, а не поочереди. ну и еще из обязательного - надо локализовать переменные, хотя в вашем случае это много работы, мне лень ![]() Код:
__________________
apel.fas |
|||
![]() |
|
||||
Сообщений: n/a
|
Apelsinov
Цитата:
Но всё постепенно.Я так сказать ещё ходить учусь. Это с позволения сказать програмка будет использоваться (во всяком случае я надеюсь) в реальности и вот её я и возьму для развития.Пока мне удалось вот это. Повторю вопрос по поводу entlast:Мне нужно в этом коде выбрать созданный обект (грань многогранника) для того чтобы его ARRAYрить.Функция entlast для этого подходит? Последний раз редактировалось Владимир Егорьев, 07.05.2011 в 00:28. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
старая школа... моя твоя не понимайт...
![]() Цитата:
Код:
|
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Всем привет и большое спасибо за то, что тратите свое время на ответы на вопросы.
Ну и сам вопрос. Есть у меня идея сделать своеобразный откат при выполнении выбора объектов, инициированном функцией (ssget). Хотелось бы иметь возможность в случае выбора ненужного объекта выкинуть его из выборки правым кликом кнопки мыши, и продолжать выбирать объекты дальше. Но - нажатие правой кнопки мыши приводит к выходу из ssget. Вижу только один вариант: 1.Выборка "А" обнуляется. Используется реактор мыши - каждый раз, когда происходит клик правой кнопкой мыши и функция ssget автоматически заканчивает работу по выборке "B" происходит следующее: 1.1. удаляется последний элемент из выборки "B". 1.2. к исходной выборке "А" добавляются только выборка "B". 1.3. обнуляется "B". 1.4. запускается ssget - для новой выборки "B". Так же возможно поставить реактор на выбор объекта - тогда удаляться будет не последний элемент, а группа элементов. В том ли направлении я размышляю или есть какие-то другие методики? |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Есть же штатный вариант: нажать Shift и, не отпуская его, выделить объект, попавший в набор. Объект будет исключен из набора (точный список системных переменных, отвечающих за такое поведение, сказать не могу, навскидку: pickfirst, pickadd, pickdrag).
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Aminka, а еще есть ключи команды выбора, стандартные
Код:
Вы же пытаетесь сделать нестандартный вариант выбора, для пользователя это будет как минимум не привычно.
__________________
apel.fas |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
__________________
cadtools |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Почти как у лиспера
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Сообщений: n/a
|
gomer
Моя вина-я не полностью часть кода выложил в посте 1478. Код:
p.s. Пунктир и BT-не програмно нарисован.Просто для пояснения. Последний раз редактировалось Владимир Егорьев, 14.05.2011 в 11:42. |
|||
|
||||
Сообщений: n/a
|
Цитата:
Дело в том что первая и последняя (нет её пока на скринах) грани (слева направо) будущего многогранного профиля имеют размеры меньше чем так называемые основные грани. Поэтому как я задумал-вначале множу относительно ВТ основные грани,а после этого крайние. У крайней грани относительная точка центра массива не будет ВТ.Будет другая. Над алгоритмом кода подумаю. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
"BT" - это строка... так нельзя... BT - должен быть списком из 2х или трех чисел... в первом случае третья координата добавляется автоматически в виде нуля
|
|||
![]() |
|
||||
Сообщений: n/a
|
Вот я попробовал задать нули (vlax-3d-point 0 0 0) и при выполнении запросов в ком строке не кликал мышью а тоже ввёл нули-результат тот же самый.
Я уверен что у меня проблема в угле.Ниже в коде это пероеменная mu2 с коэффициентом. Вначале коэффициент был-2.Грани при этом не совмещались.Затем я начал уменьшать этот коэффициент и грани начали стремиться к совмещению как должно быть по второму скриншоту в посте выше. Код:
Вопрос:Когда выполняется массив по кругу,какая точка множиться?Ведь объект должен быть "привязан".Например центр тяжести объекта. Последний раз редактировалось Владимир Егорьев, 15.05.2011 в 17:19. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Я же предложил вам продумать алгоритм, а не танцевать с бубном... Конечно точка тут не причем...
И дело не в угле, хотя именно в нем... а в логике программы... Вы складываете яблоки с грушами... что получаете? Вы боитесь выложить код полностью... Почему? без кода помочь весьма проблематично... по сути угол заполнения это количество внутренних граней, умноженное на угол между не параллельными сторонами грани... никаких коэффициентов... |
|||
![]() |
|
||||
Сообщений: n/a
|
Код:
Закоментируйте Код:
Добавлено №2 У меня угол массива (сектора)-это угол между стронами трапеции (2*mu2) умноженный на количество граней (количество трапеций) без двух крайних,т.е. ngran минус 2. mu2-это угол между высотой трапеции и одной стороной,поэтому я mu2 умножаю на два. Последний раз редактировалось Владимир Егорьев, 15.05.2011 в 18:11. |
|||
|
||||
Сообщений: n/a
|
Ммдауж.
gomer,спасибо А почему такое получается.Углыже равны Хотя и углы не равны Но почему.Ведь прорисовываю с поворотом на один и тотже угол верхнее и нижние основания. Код:
Решение,но 0.3 мм погрешность Код:
Последний раз редактировалось Владимир Егорьев, 15.05.2011 в 20:33. |
|||
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Спасибо всем за ответы. Поделюсь результатами - мало ли, может кому будт интересно, хотя на форуме таких программулин наверянка уже тьма тьмущая. Ногами не бить, делала для своих скромных целей.
Это первичный вариант программки, которая чуточку упрощает работу по созданию кабельных журналов для адресных систем сигнализации. Если будут какие комментарии и советы (кроме длины и разбиения на отдельные мелкие функции для удобочитаемости) - буду рада. А еще у меня есть вопрос. Пыталась воспользоваться диалогом getfilеd. Решила поиграться с диалогом и вместо "Открыть" нажала "Отмена". Результат странный - лисп подвис. Почему такое может быть и чем лучше пользоваться? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Проверяй, что возвращет getfiled. У тебя нет этой проверки, поэтому лисп и "сошел с ума".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.05.2011
Сообщений: 4
|
Здравствуйте! Я профан в ЛИСПЕ. У меня такая проблема: имеются два блока, в виде квадратиков с торчащими навстречу друг другу пририсованными каждому квадратику отрезками. Я рисую линию, либо полилинию от одного конца отрезка первого квадрата к концу отрезка второго. Далее, двигаю один из блоков в вертикальном направлении, причем выделяя его мышкой. Линия должна тянуться вслед блоку. Это для начала. Более сложная задача - линия должна тянуться в режиме "ortho", и "ломаться" с радиусами сама. Причем, изначально вертикальные координаты концов отрезков могут не совпадать.
Просьба: подскажите, пожалуйста, набор и последовательность функций, которыми мне гипотетически надо владеть для этой задачи. Код, пожалуйста, не пишите. |
|||
![]() |
|
||||
Сообщений: n/a
|
mix_75
Я тоже не опытный лиспер,но хочу поделиться рекомендациями,которые мне в своё время дал Кулик Алексей aka kpblc.Он посоветовал книгу AutoLISP и Visual LISP в среде AutoCAD.Автор Н.Полещук.Я не знаю какими сегодня можно обзавестись книгами.Я эту купл в 2006 году. Заказывал в интернет магазине OZON. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
хм, судя по картинкам нужно зеркалить vla-Mirror относительно оси симметрии, как я понимаю она может быть либо на оси средней грани, либо на ребре граней, если их четное количество. Полярный массив не подойдет, ибо крайняя грань смещена относительно центра
|
|||
![]() |
|
||||
Сообщений: n/a
|
Нет,ну это безусловно
![]() Добавлено. Угол то будет как раз между левой стороной первой основной грани и правой стороной последней основной грани.Отсчёт граней соответственно слева направо. |
|||
|
||||
Советую быть по аккуратнее с такими кодами! Допустим один угол равен 350 градусов, а второй 10. В данном случае, нужно получить угол без направления, в общем случае, все может быть сложнее...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Сообщений: n/a
|
Елпанов Евгений & gomer
Если я правильно понял Елпанов Евгений-он обратил внимание на то что алгоритм кода не исключает возможностей вводить в качестве исходных данных углы отличные от 360 градусов,которые подразумевают не только отрисовку развёрток закмкнутого многогранного профиля. Это качественное замечание если я его всё таки правильно понял. Действительно я предпологал ещё и этим же кодом выполнять развёртки так называемых обечаек из которых будут собираться замкнуты профиля. Но я пока до этого не дошёл. |
|||
|
||||
я только хотел показать:
(350 + 10) / 2 = 180 но если нарисовать две линии, одна под углом 350, а другая 10 градусов, то луч - вектор, будет направлен под углом 0 градусов. Другими словами, в некоторых случаях, результат выдает угол для обратного вектора. Подобная ошибка, очень часто сильно выматывает начинающих программистов - есть код, он почти всегда работает верно, но иногда дает совершенно не верные результаты. Ошибка в сравнении углов или получении направления (угла), после простейших математических действий не вызывающих сомнений!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
Последний раз редактировалось gomer, 22.05.2011 в 16:08. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Здравствуйте!
Раз уж тут тема для чайников может кто то научит строить полилинию по списку? Везде где читал есть коды для этого но хочется понять как все это устроено. Скажем так: у меня есть список "i" с элементами типа ((100.0 10.0) (110.0 12.0) (120.0 13.0)) нужно нарисовать полилинию через три точки не замкнув ее. количество элементов в списке может меняться в зависимости от того сколько их будет вводить пользователь. Если есть возможность то в объяснении не применять "VL". |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
Код:
__________________
cadtools |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
TararykovDG, а как насчет научить?:-)
Все заработало отлично именно так как я хотел! но честно говоря сидел и разбирал код в первом примере и никак не могу своими мозгами дойти как это понять .... Код:
Код:
Последний раз редактировалось Ubivec81, 26.05.2011 в 16:25. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Цитата:
Append собирает в список последовательность для команды pline, т.е получаем тоже, что и выше но в виде списка. Apply заставляет применить функцию (у нас это Command) к списку, который был получен выше. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
С помощью list мы даем указание на то, что все, что стоит после него считается списком. Не беда, что это всего лишь название команды или двойные кавычки. В целом получится именно тот список, что нам нужен.
Если бы в условии было определенное количество точек для полилинии, то выражение упростилось бы до одного list, хотя там вообще все будет просто и без наворотов типа append и apply. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Для вставки текста значения нужно будет само значение перевести в строку, смотри команды itoa, rtos
Типа так: (command "_text" точка_вставки_текста "высота_текста" "угол_поворота_текста" (rtos text)) где вместо слов в кавычках подставляешь нужные величины - "100" например для высоты текста, "0" - 0 градусов - угол поворота текста, точка вставки может быть получена так: (getpoint "Укажите точку вставки текста") |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
(command "_.dtext" (list (+ (* (car (car r)) 10) 1.25) -85) 2.5 90 (rtos x 2 0))
не работает. Она просит вводить данные вручную хотя отдельно (rtos x 2 0) выдает правельно. есть ощущение что все это далжно как то делаться через entget и entlast. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
По dtext смотри тут:
http://www.itstan.ru/autocad/sozdani...nde-dtext.html Как я понял dtext -динамический текст, который может создавать многострочные тексты, но не как mtext. А простой text - он и в Африке текст. Просто примитив типа текст. |
|||
![]() |
|
||||
Регистрация: 21.05.2011
Сообщений: 4
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
На лиспе замучаешься делать. Бери в руки ElectiCS, или AutoCAD Electrical, или Visio - и вперед. В "чистом" AutoCAD подобное реализовать ИМХО будет весьма трудно.
А так - смотри объектные реакторы, расширенные данные или словари, командные реакторы и т.п.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Код:
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Do$, спасибо за верное замечание
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
gomer я не понял, зачем единица в initget, наоборот нужно оставить возможность пустого ввода, по нему и проиходит выход иначе цикл будет быконечным.
__________________
cadtools |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
вот тогда и нужно выводить выход в опции как у Do$, но это моветон в программировании интерфейсов... По хорошему... сначала (при выборе первого пикета) нужно давать юзеру возможность <Выход>а, при выборе последующих пикетов дать возможность <Завершить> выбор
как-то так: Код:
|
|||
![]() |
|
||||
TararykovDG уже объяснил, немного дополню:
В лиспе вот это (/= <выражение> nil) в функциях проверки можно заменять на просто <выражение>: (if (/= x nil) (alert "a") (princ "b")) то же самое, что (if x (alert "a") (princ "b")). Цитата:
Код:
Последний раз редактировалось Do$, 01.06.2011 в 12:35. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я бы написал (princ (if x "a" "b"))
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Я вставил initget и добавил в него ключевое слово, просто для примера - показать, что есть такая возможность. Чтобы подчеркнуть важность этой функции. Что ее очень полезно использовать перед вызовом get-функций. В ключевых словах может быть все что угодно: выход, настройки, последнее значение, удаление последнего введеного значения, очистка списка и ввод сначала, показать промежуточный список и пр... Словом, на что фантазии хватит. И не так уж важно: выбираем мы пикеты (точнее, не выбираем, а вводим) иль еще что-то делаем. Человек только учится программировать на автолиспе, возможно он не знает о такой возможности, потому я и показал ее, так как считаю ее очень полезной.
Память надо развивать, или лечить (в зависимости от обстоятельств). Но даже на такой запущенный случай в коде уже есть соответствующая проверка введеного значения на нахождение в списке. Программа 1000 раз выдаст подсказку "Пикет уже задан!". |
||||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
TararykovDG,
Да я только начал все это постигать потому пишу как моей практики и ума хватает. Спасибо за помощь. Вот только тут немного задача усложнилась: Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
я говорю об отсутствии наглядности процесса... код в #1541 на вид уж совсем оптимальный... и с точки зрения программиста и с точки зрения юзер... одно но... небольшая логическая ошибка... только выйти юзер может только первый раз, когда уже выбран хотя бы один пикет, можно либо выйти, либо завершить... По правилам хорошего тона Выход нужно перенести в опции, а Завершить оставить по умолчанию... зы.. никаких промежуточных вычислений... ввел данные - считай, рисуй... не ввел... жуй кофе... |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Я жутко извиняюсь. Но сейчас пытался как то все то что вы советовали применить на практике и понял что никак не пойму как это работатет
Код:
![]() |
|||
![]() |
|
||||
Да тут разъяснять нечего - при пустом вводе getreal возвращает nil, а математические функции * и / в качестве аргументов принимают только числа. А тут им nil подсовывают. Они дико обижаются и выдают ошибку
![]() Тут надо сперва получить оба значения, потом их проверить, и, если оба являются числом (есть такая полезная функция numberp), проводить математические операции. Как-то так: Код:
Код, надеюсь, пишешь во VLIDE? Если так, то в нем можно выражения отдельно запускать и смотреть, что будет получаться. Благодаря Кулик Алексею, об этом можно довольно доступно почитать тут http://autolisp.ru/category/ide/ Выражение (if piket_list "Завершить" "Выход") вернет строку "Завершить", если список piket_list непустой или "Выход", если наоборот. |
||||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Цитата:
Если список с именем piket_list уже есть, то выполняется выражение "Завершить", если его нет, то "Выход". Здесь показана синтаксическая запись оператора if: (if <условие> <выражение1> <выражение2>) Если условие истинно, то выполняется выражение1, если ложно - то выражение2. Поскольку при первом вызове список пикетов еще не создан, то можно выйти из программы - поэтому написан Выход, когда список из пикетов уже есть и заполняется(-нен), то программу можно завершить - написано Завершить. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Опять я влезаю (nil) это не пустой список, а волне себе список с пустым списком внутри - пустой список это nil либо () либо '().
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Do$,
Цитата:
Код:
Код:
Цитата:
|
|||
![]() |
|
||||
Цитата:
Код:
Код:
Код:
P.S. В этом конкретном случае, когда мы не задаем ключевых слов в initget, getreal может вернуть либо nil, либо число. Поэтому, проще проверять на nil, а проверку на число убрать. В итоге получается такая простая конструкция: Код:
Последний раз редактировалось Do$, 02.06.2011 в 09:30. Причина: P.S. |
||||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Доброго времени суток! Нужно рисовать вручную полилинию в цикле при чем каждый раз проходящую через разное количество точек. в дальнейшем нужна будет площадь этой полилинии, но это я уже разобрался как сделать а вот полилинию вручную в код поставить не получается!
![]() Прошу помощи. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
__________________
cadtools |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
В этом коде понятно что vla-addtable создается таблица с переменными (pt nr nc rh cw) А вот дальше темный лес (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument) 'Modelspace) (vlax-3d-point pt) Прощу помощи в изучении vl и по возможности с самого начала! |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
с какими еще переменными - это параметры таблицы, "Темный лес" - описан в справке автокада - это встроенные лисп функции, справку по объектной модели - см. справку по VB (парадокс - vb уже нету - а справка осталась
![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
|
|||
![]() |
|
||||
Цитата:
Есть AutoCAD Объектная модель
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
|
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Код:
|
|||
![]() |
|
||||
Для обычного блока, если не nil вот это выражение: (ssget "_X" '((0 . "INSERT") (2 . "<block name>") (67 . 1) (410 . "<layout name>"))), тогда блок(или блоки) с именем "<block name>" есть на листе с именем "<layout name>".
Для динамических немного сложнее будет... |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Для динамических есть решение от Lee-MAC
Код:
Дальше нужно лишь сформировать строку-шаблон для ssget (2 . "MIP_Формат,`*U33,`*U41,`*U42,`*U44,`*U45"). В примере все это есть
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Цитата:
Список это чисто LISP-овский тип данных, в VBA его нет, поэтому в ActiveX вместо списков используются варианты с безопасным массивом (vlax-3d-point '(2.236 23.548 0.0))) - создаёт вариант из безопасного массива, который в свою очередь состоит из трёх элементов являющихся вещественными числами двойной точности. Варианты - это структура, которая может хранить объекты разных типов. (vlax-make-variant) Безопасный массив - массив понятно, безопасный - потому что система постоянно контролирует тип и количество элементов (vlax-make-safearray- создаёт vlax-safearray-fill - заполняет) Т.е. получаем: (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 2)) '(2.236 23.548 0.0))) получилась немного громоздкая запись, а так как довольно таки часто приходиться её использовать, создали функцию Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем большое, спасибо!
Ребят, извините за неудобства. Как этот код можно переписать на LISP? Sub DwgProps() Dim NewText1 As String Dim NewText2 As String Dim oFS Dim Fold Dim Slesh1, Slesh2, Slesh3 Dim Konec, Zona, Papka, Hvost Set oFS = CreateObject("Scripting.FileSystemObject") Fold = ThisDrawing.Path Konec = Len(Fold) Papka = "215-GMC-01-EOM2." Slesh1 = InStr(Fold, Papka) Hvost = Mid(Fold, Slesh1, Konec) Slesh2 = InStr(Hvost, ".") Slesh3 = InStr(Hvost, "\") If Slesh3 <> 0 Then Zona = Mid(Hvost, Slesh2 + 1, Slesh3 - Slesh2 - 1) Else Zona = Mid(Hvost, Slesh2 + 1, Konec - Slesh2 - 1) End If NewText1 = Zona NewText2 = "Ãëàâíûé ìåäèàöåíòð ôóíêöèîíàëüíàÿ çîíà " & NewText1 & " Ýëåêòðîîáîðóäîâàíèå è ýëåêòðîîñâåùåíèå" changeCustDwgProp ThisDrawing, "Äîïîëíèòåëüíûé Øèôð ðàçäåëà", NewText1 changeCustDwgProp ThisDrawing, "Íàèìåíîâàíèå êîìïëåêòà", NewText2 End Sub Private Function changeCustDwgProp(docName As AcadDocument, fldName As String, newVal As String) On Error GoTo createIt Dim custProps As AcadSummaryInfo Set custProps = docName.SummaryInfo custProps.SetCustomByKey fldName, newVal Set custProps = Nothing Exit Function createIt: custProps.AddCustomInfo fldName, newVal Set custProps = Nothing End Function Private Function getCustDwgProp(docName As AcadDocument, fldName As String) As String 'KEY IS CASE SENSITIVE On Error GoTo notFound Dim custProps As AcadSummaryInfo Set custProps = docName.SummaryInfo custProps.GetCustomByKey fldName, getCustDwgProp Set custProps = Nothing Exit Function notFound: getCustDwgProp = "" Set custProps = Nothing End Function |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: прям так и писать?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Не совсем понятно мне. Когда мы объявляем функцию, локальные переменные функции мы должны вручную "убить", что бы освободить память. Например:
[code] Код:
И всё-таки, зачем "ручная" чистка переменных, это какой то атавизм (этот вопрос волнует даже больше)? |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это делаеться для того, чтобы, как раз НЕ затереть возможно существующие переменную var1. Подобный вывод переменных есть во всех диалектих лиспа (и не только) - с разным синаксисом - это так называемые локальные переменные. А функция для того и объявляется чтоб она осталась в памяти - если она больше не нужна - то не надо ее и объявлять (для многоразового, но конечного числа вызывов есть lambda).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
"Прибить" можно - (setq имя_функции nil), но делать так не нужно - если функция не будет нужна - не надо ее объявлять в глобальном пространстве имен (ее можно объявить локально внутри другой функции) - но повторю еще раз - в лиспе(ах - тем паче что ты про Common Lisp "заикался") для этого есть ЛЯМБДА - а про место переменных в лиспе я вобще лучше помолчу - чтоб никого не расстраивать.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Функция внути функции .. мм, так разве делают? А что вообще почитать про Автолисп порекомендуешь?
Да, но код должен быть "читаем" (в том числе для многократного повторного использования), не должно быть "магических чисел", в ANSI C, к примеру, для этого есть константы. Я поневоле сравниваю с Си, и Коммон Лиспом, так как про них параллельно читаю. И потом в "Сапр на базе Автокад" даётся целая библиотека функций. Что эти функции то же запрятаны в какую-то одну функцию? (да, я книгу читал фрагментарно). |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Что почитать по автолисп - я, честно говоря, сам толком кроме справочника autocad'а ничего не читал, но "Сапр на базе автокад" - это вроде как классика (хотя меня она так-же стороной обошла) - а рекомендовать литературу под другие диалекты не буду - т.к. они полезны для понятия принципов лиспа, но автолисп это такой "недолисп" который не имеет некоторых БАЗОВЫХ вещей современных функциональных диалектов. p.s. своим личным "идеалом языков" считаю Scheme.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Нет - это я увлекся и написал в "нелогичном" порядке - лисп функциональный, динамический. Про другие "показатели" лучше сюда, хоть автолиспа там и нет (не вздумайте делать выводы о Автолисп из Комонлиспа).
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 07.09.2011 в 16:27. |
|||
![]() |
|
||||
Подскажите пожалуйста простой способ читать данные автолиспом из *.xls. Сейчас пользуюсь *.csv, но не очень удобно (спецификации то всё равно в Excell). Пока у меня примерно так сделано:
Код:
Последний раз редактировалось baaba, 07.09.2011 в 22:17. |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
![]() |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Offtop: Так и хочется отправиться к http://autolisp.ru/2011/06/08/functi...bility-region/
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Построение чертежа по данным Excel
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
"ценный кадр" Регистрация: 02.12.2010
Сообщений: 115
![]() |
Цитата:
|
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Поиском поищи файл на C: acad_dxf.chm Для 2009 должен лежать в C:\Program Files\AutoCAD 2009\Help\acad_dxf.chm
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 08.09.2011
Сообщений: 1
|
В коде всё работает но нехватает внутреннего угла. Запуск кода geo_table
Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 08.09.2011 в 22:18. Причина: Уточнил |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Создал простейшую таблицу и получил вот такой DXF-список данных примитива
Код:
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
посчитай, сколько полей с кодом 300 в твоем листинге
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем привет! Появилась необходимость реализовать такой сетап. В чертеже есть несколько лэйаутов, в каждом лэйауте есть два блока, один обычный и динамический. Нужно процедурно в каждом листе изменить динамический параметр блока в зависимости от размеров блока или имени. Не знаю как даже лучше будет, обращаться либо к имени блока или вычислять его размеры? Подскажите пожалуйста как подступиться к этому вопросу.
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Ребят, подскажите пожалуйста! Сделал вставку во все листы динамического блока поверх старых блоков и нужно теперь изменить динамическое свойство блока в зависимости от имени старого блока.
(setq ss1 (ssget "_x" '((0 . "INSERT") (100 . "AcDbBlockReference")))) (setq i 0) (while (< i (SSLENGTH ss1)) (setq name (ssname ss1 i)) (setq conv (vlax-ename->vla-object name)) (if (= (vla-get-name conv) "Mp.Stamp") (vla-put-value (car (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties conv) ) ) ) "Mp.StampSmall" ) ) (setq i (1+ i)) ) Никак не могу додуматься как сделать так чтобы штамп менялся не во всех листах, а только в тех где есть нужный элемент. Дико, буду признателен. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Так у тебя и так проверяется имя блока. Правда, куда выполняется вставка, не очень понятно...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Во всех листах вставлены два вида блоков динамический и обычный, нужно как то процедурно изменить динамическое свойство блока по имени старого блока. У меня только срабатывает на всех листах, я не пойму как написать условие сравнения имени двух блоков для какого-то листа и если имена имена в списке совпадают и совпадают листы, то выполнить выражение. Может путанно достаточно, но как-то так.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Как один из вариантов (сейчас лично мне приходится много работать с неактивными документами, так что от ssget я пока отказываюсь. Что не может не отражаться на кодах
![]() Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
На самом деле логика элементарна
![]() Не самое лучшее решение, если честно. Времени нормально посидеть не было, выдал только то, что в голову пришло. Если подключится VVA, код наверняка получится более компактным и быстрым.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Цитата:
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ох, как не хочется разбирать изначально порочный код... Ну да ладно, корифеи (надеюсь!) простят...
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Да, совсем забыл написать... Конструкцию cond я использовал, чтобы код можно было масштабировать - например, для другого имени дин.блока надо менять другой параметр. А связь все равно со старым блоком. Если этого не надо, то cond безболезненно можно заменить на if. Или (что лучше) - объединить с предыдущим if.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
Код:
Код:
Последний раз редактировалось Ubivec81, 14.09.2011 в 11:47. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
и правильно выдается... фашисты вообще за побег расстреливали... Ескейп - кнопка выхода, а не прекращения... просто программа не может понять чего вам надо и считает такое нажатие ошибкой пользователя... о чем ему и сообщает
![]() Здесь крыс уже настолько пропиарил свой сайт, что не наткнуться на него уже проблематично, а там все хорошенько разжевано. за что ему и реверанс |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Подскажите пожалуйста!
На чертеже созданы 2 таблицы и надо значение одной ячейки (F2) первой таблицы перенести в ячейку второй таблицы (tabl 5 4). Делаю это через Код:
Далее в первой таблице меняю какие то цифры и согласно формуле в первой таблице значение F2 меняется а вот значение (tabl 5 4) почему то остается таким же как и было. В EXCEL это все вроде работает,а в АКАДЕ? Или нет вариантов это победить? |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Ubivec81, _regen или _updatefield
__________________
cadtools |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
vla-regen получает 2 аргумента: указатель на обрабатываемый документ и "чего обновлять": acAllViewports | acactiveviewport и чего-то там еще. Короче, в справке надо посмотреть...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Я наверное не правильно вопрос сформулировал. Пользователь померил площади, создалась таблица и эти площади все попали в нее. Далее вычисляются объемы в зависимости от расстояний. Так вот пользователь может и БУДЕТ изменять эти расстояния но уже после того как код будет выполнен. А эти объемы формируют вторую таблицу. Вот и получается при изменении расстояний в первой таблице значения объемов меняются, а во второй меняются только после регенерации. Но чует мое слабое сердце что вариант только ручками заставить его это делать.
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Ubivec81 в Твое случае можно сделать так Код:
__________________
cadtools Последний раз редактировалось TararykovDG, 23.09.2011 в 08:43. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 23.09.2011 в 10:11. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
TararykovDG, спасибо помог твой код. Правда я не особо понял как это работает, вернее не знаю как с data это получается.
Прошу помочь вот в чем. В таблице несколько столбцов (на различных километрах в моей таблице) в которых нужно сложить определенные строки которые записать в отдельную строку. И так надо пройти по всем столбцам. У меня получается вот такой цикл: Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
vla-get-Rows
vla-get-columns
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
vla-get-Rows возвращает количество строк
vla-get-columns колличество столбцов как эти функции использовать в формуле? Формула то выглядит как =(А1+А3+А7+А10) а в следующей колонке =(В1+В3+В7+В10) Как вставить числа и запустить это в цикле я понял а вот как БУКВУ в цикле менять? Думал что есть функция которая возвращает положение ячейки типа (VLA-get.... 1 1) (положение ячейки строка 1 столбец 1 = А1) но ничего не нашел в хелпе! или плохо искал? Последний раз редактировалось Ubivec81, 23.09.2011 в 15:43. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Беру широко известную программу на автолисп. Я вижу что после загрузки программы вспомогательные функции остаются в памяти:
Код:
quickdraw_fun_lib.lsp - содержит определения всех необходимых функций (qmake_cmd и т. д.). В результате в памяти только функции c:quickdraw с:q, и т. д. Функций типа qmake_cmd, не нужных конечному пользователю, в памяти нет. Память используется экономно. Или я неправильно понимаю механизм расходования памяти? Может быть не париться: просто определить все функции а затем комманды, в одном текстовом файле. То есть и в том и в ином случае функции вроде qmake_cmd, назовём их функции ненужные пользователю, одинаково будут расходовать память. Просто в случае когда они вынесены в отдельный текстовый файл и загружаются внутри функций c:q c:quickdraw и т. д., ими не может воспользоваться конечный пользователь (но они ему в общем-то и не нужны), они скрыты от него. То есть, видны или не видны функции (!имя_функции равно не nil значит функция видна пользователю), влияет ли это на расход памяти? Последний раз редактировалось baaba, 26.09.2011 в 13:16. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ошибаешься.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Дополню Алексея
Цитата:
Тогда уж лучше повесь на кнопку код Код:
Не парься ![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Ребята, всем привет! Не хватает хорошей функции SelSim, сам я работаю в 2009 64bit, под 64 бита её просто нету, а иногда очень хочется выделять подобные объекты по нужным состояниям. Уже вообщем-то привык и Quick Select, но SelSim'ом быстрее бывает. Есть ли близкая LISP альтернатива к SelSim?
|
|||
![]() |
|
||||
Водопровод-канализация Регистрация: 26.09.2011
Минск
Сообщений: 8
|
Добрый день! Подскажите, пожалуйста, каким образом отредактировать готовую команду акада... К примеру _mirror... чтобы не было последнего запроса (удалять ли исходные объекты), а чтобы они сразу удалялись...
Пытался писать что-то вроде: (command _mirror pause pause pause pause "_y") ; здесь можно улыбнуться, но я только начинаю в этом всём разбираться... ...получилось, только выбрать можно всего один объект и не работает рамка выбора... если напряжно писать лисп, то может быть подскажете направление в котором работать?) пасип! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
По-быстрому и не очень красиво:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Если убрать все проверки на ошибки, то алгоритм очень прост: сначала запрашиваем у пользователя набор примитивов, игнорируя объекты на заблокированных слоях. Потом запрос первой и второй точек отражения. И команду на запуск: _.mirror, в качестве первого параметра подставляем полученный набор примитивов, заканчиваем выбор ENter'ом (пустая строка), подставляем первую точку с временным отключением привяззок и вторую точку - тоже не забыв про привязки.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем привет! Ребята, подскажите как можно достучаться до вложенных фильтров слоёв один в другом? Фильтров может быть много.
Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 28.09.2011 в 11:52. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Или может лучше сразу так
Код:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48
|
Когда делаю так
Код:
Код:
а если делаю так Код:
Последний раз редактировалось Andru1968, 30.09.2011 в 11:40. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Имелось ввиду, что нужно делать или так (setq SQLFetch (cadr Result)) или так (setq SQLFetch (assoc 3 Result)), а не одновеременно
__________________
cadtools |
|||
![]() |
|
||||
Конструктор КМД Регистрация: 27.05.2010
Ижевск
Сообщений: 68
|
Здравствуйте. Есть такой вопрос, я в настройках отключил контекстное, т к использую его редко, можно ли повесить на кнопу команду чтоб оно выходило?, в привычном виде, или когда вызываю команду ПСК _ucs, выходит необычное меню (не знаю как оно правильно называется) - хотя бы такого вида чтоб выходило/
Подскажите пожалуйста Последний раз редактировалось gross, 30.09.2011 в 22:01. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
dirge, Не самая подходящая тема для твоего сообщения.
Было много тем про фильтры слоев. На вскидку http://forum.dwg.ru/showthread.php?t=52142 http://forum.dwg.ru/showthread.php?t=3825 http://forum.dwg.ru/showthread.php?t=58915 Лучше задать вопрос в одной из более подходящих тем или создать новую. Так же более четко сформулировать вопрос, приложить пример в виде dwg файла, указать версию Автокада. Я, например, пока не понимаю, что такое подгруппы фильтров слоёв
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Цитата:
Спасибо, за ссылки. Вот в этой теме последнее сообщение такой же вопрос по сути: http://www.caduser.ru/forum/index.ph...#message252725 Версия AutoCAD 2009. Хорошо, поясню чуть более корректней. Под подгруппами я имею ввиду, что внутри New Property Filter можно создать ещё один и ещё и т.д, соответственно можно образовывать ветвление фильтров внутри одного единственного. Так вот, готовые процедуры по поиску фильтров слоёв которые я нашёл на форумах возвращают только один фильтр и не видят то, что внутри него. Вот собственно и суть вопроса была. Как добраться до 2го, 3го уровня фильтров не понятно. На всякий случай, dwg прилагаю. Буду признателен в помощи. |
|||
![]() |
|
||||
Регистрация: 08.08.2007
г. Подольск
Сообщений: 531
|
2011
вот и первый вопрос... имеется мультивыноска с целым числовым значением, и я её размножаю коммандой _copy... как сделать, чтоб при каждой вставке этой коммандой, значение увеличивалось... а...? на 1... |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Redj, попробуй так (Используется реактор)
Код:
__________________
cadtools Последний раз редактировалось TararykovDG, 04.10.2011 в 12:08. Причина: Подправил код, а то до этого инкрементирование происходило не только при копировании, но и созданиии новой мультивыноске |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Здравствуйте!
Подскажите плз, как написать LISP (стараюсь - не получается) - построение линии по географическим координатам. П.С. AutoCad civil 3d 2012 Пример Код:
Первая точка строится, а вот вторая нет, ругается...: Вставка из командной строки: Команда: SETKA_GK _.line Первая точка: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 00' 00.00">: 67 27 10 >>Введите долготу <В027° 00' 00.00">: 86 30 00 Возобновляется команда SETKA_GK. Первая точка: 67 27 50 Неверная точка. ; ошибка: Функция отменена Первая точка: (478597.0 7.48494e+006 0.0) Следующая точка или [оТменить]: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 27' 10.00">: |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Привязку снять забыл.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
(command "_.line" "_none" '(67 27 10) "_none" '(86 30 0) "_none" '(67 27 50) "_none" '(86 30 0))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Я хочу создать линии по географическим координатам - использую команду _'LL При создании линии по команде _'LL - выдается сообщение введите значение широты (с пробелами). Когда я использую твой код , то вместо широты вводится _none, что следует по прядку за командой _'LL. (command "_.line" "_'LL" "_none" '(67 27 10) "_none" '(86 30 0) "_none" '(67 27 50) "_none" '(86 30 0)) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ну, я с Civil не работаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
2. Второй код я сам его писал (см. выше) - он отрабатывает ток первую точку, на второй стоп... Функция _'LL отдельно ее использовать нельзя, она применяется с вызовом основной команды. Основная задача построение примитивов по географическим координатам (Ввод вместо прямоугольных координат (X,Y), - широту и долготу) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Хорошо, почему "стоп"? Что запрашивает Civil? Какие действия выполняются, если построения происходят "вручную"?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Вставка из командной строки: Команда: SETKA_GK _.line Первая точка: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 00' 00.00">: 67 27 10 >>Введите долготу <В027° 00' 00.00">: 86 30 00 Возобновляется команда SETKA_GK. Первая точка: 67 27 50 Неверная точка. ; ошибка: Функция отменена Первая точка: (478597.0 7.48494e+006 0.0) Следующая точка или [оТменить]: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 27' 10.00">: Вторую точку просит ввести самостоятельно, а не по коду. 2. Построение линии без кода - самостоятельно:: Команда: _LINE Первая точка: _'LL Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 27' 10.00">: 67 27 10 >>Введите долготу <В086° 30' 00.00">: 86 30 00 Возобновляется команда ОТРЕЗОК. Первая точка: (478597.0 7.48494e+006 0.0) Следующая точка или [оТменить]: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 27' 10.00">: 67 27 52 >>Введите долготу <В086° 30' 00.00">: 86 30 00 Возобновляется команда ОТРЕЗОК. Следующая точка или [оТменить]: (478607.0 7.48624e+006 0.0) Следующая точка или [оТменить]: И продолжается дальше цикл соединения линии (если нужно дальше строить линии) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
В ответ на запросчто нажимаешь? То же самое и имитируй в коде
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Код:
Команда: SETKA_GK _.line Первая точка: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 00' 00.00">: 67 27 10 >>Введите долготу <В027° 00' 00.00">: 86 30 00 Возобновляется команда SETKA_GK. Первая точка: 67 27 50 Неверная точка. ; ошибка: Функция отменена эти 3 строки он не должен писать Первая точка: (478597.0 7.48494e+006 0.0) Следующая точка или [оТменить]: Текущая единица изменения широты/долготы: градусы; ввод: ГГ° ММ' СС.СС" (с пробелами) >>Введите широту <С067° 27' 10.00">: а должно сюда прописывать 67 27 50 Показываю как я строю линию самостоятельно при вводе в командную строку: _.Line "Enter" _'LL "Enter" 67 27 10 "Enter" 86 30 00 "Enter" 67 27 50 "Enter" 86 30 00 "Enter" Esc Линия построена Первая точка: (478597.0 7.48494e+006 0.0) Вот эти цифры - это программа переводит из географических в прямоугольные координаты. Потомучто Автокад - это прямоугольная система. Есть конечно еще вариант но он долгий: Забивать в код функцию перевода из географических в прямоугольные - не применяя функцию _'LL Но мне все таки охота чтоб вопрос решился через функции заложенные в Автокаде, а именно в Civil"е" Последний раз редактировалось Pavel_GP, 13.10.2011 в 11:22. Причина: дополнил |
|||
![]() |
|
||||
Регистрация: 08.09.2010
Москва
Сообщений: 28
|
Я бы даже сказал что он не должен писать 4 строки, потому как команда SETKA_GK, по идее, возобновляться не должна..... все-таки странная эта опция "_'LL".... проверить негде, Civil'а нет
|
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Попробуй поставить двойные кавычки "" в конце (command "_.Line" "_.'LL" "_None" "67 27 10" "_None" "86 30 00" ... ''"), чтобы команда завершилась, а не запросила очередную точку. Для рисования замкнутого контура из отрезков в конце можно поставить "_Close".
Последний раз редактировалось Li6-D, 14.10.2011 в 20:49. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Код:
Перевел формулу перехода их географических в прямоугольные в код Необходимо построить "точку", опять что-то не строится - формула работает, а вот что-то не так ввожу команду при построении точки. Посмотрите (точку нужно построить по данным X Y). Вывод Y находится в 061 строке X находится в 106 строке Посмотрите плз в самой команде построение точки - я все правильно написал ( я ток учусь лиспу под свое ремесло - извините) П.С. Модераторы прошу Вас создать отдельную тему Лисп - Civil и перенести туда все мои вопросы и тех кто отвечал на них в новую тему. Спс. Последний раз редактировалось Pavel_GP, 14.10.2011 в 15:41. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Я просто сразу в Civil"е" писал.=), в это разделе сам код я не даю на рассмотрение - дело в другом - точка Если нужно код закину сюда в txt |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
Cтрочку ниже можно убрать - при рисовании точки она необязательна. Посмотри еще здесь |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Цитата:
Пысы Будут еще вопросы (далеко не убегайте =)) преобразовал формулы в другой код более понятный для меня =) Код:
Вопрос1. Как построить несколько точек, не используя постоянно многоэтажную формулу для каждой точки? Вопрос2. Как выделить все объекты с помощью команды в лиспе? Спс. Последний раз редактировалось Pavel_GP, 18.10.2011 в 11:17. Причина: добавил вопросы |
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Извините, за тупость обильно приправленную, увы, ленью, но ... как создать пустой список?
Т.е. переменная, типа список, есть, но внутри ничего нет! Другими словами, это как перед входом в супермаркет - нужно взять тележку, но пустую ![]() ![]() |
|||
![]() |
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Цитата:
(cons 0 nil) возвращает (0). Если переменной значение еще не присваивалось, то она и есть уже готовый пустой список. Кроме того, nil в некоторых логических функциях (<, <=, >, >=, /=) ведет себя как минус бесконечность: (> -999999999. nil) возвращает T. Нет проверки того, что объекты в выборке имеют свойство 'Angle - от этого и ошибка. Надо или проверять с помощью vlax-property-available-p или использовать в ssget фильтр для примитивов нужного типа, например, отрезков (см. сообщение выше). Зачем (vl-load-com) включать в цикл? В третей строке раньше правильно было: (while (<= 0 kolvo) А еще правильней вместо while применить repeat. Нет проверки того, что nabor не nil (если пользователь ответил пустым вводом), поэтому возможна ошибка: Команда: (sslength (ssget)) Выберите объекты: ; ошибка: неверный тип аргумента: lselsetp nil Без фильтра: Код:
Последний раз редактировалось Li6-D, 23.10.2011 в 17:37. |
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Во-первых спасибо, за код отвечающий всем правилам "этикета" - почерпнул для себя много полезного!Правда, не понял зачем еще этот предохранитель:
Код:
![]() Во-вторых:"Мы все учились понемногу, Чему-нибудь и как-нибудь..." Ну и (набравшись наглости) в третьих: предлагаю блиц "Что? Где? Когда?" А именно: есть куча 3D solids. Нужно проверить каждый на соответсвие определению прямоугольного параллелепипеда. И те что не прямоугольные, снабдить расширенными данными - мол, уродцы.Буду признателен за любые алгоритмы, ну а за код не совестно и в ноги поклониться! @ Li6-D - спасибо большущее! Для меня это важная новость. Последний раз редактировалось AMATOP, 23.10.2011 в 17:04. |
|||
![]() |
|
||||
"ценный кадр" Регистрация: 02.12.2010
Сообщений: 115
![]() |
Вот еще что-то такое
Код:
Цитата:
; ошибка: неверный тип аргумента: lentityp nil Поэтому и поменял на <. С остальными замечаниями полностью согласен. Последний раз редактировалось Oliver_88, 23.10.2011 в 17:40. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
это не предохранитель, а преобразователь набора в список... обычно является частью библиотечных функций... с их использованием еще все лаконичнее
Код:
Oliver_88, посмотрите на свой код и на мой... Стоит ли овчинка выделки? Не все то золото, что пропиарили... единственное преимущество вашего - реакция на Esc... с помощью библиотечных функций это делается в две строки ![]() |
|||
![]() |
|
||||
Регистрация: 02.10.2011
Сообщений: 10
|
Я имел в виду:
Код:
__________________
Все люди думают по-разному! А тупят одинаково :rolleyes: |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А ты проверь
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
entlast, кажется...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Если создание объекта (черт, два литра пива дают о себе знать...) выполняется через vla-, то результат создания объекта уже и есть указатель на созданный объект. Я не очень понимаю - в чем, собственно, трудность-то?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
пиво в малых дозах полезно в любых количествах
![]() дело то вот в чем: я хочу выбрать мин и мах точки у замкнутого контура. знаю как это сделать через VLA (vla-GetBoundingBox obj 'minpoint 'maxpoint). поэтому мне нужно выбрать объект через VLA. он создается копированием. поэтому хочу взять этот OBJ так. (типо как entlast в лиспе). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Попробуй так:
(setq res (vla-copy .... А потом дампить res. Проверить сейчас уже не могу, спать сильно хочу. Если что - днем попробую проверить...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Ну так и возьми тупо
Код:
__________________
cadtools |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Вариант 1:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
наверное только я тут вопросы задаю
![]() проблемка сейчас возникла такая: схраняю в файл dxf некоторое количество примитивов. выбираю рамкой все, а потом на что ненужное снимаю выделение. Код:
но как то неправильно тут, потому прога не ждет пока я закончу с выделениями и нажму enter или правую кнопку, а сразу переходит на шаг вперед, в результате неправильное выполнение команды. подскажите, как написать чтобы программа ожидала окончания работ по выделению или снятия выделения с примитивов. спасибо! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
(setq ss (ssget))
(command "_.-saveas" "dxf" "_objects" ss "" "version" ver "16" filename) Наверное, так...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Подскажите пожалуйста, можно ли из такого бреда:
Цитата:
Опыта пока нет, мозг пасует...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Как вариант - преобразовать строку в список по разделите span и вытащить второй элемент.
Пишу с телефона, так что кода не будет ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Как html получили? Быть может применить методы "долиспового" распознавания, ведь совсем не факт, что форматирование "там" никогда не изменится.
Там </td> виднеется - я б через таблицы пошел.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Судя по стилю html-кода, он сформирован автоматически чем-нибудь типа MS Word. Или FrontPage. Так что "долисповое" распознавание вряд ли сработает
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Дима_, да в Word'e просто наколотили текст, а потом страницу сохранили как html... Тоже вариант (с)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если так - то для чего это сделано (может - чтоб лиспом можно было вытащить - бывают и такие "деятели" встречаются). Разбирать из-за вылавливания пары чисел весь синтаксис HTML автолиспом я бы точно не стал (а не разбирая ВЕСЬ гарантий никаких не будет). Вариантов масса - обратится к первоисточнику (если это действительно Word), WebBrowser.Document.All... выбираем нужную табличку (пусть даже многократновложенную)... нужную ячейку...OuterText(или как он там - суть понятна) - короче вариантов масса.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Эту таблицу выкидывает программа... для образца мне дали файлик на сотню+ точек, на каждую точку(строку таблицы) 6 значений (полей) мне бы разобраться как из строки вытащить искомый ткст, а там дальше разберусь...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 15.11.2011 в 09:16. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Твоя ведомость "на ура" открывается excel'ем - а уж как из него вытщить данные страниц 500 на форуме.
p.s. Offtop: По просьбе из лички Код:
Код:
![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 15.11.2011 в 11:46. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>Michael!
Воспользоваться поиском по сочетанию "буфер обмена"
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
"Прямого" метода доступа к буферу обмена в автолиспе нет, есть команды для вставки в рисунок содержимого буфера (не обязательно текста) - то есть можно попробывать что-то вроде:
Код:
Код:
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
то VVA - Да сам я этот Net (в разрезе автокада) недолюбливаю, но иногда "приходиться", ежели у Вас есть набор ссылок на "интересные" COM'ы (которые и так предустановленны "на каждом" компьютере) - сбростье мне (можно сюда), а то иной раз не хочется ни к чему "дополнительному" привязываться, да и на лиспе "городить" типа кода из предыдущего поста.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 15.11.2011
Сообщений: 130
|
Основываясь на коде от Кулик Алексей aka kpblc, написал такую вещь. вроде работает. у меня есть вопрос - если я делаю obj локальной переменной, и строку, выделенную синим, пишу без условного оператора if, то команда работает только один раз (как я понял - (vla-get-ActiveSelectionSet actdoc) не может быть выполнено второй раз, после первого выполнения команды). а в чем проблема - я не понимаю...
а вообще - это одно из моих первых творений, и явно далеко не совершенное. так что критика могла бы мне помочь в дальнейшем))) еще - можно ли в фильтр выбора поставить effectivename, и как это сделать? Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Вроде на болоте было решение, которое потом здесь публиковалось... VVA, кажется, показывал.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
theswamp.org. Для просмотра кодов на этом ресурсе требуется регистрация,
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
Но можно укоротить путь выбора используя такую маску фильтра: (ssget (list (cons 0 "insert")(cons 2 "`U*,MyDynamicBlockName")) обрати внимание в начале стоит наклонная кавычка, а не прямая, U* означает анонимный блок Теперь в наборе только твои блоки "MyDynamicBlockName" плюс анонимные, и остается только по ходу проверить соответствует ли свойство effectivename имени твоего блока |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Только, наверное, все же
(ssget (list (cons 0 "insert")(cons 2 "`*U*,MyDynamicBlockName")) ??
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Пример вызова Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Доброго времени суток! Дабы не захламлять форум лишней темой, спрошу тут.
Необходимо создать несколько списков: Код:
Последний раз редактировалось La Persona, 23.12.2011 в 13:21. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Поверьте на слово подход Вы пытаетесь "неверный" прикрутить - не надо плодить однотипные переменные - складывайте все "одинаковое" в список - причем если обрабатывать все равно все - то в простой, если выборочно - то в ассоциативный, лучше по уникальному ключу.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Цитата:
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А в каком месте проверяешь? Это ж у тебя локальные переменные!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
А должен? О каком порядке идет речь?
Цитата:
Разве (setq num_cu (get_tile "kNum_cu") не равнозначно (action_tile "kNum_cu" "(setq num_cu $value)")?? |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
это вообще моветон в простых диалогах есть только два элемента, достойные action_tile - это кнопки accept и cancel (которой у вас нет, а она нужна, хотя бы потому, что пользователь должен иметь возможность отменить команду) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Offtop: Что значит дурная привычка использовать callback-функцию целиком на диалог!
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
La Persona, причем тут нет, вы должны понять что вообще происходит, тогда код сам напишется
по порядку грузим диалог, из файла назначаем кнопкам их действия, запускаем диалог, ждем выхода, отлавливая результат, выгружаем диалог второй пункт подробнее: чтоб кнопка accept отловила значение полей ввода, ей нужно задать действие - отловить значения таких-то полей. Если перевести вышесказанное с русского на лисп, то можно увидеть, что и то и то нужно ![]() |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Цитата:
В итоге родилось это: Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем привет! Ребят, есть такая задача. Опишу приведённое вложение в письме. Нужно соединить полилинии (geo_base и geo_extend), так чтобы можно было выбирать направление соединения, иными словами щёлкнули по базовой геометрии потом по той линии которую хотим удлинить и ещё раз либо справа от "мнимой" точки пересечения либо слева и вся геометрия повторилась по тем же координатам (синяя или зелёная линия). Вроде бы казалось ничего сложного, но есть момент который я не могу понять как решить. Вся засада в том, что заранее неизвестно в какой последовательности идут номера точек объектов, а ведь они могут идти и в обратном направлении, а это тогда получится совсем другая геометрия.
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Лично я ничего не понял - какие линии с чем соединять - попробуйте по шагам расписать - как должен получается результат (там может и сами ответ найдете).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
2. Принудительно преобразовать все полилинии к одному виду (ВСЕ по часовой или ВСЕ ПРОТИВ ЧАСОВОЙ). см. здесь или здесь
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
пробовал, получается не так комфортно - нельзя задать угол и расстояние с клавиатуры, кроме того не попользуешься полярной привязкой и т.д. в идеале было бы чтобы механизм задания угла и расстояния совпадал с механизмом рисования отрезка, т.е. чтоб можно было как задать угол, длину(или что-то одно) с клавиатуры, так и "графически" мышью. надеюсь объяснил более или менее поянтно
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Код:
Указали мышкой и получили результат Код:
Код:
Вводим с клавиатуры расстояние и смещение @300<0 и получаем результат: Код:
Код:
Вычисляем расстояние: Код:
"надеюсь объяснил более или менее поянтно" |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
(vla-deletecolumns vla_представление_таблицы номер_столбца количество ) - а вобще лучше изучить как пользоваться справкой.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
ShaggyDoc
Цитата:
И чтобы между окошками ввода расстояния и угла можно было бы переключаться табом. Кроме того в варианте с getpoint не воспользуешься привязками отслеживания. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Подскажите, пожалуйста, есть ли где наработки по программной замене определения ДИНблока (не вставки, а именно определения) другим определением. Имена блоков одинаковые. Они определены в разных файлах. Такое делает дизайнцентр (Ctrl+2), но хотелось бы иметь возможность программно все делать. Что упрощает алгоритм - библиотечный файл с образцовым вариантом блока известен (как и его местоположение).
А замена вставок блоков вроде рассматривалась на форуме. Надеюсь, найду. Последний раз редактировалось Frigate, 06.02.2012 в 00:18. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Дима_,
можно и на "ты" ))) так я именно динблоки "старого образца" хочу менять программно на динблоки "нового". Это нужно, когда хочешь использовать старые наработки, но динблоки уже "усовершенствованы". Каждый раз переопределять через Дизайн-центр - это не выход. |
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
Добрый вечер форумчане!!! может кто подскажет начинающему изучать лисп программирование. задался вопросом. можно-ли написать лисп на следующий набор действий, которые я выполняю при оформлении документации. я пользуюсь подшивками и при создании листов в подшивки произвожу множество манипуляций. хотелось бы облегчить себе жизнь. черчу в модели. листы компаную на вкладке лист. причем каждый лист я делаю отдельным файлом с ВЭ на файл, в котором находится чертеж на в пространстве модели. так вот хотелось бы, запустив всего одну команду получить автоматически следующий набор действий:
- выделить рамкой в модели пространство, которое я хотел бы разместить на листе в определенном масштабе - далее выбрать шаблон для создания листа (открывается окно выбора шаблона) на который переносится ВЭ с писанной с определенным масштабом пространство листа - далее присоединить этот файл к подшивке и сохранить его в нужном месте. к сожалению код я не писал еще (проект только в мечтах). хотелось бы посоветоваться возможно ли такое осуществить при помощи лиспа и много ли потребуется времени для его написания начинающему? за советы заранее благодарю |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Здравия всем!
![]() У меня следующий вопрос, где можно взять, узнать, вытащить, координаты последних точек??? Всю справку перелопатил... Например когда делаешь какой нибудь выбор объекта с помощью команды select, как после ее окончания достать координату точки того места куда ты тыкнул курсором? Конечная цель получить переменную с координатами. Единственный известный мне способ это с помощью стрелочек... Но где это храниться? ((( Заранее всех БлагоДарю. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
(getvar "lastpoint") катит?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 07.02.2012
Сообщений: 7
|
Здравствуйте.
захотел написать программу отрисовки вертикальных линий красного цвета, по завершению которой, чтобы цвет возвращался на тот который был до начала команды, но не получилось. рисует одну красную а все остальные предыдущего. Прошу помочь разобратся. |
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
Цитата:
по масштабам: необходимо, чтобы выделенная область появлялась в созданном ВЭ с масштабом, которыы мы задаем в шаблоне лист с заданными параметрами печати. из примитивов если только рамка с основной надписью (которые уже храняться в шаблоне) |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Благодарю ![]() ![]() Теперь бы любопытство свое успокоить, было бы вообще шикарно ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
aso3, оно?
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Масштабы целочисленные? Проверка на превышения размеров ВЭ при заданном масштабе на выбранном шаблоне листа нужна? Примитивы с листа шаблона клонировать все или выборочно? На каком слое создавать ВЭ?
Последний раз редактировалось ciril, 10.02.2012 в 14:03. |
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
Цитата:
проверку в принципе можно и не осуществлять, поскольку бывает, что и на А1 не помещаются чертежи примитывы наверное все необходимы (в шаблоне обычно храню только рамку с основной надписью) ВЭ в defpoints |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
|
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
Цитата:
пишет: ; ошибка: Ошибка Automation. Дублирующийся ключ |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Эта ошибка из-за того, что в чертеже уже существует имя лист с таким же именем, как и у выбранного листа шаблона.
|
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
Цитата:
возникла другая проблема: лисп к одному файлу с шаблоном относится нормально (например acad.dwt), а к другому нет (созданному мною A3.dwt) при вводе имени шаблона пишет: ; ошибка: Ошибка Automation. Отсутствует описание. и еще: 1. лисп производит корректировку масштаба ВЭ в зависимости от формата листа. ввожу к примеру 0.01 или 0.1 и т.д. происходит корректриовка к масштабу 1:20 на лист А4 (причем не совсем точно. отрезок должен в масштабе быть длиной 50 мм, а получается 49.0808) можно убрать корректировку масштаба? лучше потом вручную править формат листа. 2. можно-ли чтобы по шаблону создавалась не вкладка листа в исходном файле, а отдельный файл с единственным листом с ВЭ на выделенную облась в исходном файле? |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
|
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
я думаю ссылкой в виде ВЭ. я в диспетчере подшивок это делаю простым перетаскиванием файла с чертежом в модели на лист отдельного файла. получается как внешняя ссылка
|
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Был алгоритмический косяк с формирование шаблона запроса, поправил.
Код:
|
|||
![]() |
|
||||
Регистрация: 26.04.2010
Сообщений: 15
|
|
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Здравствуйте! Помогите, пожалуйста, решить небольшую проблему: есть список poln_spisok, пытаюсь его инвертировать и вывести в текстовый файл. На строке (setq spisok_pr (reverse poln_spisok)) автокад спотыкается и выдает сообщение ошибка: неверный тип аргумента: consp nil. В чем может быть загвоздка?
Код:
Без reverse та же ошибка выдается... Код:
[0] "4115 ÏÊ 41+15 3859 1671" [1] "4064 ÏÊ 40+64 3810 1687" [2] "3999 ÏÊ 39+99 3748 1707" [3] "3928 ÏÊ 39+28 3680 1729" [4] "3836 ÏÊ 38+36 3593 1756" [5] "3752 ÏÊ 37+52 3513 1782" [6] "3686 ÏÊ 36+86 3450 1802" [7] "3613 ÏÊ 36+13 3380 1825" [8] "3543 ÏÊ 35+43 3314 1846" [9] "3472 ÏÊ 34+72 3247 1867" [10] "3390 ÏÊ 33+90 3168 1892" [11] "3327 ÏÊ 33+27 3108 1912" [12] "3260 ÏÊ 32+60 3044 1932" [13] "3199 ÏÊ 31+99 2986 1951" [14] "3147 ÏÊ 31+47 2936 1967" [15] "3087 ÏÊ 30+87 2880 1985" [16] "3018 ÏÊ 30+18 2814 2006" [17] "2955 ÏÊ 29+55 2754 2025" [18] "2886 ÏÊ 28+86 2689 2046" [19] "2804 ÏÊ 28+04 2610 2071" [20] "2714 ÏÊ 27+14 2539 2063" [21] "2643 ÏÊ 26+43 2506 2000" [22] "2582 ÏÊ 25+82 2478 1946" [23] "2528 ÏÊ 25+28 2453 1898" [24] "2436 ÏÊ 24+36 2411 1817" [25] "2361 ÏÊ 23+61 2376 1749" [26] "2306 ÏÊ 23+06 2351 1701" [27] "2218 ÏÊ 22+18 2311 1623" [28] "2158 ÏÊ 21+58 2283 1569" [29] "2080 ÏÊ 20+80 2247 1500" [30] "2023 ÏÊ 20+23 2221 1450" [31] "1944 ÏÊ 19+44 2184 1379" [32] "1858 ÏÊ 18+58 2145 1303" [33] "1791 ÏÊ 17+91 2114 1244" [34] "1702 ÏÊ 17+02 2073 1165" [35] "1609 ÏÊ 16+09 2030 1083" [36] "1537 ÏÊ 15+37 1997 1018" [37] "1452 ÏÊ 14+52 1958 943" [38] "1358 ÏÊ 13+58 1895 912" [39] "1281 ÏÊ 12+81 1824 942" [40] "1220 ÏÊ 12+20 1768 965" [41] "1142 ÏÊ 11+42 1696 994" [42] "1053 ÏÊ 10+53 1613 1029" [43] "990 ÏÊ 09+90 1555 1053" [44] "935 ÏÊ 09+35 1504 1074" [45] "843 ÏÊ 08+43 1419 1109" [46] "763 ÏÊ 07+63 1346 1139" [47] "672 ÏÊ 06+72 1261 1174" [48] "593 ÏÊ 05+93 1188 1204" [49] "520 ÏÊ 05+20 1121 1231" [50] "426 ÏÊ 04+26 1033 1268" [51] "356 ÏÊ 03+56 969 1294" [52] "286 ÏÊ 02+86 904 1321" [53] "194 ÏÊ 01+94 819 1356" [54] "138 ÏÊ 01+38 768 1377" [55] "56 ÏÊ 00+56 692 1408" Последний раз редактировалось La Persona, 16.02.2012 в 12:43. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Co списком poln_spisok проблем нет, создается и заполняется в цикле нормально. Содержимое списка я взял из журнала трассировки. Непонятно, почему выходит ошибка, когда пытаюсь вывести содержимое списка в файл...
Насколько я понял, автокад переменную poln_spisok не считает списком. Хотя во время отладки poln_spisok отображается именно как список. Что-то я вообще запутался на ровном месте... Код:
Последний раз редактировалось La Persona, 16.02.2012 в 14:49. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Хм... Тогда почему мой список не желает обрабатываться?
(setq spisok_pr (reverse poln_spisok)) возвращает nil. Но ведь содержимое списка poln_spisok не пустое.. Вопрос по-прежнему открыт. Может есть ошибка в теле цикла, во время заполнения списка? Последний раз редактировалось La Persona, 17.02.2012 в 14:00. |
|||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Проблема, как я понял, не в этом куске кода. Ошибка возникает здесь: (setq spisok_pr (reverse poln_spisok)) возвращает nil. poln_spisok как-то криво создан наверно. Но причину ошибки так и не могу отловить. Где-то в цикле надо искать...
|
|||
![]() |
|
||||
У меня разбираться желание напрочь пропало, когда я увидел кучу этих setq и переменных
![]() |
||||
![]() |
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
Может так лучше выглядит
![]() Код:
Последний раз редактировалось La Persona, 17.02.2012 в 15:23. |
|||
![]() |
|
||||
Логическая ошибка условия в цикле while.
(<= use_l base_l) - как бы все правильно, текущая длина меньше всей длины, но потом в цикле (setq use_l (+ use_l (+ (* sl_ch (- k2 k1)) k1))) - длину увеличиваем, и она становится больше длины полилинии. Выражение (vlax-curve-getPointAtDist pln use_l) выдает nil => ошибка. А надо сделать типа такого: Код:
|
||||
![]() |
|
||||
Регистрация: 25.10.2010
Сообщений: 27
|
Обращаюсь к Вам со своим вопросом.
Создал я блок динамический, назвал его ZD_001_001. Сам dwg файл назвал ZD_01_01. Вставляю вот так вот, предварительно прописав путь: Код:
[IMG]http://s42.***********/i095/1202/03/f2c0a3d3e499.jpg[/IMG] Вопрос такой. Как мне сделать(мб как-то по другому путь прописать) чтобы вставлялся динамический блок? ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
После того как ты вставишь файл как блок у тебя в документе появяться описания всех включенных в этот файл блоков, вот их потом и вставляй, вытянуть отдельное описание блока из файла тоже конечно можно, но здесь потребуется код гораздо более продвинутого уровня нежели у тебя (можешь обратиться в поиск по вопросу "работа с неактивным документом").
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
Это тоже можно сделать! Открываешь файл и запускаешь редактирование блоков. У тебя появляется окно, где в столбик написаны все блоки и на самом верху строка - этот файл. При выборе этой строки, можно из всего файла сделать динамический блок. Единственное неудобство - для тестирования необходимо вставлять этот файл в другой... Удачи! ![]()
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Регистрация: 25.10.2010
Сообщений: 27
|
Я ищу способ доступиться к динамическому блоку, который у меня уже создан. Прочитал в книге "САПР на базе AutoCAD", что надо бы создать имитацию вставки, потом прервать ее - блок оказывается внедрен со всеми сложениями, в том числе и с нужным мне, а потом можно и доступиться до него. Но вот что-то у меня реализация хромает
![]() Код:
|
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
Возникла идея такого вот лиспа, думаю, многим мог бы сгодиться:
а. Вызывается команда (типа команды печати); б. В модели рамкой выбирается область печати; в. По заданному шаблону создаётся новый Лист с ВЭ в которую вписывается выбранная ОП; г. Рамка выбранной ОП остаётся в ПМ, ложась на непечатный слой. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Здравствуйте.
Подскажите плз создание правильно лисп кода, а именно необходимо чтоб в коде вызывался слой "0", потом я пишу команды построения для этого слоя. Далее вызывался другой слой (допустим "поп"), и прописываю другие команды для уже нового слоя. спс. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Вариант 1 Код:
Использовать функцию entmake и (или) entmakex, тогда и слой не надо будет переключать, можно сразу рисовать на нужном слое. Например, рисуем текст на слое "1" и неважно какой сейчас слой установлен и если слоя "1" он будет автоматически создан Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
__________________
cadtools |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Подскажите плз.
Пример: dcl :edit_box {label="Введите шифр:"; key="shps"; edit_width=12; edit_limit=24;} lsp (action_tile "shps" "(setq shp (atof $value))") ... (setq x_p (+ (+ x0 width) 12.)) (setq y_p (+ (+ y0 height) 12.)) (setq pt (list x_p y_p)) (setq ang 0) (setq h 3.4) (vl-cmdf "_.text" "_j" "_m" pt h ang shp) Вопрос: Когда я ввожу по диалоговому окну шифр (пример: 10-11-25), то текст выводится на чертеже 10.00000000. Само значение shp получается после обработки dcl 10.00000, а не 10-11-25. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А почему используется atof?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
После Вашей замены, выдается сообщение:
Ошибка приложения: В команду послан неверный тип и построения текста нет. Подскажите в чем дело? При моей вставке замены - вычерчивание текста происходит. Я понимаю, что Вы хотите правильно прописать действие. Я просто подобрал команду. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
В ващем диалоге должен быть элемент ok_cancel, тогда при нажатии Ок будет считываться значение поля shps А при нажатии Отмена можно просто закрывать диалог и выходить из программы
посмотрте еще раз на код, я добавил done_dialog... просто писал не глядя |
|||
![]() |
|
||||
Есть жилая застройка, отрисованная в автокаде. Пятна застройки были отрисованы полилиниями. Сейчас все полилинии расчленены. Мне нужно снова отрезки объёдинить в полилинии.
Руками выделяем отрезок, преобразовываем в полилинию, добавляем отрезки, объединяем в полилинию. Получился вот такой код. Код:
![]() Во-первых каждый раз выделяю всё. Во-вторых перебираю отрезки, которые уже попали в какую-либо полилинию (например в доме минимум четыре отрезка, после объёдинения в полилинию три остальных уже перебирать не надо) Последний раз редактировалось baaba, 06.03.2012 в 15:27. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Из выступлений Евгения Елпанова на форумах Autodesk:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Потому что в выпадающем списке возвращается не значение, а индекс выбранного элемента, насколько я помню.
И, кстати, построение текста будет выполняться некорректно, если у текущего текстового стиля установлена фиксированная высота.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Код:
pt, h, ang, - мне известны p - нет, тут должно быть значение текста. Поэтому мне и не понятно, что мне сюда вставить. Я перебрал все значения по вашему коду, выдает ошибку не правильный тип. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Здравствуйте Ув.
Подскажите , как объединить в Lisp коде, если несколько окон в DCL-коде и setq pt будет иметь другие координаты Пример (составитель fixo) Код:
Код:
Спс. сам разобрался =) Последний раз редактировалось Pavel_GP, 15.03.2012 в 11:49. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Не только указывать
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
У меня получается код примерно такого вида:
Код:
Может быть просто вынести переменную "a" в глобальные? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Не советую использовать глобальные переменные, особенно с такими "информативными" названиями. Ее переопределить - как нефиг делать.
Любой даже самый простой код можно сделать запутанным, а самый сложный - достаточно легко читаемым. Ну, например: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я никак не могу понять почему аболютному большинству программирующих проще "насовать" абсолютно ненужных переменных - вот зачем в этом примере d??? Надо прибавить 4 - ну так что может быть проще - возьми и прибавь 4 - (defun c:cfun (a) (+ a 4)) - ВСЕ. Суть не в конкретном примере - а в "дурной традиции" что-ли.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Дима_, лично я вполне допускаю мысль, что приведен намеренно упрощенный пример. Возможно, даже "переупрощенный"
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
http://pastebin.com/GvcZWHmK Там три функции. Одна рисует многострочный текст, другая расставляет текст по списку точек горизонтально, третья - расставляет строки вертикально (я делаю небольшой лиспик для вставки спецификаций из csv, да велосипед, но мне нужно что бы велик был удобен мне). Из первой функции "насквозь", в числе прочих, идёт переменная "th" высота текста. Я думаю в данном случае имеет смысл оформлять её как [bold]внешнюю переменную[/bold], обнуляя её в конце работы программы, или делать "матрёшку" - функция в функции. Но матрёшка мне не очень нравится. Может быть есть какой-то третий путь, я что то упускаю? Теперь у меня ещё одна проблема, есть лиспик: http://elpanov.com/index.php?id=42#02 Он у меня прекрасно работает в Автокад 2004 под Windows:
И возвращает ошибку в другой системе: Код:
Что это может быть? Может нехватает каких то библиотек? И ещё: ищу примерчик DCL диалога, для просмотра названий листов в файле xls, с последующим выбором нужного листа, для подстановки в eea-get_xl_sheet, наверняка есть годный пример. |
||||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
может не работать с твоей версией Автокада, Widows здесь не причем, по-крайней мере Windows 7 кушает его охотно вне Автокада |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Ошибки могут быть у клиентов провайдера. В конкретном случае с функцией eea-get_xl_sheet и AutoCAD не при чем. Евгений совершенно правильно не использует штатные средства AutoCAD, а работает через ADO. Но его функцию надо с умом применять. В этом кусочке кода Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Может есть ещё какие-то наработки по вытягиванию данных напрямую из *.xls (желательно независимо от наличия в системе запущенного екселя)?
В принципе есть например такой парсер екселевских файлов: http://www.wagner.pp.ru/~vitus/software/catdoc/ Вот такое ещё нашёл: http://web2.airmail.net/terrycad/LISP/GetExcel.lsp, но ещё не испробовал. Последний раз редактировалось baaba, 17.03.2012 в 21:01. |
||||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
|
|||
![]() |
|
||||
Имеется ввиду вот это?
http://www.theswamp.org/index.php?to...3888#msg463888 Не подходит, так как запускает в excel файл, в то время как от и так открыт. Есть ещё варианты? |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Здесь посмотри
Data reading from Microsoft Excel not using Excel. Attribute Import/Export with Excel Excel read and write LISP functions
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
(defun test (x) (strcat (if (< x 10) "0" "") (rtos x)))
з.ы. с учетом отрицательных (defun test (x) (strcat (if (< x 0) "-" "") (if (< (abs x) 10) "0" "") (rtos (abs x))))
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 20.03.2012 в 16:34. |
|||
![]() |
|
||||
Можно точный линк на код?
Вот это? http://www.theswamp.org/index.php?to...3888#msg463888 У меня результат такой: Код:
Код:
А ещё непонятно для чего служат файлы *.cs? Вот например вот такой архивчик: http://www.theswamp.org/index.php?ac...0;attach=14442 Код:
Последний раз редактировалось baaba, 21.03.2012 в 19:36. |
||||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Здравствуйте.
См. пример вложение. Подскажите функцию построение по примеру: Есть вертикальная линия. Необходимо построить на ней поперечные линии и подписи их. Подписи это координата по У (по возрастанию). Начало координаты м.б. любым не обязательно с "0" и чередование не обязательно через "1". спс |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А как задаются точки и значения текстов?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Имелось в виду - запрашивается у пользователя или вычисляется. Разница незначительная, конечно, но все равно
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
известны координаты начало и конца линии, как таковой линии может не быть и вообще. Линия показывает границу вычерчивания поперечников |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
~'o'~ Последний раз редактировалось Олег (jr.), 27.03.2012 в 00:29. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
(fix rrr) возвращает 68, а не 69 потому что так и должно быть, потому что rrr равно не 69.0 Код:
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
ИМХО, это больше прикол представления чисел с плавающей точкой.
__________________
cadtools |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
По округлению в библиотеке готовых функций было решение.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 08.03.2010
Сообщений: 27
|
Посоветуйте какие команды мне нужны для написания следующего лиспа. Буду пытаться разобраться.
Необходимо выбранные объекты (заштрихованные окружности) расставить по вершинам полилиний. При этом полилиния может быть не одна, а несколько. Спасибо. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 08.03.2010
Сообщений: 27
|
Цитата:
ДОБАВЛЕНО: Нашел примеры, в чем-то сам разобрался. Как теперь это можно ускорить? Если выбирать одну полилинию с двумя вершинами все быстро, но если вершин 100, то процесс виден невооруженным глазом. Код:
Последний раз редактировалось InFlames, 15.04.2012 в 01:38. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
Есть блок атрибутам которого присвоены определенные значения. Хочется написать лисп, который на основании этих значений вставлял бы в определенное место листа другие блоки. Подскажите пожалуйста в каком направлении копать, какие примеры глянуть и т.п.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Получить указатели на атрибуты, прочитать значения атрибутов, обработать...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Никита Ремизов,
совет - ищи тему по своему вопросу: забей в поиске присвоить значение атрибуту блока и ищи, а вообще читай справку - когда научишься в ней ориентироваться, то большинство вопросов сами уйдут (тока вот она на английском) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Никита Ремизов, http://www.google.ru/cse?cx=partner-...tes&gsc.page=1
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ПРосто в поиске гугла или яндекса, да даже этого сайта, вбей свой вопрос "извлечь значения атрибута из блока" и читай, изучай
![]() Offtop: обалдеть, когда я начинал изучать ЛИСП, то скачал много разных учебников, перерыл этот сайт и другие схожие... что за лень у человека? По поводу справки - есть в автокаде главное меню -> Справка -> Дополнительные ресурсы -> Справка для разработчиков. ВОт ееродимую и изучай, ЛИСП, потом объектную модель. Конкретно для тебя - объект BlockRef (т.е. вставка блока). Там прописаны возможные методы и свойства этого объекта. Один из методов - getAttributes. Но прописано для VBA. В лиспе ты добавляешь vla- к таким методам. И будет у тебя vla-getAttributes. А аргументы этой функции уже сам найдешь при поиске. Второй момент - тебе нужно, чтобы вставлялся блок с именем, соответствующим значению атрибута. Здесь возможны разные варианты вставки блока. Так же ищи в поиске "вставить блок". Также советую эту тему с первых страниц читать, не обязательно всю, но первые страниц 10-20 тебе будут полезны. |
|||
![]() |
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
Гораздо легче было бы изучать имея перед собой кусок кода, выполняющий конкретно эти действия, а в информации, которую нахожу через гугл черт ногу сломит. А изучать весь автолиса ради такой элементарной узкой задачки не очень хочется, но похоже придется(
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Никита Ремизов, в поиске по vla-getattributes примеров полно. Всяких и разных. Я ж ссылку давал!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
Кулик Алексей aka kpblc, так я ведь и не говорю, что там недостаточно примеров, просто вы на секундочку представьте, как человеку не владеющему лиспом в них быстро разобраться (когда там vla-getattributes где-нибудь в середине находится и бог его знает, что происходило до и происходит после). В любом случае спасибо всем за помощь
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Последний раз: http://forum.dwg.ru/showthread.php?t=22653 + http://forum.dwg.ru/showthread.php?t=54116
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем привет! Есть ли способ процедурно взорвать объекты MagiCAD с сохранением оригинала на лиспе?
Есть комманда "_magiexplode", но не нравится, что каждый раз выскакивает модальное окно с ворнингом, объекты будут удаленны и т.д, а потом просит выбрать объекты. Заранее выбрать объекты, а потом использовать комманду тоже не получается. Есть ли способы решения какие-то? |
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Доброго всем времени суток!
Господа, вопрос, пожалуй, дурацкий, но чайникам можно и такое. Есть у меня блок, который я посредством автолиспа explode-ом разбиваю на линии и пытаюсь найти его геометрический центр. При разбитии получаю вариант с безопасным массивом, который преобразую в список сылок на объекты. Потом мне надо из эотого списка выделить сключительно линии, проигнорировав атрибуты и тексты. То есть все выглядит просто - берем каждый элемент списка и проверяем его на причастность к линиям. Но найти функцию такую в Axtive-X не могу. Текст, написанный на лиспе - длинный и пугающий, приходится применять функции преобразования. (setq temp (vla-explode (vlax-ename->vla-object (entlast)))) (setq temp_list (vlax-safearray->list (vlax-variant-value temp))) (setq points_list nil) (foreach s temp_list (if (= (cdr(assoc 0 (entget (vlax-vla-object->ename s)))) "LINE")) (progn (setq p1 (cdr(assoc 10 (entget (vlax-vla-object->ename s))))) (setq p2 )cdr(assoc 12 (entget (vlax-vla-object->ename s)))) (setq point_list (list point_list p1 p2)))))) Есть ли vla-функции, которые идеентичны " (= (assoc 0 (entget (vlax-vla-object->ename s))) (0. "LINE"))" т.е. позволяют вытащить тип т вла-объекта? Последний раз редактировалось Aminka, 26.09.2012 в 17:11. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
(= (strcase (vla-get-objectname s)) "ACDBLINE")
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
+ к тому если вдруг окажется что нужны все же не только линии, а какая-либо группа объектов, то, как вариант, использовать (vlax-property-available-p ...)
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 29.09.2012
Сообщений: 3
|
Доброго всем дня (ночи)!
Прошу помощи в разъяснении странной ситуации, которая не дает мне спать уже вторую неделю. В своих «лиспах» я использую обработчик ошибок: Код:
Может, кто встречался с подобной ситуацией? Сейчас пытаюсь заменить функцию *error* на vl-catch-all-error-message (может это поможет), переварил кучу информации, но не могу сообразить, как ее сделать одинаковой для всех моих лиспов. Например, свою функцию *error*, я тупо копирую из одной программы в другую, мне достаточно только, чтобы восстановились перечисленные выше системные переменные при нажатии клавиши “Esc”. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: за исключением пятницы 13-го?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Serg57, Используй *error* как локальную функцию, тогда отпадет необходимость восстанавливать старый обработчик ошибок
http://autolisp.ru/2009/09/13/error-catch/ http://www.lee-mac.com/errorhandling.html
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А что собственно не работает?
|
|||
![]() |
|
||||
Регистрация: 29.09.2012
Сообщений: 3
|
VVA спасибо, в понедельник попробую на работе, так как дома у меня АМД (еще раз простите, что не в тему) и функция *error* работает и в таком виде, как я прислал.
gomer Ситуация, например, такая: я черчу белыми линиями (основные линии) на черном экране, линии разрезов красные линии (тонкие). На линии разрезов написал программку, которая перед простановкой разреза переключает цвет на красный и устанавливает определенные привязки, а после выполнения команды восстанавливает исходные привязки и цвет.[/FONT] [FONT=Times New Roman]Так вот, если в момент запроса точки нажать кдавишу «Esc», то привязки и цвет не восстанавливаются (это на рабочем компьютере), а на домашнем все нормально *ERROR* срабатывает. Последний раз редактировалось Serg57, 29.09.2012 в 23:42. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
у меня к сожалению амд, а на работе автокада нет, причины глюка могут быть самые разные, но все ошибки элементарно проверяются с помощью alert, если уж vlide не используется для отладки
Код:
Последний раз редактировалось gomer, 30.09.2012 в 02:57. |
|||
![]() |
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
![]() |
Есть код ЛИСП, написанный Кулик Алексей aka kpblc. Создания вспомогательных линий в отдельном слое. Помогите разобраться, как работает.
Возможно в теме и есть подобные примеры, но 100 стр форума - это очень много. С книгами Полещука знаком. Читаю. Описание всех функций все нашел, но как они все вместе работают, я не понял. Например: не понял, как условием функции IF может быть отрицание NOT. А функция "vl-catch-all-error-p" возвращает T или NILL. (if (not (vl-catch-all-error-p... - это получается что: (если (не (истина/лож)... Не понятно. Хотелось бы построчный комментарий. Зачем тут Lambda? Код:
Код:
Последний раз редактировалось Alexg-12, 04.10.2012 в 14:47. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
if имеет 3 (или 2) аргумента - условие, действие если да, [действие если нет], соответственно если действие_ДА должно выполняться при не "выполнении" условия, его "оборачивают" в (not....). В автолиспе нет как таковых отдельных булевых типов, вместо них используються в качестве false - пустой список - это "синонимы" (), '(), nil или любой не определенный символ, а в качестве true - используется любое другое значение.
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
To Gomer вышеприведенный пример будет будет работать только с "чистыми" функциями (которые - не буду скрывать мне импонируют гораздо больше), но в кодах Алексея (не в коем случае не в обиду) всегда во главе стоит "шаблонность" используемого кода, то есть как у Вас - безусловно "красивей", по крайней мере с моей точки зрения, но КРЫС'овский вариант, более "безпроблемный", особенно если "совать" его в любую императивную конструкцию - я, например, их всячески избегаю - за что меня переодически здесь ругают, а Крыс их "не боится".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
![]() |
Очень сложная для новичка тема - функция обработки ошибок. Как она работает в данном примере? Мало хороших разобранных примеров по этой теме в интернете да и у Полещука.
Почему тут в 16 строке стоит "Layer". Условие (not) уже закончилось, а выполняемое действие еще не началось. Или я что-то не понял.... |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
"действие" и "значение" в лиспе есть одинаковые понятия if это тоже функция (как и все в лиспе) - которая тоже возращает значение - то есть if может (и в большинстве случаев "правильного" использования) не задает что делать, а возращает нужный результат.
То есть в "классическом" программировании: Код:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
Цитата:
Ни какой Полещук (извините, Ник.Ник., за эти слова - не хотел обидеть ) такого не напишет. Его книги прекрасные справочники и учебники, а в этой теме разобрали как надо работать с ЛИСП и дали кучу практических решений.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
![]() |
В основном люди занимаются LISP'ом, что бы адаптировать AUTOCAD под вполне конкретную определенную задачу. Ну или несколько таких задач. Базовые принципы программирования - это не сложно. (Мне в частности помогла книга Дэн Эбботта). Но капни чуть-чуть глубже и все! Невозможно самому ни в чем разобраться. И чисто физически нет времени перечитывать всю тему, ибо и так куча времени ушла на книги Полещука (имхо тяжело для понимания он пишет), да и люди все рабочие и семейные. Так что проще и легче спросить конкретно про то, что тебе надо. Опытным людям, я считаю, не составит труда повторно ответить на какие-то вопросы ну или отослать по нужному адресу. Да и тему я полистал - бегло, конечно, но здесь мало относящегося к моему вопросу. (виноват - мог и не заметить)
вернемся к коду: Все таки я не понял, зачем "layer" в 16 строке. А то, что происходит после 18 строки, я ваапще только название функцих знакомых встречаю.... Ваппще ничего не понятно. Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
(setq layer (if layer layer layer)) так понятно?
(setq layer layer) или так ![]() Цитата:
![]() |
|||
![]() |
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
![]() |
Цитата:
Зачем нужна такая сложная конструкция для получения элемента? Зачем для получения элемента использовать "vl-catch-all-apply". Что значит строка (function vla-item) и зачем она нужна? Зачем тут "list"? |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
По строкам:
1. исполнить игнорируя ошибки 2. функцию получения элемента 3. примененную к 4. коллекции слоев 5. активного документа, автокада 7. с именем "0"
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
![]() |
Спасибо!!
Появляется вопрос. А function зачем здесь? (function - связывает и оптимизирует функцию. Полещук.) Так что vla-item без нее работать не будет? "vl-catch-all-apply" Нужна только для игнорирования ошибки? А вот это темный лес: (зачем тут foreach, зачем тут mapcar) Код:
Последний раз редактировалось Alexg-12, 05.10.2012 в 13:32. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Действует наподобие конструкции Код:
Применять vl-catch-all-apply надо в связке с vl-catch-all-error-p и vl-catch-all-error-message. Чтобы не мучиться каждый раз, надо сделать библиотечную функцию наподобие: Код:
Код:
Можно, конечно, предварительно проверять эти условия, а можно и применить ловушку ошибок Код:
|
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Помигите.
Делаю первые шаги в лиспе. Имеется треугольник, из полилинии, который я пытаюсь размножить вокруг точки "0,0" Записал вот таким вот образом: (command "_pline" "0,3.0902" "1.3876,5.7295" "1.3876,5.7295" "-1.3876,5.7295" "-1.3876,5.7295" "0,3.0902" "") (command "_array" "last" "p" "0,0" "5" "360" "_y" "") А оно не работает. Как нужно записать? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
gomer, у тебя код какой-то странный... Часть кода универсальна, часть - только для английской версии.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
И еще вопрос.
Создаю новый слой: (COMMAND "_layer" "_n" "MH-Hidden-Medium" "_c" "55" "MH-Hidden-Medium" "") или: (COMMAND "_layer" "_n" "MH-Center" "_c" "115" "MH-Center" "") В первом случае нужна линия hidden, во втором - center. Как это записать, чтобы заработало? В выделенным красным цветом местах пытался писать "_h" "_hidden" "hidden" "_c" "_center" "center" - ничего не получилось. А таки да - у меня английская версия автокада. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
|
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Еще вопрос, будьте добры, пожалуйста.
В списке слоёв имеется слой: (command "_layer" "_n" "Worklines" "_c" "53" "Worklines" "_l" "continuous" "Worklines" "") Его нужно запретить для печати. Как это записать в Лиспе? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А вот не проще ли создавать / модифицировать слой без командных методов?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
"без командных методов". Один слой создать можно. Да и несколько не проблема. Я делаю заготовку шаблона из 50-ти, который будет загружаться при начале работы. Последний раз редактировалось Кот Пушок, 16.10.2012 в 23:21. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А потом к файлу, с таким трудом подготовленному, будет применен _.purge. И все, аллес!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Как один из вариантов: http://kpblc.blogspot.com/2009/07/txt.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
Любая информация будет мне на данном этапе полезна - грЫзём гранит науки. Сейчас записал так: (command "_layer" "_n" "Worklines" "_c" "53" "Worklines" "_l" "continuous" "Worklines" "_plot" "no" "Worklines" "") Заработало. Уря! Дальше буду изучать, как защитить созданный список слоёв от редактирования. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Вариант 1: поместить его напрямую в код.
Вариант 2: поместить настройки в сторонний текстовый файл, располагаемый на сервере, и файл закрыть от редактирования. Вариант 3: поместить настройки в сторонний dws-файл, располагаемый на сервере, и файл подключать автоматически Вариант 4: поместить настройки в сторонний dwg-файл, и-далее-все-то-же-самое Вариант 5: ...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Да, тут есть над чем работать.
Я видел список слоёв, под которым помещен отдельный "список комманд", запрещающих редактирование. Не пробовал еще, как он работает, да и прочитать эти команды я пока не могу. Ну, да что-то будет сделанно. Даже если и применить Purge All , можно потом перезагрузить лисп, и слои вернутся на место. Так што - буду работать... |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
важно не столько знать как, а понимать что ты хочешь + курить мануалы
Кот Пушок, ну вот ты уже знаешь как создавать слой с опциями, даже несколькими, как их добавлять в конец лисп-выражения, печатаемость слоя - тоже опция, чтоб ее применить, ее также надо добавить как и цвет, тип линии... Просто вызови команду -layer и смотри последовательность ввода, чтоб сделать слой непечатаемым |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
Я знаю, как работать с коммандной строкой. А вот как записать - не сразу понял. Писал "_No plot" "N" "plot", еще чего-то, пока не додумался до "_plot" "no" Не, я ж конешно, понимаю, што гуру любят повыделоваться над новичками, тута ничего не поделаешь. Но вот почему я такой дурной - если меня что-то спросят, я возьму, да и расскажу. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 308
|
>> Кот Пушок
Для ZWCADa 2008 написал лисп создания слоев по запросу, к сожалению, там он работает частично, зато в AutoCADe все замечательно. Для каждого слоя сделал кнопку с макросом на панельке. Можно, конечно, задавать слой автоматом при черчении определенных элементов (была тут тема о простановке размеров на отдельном слое), но я так и не смог объяснять это ZWCADу. Посмотрите, может пригодится чего. Еще обнаружил в 2006-8 автокадах такое ограничение для команд и функции "entmake"- если в слое используется тип линии отсутствующий в чертеже, то слой создан не будет. Приходится сначала создавать тип линии, а потом уже слой. Последний раз редактировалось Олег К., 17.10.2012 в 11:06. |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
![]() Но то, что очевидно для знающего язык, не всегда понятно для того, кто начал этим интересоваться полторы недели (или две) назад. Тоесь - для меня. Моя строка выглядела так: Command: _la -LAYER Current layer: "0" Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Fre eze/Thaw/LOck/Unlock/stAte/Description/rEconcile]: p Enter a plotting preference [Plot/No plot] <Plot>: n Enter layer name(s) for this plot preference <0>: А лисп заработал только после "_plot" "no" - но, как я уже говорил, для того, чтобы составить именно такое сочетание, мне пришлось поломать голову. Недолго, но пришлось. Ну, да дело уже прошлое, сейчас список слоев на просмотре у босса, как отредактирует названия, толщину линий и пр, буду заниматься дальше. Назрела необходимость для наших двух оффисов создать систему слоев, удобную НАМ для пользования, до этого пользовались системой, созданной "головным оффисом". А никого, кто знает лисп, у нас здесь нет. Вот, решил попробовать я. Премного благодарен. Буду изучать. У меня в начале было в распоряжении два списка слоев, но: Один список вообще не заработал, второй заработал, но "_с" я посчитал, служит для задания линии "continuous", а потом, когда ничего не получилось, ес-сно, gomer написал коммандную строку, в которой мне, наконец, стало ясно, что от чего зависит. Вот такое вот - обучение Лиспу на примере. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Кот Пушок, когда ты познаешь лисп, твой мир изменится! Ты когда-нибудь слышал о деревьях?
Вот твое меню команды слой - то самое дерево, или даже не дерево, а лабиринт. Сначала перед тобой множество дверей-опций, ты открываешь одну из них, выбирая опцию Plot и вдруг перед тобой еще перед тобой две двери - Plot и No plot. Откроешь любую и ты снова в начале лабиринта, но ты уже прошел немалый путь и твой новый слой не будет печататься. Вот почему твой код выглядит, как Код:
зы, сорри за стеб, вот так это должно выглядеть, имхо ![]() |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Да, я в самом деле иногда чувствую себя как кот, сидящий на конце ветки дерева.
Ну, или в лабиринте. Есть чему учиться, но иногда в учебнике дается пример, а до конца не поясняется. Или не знаешь просто, на что обратить внимание в первую очередь. Вот и выходит лабуда. А это то, что у меня получилось, с твоей помощью: (defun c:MH-lay () (command "_layer" "_n" "Background" "_c" "252" "Background" "_l" "continuous" "Background" "") (command "_layer" "_n" "Background-Hidden" "_c" "252" "Background-Hidden" "_l" "hidden" "Background-Hidden" "") ; здесь список из еще почти 50 слоёв (command "_layer" "_n" "TitleBlkText" "_c" "white" "TitleBlkText" "_l" "continuous" "TitleBlkText" "") (command "_layer" "_n" "Worklines" "_c" "53" "Worklines" "_l" "continuous" "Worklines" "_plot" "no" "Worklines" "") (command "_layer" "_s" "0" "") ) Понемногу продвигаюсь вперд по тернистым тропам Лиспа. Написал набросок опоры подшипника головного барабана конвейера, рисует, забавно. Теперь изучаю, как сделать, чтобы задавать различные размеры подшипников, разную высоту от платформы до центра барабана, и т.д. Читаю, грызу гранит, глядишь, может, чего и выйдет. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Похоже что ты идешь не в ту сторону, Пушок. Переходи на темную сторону, у нас вкусные печеньки
А зачем? Чтоб нарисовать печеньку в определенном слое нужен всего лишь один слой... остальное мусор, мусор обычно хранят в шаблонах, а контролируют с помощью стандартов оформления, о чем тут уже сказали... Кстати, есть еще замечательная утилитка - LayerCreator. Там все уже написано до нас Цитата:
ну вот ты уже и подошел к параметрическому черчению, это уже прогресс, теперь изучай функции ввода/вывода информации а ля get*** А когда надоест, переходи к диалогам |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
![]() Помогите! Пишу: (defun c:str () (info) (draw) ) (defun info () (princ "Please click a point: ") (setq pt (getpoint)) (setq d (getreal "\nEnter distance in inches: ")) ) (defun draw (/ pt) (command "_line" pt d "") ) Хочу нарисовать линию любой задаваемой длины. Нифига не выходит... |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Пробовал писать
(command "_line" pt "@0,d" "") все равно d не читает. а вот так работает: (setq startpt (getpoint "Select the start point:")) (setq endpt (getpoint "Select the end point")) (command "_line" startpt endpt "") в любом направлении пишет отрезок, не зависимо ОРТО включенно или нет. Не пойму, как переменную правильно ввести... |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
(command "_line" pt (strcat "@0," (rtos d)) "") как-то так...
Ну основное в функции draw переменная pt локализована и равна nil а отрезок из ниоткуда, также трудно построить, как и отрезок в никуда Последний раз редактировалось gomer, 23.10.2012 в 02:05. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Видимо шпоночный паз
Цитата:
А первых строках своего письма, хочется предположить, что динамический блок в данном случае предпочтительнее А во-вторых, жмите F2 и смотрите что вы там наворотили ![]() |
|||
![]() |
|
||||
Механик-конструктор Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25
|
Цитата:
Я ж говорил, первые шаги и первые попытки. Учусь, так сказать. А за помощь - спасибо. Буду дальше биться головой ап стену. Постараюсь на следующей неделе разобраться в этом "концептуально" плохом коде. ![]() Последний раз редактировалось Кот Пушок, 28.10.2012 в 06:36. |
|||
![]() |
|
||||
Регистрация: 17.10.2012
Сообщений: 4
|
Добрый день, у меня вопрос по замечательному лиспу, который похоже написал Кулик Алексей aka kpblc, поэтому надеюсь с топиком я не промахнулся.
Лисп автоматически последовательно нумерует точки, а затем экспортирует их координаты в txt/csv-файл. Работает он отлично, но у него есть один недостаток: если ты промахнулся мимо нужной точки отменить действие увы нельзя. Комбинация <Ctrl>+<Z> выдает сообщение "Неверная точка", а нажатие клавиши <Esc> завершает нумерацию и появляется окно выбора папки для сохранения результатов. Буду очень благодарен если вы поможете это исправить. Код:
Последний раз редактировалось papelard, 06.11.2012 в 13:19. |
|||
![]() |
|
||||
Регистрация: 17.10.2012
Сообщений: 4
|
Ребят, пожалуйста, помогите разобраться. Сам я человек от программирования далекий - неделю разбирался как в лиспе заштриховать кружок и шрифт у текста поменять
![]() По поводу отмены введеной точки могу только догадываться что надо разбираться с функциями vla-startundomark и vla-endundomark которые в этом лиспе уже есть но я не совсем понимаю как они работают. По поводу выноски догадываюсь что в этот фрагмент лиспа Код:
Может кто из старожилов форума подскажет тему (если такая есть на форуме) которая поможет мне с этим разобраться ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Со временем абсолютный "затык", поэтому попытаюсь объяснить кратко:
#1957 - это создание описания блока и его наполненности, не более того. Чтобы сделать то, что хочется, надо переделывать кусок Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 17.11.2012
Казань
Сообщений: 8
|
добрый вечер! Недавно начала осваивать лисп, возникла вот такая загвоздка: как сделать, чтоб программа создавала блок, если его нет в чертеже, а если есть, то использовала то что есть? тут вроде как нужна функция if. как узнать есть ли описание блока в чертеже?
вот она програмка, писала сама, только не смейтесь ![]() (defun C:ci (/ sc1 rad1 ci1) (setq sc1 (getdist "\nМасштаб <100>: ")) (if (= sc1 nil) (setq sc1 100) );if (setq rad1 (* 0.8 sc1)) (command "._CIRCLE" "0,0" rad1) (setq ci1 (entlast)) (command "._BLOCK" "v" (list 0 (- rad1)) ci1 "") (command "._MEASURE" pause "_B" "v" "" pause pause) (command "._GROUP" "" "*" "" "_p") ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Для поиска описания блока можно воспользоваться (tblsearch "block" <Имя блока в кавычках>)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер Регистрация: 17.11.2012
Казань
Сообщений: 8
|
Не получается..
точнее когда описание блока есть в файле программа работает, а когда описания блока нет выдает: Масштаб <100>: ; ошибка: неверная функция: "" в чем может быть ошибка? ![]() (defun C:ci (/ sc1 rad1 ci1 vs1) (setq s1 (tblsearch "block" "v")) (if (= s1 nil) ((setq sc1 (getstring "\nМасштаб <100>: ")) (if (= sc1 nil) (setq sc1 100) );if (setq rad1 (* 0.8 sc1)) (command "._CIRCLE" "0,0" rad1) (setq ci1 (entlast)) (setq vs1 (list 0 (- rad1))) (command "._BLOCK" "v" vs1 ci1 "") ) );if (command "._MEASURE" pause "_B" "v" "" pause pause) (command "._GROUP" "" "*" "" "_p" "") (princ) ) |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
инженер Регистрация: 17.11.2012
Казань
Сообщений: 8
|
Добрый вечер! При вставке блоков через программу блоки поворачиваются на некоторый угол
![]() Снова не пойму где я не так делаю..программу и файл прилагаю. Программа: Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 24.11.2012 в 20:44. |
|||
![]() |
|
||||
инженер Регистрация: 17.11.2012
Казань
Сообщений: 8
|
Всё равно поворачивает эти 2 блока "линия разрыва" и "фигурная скобка", все остальные еще 10 штук вставляются нормально с привязкой и в любом варианте команды "._INSERT".
Пробовала значения 0, 20535, 16384 и через кнопку отключать. Попробовала разные варианты команды "._INSERT" на варианты: (command "._INSERT" "фигурная скобка" in1 sc1 sc1 "0") (command "._INSERT" "фигурная скобка" in1 sc1 sc1 "") вставляет и поворачивает на вариант: (command "._INSERT" "фигурная скобка" in1 sc1 sc1 pause) 1 раз вставляет, а дальше пишет: "Точка вставки: Точка вставки: Неверное определение рамки. Системные переменные восстановленны:" Последний раз редактировалось Alevtina R, 25.11.2012 в 11:18. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
1. Поспешили вы, Алевтина, глушить вывод в командную строку, дело то не в привязках оказалось
2. Учитесь разбивать программы на фрагменты и выстраивать их логику 3. Ну вот так у меня получилось: Код:
Последний раз редактировалось gomer, 25.11.2012 в 17:34. Причина: ошибка: блок библиотеки должен удаляться при вставке, а не вместо |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
попробуйте вручную ввести -INSERT, и посмотреть опции команды, это масштаб вставки блока
Важно понимать какие события происходят в команде, следовательно какие режимы можно выделить в отдельные функции. Их можно унифицировать и использовать в других командах Ну вот, так получилось, чуть посложнее: Код:
Последний раз редактировалось gomer, 25.11.2012 в 17:35. |
|||
![]() |
|
||||
Регистрация: 17.10.2012
Сообщений: 4
|
У меня вопрос к знатокам.
Мне необходимо чтобы лисп создавал *.CSV файл в котором помимо координат и номеров точек должен присутствовать текст с формулой которая содержит символы √ и Δ. Так вот если лисп сохранен в кодировке ANSI то эти символы в CSV заменяются на “v” и “?” и приходится в Notepad++’е конвертировать CSV в UTF-8 а после уже делать замену символов. Если же лисп сохранить в кодировке UTF-8 то весь русский текст лиспа в AutoCAD-е превращается в набор иероглифов, а полученный CSV если его открывать в Notepad++ выглядит вроде как и надо бы, но если открывать его в excel’е весь русский текст превращается в иероглифы. И программа для которой по идее и создается этот CSV не хочет импортировать данные из него. Так вот собственно вопрос. Как сделать так, чтобы символы √ и Δ и русский текст отображались корректно в экспортированном CSV-файле, а русский текст не превращался в иероглифы в AutoCAD’е и вообще возможно ли это? ![]() |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Что-то видно все профессионалами стали в лиспе, что ж апну темку. Вопрос таков, точнее не вопрос, а просьба подтвердить ситуацию: Есть функция getdist, которая нормально работает во всех случаях, кроме как в связке с action_tile, в этом случае просто возвращает nil, даже не предлагая указать расстояние. Об этом не написано ни в справке, ни у Н. Полещука, у которого, да и не только у него, припасен бубен в виде конструкции cond. Замечу, что в брикскаде getdist работает, но при нажатии Esc программа завершается несмотря на бубен. Если кому интересно, вот пример кода, который красив, но не работает:
Код:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Шансов сейчас проверить нет, поэтому в качестве варианта: закрыть диалог, получить результат ввода, снова сформировать диалог и показать его. Кажется, другого варианта для использования dcl нету..
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.05.2013
Сообщений: 11
|
Спасибо огромное!
Up. _________ код с копированием работает на ура. НО очень надо чтобы инкрементирование происходило при создании новой мультивыноски. Своих мозгов подправить код не хватает. ОЧЕНЬ НАДО, каждый день сотни выносок вручную нумерую. Спасибо. Последний раз редактировалось alega11, 05.05.2013 в 09:48. |
|||
![]() |
|
||||
Практически первый опыт, да и не написание, а переделка от проффи lee mac и др., но работает как хотел. Выношу на суд и доработку.
txt2att.lsp команда вызова txt2att Последовательно. Чертим в модели приблизительно начинку блока, вместо атрибутов используем однострочный текст, с желаемыми св-вами. Вызываем txt2att Выбор рамкой и конвертация одного/нескольких однострочных текстов в атрибуты (и таг и подсказка и сод - бывшее значение содержания текста). По выходу из выбора рамкой текста ставшего атрибутами, имеем в буфере ОС текстовую строку вида годмесяцчисло.часминутасекунда, за сим из лиспа вызывается диалоговое окно создания блока, где по желанию используем или нет то что торчит текстовой строкой в буфере, далее работаем как обычно, вторично указывая границы создаваемого блока , ну и все остальные галки по желанию, как обычно. На выходе имеем готовый статичный блок с готовыми атрибутами. Что хотелось бы добавить - имя юзверя/пользователя - в конце строки (предполагается что таковых мер будет достаточно для уникального автоматом сформированного названия блока, вопрос конечно спорный). Код:
дубль Последний раз редактировалось perpetule, 07.07.2015 в 11:26. Причина: Добавлен вариант с суффиксом пользователя ( ищем в теле лиспа ) |
||||
![]() |
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 63
|
Привет, братцы!
Вопрос по функции ssget. Выбираю я значит некоторое количество примитивов с помощью рамки и присваиваю этот набор переменной. В набор входят линии, арки, окружности, текст, размеры. Но, из всего этого набора мне нужны только линии, арки и окружности. Значит надо исключить ненужные примитивы из набора. Но что-то тут с именами примитивов не понятно мне - как их выцепить из набора? получается что-то вида <Entity name: 7dc84328>, а для ssdel наверное всетаки нужно только 7dc84328. Или есть какой более простой способ? Спасибо. (программка приложена) Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
С неверным кодом, например.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Учитесь пользоваться инструментами отладки, определяющие место в коде, в котором возникла ошибка и прерывающие выполнение программы при возникновении ошибки. Возникла ошибка - программа прервалась - просим показать где и проверяем все входящие параметры функции. Вопросы подобного плана отпадут сами собой.
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Точки просто так ставить не надо
![]() Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Do$, ну да, каюсь, я бы писал код по-другому:
Код:
Добавлено: подходим к рубежу в 2000 сообщений... Тему разделять будем?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 13.05.2013 в 18:06. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
на самом деле программа должна была бы выглядеть так:
Код:
Цитата:
|
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
"Китайская комната" не подойтёт
![]() Цитата:
Последний раз редактировалось Jerald, 14.05.2013 в 04:46. |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010
|
Товарищи программисты!
Помогите если можно одну маленькую дурацкую идею запрограммировать ![]() Хочу на кнопку F2 повесить умный лисп, который в случае если выполняется какая-то команда, например _move или _line при нажатии на F2 вставлял бы мне прозрачную указиловку, например _m2p (середина между точками) или _from (от), а при других случаях выполнял бы непосредственную функцию F2 - вывод текстового окна (_textscr). Такое извращение возможно? ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
tivun, во-первых, картинки отлично присоединяются к посту. Во-вторых, с такой постановкой вопроса тебе прямая дорога в "Поиск исполнителей".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |