Schöck
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp расчленить объекты СПДС Extension Autodesk

Lisp расчленить объекты СПДС Extension Autodesk

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 28.02.2018, 11:35 #1
Lisp расчленить объекты СПДС Extension Autodesk
fktstv
 
Инженер
 
Регистрация: 20.01.2016
Сообщений: 86

fktstv вне форума Вставить имя

Добрый день.
Прошу помочь чайнику с созданием команды по расчленению объектов СПДС Extension. Возможно ли решить эту задачу средствами LISP?
Код:
[Выделить все]
 
(defun C:SPDS_EXPLODE ( / sel )
(setq sel (ssget "_X" ;[<фильтр>] здесь необходимо создать набор из объектов, созданных в СПДС Extension
          )
      oldqaflags (getvar "qaflags")
)
(setvar "qaflags" 1)
(command "_.EXPLODE" sel "")
(setvar "qaflags" oldqaflags)
(princ)
)
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
Просмотров: 3012
 
Непрочитано 02.03.2018, 15:46
#2
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,193


ExplodeAllProxy?
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.03.2018, 16:20
#3
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Нет, нужно разбить объекты в текущем чертеже с помощью LISP не выгружая сам СПДС. Может быть как-то использовать VLA? Моих скромных познаний, к сожалению, не хватает в данном вопросе. Пока удалось только выяснить что при создании объектов СПДС в чертеже появляется словарь "Siberia" как выделить объекты, связанные с ним?
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.03.2018, 00:00
#4
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,193


А обычный _.EXPLODE может взрывать объекты СПДС? Сам не пользуюсь - не знаю. Постараюсь помочь "по фотографии".
Пока не могу смекнуть, чем нам тут поможет "Сибирь", но есть надежда на пару иных зацепок.
Что появится в командной строке при вводе каждого из двух нижеприведенных выражений с последующим выбором объекта СПДС?
Код:
[Выделить все]
(entget (car (entsel)))
Код:
[Выделить все]
(vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 03.03.2018, 19:23
#5
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Да, обычный _.EXPLODE на машине с установленным СПДС может взорвать его объекты.
Код:
[Выделить все]
Команда: (entget (car (entsel)))
Выберите объект: ((-1 . <Имя объекта: 7ffff705ab0>) (0 . "MULTILEADER") (330 . 
<Имя объекта: 7ffff7039f0>) (5 . "223") (100 . "AcDbEntity") (67 . 0) (410 . 
"Model") (8 . "_Текст") (6 . "Continuous") (100 . "AcDbMLeader") (270 . 2) (300 
. "CONTEXT_DATA{") (40 . 1.0) (10 1395.85 689.698 0.0) (41 . 2.5) (140 . 2.5) 
(145 . 0.0) (174 . 0) (175 . 0) (176 . 0) (177 . 0) (290 . 1) (304 . "1") (11 
0.0 0.0 1.0) (340 . <Имя объекта: 7ffff705a20>) (12 1395.85 689.698 0.0) (13 
1.0 0.0 0.0) (42 . 0.0) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . 
-1073741824) (171 . 1) (172 . 5) (91 . -1073741824) (141 . 0.0) (92 . 0) (291 . 
0) (292 . 0) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) 
(296 . 0) (110 1387.39 663.949 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 
0) (302 . "LEADER{") (290 . 1) (291 . 1) (10 1397.76 689.698 0.0) (11 -1.0 0.0 
0.0) (90 . 0) (40 . 1.0) (304 . "LEADER_LINE{") (10 1387.39 663.949 0.0) (91 . 
0) (170 . 1) (92 . -1056964608) (340 . <Имя объекта: 0>) (171 . -2) (40 . 0.0) 
(341 . <Имя объекта: 0>) (93 . 0) (305 . "}") (271 . 0) (303 . "}") (272 . 9) 
(273 . 9) (301 . "}") (340 . <Имя объекта: 7ffff705160>) (90 . 33939440) (170 . 
1) (91 . -1056964608) (341 . <Имя объекта: 7ffff703940>) (171 . -2) (290 . 0) 
(291 . 0) (41 . 1.0) (342 . <Имя объекта: 7ffff705a50>) (42 . 2.5) (172 . 2) 
(343 . <Имя объекта: 7ffff705a20>) (173 . 0) (95 . 0) (174 . 1) (175 . 0) (92 . 
-1073741824) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) 
(293 . 0) (294 . 0) (178 . 0) (179 . 1) (45 . 1.0) (271 . 0) (272 . 9) (273 . 
9))
Код:
[Выделить все]
Команда: (vl-load-com)

