Ошибка неверная строка режима ssget

Перейти к содержимому раздела

Форумы CADUser

Информационный портал для профессионалов в области САПР

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Дерево сообщений Активные темы Темы без ответов

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

#1 27 апреля 2008г. 14:35:20

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Тема: Нужна помощь с AutoLISP

Здравствуйте!
Задали написать программу на автолиспе чтобы запрашивала у пользователя размеры того что будет строить. Я не знаю каким образом это осоуществить. вроде с функциями типа commnad и setq разобрался, а как спросить пользователя у размерах, и каким образом недопкстить задание им слишком больших или слишком малых размеров?
Зарание спасибо.

#2 Ответ от Н.Н.Полещук 27 апреля 2008г. 14:43:37

  • Н.Н.Полещук
  • Восстановленный участник
  • На форуме с 19 марта 2004г.
  • Сообщений: 358
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

> Aspirine
См. функции getreal, getint, initget, getpoint

#3 Ответ от Aspirine 27 апреля 2008г. 14:56:09

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Спасибо. А не подскажите какую-нибудь литературу в которой описаны эти функции?

#4 Ответ от Aspirine 28 апреля 2008г. 11:24:58

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

В общем немного разобрался. Вот только проблема небольшая. Вот код:

(command "_cylinder" "0,0,0" "3" "6")
(setq c1 (ssget "l"))
(command "_cylinder" "0,0,0" "1.25" "8")
(setq c2 (ssget "l"))
(command "_cone" "0,0,8" "1.25" "радиус" "0.5" "0.2")
(setq k1 (ssget "l"))
(command "_zoom" "гр" "")
(command "_.union" c2 k1 "")
;(setq c1 (entlast))

При попытке загрузки в автокад, выдаёт:
«; ошибка: неверная строка режима ssget»
Синтаксис проверил, вроде всё норма.
В чем проблема?
P.S. Цункцию ssget пытаюсь использовать для дальнейшего использования команд _union и _substract. Если возможно подругому подскажите плиз. Спасибо.

#5 Ответ от Александр Ривилис 28 апреля 2008г. 13:30:12

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,661
  • Спасибо: 158

Re: Нужна помощь с AutoLISP

#6 Ответ от Aspirine 28 апреля 2008г. 14:14:40

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Спасибо. Действительно помогло…
Можно ещё вопрос. Мне нужно организовать чтобы пользователь имел возможность сам вводить размеры детали из определённой зоны значений.
Написал пока вот что:

(setq hd 10)
  (setq parametr1 (getreal (strcat "nВведите высоту детали <" (rtos hd) ">: ")))
  (setq hd (if parametr1 parametr1 hd))
(setq rc1 3)
  (setq parametr2 (getreal (strcat "nВведите радиус большого цилиндра <" (rtos rb) ">: ")))
  (setq rc1 (if parametr2 parametr2 rc1))
(setq rb1 6)
  (setq parametr3 (getreal (strcat "nВведите высоту большого цилиндра <" (rtos rs) ">: ")))
     (while (> parametr3 hd)
     (setq parametr3 (getreal (strcat "nВведите высоту большого цилиндра <" (rtos rs) ">: ")))
     )
  (setq rb1 (if parametr3 parametr3 rb1))

При загрузке а AutoCAD, он даёт ввести первое значение, а потом вылетает обратно в редактор автолиспа и в консоли Автолиспа следующая ошибка:
«ошибка: неверный тип аргумента: numberp: nil»
Никак не могу понять в чём проблема.

#7 Ответ от Victor 28 апреля 2008г. 14:38:09

  • Victor
  • Восстановленный участник
  • На форуме с 26 марта 2007г.
  • Сообщений: 270
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Что такое rb?

#8 Ответ от Atol 28 апреля 2008г. 14:39:00

  • Atol
  • Активный участник
  • На форуме с 21 февраля 2006г.
  • Сообщений: 1,365
  • Спасибо: 3

Re: Нужна помощь с AutoLISP

В редакторе Автолиспа есть возможность проставлять метки остановки (наставь до и после функций) и просмотра текущего значения переменных (а то и целых выражений) для контроля и поиска ошибок

#9 Ответ от Aspirine 28 апреля 2008г. 15:08:25

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

rb- это переменная которая должна по идеи соответствовать высоте большого цилиндра.

#10 Ответ от Aspirine 28 апреля 2008г. 15:19:39

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Увидел… Да, это не внимательность и моя лень, копировал и набивал разное.
Исправил.
Но это не решило проблему…

#11 Ответ от Aspirine 28 апреля 2008г. 16:35:26

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Разобрался, спасибо. Дело было в неправильно ориентированных переменных.
Но возник ещё вопрос:
Мне нужно в координатах начальной точки тела указать две координаты и одну переменную, котороя может измениться исходя из желанию конеченого пользователя.
Например:

(command "_cylinder" "0,0,S3" rc1 rb1 "")

где rc1,rb1, S3 — переменые. Автокад при загрузке в него говорит что так координаты точек
«0,0,S3» задавать нельзя. Как пуступить в этой ситуации?

#12 Ответ от Александр Ривилис 28 апреля 2008г. 16:49:24

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,661
  • Спасибо: 158

Re: Нужна помощь с AutoLISP

(command "_cylinder" (list 0 0 S3) rc1 rb1 "")

#13 Ответ от Aspirine 28 апреля 2008г. 18:18:56

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

помогло, спасибо. А команда List- она создаёт список, да?

#14 Ответ от Александр Ривилис 28 апреля 2008г. 18:41:36

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,661
  • Спасибо: 158

Re: Нужна помощь с AutoLISP

> Александр Ривилис
Функция (а не команда) (list …) создает список. Учи мат.часть (т.е. язык программирования AutoLisp/VisualLisp).

Сообщения 14

Тему читают: 1 гость

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Перейти к содержимому раздела

Форумы CADUser

Информационный портал для профессионалов в области САПР

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Дерево сообщений Активные темы Темы без ответов

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

