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

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

размерные стили

Ответ
Поиск в этой теме
Непрочитано 07.02.2006, 11:16 #1
размерные стили
Александер
 
Регистрация: 15.06.2005
Сообщений: 184

Возникла такая проблема:
открыл старый чертеж, беру любой размер, растягиваю его, а значение не меняется. Начинаю его редактировать - а там просто значение, например 1000, а не <> как должно быть, размер не разчленен.
получилось, что <> почему то поменялось на конкретное значение размера, как можно его назад исправить?
спасибо.
Просмотров: 8333
 
Непрочитано 07.02.2006, 11:18
#2
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
<phrase 1=


Назад исправить - опять вбить <>

А мне наоборот интересно, как можно ТАК сделать.. желательно для кучи размеров (всех в чертеже). Может кто знает?)
__________________
Камень на камень, кирпич на кирпич..
Om81 вне форума  
 
Непрочитано 07.02.2006, 11:25
#3
Кулик Алексей aka kpblc
Moderator

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


Если не проверять заблокированность и замороженность слоев, то
Код:
[Выделить все]
(defun c:drest (/ adoc selset item)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (if (setq selset (ssget '((0 . "DIMENSION"))))
    (while (and selset
                (> (sslength selset) 0)
                ) ;_ end of and
      (setq item (ssname selset 0))
      (ssdel item selset)
      (setq item (vlax-ename->vla-object item))
      (vla-put-textoverride item "")
      ) ;_ end of while
    ) ;_ end of if
  (vla-endundomark adoc)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2006, 11:26
#4
Александер


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


а наоборот то зачем? :shock:

ручками все править - конечно 100% метод, но размеров то очень много... так и ручки отсохнуть могут
может еще какие соображения есть?
Александер вне форума  
 
Автор темы   Непрочитано 07.02.2006, 11:41
#5
Александер


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


kpblc спасибо, как всегда выручаешь
Александер вне форума  
 
Непрочитано 07.02.2006, 11:47
#6
Кулик Алексей aka kpblc
Moderator

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


Хех, только про слои не забудь... Или вот вариант, все то же самое, но не даст (насколько мне помнится) выбрать объекты на заблокированных слоях:
Код:
[Выделить все]
(defun c:drest (/ adoc selset item)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (if (setq selset (ssget "_:L" '((0 . "DIMENSION"))))
    (while (and selset
                (> (sslength selset) 0)
                ) ;_ end of and
      (setq item (ssname selset 0))
      (ssdel item selset)
      (setq item (vlax-ename->vla-object item))
      (vla-put-textoverride item "")
      ) ;_ end of while
    ) ;_ end of if
  (vla-endundomark adoc)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2006, 11:58
#7
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
<phrase 1=


Наоборот для того, чтобы отдать потом человеку, который второй раз в жизни видит автокад и будет менять масштаб чертежа (с помощью scale, конечно ))))

Кстати, вашу проблему решить очень просто так: выбрать все размеры, в properties открыть вкладку text и в поле text override вбить <>
Разве нет?..
__________________
Камень на камень, кирпич на кирпич..
Om81 вне форума  
 
Непрочитано 07.02.2006, 12:11
#8
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


Om81, надо в поле text override всё удалить....
Хмурый вне форума  
 
Автор темы   Непрочитано 07.02.2006, 13:39
#9
Александер


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


Согласен.
у г-на kpblcа так и сделано, только программно, а не ручками в свойствах, очень удобно.
всем спасибо.
Александер вне форума  
 
Непрочитано 07.02.2006, 13:45
#10
Кулик Алексей aka kpblc
Moderator

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


Ну раз уж так хочется и обратное телодвижение сделать, хватайте
Код:
[Выделить все]
(defun c:dimover (/ adoc selset item)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (if (setq selset (ssget "_:L" '((0 . "DIMENSION"))))
    (while (and selset
                (> (sslength selset) 0)
                ) ;_ end of and
      (setq item (ssname selset 0))
      (ssdel item selset)
      (setq item (vlax-ename->vla-object item))
      (vla-put-textoverride item (rtos (vla-get-measurement item) 2 (getvar "luprec")))
      ) ;_ end of while
    ) ;_ end of if
  (vla-endundomark adoc)
  ) ;_ end of defun
Единственное но - точность отображения зависит от системной переменной luprec. Если хоцца чего-то иного, заменить надо будет (getvar "luprec") на требуемую точность.
---
P.S. кого-кого из меня сделали?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2006, 14:10
#11
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Ребята, но нельзя-же на все даже редко встречающиеся случаи иметь лиспы. Это какая-же у вас коллекция получится-в ней-же все забудется, что для чего. Моя коллекция около сотни, так она уже требует список на бумаге, краткое описание, что каждый делает и каким словом вызывается. Я очень осторожно добавляю сюда новенькое. Для KPBLC, понятно, практика, его ночью разбуди -напишет между снами, но большинство подобных лиспов-однодневки. Стоит-ли поощрять такие желания?
Vova вне форума  
 
Непрочитано 07.02.2006, 14:20
#12
Кулик Алексей aka kpblc
Moderator

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


> Vova : так их я не вызываю с клавы - помрешь же колотить (_kpblc-layer-create-and-activate '(("name" . "ЭО-Оборудование") ("ltype" . "ЭО") ("lw" . "25))). Сделана кнопка в своем меню и в toolpalette болтается нструмент, оно и делает все, чего надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2006, 14:26
#13
Александер


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


kpblc
я тоже пытаюсь освоить программирование.
просмотрел твои программки, возник такой вопрос
откуда взялось
vla-startundomark
и что она делает

vla-put-textoverride
тут вроде понятно, что сист. пер. присваиваем пустую строку "" - чтобы размеры корректно отображались.
но тоже вопрос почему в хелпе и в книгах по программированию нет таких ф-ций?
с
vlax-ename->vla-object
тоже вроде все понятно.
сначала взяли vla-объект, преобразовали его в обычный, изменили кое-что, а потом уже измененный преобразовали опять в vla-объект.
Александер вне форума  
 
Непрочитано 07.02.2006, 14:45
#14
Кулик Алексей aka kpblc
Moderator

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


Стоп, давай чуть-чуть сначала, гуд?
1. (vlax-ename->vla-object) - Это преобразование примитива в vla-указатель на него. Например, по (entsel) ты получаешь нечто типа (<Entity name: 7ef7dcb0> (1462.45 887.959 0.0)) - т.е. список из указателя на примитив и точки выбора. (car (entsel)) в таком случае вернет <Entity name: 7ef7dcb0>.
Добраться до состава примитива даже в таком варианте можно, используя (entget(car(entsel))):
((-1 . <Entity name: 7ef7dcb0>) (0 . "LINE") (330 . <Entity name: 7ef63cf8>) (5 . "266") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 100.0) (100 . "AcDbLine") (10 738.717 83.8527 0.0) (11 1636.39 1080.45 0.0) (210 0.0 0.0 1.0))
Покопавшись в DXF Reference, можно увидеть, что это список из точечных пар, описывающий обычный отрезок со всеми (или почти всеми) его свойствами. В частности, здесь нет 62 группы - цвет "ByLayer".
Преобразование (entget) в vla-указатель просто дает чуть-чуть более удобный интерфейс доступа туда же.
Иногда надо провернуть обратное - из vla-указателя получить нечто типа <Entity name>. Тогда используется либо (vlax-vla-object->ename), либо через функцию (handent (vla-get-handle vla_object)) - второе, в частности, требуется при программировании по LT при условии использования LT Extender - там зачастую некорректно такие штуки преобразовываются.
2. (vla-put-textoverride) - она не меняет никаких системных переменных, ты чего?
Пойдем "от руды". Нарисуй линейный размер, к примеру, и в vlide сделай
Код:
[Выделить все]
(setq ent (entlast))
Получишь нечто типа
Код:
[Выделить все]
<Entity name: 7ef7dcc8>
Потратив некоторое время, силы и нервы, ты можешь добраться и до переопределения текста (cdr (assoc 1 (entget ent))). И изменить его, используя тот же самый subst. Мне было в ломак такое ваять, я пошел побыстрее:
Преобразовываем ent в vla:
Код:
[Выделить все]
(setq vla_ent (vlax-ename->vla-object ent))
#<VLA-OBJECT IAcadDimRotated 060390b4>
И сделаем для него "просмотр свойств":
Код:
[Выделить все]
(vlax-dump-Object vla_ent)
; IAcadDimRotated: AutoCAD Rotated Dimension Interface
; Property values:
;   AltRoundDistance = 0.0
;   AltSuppressLeadingZeros = 0
;   AltSuppressTrailingZeros = 0
;   AltSuppressZeroFeet = -1
;   AltSuppressZeroInches = -1
;   AltTextPrefix = ""
;   AltTextSuffix = ""
;   AltTolerancePrecision = 2
;   AltToleranceSuppressLeadingZeros = 0
;   AltToleranceSuppressTrailingZeros = 0

;   AltToleranceSuppressZeroFeet = -1
;   AltToleranceSuppressZeroInches = -1
;   AltUnits = 0
;   AltUnitsFormat = 2
;   AltUnitsPrecision = 2
;   AltUnitsScale = 0.005
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00b9b5e4>
;   Arrowhead1Block = "ArchTick"
;   Arrowhead1Type = 4
;   Arrowhead2Block = "ArchTick"
;   Arrowhead2Type = 4
;   ArrowheadSize = 2.5
;   DecimalSeparator = ","
;   DimensionLineColor = 0
;   DimensionLineExtend = 0.0
;   DimensionLineWeight = -2
;   DimLine1Suppress = 0
;   DimLine2Suppress = 0
;   DimLineInside = -1
;   Document (RO) = #<VLA-OBJECT IAcadDocument 01122f90>
;   ExtensionLineColor = 0
;   ExtensionLineExtend = 1.25
;   ExtensionLineOffset = 0.625
;   ExtensionLineWeight = -2
;   ExtLine1Suppress = 0
;   ExtLine2Suppress = 0
;   Fit = 3
;   ForceLineInside = -1
;   FractionFormat = 0
;   Handle (RO) = "269"
;   HasExtensionDictionary (RO) = 0
;   HorizontalTextPosition = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 05ffb4a4>
;   Layer = "РР-Размеры"
;   LinearScaleFactor = 1.0
;   Linetype = "ByLayer"
;   LinetypeScale = 100.0
;   Lineweight = -1
;   Measurement (RO) = 500.086
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2130173128
;   ObjectName (RO) = "AcDbRotatedDimension"
;   OwnerID (RO) = 2130066680
;   PlotStyleName = "ByLayer"
;   PrimaryUnitsPrecision = 0
;   Rotation = 0.0
;   RoundDistance = 0.5
;   ScaleFactor = 100.0
;   StyleName = "SPDS"
;   SuppressLeadingZeros = 0
;   SuppressTrailingZeros = -1
;   SuppressZeroFeet = -1
;   SuppressZeroInches = -1
;   TextColor = 0
;   TextGap = 0.5
;   TextHeight = 2.5
;   TextInside = 0
;   TextInsideAlign = 0
;   TextMovement = 0
;   TextOutsideAlign = 0
;   TextOverride = "700"
;   TextPosition = (1472.42 1407.58 0.0)
;   TextPrefix = ""
;   TextRotation = 0.0
;   TextStyle = "SPDS"
;   TextSuffix = ""
;   ToleranceDisplay = 0
;   ToleranceHeightScale = 1.0
;   ToleranceJustification = 0
;   ToleranceLowerLimit = 0.0
;   TolerancePrecision = 0
;   ToleranceSuppressLeadingZeros = 0
;   ToleranceSuppressTrailingZeros = -1
;   ToleranceSuppressZeroFeet = -1
;   ToleranceSuppressZeroInches = -1
;   ToleranceUpperLimit = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 06005520>
;   UnitsFormat = 2
;   VerticalTextPosition = 1
;   Visible = -1
Т.е., используя эти строки, можно сделать вообще практически все что угодно с размеров - только изменить, например, свойство Measurement не получится - оно Read-Only (RO обрати внимание, там стоит).
Здесь же есть свойство TextOverride. Получить его значение можно либо как
Код:
[Выделить все]
(vlax-get-property vla_ent 'textoverride)
либо как
Код:
[Выделить все]
(vla-get-TextOverride vla_ent)
И то, и другое вернет строку "700". Назначение - выполнять через
Код:
[Выделить все]
(vlax-put-property vla_ent 'textoverride "")
либо через
Код:
[Выделить все]
(vla-put-TextOverride vla_ent "")
Обрати внимание, что сначала указывается какое свойство, потом объект-владелец этого свойства, а потом новое значение.
3. (vla-startundomark) и (vla-endundomark) ставят метки начала и конца "отмены". Т.е. тебе понадобится только один раз нажать _undo, и отменится сразу все действия, лежащие между этими кусками - не надо жать сотни раз.
---
Добавлено:
Если выполнить (vlax-dump-object vla_ent t), то в списке будут еще и методы, доступные для этого объекта.
Более подробно все описано в справке, только в VBA-шной Т.е. приходится немного ее править для использования в лиспе - вперед ставить vla-, потом указывать объект, а потом уже все как там написано. Не забывая про необходимость преобразования параметров...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2006, 16:14
#15
Александер


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


спасибо, разъяснил подробно.
выходит преобразуя объект в vla-объект мы получаем больший и главное более наглядный доступ к его свойствам. правильно все понял?
изучив все свойства объекта можно с ним делать почти все что угодно
Александер вне форума  
 
Непрочитано 07.02.2006, 16:20
#16
Кулик Алексей aka kpblc
Moderator

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


Ну в общем-то да. Только проверять свойство на доступность надо. Например, у отрезка есть свойство startpoint, а у полилинии - фигушки.
Проверку на доступность можно проверять через (vlax-property-available-p) или напрямую через (vl-catch-all-error-p).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2006, 16:52
#17
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Я думал тут про стили...а тут ликбез по vlisp.
kpblc как у тебя вообще времени хватает на все это?

VOVA
Цитата:
Ребята, но нельзя-же на все даже редко встречающиеся случаи иметь лиспы. Это какая-же у вас коллекция получится-в ней-же все забудется, что для чего. Моя коллекция около сотни, так она уже требует список на бумаге, краткое описание, что каждый делает и каким словом вызывается. Я очень осторожно добавляю сюда новенькое. Для KPBLC, понятно, практика, его ночью разбуди -напишет между снами, но большинство подобных лиспов-однодневки. Стоит-ли поощрять такие желания?
Есть такая проблема, маленькие программки -однодневки порой пишутся и по два раза...просто забываешь, что они уже есть,
но с библиотечными функциями это быстро делается. Одна проблема - сбиблиотечными на форум выложить проблема.

вот кстати библиотечная моя функция для получения свойства:

Код:
[Выделить все]
;;;Чтение свойства объекта 
;;;obj - объект
;;;prop_name - строка свойство
;;;возвр - изм объект или nil, если свойство не совместимо
(defun APEL-MOD-GET_PROPERTY (obj prop_name)
  (if (vlax-property-available-p obj prop_name nil)
    (vlax-get-property obj prop_name)
  )
)
;;;(APEL-MOD-GET_PROPERTY (apel-entsel "") "color") --> 54

а кто коллекционирует всякие маленькие "фишки" на лиспе, имхо - самое удобное это toolpalettes, там и описание есть куда забить
Apelsinov вне форума  
 
Непрочитано 08.04.2006, 14:35
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от kpblc
> Vova : так их я не вызываю с клавы - помрешь же колотить (_kpblc-layer-create-and-activate '(("name" . "ЭО-Оборудование") ("ltype" . "ЭО") ("lw" . "25))). Сделана кнопка в своем меню и в toolpalette болтается нструмент, оно и делает все, чего надо.
Если лисп мне нужен постоянно, я переписываю все, что в скобках на свое короткое. Здесь было-бы LCR
Vova вне форума  
 
Непрочитано 20.04.2006, 08:39 размерные стили
#19
Roman-80

свободный проектировщик
 
Регистрация: 01.11.2005
Омск
Сообщений: 3


-> kpblc
Надеюсь вы ещё следите за этой темой.
Вопросик в следующем:
функция drest переписывает все подряд размеры. а если там уже есть переписаные вручную размеры, да ещё и со всякими значками... (Пример: 2x900=<>) Не хотелось бы эти значения терять... Могли бы вы это учесть в коде?
__________________
ACAD -дело тонкое...
Roman-80 вне форума  
 
Непрочитано 20.04.2006, 14:57 Re: размерные стили
#20
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Roman-80
-> kpblc
Надеюсь вы ещё следите за этой темой.
Вопросик в следующем:
функция drest переписывает все подряд размеры. а если там уже есть переписаные вручную размеры, да ещё и со всякими значками... (Пример: 2x900=<>) Не хотелось бы эти значения терять... Могли бы вы это учесть в коде?
Ну не все подряд, а только выбранные (если про второй вариант). Я не очень понял, что надо сохранять? Если размер менять не надо, то можно его не выбирать по идее-то.
Хотя... Если в text override размера точно есть <>, то можно поставить ему префикс и суффикс, например. Или эти параметры тоже переназначаются?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > размерные стили

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