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

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

Вопросы по Lisp

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

Такой вопросик:
Как сделать набор элементов состоящих, допустим, только из линии?
Т.е. ssget, только выбирать функция должна только то что надо.
Просмотров: 33247
 
Непрочитано 27.04.2006, 01:34
#41
Лентяй

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


kpblc:
Цитата:
Я бы попробовал примерно так:
Хорошие дети так не поступают! [sm2001] Хорошие дети поступают так: [sm2001]
Код:
[Выделить все]
(defun C:DbrFnd ( / adoc util obj)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
	util (vla-get-utility adoc))
  (vla-getEntity utli 'obj nil)
  (setq ents (vlax-safearray->list (vlax-variant-value (vla-explode obj))))
  (foreach ent ents (print ent))
);
Или так:
Код:
[Выделить все]
(defun ents (obj)
  (vlax-safearray->list (vlax-variant-value (vla-explode obj)))
 );
Алаверды!
Лентяй вне форума  
 
Автор темы   Непрочитано 27.04.2006, 06:19
#42
Krieger

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


to kpblc
Цитата:
* Примеры вызова:
(_kpblc-get-block-content (cdr (assoc 2 (entget(car(entsel))))))
перепутано get с block
Спасибо.

to Лентяй
Твой пост для Крыса?
Если не только для него, то объясни шо с этим делать. Не все-ж такие умные.
Код:
[Выделить все]
error: bad argument type: VLA-OBJECT nil
Krieger вне форума  
 
Непрочитано 27.04.2006, 07:33
#43
Лентяй

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