#1 27 апреля 2008г. 14:35:20

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Тема: Нужна помощь с AutoLISP

Здравствуйте!
Задали написать программу на автолиспе чтобы запрашивала у пользователя размеры того что будет строить. Я не знаю каким образом это осоуществить. вроде с функциями типа commnad и setq разобрался, а как спросить пользователя у размерах, и каким образом недопкстить задание им слишком больших или слишком малых размеров?
Зарание спасибо.

#2 Ответ от Н.Н.Полещук 27 апреля 2008г. 14:43:37

  • Н.Н.Полещук
  • Восстановленный участник
  • На форуме с 19 марта 2004г.
  • Сообщений: 358
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

> Aspirine
См. функции getreal, getint, initget, getpoint

#3 Ответ от Aspirine 27 апреля 2008г. 14:56:09

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Спасибо. А не подскажите какую-нибудь литературу в которой описаны эти функции?

#4 Ответ от Aspirine 28 апреля 2008г. 11:24:58

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

В общем немного разобрался. Вот только проблема небольшая. Вот код:

(command "_cylinder" "0,0,0" "3" "6")
(setq c1 (ssget "l"))
(command "_cylinder" "0,0,0" "1.25" "8")
(setq c2 (ssget "l"))
(command "_cone" "0,0,8" "1.25" "радиус" "0.5" "0.2")
(setq k1 (ssget "l"))
(command "_zoom" "гр" "")
(command "_.union" c2 k1 "")
;(setq c1 (entlast))

При попытке загрузки в автокад, выдаёт:
«; ошибка: неверная строка режима ssget»
Синтаксис проверил, вроде всё норма.
В чем проблема?
P.S. Цункцию ssget пытаюсь использовать для дальнейшего использования команд _union и _substract. Если возможно подругому подскажите плиз. Спасибо.

#5 Ответ от Александр Ривилис 28 апреля 2008г. 13:30:12

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,659
  • Спасибо: 157

Re: Нужна помощь с AutoLISP

#6 Ответ от Aspirine 28 апреля 2008г. 14:14:40

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Спасибо. Действительно помогло…
Можно ещё вопрос. Мне нужно организовать чтобы пользователь имел возможность сам вводить размеры детали из определённой зоны значений.
Написал пока вот что:

(setq hd 10)
  (setq parametr1 (getreal (strcat "nВведите высоту детали <" (rtos hd) ">: ")))
  (setq hd (if parametr1 parametr1 hd))
(setq rc1 3)
  (setq parametr2 (getreal (strcat "nВведите радиус большого цилиндра <" (rtos rb) ">: ")))
  (setq rc1 (if parametr2 parametr2 rc1))
(setq rb1 6)
  (setq parametr3 (getreal (strcat "nВведите высоту большого цилиндра <" (rtos rs) ">: ")))
     (while (> parametr3 hd)
     (setq parametr3 (getreal (strcat "nВведите высоту большого цилиндра <" (rtos rs) ">: ")))
     )
  (setq rb1 (if parametr3 parametr3 rb1))

При загрузке а AutoCAD, он даёт ввести первое значение, а потом вылетает обратно в редактор автолиспа и в консоли Автолиспа следующая ошибка:
«ошибка: неверный тип аргумента: numberp: nil»
Никак не могу понять в чём проблема.

#7 Ответ от Victor 28 апреля 2008г. 14:38:09

  • Victor
  • Восстановленный участник
  • На форуме с 26 марта 2007г.
  • Сообщений: 270
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Что такое rb?

#8 Ответ от Atol 28 апреля 2008г. 14:39:00

  • Atol
  • Активный участник
  • На форуме с 21 февраля 2006г.
  • Сообщений: 1,365
  • Спасибо: 3

Re: Нужна помощь с AutoLISP

В редакторе Автолиспа есть возможность проставлять метки остановки (наставь до и после функций) и просмотра текущего значения переменных (а то и целых выражений) для контроля и поиска ошибок

#9 Ответ от Aspirine 28 апреля 2008г. 15:08:25

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

rb- это переменная которая должна по идеи соответствовать высоте большого цилиндра.

#10 Ответ от Aspirine 28 апреля 2008г. 15:19:39

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Увидел… Да, это не внимательность и моя лень, копировал и набивал разное.
Исправил.
Но это не решило проблему…

#11 Ответ от Aspirine 28 апреля 2008г. 16:35:26

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

Разобрался, спасибо. Дело было в неправильно ориентированных переменных.
Но возник ещё вопрос:
Мне нужно в координатах начальной точки тела указать две координаты и одну переменную, котороя может измениться исходя из желанию конеченого пользователя.
Например:

(command "_cylinder" "0,0,S3" rc1 rb1 "")

где rc1,rb1, S3 — переменые. Автокад при загрузке в него говорит что так координаты точек
«0,0,S3» задавать нельзя. Как пуступить в этой ситуации?

#12 Ответ от Александр Ривилис 28 апреля 2008г. 16:49:24

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,659
  • Спасибо: 157

Re: Нужна помощь с AutoLISP

(command "_cylinder" (list 0 0 S3) rc1 rb1 "")

#13 Ответ от Aspirine 28 апреля 2008г. 18:18:56

  • Aspirine
  • Восстановленный участник
  • На форуме с 20 марта 2008г.
  • Сообщений: 13
  • Спасибо: 0

Re: Нужна помощь с AutoLISP

помогло, спасибо. А команда List- она создаёт список, да?

#14 Ответ от Александр Ривилис 28 апреля 2008г. 18:41:36

  • Александр Ривилис
  • Александр Ривилис
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 15 апреля 2005г.
  • Сообщений: 8,659
  • Спасибо: 157

Re: Нужна помощь с AutoLISP

> Александр Ривилис
Функция (а не команда) (list …) создает список. Учи мат.часть (т.е. язык программирования AutoLisp/VisualLisp).

Сообщения 14

Тему читают: 1 гость

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

7 часов назад, Генпланист сказал:

<Площадь> Выберите или нарисуйте [Полилиния/Установки/Выбор] <Выбор>:  В

