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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вопросы по Lisp

Вопросы по Lisp

Ответ
Поиск в этой теме
Непрочитано 24.01.2006, 07:51 #1
Вопросы по Lisp
Krieger
 
инженер (КМ)
 
Красноярск
Регистрация: 30.10.2004
Сообщений: 3,825

Такой вопросик:
Как сделать набор элементов состоящих, допустим, только из линии?
Т.е. ssget, только выбирать функция должна только то что надо.
Просмотров: 33194
 
Непрочитано 24.01.2006, 08:20
#2
Кулик Алексей aka kpblc
Moderator

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


(ssget "_X" '((0 . "LINE")) - выберет линии по всему файлу
(ssget '((0 . "LINE"))) - отфильтрует отрезки из выбора пользователя
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2006, 08:22
#3
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Код:
[Выделить все]
(ssget "X" '((0 . "LINE")))
Лентяй вне форума  
 
Непрочитано 24.01.2006, 08:25
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


kрЫс, ишо раз поперед дяди сунешься - накажу ! Вот только в Питер приеду...
Лентяй вне форума  
 
Автор темы   Непрочитано 24.01.2006, 08:36
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


А какие функции работают с буфером обмена?
Krieger вне форума  
 
Непрочитано 24.01.2006, 08:48
#6
Кулик Алексей aka kpblc
Moderator

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


> Лентяй : Ай-яй-яй, мама, попка, больно!
> Krieger : Сугубо ИМХО. Кад не очень качественно работает с буфером обмена, да и в многодокументном режиме лисп может вызвать несколько труднопонятных ошибок: тут функция загружена, тут - нет. Тут такие значения, тут - эдакие. Наверняка можно решить по другому (а если нельзя, то попробуй использовать функции vl-bb-*, работающие с внедокументными переменными, либо setenv / getenv, что тоже не фонтан - это же все обнулять надо, а в какой момент выполнять обнуление - кто знает?)... Чего надо сделать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.01.2006, 09:03
#7
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Ну дык: скопировать выбранные примитивы, а потом вставить куда надо.
Все что пришло на ум
(command "_Copybase" HP a "")
(command "_Pasteclip" EP)
hp и ep - точки, а - набор примитивов.
Krieger вне форума  
 
Автор темы   Непрочитано 24.01.2006, 09:07
#8
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Можно создать блок, потом вставить куда надо, потом его удалить.
Как это будет выглядеть на лиспе? Через command?
Krieger вне форума  
 
Непрочитано 24.01.2006, 09:08
#9
Кулик Алексей aka kpblc
Moderator

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


Так это проще сделать так, я думаю:
Код:
[Выделить все]
(defun test-copy (/ selset)
  (setq selset (ssget '((0 . "LINE"))))
  (if selset
    (command "_.copy" selset "" pause pause)
    ) ;_ end of if
  ) ;_ end of defun
---
Добавлено:
Вставлять как блок можно, конечно, только вряд ли это требуется в этой задаче. А если сильно надо, то тогда уж смотреть на ruCAD с его решениями.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2006, 09:10
#10
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Krieger: Ну дык: скопировать выбранные примитивы, а потом вставить куда надо.
Не понял :? ! их что - в другой файл копировать надо? Тогда - ActivX-ом их, болезных!
Лентяй вне форума  
 
Непрочитано 24.01.2006, 09:28
#11
Кулик Алексей aka kpblc
Moderator

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


> Лентяй : А разве возможно через такой метод интерактивно получить точку вставки в неактивном документе? Ее же надо как-то хитро задавать ИМХО... В общем, головняк. Я б постарался не связываться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.01.2006, 09:41
#12
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Цитата:
Сообщение от Лентяй
Не понял :? ! их что - в другой файл копировать надо? Тогда - ActivX-ом их, болезных!
Да нет, все там-же.

kpblc
Малость не то, надо какой-то аналог ctrl+c, ctrl+v

А зачем там функция if?
Krieger вне форума  
 
Непрочитано 24.01.2006, 09:47
#13
Кулик Алексей aka kpblc
Moderator

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


IF - чтобы отследить, был ли выбор. Если выбора не было, то ничего не делается. Так что ничего сверхъестественного
Если надо именно полный аналог, то тогда действительно без создания временного анонимного блока не обойтись (а потом его разбивать)...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.01.2006, 09:47
#14
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Krieger: Да нет, все там-же
Вторично не понял - на хрена тогда бувер? Или между копированием и вставкой предполагаются какие-нить иные действия?
Цитата:
А зачем там функция if?
А это - вредное влияние Fatty и Apelsinov'а. Все - от неуверенности в себе и работе своих программ.
Лентяй вне форума  
 
Непрочитано 24.01.2006, 09:52
#15
Кулик Алексей aka kpblc
Moderator

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


А также ShaggyDoc, Alasher, {Smirnoff}... Если есть возможность сделать неправильно, рано или поздно найдется Кулибин, который именно так и сделает. Функция должна быть надежна, как шпала. Или как топор - кому как больше нравится . Но работать она должна всегда и в любых режимах.
От компа за лишнюю проверку не убудет, а мне поспокойнее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.01.2006, 09:57
#16
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Цитата:
Сообщение от Лентяй
Или между копированием и вставкой предполагаются какие-нить иные действия?
Точно! Извиняюсь, что не смог нормально сформулировать сразу.
Krieger вне форума  
 
Непрочитано 24.01.2006, 10:14
#17
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Krieger: Точно! Извиняюсь, что не смог нормально сформулировать сразу.
Предупреждать надо! Я тут прикинул - можно нарисовать связку из двух функций. Одна собирает объекты для копирования, вторая - собственно копирует. Только вот вызов будет производится раздельно. Продолжать ли? Если да, то нужен ли фильтр примитивов и какой? Отвечать бысрто, а то уйду спать[sm1202].
Лентяй вне форума  
 
Непрочитано 24.01.2006, 10:51
#18
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Krieger, ловите прогу, ибо добр аз есмь днесь. Первая создает набор для копирования, вторая - копирует.
Код:
[Выделить все]
(defun C:Df_Copy ( / sss)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object))
        sss (vla-get-SelectionSets adoc)
        df_css (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list sss "df_css")))
              (vla-add sss "df_css") (vla-item sss "df_css")));setq
  (if (> (vla-get-count df_css) 0) (vla-clear df_css))
  (prompt "\nSelect Objects")
  (vla-SelectOnScreen df_css (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list "*Line")))
);Df_Copy
;
(defun C:Df_Pst ( / util pt0 pt1)
  (setq util (vla-get-utility adoc)
        pt0 (vla-getpoint util nil "Specify base point of displacement: ")
        pt1 (vla-getpoint util nil "Specify second point of displacement: "))
  (vlax-for obj df_css (vla-copy obj) (vla-move obj pt0 pt1))
);Df_Pst
DF - значит "Deffered" - задержанный (-ая). Фильтр "*Lines" можно заменить на любой другой, или отменить вовсе. Для этого нужно стереть все, что после (vla-SelectOnScreen df_css . Состав набора сохраняется, пока не будет создан новый набор. Пользуйтесь на здоровье и не забывайте денно и нощно благодарить меня за то, что я есть. [sm3514] Если что - свистите. [sm1400]
Лентяй вне форума  
 
Автор темы   Непрочитано 24.01.2006, 11:35
#19
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Лентяй
Спасибо, пригодится.
Цитата:
Для этого нужно стереть все, что после (vla-SelectOnScreen df_css
Для чего? Если правильно понял это чтоб вообще фильтра небыло.

Не совсем ctrl+c, т.к. после удаления примитивов которые значатся в наборе копировать будет нечего.
Krieger вне форума  
 
Автор темы   Непрочитано 24.01.2006, 12:09
#20
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Еще такой вопросик:
Существует набор A из одного объекта (примитива):
(setq A (ssget))
Как узнать его имя (Entity name)?
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вопросы по Lisp

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

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