Цитата:
Сообщение от Krieger
to Лентяй
Твой пост для Крыса?
Если не только для него, то объясни шо с этим делать. Не все-ж такие умные.
Код:
[Выделить все]
error: bad argument type: VLA-OBJECT nil
Шо делать. шо делать - ачепятку исправить, вот шо Четвертая строка должна быть:
Код:
[Выделить все]
(vla-getEntity util 'obj nil "Выбрать блок, который взорвать нахер : " )
,
в смысле "утиль". Тогда будет ляпота, щастя и благорастворение воздУхов.
Лентяй вне форума  
 
Непрочитано 27.04.2006, 11:02
#44
aldt


 
Регистрация: 12.02.2006
Сообщений: 114


ГУРУ_ActiveX!!!
Подскажите пожалуйста как средствами ActiveX получить доступ к PolyFaceMeshVertex и PolyFaceRecord?

Заранее благодарен!
aldt вне форума  
 
Непрочитано 27.04.2006, 11:19
#45
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(setq mesh (vlax-ename->vla-object (car (entsel))))
(vlax-dump-Object mesh t)
; IAcadPolygonMesh: AutoCAD PolygonMesh Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00b9b5e4>
;   Coordinate = ...Indexed contents not shown...
;   Coordinates = (1217.91 400.307 0.0 1397.39 2234.75 0.0 ... )
;   Document (RO) = #<VLA-OBJECT IAcadDocument 01128f90>
;   Handle (RO) = "E5"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 062c2e14>
;   Layer = "0"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   MClose = 0
;   MDensity = 0
;   MVertexCount (RO) = 2
;   NClose = 0
;   NDensity = 0
;   NVertexCount (RO) = 2
;   ObjectID (RO) = 2130059112
;   ObjectName (RO) = "AcDbPolygonMesh"
;   OwnerID (RO) = 2130058488
;   PlotStyleName = "ByLayer"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 062c2c40>
;   Type = 0
;   Visible = -1
; Methods supported:
;   AppendVertex (1)
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   Explode ()
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()
T
Это? Хотя я и не гуру ActiveX
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.04.2006, 11:47
#46
Лентяй

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


Я думаю. что имелось в виду
Код:
[Выделить все]
(vla-getEntity util 'obj nil "Выбрать сеть : " )
(if (= (vla-get-ObjectName obj) ""AcDbPolygonMesh")
    (setq prp (vlax-get-property obj '*ИМЯ_СВОЙСТВА*)));if
А дальше делай с этим свойствам. что тебе нравится...
Лентяй вне форума  
 
Непрочитано 27.04.2006, 12:42
#47
aldt


 
Регистрация: 12.02.2006
Сообщений: 114


Kpblc и Лентяй
Спасибо за ответ, но мне нужен доступ к FaceRecord и FaceVeertex ?
Свойства:
; IAcadPolyfaceMesh: IAcadPolyfaceMesh Interface
; Property values:
; Application (RO) = #<VLA-OBJECT IAcadApplication 00d077b4>
; Coordinate = ...Indexed contents not shown...
; Coordinates = (9.0 10.0 0.0 8.2 10.0 0.0 ... )
; Document (RO) = #<VLA-OBJECT IAcadDocument 0141ac48>
; Handle (RO) = "4C5"
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 1284d2b4>
; Layer = "0"
; Linetype = "CONTINUOUS"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; NumberOfFaces (RO) = 112
; NumberOfVertices (RO) = 130
; ObjectID (RO) = 2130370280
; ObjectName (RO) = "AcDbPolyFaceMesh"
; OwnerID (RO) = 2130369968
; PlotStyleName = "ByLayer"
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 1284d240>
; Visible = -1
Они отсутствуют в свойствах, через ent* функции доступ к ним возможен это подпримитивы
то что представлено вами это PolygonMesh а мне нужен PolyFaceMesh
aldt вне форума  
 
Непрочитано 27.04.2006, 13:38
#48
Кулик Алексей aka kpblc
Moderator

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


Есть предложение - приложить файлик и показать, как ты добирался до этих элементов.
Провокационный вопрос: если можно добраться через (entget), то зачем использовать именно vla?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.04.2006, 20:09
#49
Лентяй

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


Цитата:
Сообщение от kpblc
Провокационный вопрос: если можно добраться через (entget), то зачем использовать именно vla?
Затем, что мне! ТАК!! НДРАВИЦЦА!!!
Лентяй вне форума  
 
Автор темы   Непрочитано 13.07.2006, 07:19
#50
Krieger

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


Моя программа выполняет несколько действий:
Сначала отключаем привязки, потом что-то чертим (через функцию command), восстанавливаем привязки. Пользователь после нажатия кнопки увидел полученный результат, но он ему не понравился и нажимает ctrl+z - ничего не происходит, нажимает еще раз - начерченный объект исчезает. На этом он успокаивается и продолжает работать дальше и весьма скоро замечает что привязки-то не работают.
Вообщем вопрос, как сделать чтобы ctrl+z отменял всю пользовательскую функцию скопом, за раз.
Krieger вне форума  
 
Непрочитано 13.07.2006, 08:09
#51
Кулик Алексей aka kpblc
Moderator

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


Одним из следующих способов:
1. либо поставить (command "_.undo" "_begin") в начале и (command "_.undo" "_end") в конце. Лично мне такой подход просто не очень нравится, но это дело вкуса
2. Либо получить указатель на активный документ (setq adoc (vla-get-activedocument (vlax-get-acad-object))) и опять же поставить метки начала и конца:
(vla-startundomark adoc)
;; чего-то творим
(vla-endundomark adoc)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.07.2006, 08:22
#52
Krieger

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


Спасибо.
А в чем-нибудь проявляется преимущество одного способа над другим?
Krieger вне форума  
 
Непрочитано 13.07.2006, 08:38
#53
Кулик Алексей aka kpblc
Moderator

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


Да в общем-то нет. Просто выполнение (command) при cmdecho=1 оставляет следы в ком.строке, а (vla) - нет. Все равно ж из функции выход "тихий" (т.е. в конце стоит (princ))?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.07.2006, 09:42
#54
Krieger

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


Цитата:
Сообщение от kpblc
Все равно ж из функции выход "тихий" (т.е. в конце стоит (princ))?
Ну, эхо я отключаю, а (princ) мне по баробану...

Например:
Код:
[Выделить все]
;;;---------------------------------------
;;;Функция: Kr_AngleWeld (layer / pt1 pt2 pt3 c an scx scy C1 C2 C3 C4 C5);
;;;---------------------------------------
;;;Описание: функция отрисовывает угловой заводской катет шва, а точнее просто вставляет блок правильно отмасштабированный и повернутый
;;;Параметры: layer - слой
;;;Пример: (Kr_AngleWeld "сварка")
;;;---------------------------------------

(defun Kr_AngleWeld (layer / pt1 pt2 pt3 c an scx scy C1 C2 C3 C4 C5)
	(setq pt1 	(getpoint "\nУкажите вершину треугольника")
	      pt2	(getpoint pt1 "\nУкажите катет")
	      pt3	(getpoint pt1 "\nУкажите второй катет")
	      c		(- (max (angle pt1 pt2) (angle pt1 pt3)) (min (angle pt1 pt2) (angle pt1 pt3)))
	      an	(- (+ (/ c 2) (min (angle pt1 pt3) (angle pt1 pt2))) (/ (* pi 90) 180))
	      scy	(/ (cos (/ c 2)) 0.70710678)
	      scx	(/ (sqrt (- 2 (* 2 (cos (/ c))))) 1.41421356)
	      C1 	(Getvar "Osmode")
	      C2 	(Getvar "AUTOSNAP")
	      C3 	(Getvar "Orthomode")
	      C4 	(Getvar "Clayer")
	      C5	(Getvar "Cmdecho")
  )
  (setvar "Cmdecho" 0)
  (command "_.undo" "_begin")
  (command "_-Layer" "_Make" layer "")
  (setvar "Osmode" 0)
  (setvar "AUTOSNAP" 0)
  (setvar "Orthomode" 0)
  (setvar "Clayer" layer)
  (command "_-insert" "PSK_Svarka" pt1 scx scy (/ (* an 180) pi))
  (setvar "Osmode" C1)
  (setvar "AUTOSNAP" C2)
  (setvar "Orthomode" C3)
  (setvar "Clayer" C4)
  (setvar "Cmdecho" C5)
  (command "_.undo" "_end")
  (command "_scale" "_L" "" pt1 pause)
 );end defun

Для блока:
[ATTACH]1152769334.dwg[/ATTACH]
Krieger вне форума  
 
Непрочитано 13.07.2006, 10:52
#55
Кулик Алексей aka kpblc
Moderator

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


Гхм... Я б и рад файлик посмотреть, но 2007-й не установлен...
Попробуй такой код, у меня вроде как сработало:
Код:
[Выделить все]
;|=============================================================================
*    Функция отрисовки шва.
*    Параметры вызова:
*	layer-name	имя слоя, на который идет вставка. nil -> вставляется
*			на текущий слой
*    Примеры вызова:
(_kpblc-weld-seam nil)
=============================================================================|;
(defun _kpblc-weld-seam
       (layer-name / adoc weld_seam blk_ent ins_pt cath1 cath2)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  ;; Проверяем, если ли вообще блок сварочного шва.
  (if (not (tblobjname "block" "weld_seam"))
    (progn ; Блок не найден, создаем, а что делать?
      (setq weld_seam (vla-add (vla-get-blocks adoc)
			       (vlax-3d-point '(0. 0. 0.))
			       "weld_seam"
			       ) ;_ end of vla-add
	    ;; Теперь засовываем в этот блок солид
	    blk_ent   (vla-addsolid
			weld_seam
			(vlax-3d-point '(0. 0. 0.))
			(vlax-3d-point '(1. 0. 0.))
			(vlax-3d-point '(0. 1. 0.))
			(vlax-3d-point '(0. 0. 0.))
			) ;_ end of vla-AddSolid
	    ) ;_ end of setq
      (vla-put-layer blk_ent "0")
      (vla-put-color blk_ent 0)
      (vla-put-lineweight blk_ent aclnwtbyblock)
      (vla-put-linetype blk_ent "byBlock")
      ) ;_ end of progn
    ) ;_ end of if
  ;; Теперь вставляем блок:
  (if (setq ins_pt (getpoint "\nТочка вершины треугольника <Выход> : "))
    (progn
      (if (not (setq cath1 (getpoint ins_pt "\nПервый катет шва (горизонт.) <1> : ")))
	(setq cath1 (list (+ (car ins_pt) 1.) (cadr ins_pt) (caddr ins_pt)))
	) ;_ end of if
      (if (not (setq cath2 (getdist ins_pt "\nВторой катет шва (верт.) <1> : ")))
	(setq cath2 1.)
	) ;_ end of if
      (setq weld_seam (vla-insertblock
			(if (and (zerop (vla-get-activespace adoc))
				 (= :vlax-false (vla-get-mspace adoc))
				 ) ;_ end of and
			  (vla-get-paperspace adoc)
			  (vla-get-modelspace adoc)
			  ) ;_ end of if
			(vlax-3d-point ins_pt)
			"weld_seam"
			(distance ins_pt cath1)
			cath2
			1.
			(angle ins_pt cath1)
			) ;_ end of vla-insertblock
	    ) ;_ end of setq
      ;; И меняем его настройки
      (if layer-name
	(vla-add (vla-get-layers adoc) layer-name)
	(setq layer-name (getvar "clayer"))
	) ;_ end of if
      (vla-put-layer weld_seam layer-name)
      (vla-put-color weld_seam 256)
      (vla-put-lineweight weld_seam aclnwtbylayer)
      (vla-put-linetype weld_seam "ByLayer")
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
===
Добавлено:
Чуток подправил код - там было непонятно, какой катет каким будет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.07.2006, 12:53
#56
Krieger

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


:shock:
Молодо - зелено.
Цитата:
у меня вроде как сработало
Дык и моя прекрасно работает (теперь вот и undo добавил).
Хотя может действительно создавать блоки не отходя от кассы...

Блок в 2000-м:
[ATTACH]1152780812.dwg[/ATTACH]
Krieger вне форума  
 
Непрочитано 13.07.2006, 13:04
#57
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Krieger
:shock:
Молодо - зелено.
:?:
Насчет блока... Можно, конечно, и полилинию туда засобачить, и штриховку. Просто я со сваркой пока не воевал особо, вот и сделал как мог
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.07.2006, 06:50
#58
Krieger

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


Цитата:
Сообщение от kpblc
Цитата:
Сообщение от Krieger
:shock:
Молодо - зелено.
:?:
Это я про себя. (в ActivX пока не бум-бум).

Цитата:
Сообщение от kpblc
Насчет блока... Можно, конечно, и полилинию туда засобачить, и штриховку. Просто я со сваркой пока не воевал особо, вот и сделал как мог
Это как раз не принципиально. Блок выложил чтоб ты мог мою прогу посмотреть. У тебя треугольники получаются всегда прямоугольные, а у меня под любой угол подстраиваются. См. рис. Ну да ладно.

Подскажи как найти в списке стилей (например dimstyle), стиль который бы содержал в названии слова data?
[ATTACH]1152845400.gif[/ATTACH]
Krieger вне форума  
 
Непрочитано 14.07.2006, 07:21
#59
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


По структуре программы для рисования разреза шва.

1. Должен быть отрисован разрез с заданным катетом, а в программах запрашиваются точки, то есть размер катета вычисляется. Для получения требуемого катета надо достаточно сложно указать точку, например, со смещением. Иначе будет "на глаз".

Лучше хранить значение катета (например, обычный 6 мм), и только при его изменении - сохранять. Или 2 размера, если они могут быть разные

2. При запросе вершины выводить текущий катет и иметь опцию для его изменения.

3. Зациклить ввод точки вершины (с выходом из цикла при пустом вводе), так как таких треугольничков обычно надо сразу несколько нарисовать, зачем же вызывать заново программу.

4. Сам треугольник все-таки лучше блоком. А если завтра захочется треугольничек "с брюшком", то не надо переписывать достаточно сложное программное создание определения блока.

5. Запрашивать не точки катета, а его ориентацию (поворот). При этом ориентация может указываться проще, чем одновременное указание конца катета для определения его размера.

6. А если шов не в виде прямоугольного треугольника, а косого? Этот вариант тоже надо учитывать. В этом случае может быть запрос и направления второго катета, но тогда не блоком рисовать.

И, конечно, обработка ошибок. Чтоб программа была надежной, как лом.

В варианте Kr_AngleWeld, "прекрасно работает" пока программу использует сам автор. Достаточно прервать при выполнении любого ввода и далее будет прерывание функции. А обработчика прерывания нет. К тому же зачем-то после вставки еще и ручное масштабирование выполняется. Тоже не защищенное от ошибки. Если при запросе "Укажите катет" запрашивался не размер катета, а только его направление, то так и надо спрашивать. Но зачем же дублировать?
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 14.07.2006, 08:13
#60
Krieger

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


Ну вот, а начиналось все:
Цитата:
Сообщение от Krieger
Вообщем вопрос, как сделать чтобы ctrl+z отменял всю пользовательскую функцию скопом, за раз.
Цитата:
Сообщение от ShaggyDoc
1. Должен быть отрисован разрез с заданным катетом, а в программах запрашиваются точки, то есть размер катета вычисляется. Для получения требуемого катета надо достаточно сложно указать точку, например, со смещением. Иначе будет "на глаз".

Лучше хранить значение катета (например, обычный 6 мм), и только при его изменении - сохранять. Или 2 размера, если они могут быть разные

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

Цитата:
3. Зациклить ввод точки вершины (с выходом из цикла при пустом вводе), так как таких треугольничков обычно надо сразу несколько нарисовать, зачем же вызывать заново программу.
Согласен. Надо доделать. Кстати как грамотно выйти при пустом вводе из функции while?

Цитата:
4. Сам треугольник все-таки лучше блоком. А если завтра захочется треугольничек "с брюшком", то не надо переписывать достаточно сложное программное создание определения блока.
Бум вставлять.

Цитата:
5. Запрашивать не точки катета, а его ориентацию (поворот). При этом ориентация может указываться проще, чем одновременное указание конца катета для определения его размера.

6. А если шов не в виде прямоугольного треугольника, а косого? Этот вариант тоже надо учитывать. В этом случае может быть запрос и направления второго катета, но тогда не блоком рисовать.
У меня это все учитывается, причем все-таки вставляю блок (если его правильно отмасштабировать, то любой угол можно выдержать).

Цитата:
И, конечно, обработка ошибок. Чтоб программа была надежной, как лом.
Согласен.

Цитата:
В варианте Kr_AngleWeld, "прекрасно работает" пока программу использует сам автор.
Я не один пользуюсь, пока проблема возникла только с отменой, которая теперь решена.

Цитата:
Достаточно прервать при выполнении любого ввода и далее будет прерывание функции. А обработчика прерывания нет.
Ну и шут с ним, чем это грозит здесь? Отключение и включение привязок стоит таким образом, что при обрыве функции это ни чем не грозит. А так..., ну высветится сообщение об ошибке...

Цитата:
К тому же зачем-то после вставки еще и ручное масштабирование выполняется. Тоже не защищенное от ошибки. Если при запросе "Укажите катет" запрашивался не размер катета, а только его направление, то так и надо спрашивать. Но зачем же дублировать?
Вот тут да, если оборвать масштабирование треугольник останется с катетом=1 и потом его уже надо удалять. А зачем масштабирую уже сказал, причем это масштабирование должно буть визуальным - перемещаю курсор - увеличивается катет.

Из истории:
Сначала вставлял просто блок - прямоугольный треугольник и был у меня ма-а-а-ахонький макросик:
Код:
[Выделить все]
^C^C_-INSERT;Svarka;\;;\
и был доволен
Потом оказалось что этого мало и надо бы сделать для разных углов (не только прямоугольные). Да еще иногда масштабировать.
И написал макросик посложнее:
Код:
[Выделить все]
^C^C^P(setq pt1 (getpoint) pt2 (getpoint pt1) pt3 (getpoint pt1));\\\_Cal;C=Ang(pt1,pt2,pt3);_Cal;an=(C/2+Ang(pt1,pt2))-90;(setq scy (/ (cos (* (/ c 2 180) pi)) 0.70710678) scx (/ (sqrt (- 2 (* 2 (cos (* (/ c 180) pi))))) 1.41421356));_-insert;svarka;!pt1;!scx;!scy;!an;(setq pt2 nil pt3 nil c nil an nil scx nil scy nil);_scale;_L;;!pt1;\(setq pt1 nil)
Причем это урезанный вариант. И был еще больше доволен.
Потом решил таки переделать в lsp. И теперь там 30строк. У Крыса в два раза больше. И оказалось что все хреново.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вопросы по Lisp

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

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