Команда: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)

Выберите объект: ; ISiberiaPositionalLeader: ISiberiaPositionalLeader Interface
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00000001400c7e28>
;   ArrowHeadSize = 2.5
;   ArrowHeadType = 0
;   ContentsPosition = (1396.76 689.698 0.0)
;   ContentsRotation = 0.0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 00000000259e1ed0>
;   Handle (RO) = "223"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000030bea428>
;   Layer = "_Текст"
;   Linetype = "Continuous"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   MaskBackground = -1
;   Material = "ByLayer"
;   Name (RO) = "1"
;   ObjectID (RO) = 42
;   ObjectID32 (RO) = 42
;   ObjectName (RO) = "AcDbMLeader"
;   OverallScale = 1.0
;   OwnerID (RO) = 43
;   OwnerID32 (RO) = 43
;   PlotStyleName = "ByLayer"
;   Style = "Позиционная выноска"
;   TextAlignment = 0
;   TextHeight = 2.5
;   TextStyle = "GOST-2.304_Type-B_italic"
;   Text_1 = "1"
;   Text_2 = ""
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000030be3be0>
;   Visible = -1
; Поддерживаемые методы:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   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
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 04.03.2018, 10:50
#6
Кулик Алексей aka kpblc
Moderator

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


По-моему, это дампы обычных объектов ACAD, и SPDS Ext тут ни при чем.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 04.03.2018, 13:37
#7
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
о-моему, это дампы обычных объектов ACAD, и SPDS Ext тут ни при чем.
Не совсем так. Для сравнения приведу дамп обычного млидера, созданного без участия SPDS Extension:

Код:
[Выделить все]
Команда: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T)