Выберите полилинию, круг, сплайн, эллипс или дугу или штриховку

ошибка: неверная строка режима SSGET

Получается, что не работает фрагмент кода:

       (ssget «_:S:E» (if (= what «Area») ‘((0 . «*POLYLINE,ARC,SPLINE,ELLIPSE,CIRCLE,HATCH»))  ‘((0 . «LINE,*POLYLINE,ARC,CIRCLE»))) )

В программе-конкуренте данная конструкция срабатывает.

Это означает, что в нанокаде не полностью реализована данная функция, кстати, весьма нетривиальная и цветистая.

Установленные методы 

  «:Е» — все примитивы, попадающие в прицел устройства указания;

  «:S» — допускает выбор только одного объекта.

Не понимаю именно такой выбор методов, не хватает воображения :stena:

Судя по контексту, в данном месте предполагается указать единственный элемент из указанных типов в прицеле курсора.

Можно попробовать разбить данное выражение на более простые конструкции.

Например,

   (setq a (ssget «_:S» (if (= what «Area») ‘((0 . «*POLYLINE,ARC,SPLINE,ELLIPSE,CIRCLE,HATCH»))  ‘((0 . «LINE,*POLYLINE,ARC,CIRCLE»))) ))

просто вернет набор ровно из одного элемента подходящего типа (вроде, именно это и требуется) или nil.

Фактически вам будет необходимо дополнительно отработать только именно эту возможность (пустой набор).

PS.  Более серьезная проблема вырисовалась дальше

Похоже 

     (vlax-invoke-method util «GetObjectIdString» obj :vlax-False)

не выдает ожидаемого результата (программа валится).

Возможно, объектная модель нанокада отличается от модели акада и не содержит такого метода.

Не стал выяснять, для чего он в этом коде и можно ли без него обойтись… 


Изменено 22 сентября, 2020 пользователем EdwardSt

Восстановление дуг.

Foxxxy

Участник
Сообщения: 88
Зарегистрирован: 01 авг 2012, 09:15
Репутация: 1
Откуда: г. Санкт-Петербург

Восстановление дуг.

Подскажите, каким штатным инструментом можно восстановить дуги в Mapinfo? При конвертации из AutoCad они аппроксимируются. Спасибо.


Аватара пользователя

Пётр Дубоделов

Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

Re: Восстановление дуг.

Сообщение

Пётр Дубоделов » 15 окт 2012, 10:29

так напрямик — вероятно никаким. когда-то имел подобную задачу: дело в том, что дуги в CAD вычисляются как кривые Безье, в мапинфо же при импорте — как набор прямых сегментов, получаются ломаные линии. помню два пути: конвертировать GlobalMapperом или Corelом, но давно это было…

«Если карта не соответствует местности, доверяй местности.»


Донецков

Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Восстановление дуг.

Сообщение

Донецков » 15 окт 2012, 11:24

В Автокаде делаете конвертацию сплайна в полилинии с сохранением формы, т.е. добавится множетство точек, с последующим экспортов MapInfo…


Foxxxy

Участник
Сообщения: 88
Зарегистрирован: 01 авг 2012, 09:15
Репутация: 1
Откуда: г. Санкт-Петербург

Re: Восстановление дуг.

Сообщение

Foxxxy » 15 окт 2012, 14:40

Если не сложно, подскажите, какая команда в AutoCad для конвертации сплайна. Спасибо.


Донецков

Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Восстановление дуг.

Сообщение

Донецков » 15 окт 2012, 14:56

Посмотрите в редактировании сплайна, а если сразу несколько, то в ToolPac есть конвертор из сплайнов в полилинию…


Foxxxy

Участник
Сообщения: 88
Зарегистрирован: 01 авг 2012, 09:15
Репутация: 1
Откуда: г. Санкт-Петербург

Re: Восстановление дуг.

Сообщение

Foxxxy » 15 окт 2012, 15:44

Обычная дуга не конвертируется в сплайн. Ошибка: Команда: DSTP_CVSPL2PL ; ошибка: неверная строка режима ssget
Это если через ToolPac. Convert-Splines-To Polylines.


Использование Visual LISP

491

Bad conversion code (Неправильный код преобразования)

Функции преобразования был передан неверный пространственный идентификатор.

Bad entmod list value (Неправильное значение списка ENTMOD)

Один из подсписков ассоциированного списка, полученного функцией ENTMOD, содержит неверное значение.

Bad function (Неверная функция)

Первый элемент списка не является именем существующей функции.

Bad list (Неверный список)

Неверный список, полученный данной функцией.

Bad ssget list (Неверный список функции SSGET)

Параметр, переданный функции (ssget «x»), является неверным.

Bad ssget list value (Неправильное значение списка функции SSGET)

Один из подсписков ассоциированного списка, полученного функцией SSGET, содержит неверное значение.

Bad ssget mode string (Неверное строковое выражение, содержащееся в параметре режима функции SSGET)

Ошибка, возникающая при получении функцией SSGET параметра режима, содержащего неверное строковое выражение.

Base point is required (Требуется определить координаты исходной точки)

Ошибка, возникающая при вызове функции getcorner без определения координат исходной точки.

Can’t evaluate expression (Вычислить выражение нельзя)

Неправильно поставленная десятичная точка или неверно сформированное выражение.

Can’t open file for input — LOAD failed (Нельзя открыть введенный файл — отказ функции LOAD)

Функция загрузки не находит нужный файл или пользователь не имеет доступа к файлу.

Input aborted (Ввод данных прекращен)

Ошибка или преждевременное завершение определения параметров файла, которое приводит к прерыванию ввода данных.

Invalid character (Неверный символ)

Выражение, содержащее неверный символ.

Invalid dotted pair (Неправильная точечная пара)

Вещественное число, начинающееся с десятичной точки; в подобных случаях необходимо использовать ведущий нуль.

Misplaced dot (Неправильно расположенная точка)

Вещественное число, начинающееся с десятичной точки; в подобных случаях необходимо использовать ведущий нуль.

