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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для редактирования объектов блока. Можно ли без захода в редактор?

Лисп для редактирования объектов блока. Можно ли без захода в редактор?

Ответ
Поиск в этой теме
Непрочитано 06.08.2018, 15:45 #1
Лисп для редактирования объектов блока. Можно ли без захода в редактор?
RrRR
 
Регистрация: 23.04.2009
Сообщений: 637

Код:
[Выделить все]
 
(defun C:HATCHEDIT_IN_BLOCKS ()
	(setq bl_name (cdr (assoc 2 (entget (car (entsel))))))
	(setq bl_data (tblsearch "block" bl_name))
	(setq	bl_entname_lst (list (setq bl_entname (cdr (assoc -2 bl_data)))))
	(while (setq bl_entname (entnext bl_entname))
		(setq bl_entname_lst (append bl_entname_lst (list bl_entname)))
	); end while
	(mapcar
			'(lambda (x)
	
				(if ( = (cdr (assoc 0 (entget x))) "HATCH")
					(command "-HATCHEDIT" x "" "P" "G" "S" 5 0) ;;????? <Bad Entity name: xxx>
				); end if
			 ); end lambda
	bl_entname_lst)	; end mapcar	 
)
В таком лиспе дефект <Bad Entity name: xxx> при выборе штриховки (да и с любым другим будет тоже самое).
Её DXF коды вытащить могу, но нет возможности редактировать внутри блока с помощью (command …) - сообщение: Bad Entity name. Можно ли как-нибудь редактировать объекты подобным образом без захода в редактор блока?

Последний раз редактировалось RrRR, 06.08.2018 в 15:51.
Просмотров: 1595
 
Непрочитано 06.08.2018, 16:24
#2
Кулик Алексей aka kpblc
Moderator

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


Можно. Меняя соответствующие DXF-коды через subst.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.08.2018, 16:30
#3
RrRR


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно. Меняя соответствующие DXF-коды через subst.
А если нет dxf кодов для таких случаев? Преобразовать через (command...) возможно?
RrRR вне форума  
 
Непрочитано 06.08.2018, 17:02
#4
Кулик Алексей aka kpblc
Moderator

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


Через command - нет. Если нет dxf кодов, то либо ты их просто не увидел, либо используй ActiveX, либо переходи на .NET
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.08.2018, 17:32
#5
RrRR


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


Через vla-... (ActiveX) также пробовал, если объект не в текущем пространстве то и там (command...) не сработает. Тот же эффект <Bad Entity name: xxx>.
Не на все способы модификации есть vl-методы, ведь иногда приходится через command… Или нет?

Буду пробовать через .NET.
Алексей, спасибо за подсказку.
RrRR вне форума  
 
Непрочитано 06.08.2018, 19:08
#6
Кулик Алексей aka kpblc
Moderator

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


Щщас!
Код:
[Выделить все]
 (setq blk_ref (vlax-ename->vla-object (car (entsel "\nSelect block : "))))
(vlax-for subent (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name blk_ref))
  (if (wcmatch (strcase (vla-get-objectname subent)) "*HATCH")
    (setq hatch subent)
    ) ;_ end of if
  ) ;_ end of vlax-for
И выполняем дамп hatch:
Код:
[Выделить все]
_$ (vlax-dump-Object hatch)
; IAcadHatch: AutoCAD Hatch Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 000000013ff33f10>
;   Area (RO) = 531114.0
;   AssociativeHatch = -1
;   BackgroundColor = #<VLA-OBJECT IAcadAcCmColor 0000000039c5d230>
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000002429fac8>
;   Elevation = 0.0
;   EntityTransparency = "ByLayer"
;   GradientAngle = 0.0
;   GradientCentered = -1
;   GradientColor1 = #<VLA-OBJECT IAcadAcCmColor 000000003903c2c0>
;   GradientColor2 = #<VLA-OBJECT IAcadAcCmColor 000000003903c320>
;   GradientName = "LINEAR"
;   Handle (RO) = "267"
;   HasExtensionDictionary (RO) = 0
;   HatchObjectType = 1
;   HatchStyle = 1
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000003903cb68>
;   ISOPenWidth = 100
;   Layer = "0"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   NumberOfLoops (RO) = 1
;   ObjectID (RO) = 42
;   ObjectName (RO) = "AcDbHatch"
;   Origin = (0.0 0.0)
;   OwnerID (RO) = 43
;   PatternAngle = 0.0
;   PatternDouble = 0
;   PatternName (RO) = "SOLID,_O"
;   PatternScale = 1.0
;   PatternSpace = 1.0
;   PatternType (RO) = 1
;   PlotStyleName = "ByLayer"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000003903cbc0>
;   Visible = -1
----- добавлено через ~2 мин. -----
И до кучи:
Код:
[Выделить все]
 _$ (entget (vlax-vla-object->ename hatch) '("*"))

'((-1 . <entity name: 7ffffb06570>)
  (0 . "HATCH")
  (330 . <entity name: 7ffffb051f0>)
  (5 . "267")
  (100 . "AcDbEntity")
  (67 . 0)
  (410 . "Model")
  (8 . "0")
  (100 . "AcDbHatch")
  (10 0.0 0.0 0.0)
  (210 0.0 0.0 1.0)
  (2 . "SOLID,_O")
  (70 . 1)
  (71 . 1)
  (91 . 1)
  (92 . 7)
  (72 . 0)
  (73 . 1)
  (93 . 4)
  (10 2775.58 2381.93 0.0)
  (10 1946.58 2381.93 0.0)
  (10 1946.58 1741.26 0.0)
  (10 2775.58 1741.26 0.0)
  (97 . 1)
  (330 . <entity name: 7ffffb06490>)
  (75 . 1)
  (76 . 1)
  (47 . 3.682)
  (98 . 1)
  (10 2263.45 2035.83 0.0)
  (450 . 1)
  (451 . 0)
  (460 . 0.0)
  (461 . 0.0)
  (452 . 1)
  (462 . 0.0)
  (453 . 2)
  (463 . 0.0)
  (63 . 5)
  (421 . 255)
  (463 . 1.0)
  (63 . 18)
  (421 . 0)
  (470 . "LINEAR")
  (-3 ("ACAD" (1010 0.0 0.0 0.0)) ("GradientColor1ACI" (1070 . 5)) ("GradientColor2ACI" (1070 . 2)))
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для редактирования объектов блока. Можно ли без захода в редактор?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств объектов блока ButcheR AutoCAD 4 03.02.2016 11:57
Лисп по масштабированию объектов. posetitel LISP 4 06.08.2015 09:18
Lisp. авто-нумерация атрибута блока. DonJad LISP 10 26.10.2014 02:04
ЛИСП: как извлечь свойство блока "аннотативный масштаб"? cj_lex LISP 6 25.04.2012 10:36
Нужен Лисп: программный EXPLODE выделенных объектов Кочетков Андрей LISP 25 06.08.2009 12:35