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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1972531
 
Непрочитано 18.04.2014, 21:11
#2161
gomer

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


ребяты, я тут приболел, мозг отказывается воспринимать реальность... подскажите как повернуть вид в вьюпорте
есть примитивный код но он не много ни мало не работает...
Код:
[Выделить все]
 (defun c:test ()

  (setq vprt (car (entsel)))
  (setq ang (getreal "\nAngle: "))
  
  (setq cen (cdr (assoc 10 (entget vprt))))
  (setq old (getvar 'VPROTATEASSOC))
  
  (setvar 'VPROTATEASSOC 1)
  (vl-cmdf "_.rotate" vprt "" cen ang)
  
  (setvar 'VPROTATEASSOC 0)
  (vl-cmdf "_.rotate" vprt "" cen (- ang) )
  
  (setvar 'VPROTATEASSOC old)
)
gomer вне форума  
 
Непрочитано 19.04.2014, 00:43
#2162
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


vla-put-rot*
или vla-put-a*
думаю может помоч (мне помогало)
Offtop: gomer, сообщение напоминают тот случай когда папы играются с вертолетиками своих дтей
kakt00z вне форума  
 
Непрочитано 19.04.2014, 01:17
#2163
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Он работает - выздоравливай.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.04.2014, 13:50
#2164
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Он работает
ТОгда ж почему он не поворачивает обратно вьюпорт?
gomer вне форума  
 
Непрочитано 21.04.2014, 21:39
#2165
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от gomer Посмотреть сообщение
подскажите как повернуть вид в вьюпорте
Код:
[Выделить все]
 vla-put-TwistAngle
Vov.Ka вне форума  
 
Непрочитано 21.04.2014, 23:09
#2166
gomer

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


Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
vla-put-TwistAngle
Это я пробовал, не то. TwistAngle закрручивает вид в пространстве, а нужно повернуть плоскость xy относительно оси z
gomer вне форума  
 
Непрочитано 22.04.2014, 00:17
#2167
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от gomer Посмотреть сообщение
а нужно повернуть плоскость xy относительно оси z
[IMG]http://i.*******info/i9/90ae47b091820f3bc1bf760e92d9c530/1398111430/4235/373356/Clipboard_1_240.jpg[/IMG][IMG]http://i.*******info/a3/2014-04-21-20-17/i9-6273494/240x136-r/i.gif[/IMG]
Vov.Ka вне форума  
 
Непрочитано 22.04.2014, 23:38
#2168
gomer

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


Vov.Ka, все равно не подходит, вид улетает, а нужно, чтоб вид сохранялся, причем при любом угле, не только 90 градусов
gomer вне форума  
 
Непрочитано 23.04.2014, 08:13 Как переместить объект на лист из модели программно?
#2169
mkung


 
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165


Добрый день.
Есть программка, отрисовывающая выноску по параметрам дуги.
Но пользователь попросил, чтобы выноска была в пространстве листа.
Выноска, как она получается - во вложенном файле.
Проблема в том, что она аннототивная и при использовании команды СМЕНАПРОСТР с масштабом полный алес-капут.
Может кто подскажет как корректно перенести выноску на лист программно?
Заранее благодарен.
Вложения
Тип файла: dwg
DWG 2010
выноска.dwg (364.0 Кб, 2691 просмотров)
mkung вне форума  
 
Непрочитано 23.04.2014, 14:56
#2170
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от gomer Посмотреть сообщение
все равно не подходит, вид улетает
другого выхода у нас нет
будем извращаться
Код:
[Выделить все]
 (defun vk_ZoomTo (Center)
  (vla-ZoomCenter
    (vlax-get-acad-object)
    (vlax-3d-point Center)
    (getvar "VIEWSIZE")
  )
)
(defun vk_CenterViewport (Viewport Center / ADoc)
  (setq	ADoc	 (vla-get-ActiveDocument (vlax-get-acad-object))
	Viewport (if (= (type Viewport) 'ENAME)
		   (vlax-ename->vla-object Viewport)
		   Viewport
		 )
  )
  (vla-put-MSpace ADoc :vlax-true)
  (vla-put-ActivePViewport ADoc Viewport)
  (vk_ZoomTo Center)
  (vla-put-MSpace ADoc :vlax-false)
)
(defun vk_Mx*Vec (m v)
  (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
)
(defun vk_RotatePoint2d	(P Ang / s c)
  (setq	s (sin Ang)
	c (cos Ang)
  )
  (vk_Mx*Vec (list (list c (- s)) (list s c)) P)
)
(defun vk_GetAssVal (Key InList) (cdr (assoc Key InList)))
(defun vk_RotateViewPort (Viewport Ang / TwAng Center)
  (setq	TwAng  (vk_GetAssVal 51 (entget Viewport))
	Center (vk_RotatePoint2d (vk_GetAssVal 12 (entget Viewport)) (- TwAng))
  )
  (vla-put-TwistAngle (vlax-ename->vla-object Viewport) (+ TwAng Ang))
  (vk_CenterViewport Viewport Center)
)
Vov.Ka вне форума  
 
Непрочитано 23.04.2014, 15:03
#2171
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ух а ведь и правда не работает (я про вариант гомера) - он у меня 1 раз отработал (когда говорю такое сам себе не верю - но вроде сам видел - не уж-то померещилось??) и все (я и подумал, что гомер чего-то приболел совсем) - интересно в чем там заковырка.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 23.04.2014, 17:27
#2172
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
интересно в чем там заковырка
Тут два варианта, либо баг, либо фишка. Если Это фишка, то тогда чего я не знаю? Причем не склоняется обратно даже с помощью vla-rotate.
gomer вне форума  
 
Непрочитано 24.04.2014, 15:02
#2173
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


возник вопрос в продолжение темы танцев с viewport
сталкивался ли кто-нибудь с такой ситуацией
создаю программно layout (задаю ему только название)
вставляю в layout видовой экран, включаю его, устанавливаю ему target (вычисленный в координатах модели из параметров блока)
и он волшебным образом смещает вид от указанной точки на величину своего dxf 12 кода
в описании этого кода "View center point (in DCS)", что за DCS пока что не нашел
заметил что он не меняется на разных файлах, НО меняется - при смене принтера по умолчанию и переоткрытии файла
entmod'ом этот код в '(0 0 0) не меняется
где его можно обнулить

PS вопрос снят, был неправильный подход к решению задачи

Последний раз редактировалось kakt00z, 25.04.2014 в 12:49.
kakt00z вне форума  
 
Непрочитано 07.05.2014, 08:12
#2174
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Созрел вопрос, а можно ли средствами автолиспа добавить в настройки автокада путь к вспомогательным файлам? например "M:\дороги\_font for autocad"
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 07.05.2014, 09:18
#2175
Кулик Алексей aka kpblc
Moderator

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


Можно. Вариантов масса:
1. Анализировать (getenv "ACAD") и при необходимости добавлять свой путь (пути)
2. Анализировать (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) и добавлять свой путь (пути)
3. Залезать в реестр (ИМХО наименее удобный способ).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.05.2014, 12:53
#2176
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Думаю №2 самое удобное будет, руки дойдут - займусь. просто, глядя на объектную модель в справке, направления так и не понял без подсказки.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 20.05.2014, 11:22
#2177
seregabs


 
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
<phrase 1=


Уважаемые форумчане! Интересует такой вопрос, сперва принципиально (возможно/нет), после (или в процессе) вставки динамического блока командой из лиспа, выбрать конкретный заранее известный параметр из таблицы выбора этого блока?
seregabs вне форума  
 
Непрочитано 20.05.2014, 12:02
1 | #2178
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


1. Можно.
2. К vla-объекту блока - getdynamicplockproperties->выбор нужного свойства (например по имени ) - vla-put-value порядкового номера.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2014, 12:27
1 | #2179
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


у объекта IAcadDynamicBlockReferenceProperty есть свойство AllowedValues
kakt00z вне форума  
 
Непрочитано 20.05.2014, 16:19
#2180
seregabs


 
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
<phrase 1=


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

Код:
[Выделить все]
(vla-load-com)
(setq es (entlast))
(setq ve (vlax-ename->vla-object es))
(setq DynPrs (vlax-Invoke ve 'GetDynamicBlockProperties))
(foreach Prop DynPrs
  (if (= (vla-get-PropertyName Prop) "PosQuan")
    (vlax-put Prop 'Value "11 pos")
  )
)
)
Не разобрался как обратиться сразу к нужному свойству по имени, сделал перебором всех, сработало. Имя всегда одно и то же ("PosQuan"), устанавливаемое значение всегда известно заранее ( для примера "11 pos"). Как бы это упростить?...

Последний раз редактировалось Кулик Алексей aka kpblc, 20.05.2014 в 16:25.
seregabs вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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