492 Глава 13

Задания для самопроверки

Ответьте на следующие вопросы и сравните свои ответы с правильными ответами, приведенными в конце этой главы.

1.Visual LISP содержит мощный ________ и ________.

2.Текстовый редактор поддерживает ________ круглых скобок, имен функций, переменных и других компонентов программы.

3.Форматтер ________ программный код, сохраняя его в удобочитаемом формате.

4.Для отслеживания значений переменных можно использовать средство ________, которое находится на панели инструментов View.

5.Для пошаговой отладки программы обычно используется средство ________, которое находится на панели инструментов Debug.

6.Какие способы могут быть использованы для запуска Visual LISP?

1. ____________________

2. ____________________

7.

Назовите основные области окна Visual LISP.

1. ____________________

2. ____________________

3. ____________________

4. ____________________

8.

Перечислите панели инструментов Visual LISP.

1. ____________________

2. ____________________

3. ____________________

4. ____________________

5. ____________________

Повторение пройденного материала

Ответьте на следующие вопросы.

1. Опишите различные способы загрузки программ Visual LISP.

1. ____________________

2. ____________________

2.Как запустить программу Visual LISP?

3.Можно ли открыть файл AutoLISP в текстовом редакторе Visual LISP?

4.Для каких целей используется окно консоли Visual LISP Console?

5.Можно ли ввести в окно консоли Visual LISP несколько выражений LISP? Если можно, приведите соответствующий пример.

6.Как записать выражение LISP на нескольких строках, используя окно консоли Visual LISP?

7.Что такое контекстное меню и как его вывести на экран?

8.Какие цвета в текстовом редакторе Visual LISP назначены по умолчанию следующим элементам программы:

круглым скобкам ____________

функциям LISP ______________

комментариям _______________

целым числам _______________

9.Для каких целей используется Visual LISP Formatter и как можно отформатировать текст?

10.Чем отличается заглавный комментарий от комментария завершения функции?

11.Как изменить опции форматирования?

Использование Visual LISP 493

12.Как выполнить отладку программы Visual LISP?

13.Как отслеживать значения переменных, используемых в программах Visual LISP?

Упражнения

Упражнение 6 (Общее)

Напишите программу Visual LISP, с помощью которой вы сможете начертить лестничный марш, показанный на рис. 13.28. Программа должна также вывести приглашение, которое позволит пользователю определить высоту и ширину каждой ступеньки, а также указать их количество. Пользователь должен также ввести ширину порожка, примыкающего к лестничной площадке.

Рис. 13.28. Эскиз лестничного марша для упражнения 6

Упражнение 7 (Общее)

Напишите программу Visual LISP, с помощью которой вы сможете начертить рамку для картины, показанную на рис. 13.29. Программа должна также вывести приглашение, которое позволит пользователю определить длину, высоту и ширину этой рамки.

Рис. 13.29. Эскиз рамки для упражнения 7

494 Глава 13

Упражнение 8 (Общее)

Напишите программу Visual LISP, с помощью которой вы сможете начертить трехмерную модель стола, показанную на рис. 13.30. Программа должна вывести приглашение, которое позволит пользователю ввести длину, ширину и высоту стола, а также толщину столешницы и размеры поперечного сечения ножек. В этой программе должна использоваться команда VPOINT, которая позволит вам изменить направление взгляда и создать трехмерное изображение стола.

Рис. 13.30. Эскиз стола для упражнения 8

Упражнение 9 (Общее)

Напишите программу на языке Visual LISP, с помощью которой вы сможете начертить фигуру, показанную на рис. 13.31, провести осевые линии и проставить все необходимые размеры. Предполагается, что L5 = D1, L3 = 1,5*D1, L2 = 10*D1, L1 = L2–D1, L4 = L3+D1.

Рис. 13.31. Эскиз фигуры для упражнения 9

Упражнение 10 (Общее)

Напишите программу на языке Visual LISP, с помощью которой вы сможете начертить втулку со шпоночным пазом, показанную на рис. 13.32. Программа должна вывести приглашение, которое позволит пользователю определить координаты точки P0 (центр втул-

Использование Visual LISP 495

ки/вала), диаметр вала D1, наружный диаметр втулки D2, ширину шпоночного паза W и высоту вала со шпонкой (T). Программа должна также начертить осевые линии в слое Center (зеленый цвет) и проставить размеры T и W в слое Dim (фиолетовый цвет).

Рис. 13.32. Эскиз втулки со шпоночным пазом для упражнения 10

Упражнение 11 (Общее)

Напишите программу на языке Visual LISP, с помощью которой вы сможете начертить равносторонний треугольник, вписанный в окружность заданного диаметра (рис. 13.33). Программа должна вывести приглашение, которое позволит вам определить величину радиуса и координаты центра описанной окружности.

Рис. 13.33. Равносторонний треугольник, вписанный в окружность

Упражнение 12 (Общее)

Напишите программу на языке Visual LISP, с помощью которой вы сможете провести касательные к окружностям, показанным на рис. 13.34. Программа должна вывести приглашение, которое позволит вам определить диаметры окружностей и расстояние между их центрами.

496 Глава 13

Рис. 13.34. Касательные, проведенные к окружностям. Центры окружностей находятся на линии, проведенной под углом А

Ответы на вопросы для самопроверки

1 — текстовый редактор, форматтер, 2 — цветовое кодирование, 3 — форматирует,

4 — Watch Window, 5 — Toggle Breakpoint, 6 — Tools AutoLISP Visual LISP Editor, VLIDE,

7 — меню, панели инструментов, окно консоли и строка состояния, 8 — Standard, Tools,

Debug, View.

Глава 14

Visual LISP: редактирование базы данных чертежа

Цель занятия

Познакомившись с материалом этой главы, вы научитесь:

редактировать базу данных чертежа с помощью Visual LISP;

использовать функции ssget, sslength, ssname, ssadd, ssdel, entget, assoc, cons, subst, entnext, entlast и entmode;