Выберите объект:
; IAcadMLeader2: Интерфейс мультивыносок AutoCAD
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140bc7e28>
;   ArrowheadBlock = ""
;   ArrowheadSize = 3.0
;   ArrowheadType = 0
;   BlockConnectionType = 0
;   BlockScale = 1.0
;   ContentBlockName = ""
;   ContentBlockType = 6
;   ContentType = 2
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0000000024f23400>
;   DogLegged = 0
;   DoglegLength = 8.0
;   EntityTransparency = "Послою"
;   Handle (RO) = "52D"
;   HasExtensionDictionary (RO) = -1
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000003ae0af28>
;   LandingGap = 2.0
;   Layer = "_Текст"
;   LeaderCount (RO) = 1
;   LeaderLineColor = #<VLA-OBJECT IAcadAcCmColor 000000003ae0f960>
;   LeaderLinetype = "ByBlock"
;   LeaderLineWeight = -2
;   LeaderType = 1
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   ObjectID (RO) = 44
;   ObjectID32 (RO) = 44
;   ObjectName (RO) = "AcDbMLeader"
;   OwnerID (RO) = 43
;   OwnerID32 (RO) = 43
;   PlotStyleName = "ByLayer"
;   ScaleFactor = 0.0
;   StyleName = "СПДС"
;   TextAttachmentDirection = 0
;   TextBackgroundFill = 0
;   TextBottomAttachmentType = 0
;   TextDirection = 5
;   TextFrameDisplay = 0
;   TextHeight = 3.0
;   TextJustify = 1
;   TextLeftAttachmentType = 3
;   TextLineSpacingDistance = 5.0
;   TextLineSpacingFactor = 1.0
;   TextLineSpacingStyle = 1
;   TextRightAttachmentType = 3
;   TextRotation = 0.0
;   TextString = "1"
;   TextStyleName = "GOST-2.304_Type-B_italic"
;   TextTopAttachmentType = 0
;   TextWidth = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000003ae0ada0>
;   Visible = -1
; Поддерживаемые методы:
;   AddLeader ()
;   AddLeaderLine (2)
;   AddLeaderLineEx (1)
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBlockAttributeValue (1)
;   GetBlockAttributeValue32 (1)
;   GetBoundingBox (2)
;   GetDoglegDirection (1)
;   GetExtensionDictionary ()
;   GetLeaderIndex (1)
;   GetLeaderLineIndexes (1)
;   GetLeaderLineVertices (1)
;   GetVertexCount (1)
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   RemoveLeader (1)
;   RemoveLeaderLine (1)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetBlockAttributeValue (2)
;   SetBlockAttributeValue32 (2)
;   SetDoglegDirection (2)
;   SetLeaderLineVertices (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()
T
Как видно, ; IAcadMLeader2: Интерфейс мультивыносок AutoCAD /= ; ISiberiaPositionalLeader: ISiberiaPositionalLeader Interface . Мне кажется, это хорошая зацепка и нам остается только отфильтровать объекты использующие Siberia, в чем я и прошу помощи.
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 04.03.2018, 14:24
#8
Setvar

Всего понемногу
 
Регистрация: 10.02.2007
Москва
Сообщений: 564


Цитата:
Сообщение от fktstv Посмотреть сообщение
Мне кажется, это хорошая зацепка и нам остается только отфильтровать объекты использующие Siberia
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
__________________
Установи FILEDIA в 1 и не парься.
Setvar вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 04.03.2018, 14:57
1 | #9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Что появится в командной строке при вводе каждого из двух нижеприведенных выражений с последующим выбором объекта СПДС?
Что показывает нижеприведенное выражение?
Код:
[Выделить все]
(entget (car (entsel)) '("*"))
----- добавлено через ~22 мин. -----
Поставил SPDS ext. Он добавляет расширенные данные.
Цитата:
Команда: (entget (car (entsel)) '("*"))
Выберите объект: ((-1 . <Имя объекта: 7ffff806930>) (0 . "MULTILEADER") (330 . <Имя объекта: 7ffff803a10>) (5 . "36DB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (6 . "Continuous") (100 . "AcDbMLeader") (270 . 2) (300 . "CONTEXT_DATA{") (40 . 1.0) (10 2353.85 613.647 0.0) (41 . 3.5) (140 . 3.0) (145 . 0.0) (174 . 0) (175 . 0) (176 . 0) (177 . 0) (290 . 1) (304 . "nm") (11 0.0 0.0 1.0) (340 . <Имя объекта: 7ffff806760>) (12 2353.85 613.647 0.0) (13 1.0 0.0 0.0) (42 . 0.0) (43 . 0.0) (44 . 0.0) (45 . 0.908571) (170 . 1) (90 . -1073741824) (171 . 1) (172 . 5) (91 . -1073741824) (141 . 0.0) (92 . 0) (291 . 0) (292 . 0) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) (296 . 0) (110 2317.67 599.292 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 0) (302 . "LEADER{") (290 . 1) (291 . 1) (10 2359.75 613.647 0.0) (11 -1.0 0.0 0.0) (90 . 0) (40 . 1.0) (304 . "LEADER_LINE{") (10 2317.67 599.292 0.0) (10 2325.25 609.247 0.0) (91 . 0) (170 . 1) (92 . -1056964608) (340 . <Имя объекта: 0>) (171 . -2) (40 . 0.0) (341 . <Имя объекта: 0>) (93 . 0) (305 . "}") (271 . 0) (303 . "}") (272 . 9) (273 . 9) (301 . "}") (340 . <Имя объекта: 7ffff805a30>) (90 . 33939184) (170 . 1) (91 . -1056964608) (341 . <Имя объекта: 7ffff803940>) (171 . -2) (290 . 0) (291 . 0) (41 . 1.0) (42 . 3.0) (172 . 2) (343 . <Имя объекта: 7ffff806760>) (173 . 0) (95 . 0) (174 . 1) (175 . 0) (92 . -1073741824) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) (293 . 0) (294 . 0) (178 . 0) (179 . 1) (45 . 1.0) (271 . 0) (272 . 9) (273 . 9) (295 . 1) (-3 ("Siberia" (1000 . "PositionalLeader") (1071 . 768) (1000 . "16f0907f-aa8e-41b8-bec8-dedcccb9e81a") (1071 . 7) (1040 . 0.0) (1071 . 1) (1040 . 1.0) (1040 . 2.5))))
Цитата:
Сообщение от fktstv Посмотреть сообщение
нужно разбить объекты в текущем чертеже с помощью LISP не выгружая сам СПДС.
Командными методами только в текущем пространстве. Особенности initcommandversion здесь
Код:
[Выделить все]
(if (setq ss (ssget "_X" (list '(0 . "MULTILEADER")'(-3 ("Siberia"))(cons 410 (getvar "CTAB")))))
  (progn
    (initcommandversion)
    (command "_.explode" ss "")
    )
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 04.03.2018 в 15:19.
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 05.03.2018, 09:43
#10
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Спасибо уважаемому Мастеру за удочку и море! Теперь заработало. Изящное решение с (initcommandversion).

Цитата:
Сообщение от VVA Посмотреть сообщение
Командными методами только в текущем пространстве.
А не командными можно сразу везде? Особенно интересует возможность расчленить объекты во вхождениях блоков.
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 05.03.2018, 13:46
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от fktstv Посмотреть сообщение
А не командными можно сразу везде?
Нет. Ни родные мультивыноски, ни объекты SPDS Extension не имеют метода Explode (например, как у блоков)
Цитата:
; IAcadBlockReference: Интерфейс AutoCAD для работы с вхождениями блоков.
; Значения свойств:
; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013faf3318>
; Document (RO) = #<VLA-OBJECT IAcadDocument 000000000f0ab798>
....
; Visible = -1
; XEffectiveScaleFactor = 1.0
; XScaleFactor = 1.0
; YEffectiveScaleFactor = 1.0
; YScaleFactor = 1.0
; ZEffectiveScaleFactor = 1.0
; ZScaleFactor = 1.0
; Поддерживаемые методы:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConvertToAnonymousBlock ()
; ConvertToStaticBlock (1)
; Copy ()
; Delete ()
; Explode ()
; GetAttributes ()
; GetBoundingBox (2)
; GetConstantAttributes ()
; GetDynamicBlockProperties ()
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; Mirror (2)
; Mirror3D (3)
; Move (2)
; ResetBlock ()
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update ()
----- добавлено через ~4 мин. -----
Цитата:
Сообщение от skkkk Посмотреть сообщение
ExplodeAllProxy?
Цитата:
Сообщение от fktstv Посмотреть сообщение
нужно разбить объекты в текущем чертеже с помощью LISP не выгружая сам СПДС
Как вариант
1. DEMADLOAD=0
2. ExplodeAllProxy
3. DEMADLOAD=3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 05.03.2018, 16:07
#12
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


У меня даже с DEMANDLOAD=0 объекты СПДС Ext все равно не становятся proxy-графикой, соответственно, программа Александра их не обрабатывает.

Добавлено:
С текущим пространством и командными методами кое-как разобрался. Уже почти работает, осталось добиться расчленения объектов во вхождениях блоков, возможно ли это? Если возможно, то как?.
Код:
[Выделить все]
 (defun C:spds_explode	(/ ctabs current-tab ss)
	(setq ctabs (cons "Model" (layoutlist))
	      current-tab (getvar "CTAB")
	) ;_ end of setq
	(repeat (setq i (length ctabs))
	(setvar "CTAB" (nth (setq i (1- i)) ctabs))
		(while (setq ss (ssget	"_X"(list '(-3 ("Siberia"))(cons 410 (getvar "CTAB")))))
			(progn
				(initcommandversion)
				(command "_.explode" ss "")
			) ;_ end of progn
		) ;_ end of while
	) ;_ end of repeat
	(setvar "CTAB" current-tab)
) ;_ end of defun
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004

Последний раз редактировалось fktstv, 05.03.2018 в 16:49.
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 05.03.2018, 17:08
1 | #13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Теоретически возможно так
1. Проходимся по таблице описания блоков
2. Проходимся по описанию блока
2.1 Если в примитиве блока есть элемент с расширенными данными -3 "Siberia", то
2.1.1 Запоминаем последний отрисованный притив (entlast)
2.1.2 Вставляем блок в точку 0,0
2.1.3 Взрываем блок
2.1.4 Выбираем объекты SPDS Ext и взрываем их
2.1.5 С помощью (entnext) собираем образованные примитивы после п. 2.1.1
2.1.6 Переопределяем блок (переменная Expert=5)
2.2 Иначе берем следующий блок
----- добавлено через ~3 мин. -----
fktstv, В цикле while конструкция progn не нужна (строки 08 и 11 поста #12)

----- добавлено через ~12 мин. -----
Цитата:
Сообщение от fktstv Посмотреть сообщение
осталось добиться расчленения объектов во вхождениях блоков, возможно ли это?
Еще вариант попробовать поиграться с редактированием блока "по месту". Там вроде как команды срабатывают. См. команда _-Bedit и _Refedit
calling bedit via lisp
Block Edit Lisp
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 06.03.2018, 11:59
#14
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Вот такой получился костыль. Работает ужасно долго, но работает.
Код:
[Выделить все]
 
    (defun tablelist (s / d r);Written By Michael Puckett. 
      (while (setq d (tblnext s (null d)))
        (setq r (cons (cdr (assoc 2 d)) r))
      );_ while
    );_ defun
(defun C:spds_explode	(/ ctabs current-tab ss blk_tbl)
	(setq ctabs (cons "Model" (layoutlist))
	      current-tab (getvar "CTAB")
	) ;_ end of setq
	(repeat (setq i (length ctabs))
		(setvar "CTAB" (nth (setq i (1- i)) ctabs))
		(while (setq ss (ssget	"_X"(list '(-3 ("Siberia"))(cons 410 (getvar "CTAB")))))
				(initcommandversion)
				(command "_.explode" ss "")
		) ;_ end of while
	) ;_ end of repeat
	(setvar "CTAB" "Model")
	(setq blk_tbl (vl-remove-if '(lambda(x)(wcmatch x "`**")) (tablelist "BLOCK")))
	(repeat (setq i (length blk_tbl))
		(command "_.-bedit" (nth (setq i (1- i)) blk_tbl))
		(while (setq ss (ssget	"_X" (list '(-3 ("Siberia")))))
			(initcommandversion)
			(command "_.explode" ss "")
			(setq x 1)
		) ;_ end of while
		(if x
			(progn (initdia 0) (command "_.bclose" "_s") (setq x nil))
			(progn (initdia 0) (command "_.bclose" "_D") (setq x nil))
		) ;_ end of if
	) ;_ end of repeat
(princ "DONE")
) ;_ end of defun
Уважаемый VVA, подскажите, нельзя ли как-то подавить регенерацию после сохранения блока? Так работало-бы хоть чуть-чуть быстрее.
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004

Последний раз редактировалось fktstv, 06.03.2018 в 15:24.
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 06.03.2018, 15:02
#15
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от fktstv Посмотреть сообщение
регенерацию после сохранения блока?
REGENMODE?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 06.03.2018, 15:40
#16
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Немного поправил #14.
При установке
Цитата:
Сообщение от VVA Посмотреть сообщение
REGENMODE
равным нулю, при закрытии блока возникает еще один лишний диалог, его не загасить (initdia 0).
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 06.03.2018, 18:18
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Как вариант попробуй еще EXPERT=5 и QAFLAGS=5? 6? ...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 06.03.2018, 19:52
#18
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


Цитата:
Сообщение от VVA Посмотреть сообщение
попробуй еще EXPERT=5 и QAFLAGS=5? 6? ...
Попробовал, все равно происходит регенерация.

Команда: REGENMODE
Новое значение REGENMODE <1>: 0
Команда: Qaflags
Новое значение QAFLAGS <0>: 5
Команда: EXPERT
Новое значение EXPERT <0>: 5
Команда: _.-BEDIT
Имя блока или [?]: 123
Выполняется регенерация модели.
Команда: _.BCLOSE
Выполняется регенерация модели.
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.03.2018, 21:34
#19
posetitel


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


А есть возможность встроить запуск команды в меню СПДС Extension Autodesk ?
Отдельную кнопку на панели автокада создавать не хочется, логичнее команда смотрелась бы в меню самого СПДСа
posetitel вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 22.03.2018, 09:25
1 | #20
fktstv

Инженер
 
Регистрация: 20.01.2016
Сообщений: 86


1. В поле 1 выберите фал адаптации, соответствующий установленному СПДС extesion
2. В поле 2 нажмите кнопку "создание новой команды
3. Заполните поле 3, макрос на запуск лиспа будет иметь следующий вид: ^C^C(if (= spds_explode nil)(Load(findfile "spds_explode.lsp")));spds_explode;
4. Перетащите созданную команду в меню СПДС
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 18
Размер:	232.6 Кб
ID:	200442  
__________________
Все, казалось бы, просто, но на самом деле это не так - В. В. Горев, том 1, стр. 338 - М. 2004
fktstv вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp расчленить объекты СПДС Extension Autodesk

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SPDS CS пропадают объекты спдс при создании блока eugenmax ПО от CSoft 1 28.03.2014 07:42
Интеграция Autodesk СПДС в AutoCAD 2012 bolotov Прочее. Программное обеспечение 24 07.01.2013 20:22
СПДС объекты не закрашены Paveldoc Прочее. Программное обеспечение 2 22.08.2012 10:35
Исчезли объекты СПДС из чертежа metalirk AutoCAD 3 27.05.2011 13:06
LISP Отфильтровать выбранные объекты по признаку. KEO LISP 2 20.01.2010 11:32

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||