извлекать информацию из базы данных чертежа;

редактировать базу данных и изменять существующие значения.

498 Глава 14

Редактирование базы данных

Язык программирования Visual LISP позволяет не только писать программы или создавать новые команды, но и редактировать базы данных чертежа. Другими словами, Visual LISP является мощным инструментом, который позволяет вносить необходимые изменения в уже существующие чертежи. Например, можно написать программу, с помощью которой вы сможете удалить все текстовые элементы чертежа или изменить диаметр и цвет всех вычерченных окружностей, введя одну-единственную команду. Познакомившись с организацией хранения информации в программе AutoCAD, а также со способами извлечения и редактирования данных, вы сможете работать с базой данных так, как вы этого захотите.

В этой главе рассказывается о командах, наиболее часто используемых при редактировании базы данных чертежа. Для получения информации о командах, не вошедших в этот раздел, обратитесь к интерактивному справочному руководству для программистов “Visual LISP Programmer’s Reference”, опубликованному компанией Autodesk.

Функция ssget

Функция ssget дает вам возможность выделить произвольное количество объектов, имеющихся на чертеже. Описание этой функции обычно содержит название режима выделения (окно, пересечение, предыдущее, последнее и т.д.) и координаты точек, определяющие положение противоположных вершин окна выделения. Функция ssget имеет следующий формат:

(ssget [режим_выбора] [точка1 точка2])

где

режим_выбора — режим выделения объектов (w, c, l, p и т.д.);

точка1 — первая вершина окна;

точка2 — вторая вершина окна.

Примеры

(ssget)

Выделение объекта в обычном режиме

(ssget «L»)

Выделение последнего объекта

(ssget «p»)

Выделение ранее выбранных объектов

(ssget «w» (list 0 0)

Выделение объекта в оконном режиме (размеры и положение

(list 12.0 9.0))

окна определены точками 0,0 и 12.0,9,0)

(ssget «c» pt1 pt2))

Выделение объекта в режиме пересечения (размеры и поло-

жение окна определены ранее заданными точками pt1 и pt2)

Пример 1

Напишите программу Visual LISP, с помощью которой вы сможете стереть все объекты, оказавшиеся в пределах чертежного листа (размеры листа определяются значениями limmin и limmax). Для выделения объектов используется функция ssget. Предполагается, что объекты уже начерчены на листе.

Шаг 1: написание программы Visual LISP

Откройте окно Visual LISP, выбрав команду Tools AutoLISP Visual LISP Editor или введя выражение VLIDE в командную строку. Затем откройте текстовый редактор Visual LISP, выбрав команду New File из меню File. В окно редактора введите текст программы, приведенный в следующем абзаце.

Visual LISP: редактирование базы данных чертежа

499

Ниже представлен листинг программы Visual LISP для примера 1. Номера строк не

являются частью программы, а используются только в качестве ссылок.

;С помощью этой программы вы сможете удалить все

1

;объекты, находящиеся в пределах чертежного листа.

2

;

3

(defun delall ()

4

(setvar «cmdecho» 0)

5

(setq pt1 (getvar «limmin»))

6

(setq pt2 (getvar «limmax»))

7

(setq ss1 (ssget «c» pt1 pt2))

8

(command «erase» ss1 «»)

9

(command «redraw»)

10

(setvar «cmdecho» 1)

11

(princ)

12

)

13

Пояснения

Строки 1–3

В начале листинга находятся строки комментариев, описывающие функцию этой программы. Обратите внимание, все строки комментариев начинаются точкой с запятой (;).

Строка 4

(defun delall ()

В этой строке функция defun определяет функцию delall.

Строка 6

(setq pt1 (getvar «limmin»))

Функция getvar получает координаты левого нижнего угла чертежного листа (limmin), а функция setq присваивает эти значения переменной pt1.

Строка 7

(setq pt2 (getvar «limmax»))

Функция getvar получает координаты правого верхнего угла чертежного листа (limmax), а функция setq присваивает эти значения переменной pt2.

Строка 8

(setq ss1 (ssget «c» pt1 pt2))

Функция ssget обеспечивает выделение объектов, которые пересеклись или попали в окно, определенное точками pt1 или pt2. (В данном случае выделение объектов выполняется в режиме пересечения.) Затем функция setq присваивает определение множества выделенных объектов переменной ss1.

Строка 9

(command «erase» ss1 «»)

Функция command вызывает команду ERASE, с помощью которой стирает множество ранее выбранных объектов, определенное значением переменной ss1.

Строка 10

(command «redraw»)

В этой строке функция command вызывает команду REDRAW, которая перерисовывает содержимое текущего экрана и удаляет следы, оставшиеся после удаления объектов.

Шаг 2: загрузка и запуск программы Visual LISP

Выберите команду Save или Save As из меню File и сохраните файл программы под именем delall.lsp. Чтобы загрузить созданную программу, выберите команду Load Text in Editor из меню Tools или щелкните на кнопке Load active edit window, которая находится на панели инструментов Tools. В окне консоли Visual LISP появится сообщение об успешной загрузке данной программы. Если в программе будут обнаружены ка- кие-либо ошибки, на экране появится соответствующее сообщение. Характер и причины возможных ошибок описываются в разделе “Коды ошибок и сообщения об ошибках”, который находится в конце главы 13 “Использование Visual LISP”. Теперь можете заняться пошаговой отладкой программы, выполняя процедуры, описанные в главе 13 в разделе “Отладка программы”. Например, чтобы привести в соответствие количество открывающих и закрывающих скобок, щелкните на кнопке Format Edit Window, которая находится на панели инструментов Tools.

Чтобы запустить программу, введите имя функции (delall) в строку приглашения консоли после знака _$ и нажмите клавишу <Enter>. Не забывайте, что имя функции необходимо указывать в круглых скобках. Выполнив описанные действия, перейдите в программу AutoCAD, выбрав команду Activate AutoCAD из меню Window.

Вы убедитесь, что все объекты, находившиеся на чертежном листе, удалены.

Функция ssget «X»

Функция ssget «X» дает возможность выделить объекты определенного типа, имеющиеся на чертеже. Эта функция может использоваться даже в том случае, когда объекты находятся на замороженном или выключенном слое. Функция ssget «X» имеет следующий формат:

(ssget «X» критерии_отбора)

где

X — режим отбора функции ssget;

критерии_отбора — список определенных критериев, используемых при выборе объектов.

Примеры

(ssget «X» (list (cons 0

«TEXT»)))

Возвращает множество выбранных элемен-

тов, состоящее из всех объектов TEXT, име-

(ssget «X» (list (cons 7

«ROMANC»)))

ющихся на чертеже

Возвращает множество выбранных элемен-

тов чертежа, которое состоит из объектов

(ssget «X» (list (cons 0

«LINE»)))

TEXT, набранных шрифтом ROMANC

Возвращает множество выбранных элемен-

тов, состоящее из всех объектов LINE, име-

(ssget «X» (list (cons 8

«OBJECT»)))

ющихся на чертеже

Возвращает множество выбранных элемен-

тов, состоящее из объектов, находящихся

на слое OBJECT

Соседние файлы в папке Книги_AutoCad_2

  • #

    09.04.201547.82 Mб64100% самоучитель AutoCAD 2006_Жадаев А.Г._2006г_.pdf

  • #
  • #
  • #

Мне пришлось изменить стили текста и атрибуты ширины нескольких блоков в Autocad. Было 10-30 блоков на каждого dwg и почти 100 dgg, и я не мог потрудиться вручную конвертировать каждый блок в новый стандарт.

https: // forums.autodesk.com/t5/visual-lisp-autolisp-and-general/attribute-width-change/td-p/1525357 по этой ссылке есть скрипт для изменения ширины всех блоков (блоков заголовков и нескольких электрических символов) на 1, и в качестве первого прохода он делает то, что я хочу (сбой из-за bad ; error: bad argument type: lentityp nil Command:, который после его изменения выбирается вручную и просто выбирается блоки, которые я хочу исправить это). Однако мне также нужно изменить стиль теста с того, что он есть, на «Стандарт» https://www.afralisp.net/reference/dxf-group-codes. PHP После проверки этой ссылки я обнаружил, что «Имя стиля текста» — это код dxf 7 поэтому я изменил сценарий к следующему.

(defun C:StandardFromDWGTEXT (/ ss sslen cnt blck ent entinfo)
  (setq ss (ssget))
  (setq cnt 0)
  (setq sslen (sslength ss))
  (while (< cnt sslen)
    (setq blck (ssname ss cnt))
    (setq ent (entnext blck))
    (setq entinfo (entget ent))
    (while
      (and ent (= (cdr (assoc 0 entinfo)) "ATTRIB"))
       (entmod (subst (cons 41 1) (assoc 41 entinfo) entinfo))
;;;    (entupd ent)
;;;    (setq ent (entnext ent))
;;;    (setq entinfo (entget ent))    
       (entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo))
       (entupd ent)
       (setq ent (entnext ent))
       (setq entinfo (entget ent))      
    )
    (setq cnt (1+ cnt))
  )
  (princ)
)

Теперь он работает только с закомментированными строками (перестает работать с ними, но это также означает, что он меняет только стиль текста, а не ширину) и только половина раза меняет стиль текста. Мне удалось пройти через все файлы, перезагружая auto-cad произвольно, а иногда, когда он не работал (не работает, значит, ничего не меняется, когда я этого ожидаю), открывая скрипт в визуальном редакторе lisp и нажимая на окно load active, исправляет его. Я бы положил это рядом со мной, но в интересах обучения, и, поскольку мне уже приходилось менять стандарт дважды, есть большая вероятность, что мне придется сделать это снова, я хочу попытаться это исправить.

Учитывая то, что сценарий с простым изменением ширины на 1 работает 100% времени, я решил, что проблема не в том, чтобы добавить его в набор автозагрузки / открыть его в редакторе визуальных шрифтов, а скорее в моем добавлении к самому коду. Однако строка, которую я добавил, чтобы изменить стиль текста (entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo)) не отличается от строки для изменения ширины текста.

Если у кого-то есть понимание, я буду признателен. У меня есть опыт работы с другими языками программирования, но я начинающий, когда дело доходит до Autolisp / lisp.

2 ответа

Лучший ответ

Есть несколько проблем, которые могут испортить ваш код:

  • (setq ss (ssget))

    Без аргумента списка фильтров, разрешающего только приписанные блоки, ваш выбор может включать любой тип сущности, то есть вызов entnext вернет вызов nil для любых объектов без субтитр. Следовательно, вызов entget вернет следующую ошибку, свидетелем которой вы являетесь:

    ошибка: неверный тип аргумента: lentityp nil

    Решение состоит в том, чтобы включить список фильтров, чтобы разрешить только выбор приписанных блоков:

    (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
    

    Строка режима _:L также исключает объекты на заблокированных слоях.

  • (setq sslen (sslength ss))

    Без проверки правильности выбора переменная ss может быть nil, что приведет к (sslength ss) возвращению ошибки:

    ошибка: неверный тип аргумента: lselsetp nil

  • (entmod (subst (cons 41 1) (assoc 41 entinfo) entinfo))
    (entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo))

    Здесь второе subst выражение заменяет группу 7 DXF в оригинале списке данных DXF, а не данные DXF, которые были изменены после замены группы 41 DXF. Это приведет к обращению изменения коэффициента ширины.


Внедрение исправлений для вышеуказанных проблем (и несколько других изменений) может привести к следующему коду:

(defun c:standardfromdwgtext ( / a i s x )
    (if (setq s (ssget "_:L" '((0 . "INSERT") (66 . 1))))
        (repeat (setq i (sslength s))
            (setq i (1- i)
                  a (entnext (ssname s i))
                  x (entget a)
            )
            (while (= "ATTRIB" (cdr (assoc 0 x)))
                (if (entmod (subst '(41 . 1.0) (assoc 41 x) (subst '(7 . "Standard") (assoc 7 x) x)))
                    (entupd a)
                )
                (setq a (entnext a)
                      x (entget  a)
                )
            )
        )
    )
    (princ)
)


2

Lee Mac
13 Авг 2019 в 20:43

Ошибка

плохой ; ошибка: неверный тип аргумента: lentityp nil

Является результатом использования пустой переменной для сущности.

Когда вы используете (setq ent (entnext blck)), вам следует проверить, не равен ли ему ноль.

(setq ent (entnext blck))
    (if ent
      (progn
        (setq entinfo (entget ent))

При устранении неполадок AutoLisp, когда вы видите lentityp или stringp = nil, тогда используемая вами переменная была установлена на nil, и вам нужно найти, где и почему.


0

mtaussie
13 Авг 2019 в 20:48

В настоящее время я пытаюсь запустить полилинию между двумя блоками (first_block, second_block), которая проходит вдоль другой полилинии, в конце действия вызывается функция вставки, которая заполняет блок аннотации (cable_name_tag) деталями начального и конечного блока .

Эта полилиния будет пересекать другие блоки и часто должна проходить параллельно с базовой полилинией (cable_ducting), поэтому пользователю нужно будет выбрать соответствующую часть полилинии, чтобы удалить аннотацию, поскольку пространство иногда ограничено.

Я заметил, что если я закомментирую second_block и предоставлю закодированное значение, функция ssget будет работать без проблем, поэтому я достаточно уверен, что проблема связана либо с синтаксисом, либо с обработкой first_block и second_block в этом коде.

(defun c:cable ()
  (vl-load-com)
  (setvar "clayer" "cable layer")
  (setvar "celtype" "bylayer")
  (setvar "osmode" 515)
  (command "_.pline"
           (getpoint))
  (while (> (getvar ' cmdactive) 0)
    (command pause)
    (princ "npress enter to finish:"))
  (setq elst
        (entsel "nselect cable segment: "))
  (setq ename
        (car elst))
  (setq pt
        (cadr elst))
  (setq annopt pt)
  (setq pt
        (vlax-curve-getclosestpointto ename pt))
  (setq param
        (vlax-curve-getparamatpoint ename pt))
  (setq preparam
        (fix param))
  (setq postparam
        (1+ preparam))
  (list (setq pt1
              (vlax-curve-getpointatparam ename preparam))
        (setq pt2
              (vlax-curve-getpointatparam ename postparam)))
  (setq cable
        (entlast))
  (setq cable_start
        (vlax-curve-getstartparam cable))
  (setq cable_start_point
        (vlax-curve-getstartpoint cable))
  (setq cable_end_point
        (vlax-curve-getendpoint cable))
  (setq cable_end
        (angtos (angle '(0 0)
                       (vlax-curve-getfirstderiv cable 0.0))))
  (setq first_block
        (ssget "_c" cable_start_point cable_end_point
               (list (cons 0 "insert")
                     (cons 2 "first_block"))))
  (setq second_block
        (ssget "_c" cable_start_point cable_end_point
               (list (cons 0 "insert")
                     (cons 2 "second_block"))))
  (setq end_cable
        (ssname second_block 0))
  (setq start_cable
        (ssname first_block 0))
  (setq $end_cable
        (vla-get-textstring
         (cadr (vlax-safearray->list
                (variant-value
                 (vla-getattributes
                  (vlax-ename->vla-object end_cable)))))))
  (setq $start_cable
        (vla-get-textstring
         (cadr (vlax-safearray->list
                (variant-value
                 (vla-getattributes
                  (vlax-ename->vla-object start_cable)))))))
  (setq cable_name
        (vlax-curve-getendparam cable))
  (command ; insert cable param
           "-insert"
           "cable_name_tag"
           annopt
           "1"
           "1"
           cable_angle
           cable_name
           $start_cable
           $end_cable
           "144"
           cable_length))

Я застрял в углу на этом, и был бы признателен за любую помощь, совет или указатели, которые кто-либо может предложить.

Спасибо всем за ваше время.

7 часов назад, Генпланист сказал:

<Площадь> Выберите или нарисуйте [Полилиния/Установки/Выбор] <Выбор>:  В

Выберите полилинию, круг, сплайн, эллипс или дугу или штриховку

ошибка: неверная строка режима SSGET

Получается, что не работает фрагмент кода:

       (ssget «_:S:E» (if (= what «Area») ‘((0 . «*POLYLINE,ARC,SPLINE,ELLIPSE,CIRCLE,HATCH»))  ‘((0 . «LINE,*POLYLINE,ARC,CIRCLE»))) )

В программе-конкуренте данная конструкция срабатывает.

Это означает, что в нанокаде не полностью реализована данная функция, кстати, весьма нетривиальная и цветистая.

Установленные методы 

  «:Е» — все примитивы, попадающие в прицел устройства указания;

  «:S» — допускает выбор только одного объекта.

Не понимаю именно такой выбор методов, не хватает воображения :stena:

Судя по контексту, в данном месте предполагается указать единственный элемент из указанных типов в прицеле курсора.

Можно попробовать разбить данное выражение на более простые конструкции.

Например,

   (setq a (ssget «_:S» (if (= what «Area») ‘((0 . «*POLYLINE,ARC,SPLINE,ELLIPSE,CIRCLE,HATCH»))  ‘((0 . «LINE,*POLYLINE,ARC,CIRCLE»))) ))

просто вернет набор ровно из одного элемента подходящего типа (вроде, именно это и требуется) или nil.

Фактически вам будет необходимо дополнительно отработать только именно эту возможность (пустой набор).

PS.  Более серьезная проблема вырисовалась дальше

Похоже 

     (vlax-invoke-method util «GetObjectIdString» obj :vlax-False)

не выдает ожидаемого результата (программа валится).

Возможно, объектная модель нанокада отличается от модели акада и не содержит такого метода.

Не стал выяснять, для чего он в этом коде и можно ли без него обойтись… 


Изменено 22 сентября, 2020 пользователем EdwardSt

Восстановление дуг.

Foxxxy

Участник

Сообщения: 90
Зарегистрирован: 01 авг 2012, 09:15

Репутация: 1
Откуда: г. Санкт-Петербург

Восстановление дуг.

Подскажите, каким штатным инструментом можно восстановить дуги в Mapinfo? При конвертации из AutoCad они аппроксимируются. Спасибо.


Аватара пользователя

Пётр Дубоделов

Завсегдатай

Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58

Репутация: 12
Откуда: Бурашево
Контактная информация:

Re: Восстановление дуг.

Сообщение

Пётр Дубоделов » 15 окт 2012, 10:29

так напрямик — вероятно никаким. когда-то имел подобную задачу: дело в том, что дуги в CAD вычисляются как кривые Безье, в мапинфо же при импорте — как набор прямых сегментов, получаются ломаные линии. помню два пути: конвертировать GlobalMapperом или Corelом, но давно это было…

«Если карта не соответствует местности, доверяй местности.»


Донецков

Гуру

Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44

Репутация: 189

Re: Восстановление дуг.

Сообщение

Донецков » 15 окт 2012, 11:24

В Автокаде делаете конвертацию сплайна в полилинии с сохранением формы, т.е. добавится множетство точек, с последующим экспортов MapInfo…


Foxxxy

Участник

Сообщения: 90
Зарегистрирован: 01 авг 2012, 09:15

Репутация: 1
Откуда: г. Санкт-Петербург

Re: Восстановление дуг.

Сообщение

Foxxxy » 15 окт 2012, 14:40

Если не сложно, подскажите, какая команда в AutoCad для конвертации сплайна. Спасибо.


Донецков

Гуру

Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44

Репутация: 189

Re: Восстановление дуг.

Сообщение

Донецков » 15 окт 2012, 14:56

Посмотрите в редактировании сплайна, а если сразу несколько, то в ToolPac есть конвертор из сплайнов в полилинию…


Foxxxy

Участник

Сообщения: 90
Зарегистрирован: 01 авг 2012, 09:15

Репутация: 1
Откуда: г. Санкт-Петербург

Re: Восстановление дуг.

Сообщение

Foxxxy » 15 окт 2012, 15:44

Обычная дуга не конвертируется в сплайн. Ошибка: Команда: DSTP_CVSPL2PL ; ошибка: неверная строка режима ssget
Это если через ToolPac. Convert-Splines-To Polylines.


Visual LISP, AutoLISP and General Customization


Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.


Showing results for 


Search instead for 

Did you mean: 


  • Back to forum


  • Previous

  • Next

diegolopezsilanes

789 Views, 5 Replies

‎03-14-2019

03:56 AM

ssget error


Hi, I´m trying to make a text fitering tool by heigh. there must be something wrong with the ssget sentence

(ssget ‘((0 . «text,mtext») (40 . sorText)))

(defun C:TH ()
 (if (setq ss0 (ssget ":S" '((0 . "text,mtext")))) ; select single text entity
  (progn
   (redraw (setq ent0 (ssname ss0 0)) 3) ; highlight source text
   (setq sorText (cdr (assoc 40 (entget ent0))))
   ))
(setq sorText (atof sorText))
(setq ss1 (ssget  '((0 . "text,mtext") (40 . sorText))))
  (if SS1
    (progn
      (sssetfirst SS1 SS1)
    )
  )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  • Back to forum


  • Previous

  • Next

5 REPLIES 5

ВeekeeCZ

‎03-14-2019

04:04 AM


@diegolopezsilanes wrote:

Hi, I´m trying to make a text fitering tool by heigh. there must be something wrong with the ssget sentence

(ssget ‘((0 . «text,mtext») (40 . sorText)))

(defun C:TH ()
 (if (setq ss0 (ssget ":S" '((0 . "text,mtext")))) ; select single text entity
  (progn
   (redraw (setq ent0 (ssname ss0 0)) 3) ; highlight source text
   (setq sorText (cdr (assoc 40 (entget ent0))))
   ))
(setq sorText (atof sorText))
(setq ss1 (ssget  (list '(0 . "text,mtext") (cons 40 sorText)))) ;  variables have to be evaluated, not just quoted
  (if SS1
    (progn
      (sssetfirst SS1 SS1)
    )
  )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

diegolopezsilanes

ВeekeeCZ

‎03-14-2019

04:23 AM

(defun C:TH ()
 (if (setq ss0 (ssget ":S" '((0 . "text,mtext")))) ; select single text entity
  (progn
   (redraw (setq ent0 (ssname ss0 0)) 3) ; highlight source text
   (setq sorText (assoc 40 (entget ent0)))
   ))

(setq ss1 (ssget  (list '(0 . "text,mtext") sorText))) ;  variables have to be evaluated, not just quoted
  (if SS1
    (progn
      (sssetfirst SS1 SS1)
    )
  )
)

The assoc function returns a pair, which is exactly what you need for the ssget. So you can use that directly. You still need LIST to get that variable evaluated.

ВeekeeCZ

‎03-14-2019

04:26 AM


@ВeekeeCZ wrote:


@diegolopezsilanes wrote:

Hi, I´m trying to make a text fitering tool by heigh. there must be something wrong with the ssget sentence

(ssget ‘((0 . «text,mtext») (40 . sorText)))

...
; (setq sorText (atof sorText))
(setq ss1 (ssget  (list '(0 . "text,mtext") (cons 40 sorText)))) ;  variables have to be evaluated, not just quoted
...


Also, the red line is wrong. The code 40 is never string! If you omit that it will work too.

diegolopezsilanes


  • Back to forum


  • Previous

  • Next

  • Ошибка неверная ссылка на википедию при верификации вконтакте
  • Ошибка неверная ссылка закладки word
  • Ошибка неверная последовательность байт для кодировки utf8 0x8b
  • Ошибка неверная последовательность байт для кодировки utf8 0x00
  • Ошибка неверная подпись файла