1

(2 ответов, оставленных в AutoCAD)

http://forum.dwg.ru/attachment.php?attachmentid=111734&d=1378817724

2

(5 ответов, оставленных в AutoCAD)

Задача не совсем понятна. Автоматически - это как, при каких условиях? Можно вбить в атрибут поле со ссылкой на площадь прямоугольника, тогда, ежели к примеру блок динамический и прямоугольник растягивается, то в атрибуте значение поля будет соответствовать площади прямоугольника.. Но если вручную перебить значение атрибута, то ессно поле обновляться перестанет..

Александр Ривилис пишет:

AlexV,  Исправил для AutoCAD 2007...2012. Для предыдущих не стал трогать. Проверяй.

Проверил.. Работает! http://forum.dwg.ru/images/smilies/good.gif

А файлы не на CD-диске?  :D

Программа прекрасно работает даже с "неродными" автокаду объектами, - примитивами SPDS, PS CS, ASD и прочими.. Меня удивляло, почему не выбираются обычные таблицы автокада (собственно, и писать начал - хотел пожаловаться  :D ) - а оказалось, она воспринимает их как блоки с уникальным именем? Когда в настройках selsim снимаешь галку "выбор блоков" - "с одним именем", - начинают выбираться..

6

(22 ответов, оставленных в AutoCAD)

Полина Тихонова пишет:

Подскажите пожалуйста пойдет ли AutoCAD 2008 на Windows 7 Prof?

У меня 2008 без проблем ставился на 7 (правда, на 32 битную). Единственно, не должно быть установлено до него автокадов старших версий.

7

(17 ответов, оставленных в VBA)

Все понятно, что VBA уже не жилец, и в будущих версиях поддержки его не будет. Но пока-то он есть, и под версии до 2011 включительно его можно было бы использовать. И в связи с этим у меня вопрос по VBA под 64-битный автокад 2010 - 2011.
Почему глючат формы? Элементы управления работают через раз; невозможно даже текст забить в textbox, хотя форма вроде модальная.. А запущенная немодальная вообще, такое ощущение, живет жизнью отдельной от автокада и юзера..  :D Ее даже закрыть стандартным "крестиком" не получается... Можно ли что-то изменить в данной ситуации? (под 32 бита все нормально работает..)

8

(4 ответов, оставленных в AutoCAD)

Георгий пишет:

не получается 

все кнопки истыкал.

Вот создан и назван лист. На нем подрезаный видовой экран в рамке, а как сюда добавить ещё один экран?

Находясь в пространстве листа (существующий видовой экран не должен быть активен) - команда _-vports, либо кнопка на панели "видовые экраны". Либо, просто скопировать существующий (видовые экраны двигаются и копируются так же, как и все примитивы автокада). Затем зайти в него двойным щелчком внутри ВЭ и установить нужный вид (вэ не должен быть при этом заблокирован.) Либо, потянув за угловые ручки, опять таки установить нужный вид. Как пример - вложенный рисунок из предыдущего поста. Копируем существующий видовой экран дважды, одну копию уменьшаем влево, другую вправо, потом видовые экраны переносим друг к другу.

9

(4 ответов, оставленных в AutoCAD)

А в чем проблема? Создать на листе 2 видовых экрана, совместить... рисунок

Владимир пишет:

Думается, что уберать из линейки конкретные вертикальные приложения на базе autocad Autodesk не станет, т.к. все-таки затраты на поддержку и развитие конкретных вертикальных продуктов, относительно поддержки и развития самой платформы ничтожны...

Это точно, что ничтожны, а по некоторым продуктам, наверное, стремятся к нулю (как и результаты их развития)  :D . Если чуть чуть отклонится от архитектурных программ (я с ними мало знаком), и сравнить ASD2011 (AutoCAD Structural Detailing) с RCAD, то изменения и улучшения с момента покупки этой программы Autodesk-ом минимальны, и касаются в большей степени интерфейса - лента и т.д. Если сравнить с архитектурными программами, то ASD - наверное, аналог AA, ну а Revit есть Revit, Structure только. Так вот, возможно, что архитекторы могут обойтись одним только Revit Architecture; конструктора же пока могут использовать Revit только в связке с ASD и Autocad (по крайней мере, при существующей технологии проектирования).

11

(23 ответов, оставленных в .NET)

Вот тут и тут вроде об этом..

12

(2 ответов, оставленных в AutoCAD)

Des пишет:

При выводе подшивки на публикацю в PDF выдаёт ошибку и не создаёт ни одного листа. На соседнем компе - всё в порядке. Что характерно: все действия по созданию подшивки одинаковы и настройки публикации тоже. В чём проблема?
Версия: Autocad 2010.

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

Методом тыка, наверное, можно.. Создал поле, скопировал формулу в код.. С полями-ссылками на свойства документа просто, со ссылками на свойства примитива посложнее будет..

Sub main()
  Dim oTable As AcadTable
  Dim tmpStR As String
  Dim pt(2) As Double
  Set oTable = ThisDrawing.ModelSpace.AddTable(pt, 5, 5, 2, 10)
  tmpStR = "%<\AcVar Filename \f ""%fn7"">%"
  oTable.SetText 1, 1, tmpStR
  tmpStR = "%<\AcVar Keywords>%"
  oTable.SetText 1, 2, tmpStR
End Sub

Если имеется в виду команда ПЛОСКСНИМОК (_flatshot), или ее предыдущие подобия (_solprof, _solview, + _soldraw, они обрабатывают исключительно 3dsolidы), а _flatshot еще и region + эти объекты, включенные в блоки и внешние ссылки. Отрезки с полилиниями и т.д. - не "плющатся". Ну, A2010 еще обрабатываются 3dMech (если правильно обозвал примитив).

15

(4 ответов, оставленных в VBA)

Да, действительно.. Причем если после первого запуска добавить вручную на форму Frame1, то при последующем запуске код работает...
Посмотрите вот такой код. Он, правда, под Excel, но зато работает...  :D  При большем желании можно, наверное, какие-то приемы использовать в Акаде. Код создает на форме 100 кнопок, и процедуры обработки клика по каждой из них..

Option Explicit

Sub Add100Buttons()
  Dim UFvbc As VBComponent
  Dim CMod As CodeModule
  Dim ctl As Control
  Dim cb As CommandButton
  Dim n As Long, c As Long, r As Long
  Dim code As String
  
'   Проверка доступа к объекту VBProject
    On Error Resume Next
    Dim x
    Set x = ActiveWorkbook.VBProject
    If Err <> 0 Then
        MsgBox "Ваши настройки безопасности не позволяют выполнить этот макрос.", vbCritical
        On Error GoTo 0
        Exit Sub
    End If
  
  Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForm1")

' Удаление всех элементов управления
  For Each ctl In UFvbc.Designer.Controls
    UFvbc.Designer.Controls.Remove ctl.Name
  Next ctl

' Удаление кода VBA
  UFvbc.CodeModule.DeleteLines 1, UFvbc.CodeModule.CountOfLines

' Добавление 100 кнопок
  n = 1
  For r = 1 To 10
    For c = 1 To 10
      Set cb = UFvbc.Designer.Controls.Add("Forms.CommandButton.1")
      With cb
        .Width = 22
        .Height = 22
        .Left = (c * 26) - 16
        .Top = (r * 26) - 16
        .Caption = n
      End With

'     Код обработчика событий
      With UFvbc.CodeModule
        code = ""
        code = code & "Private Sub CommandButton" & n & "_Click" & vbCr
        code = code & "Msgbox ""Это кнопка" & n & """" & vbCr
        code = code & "End Sub"
        .InsertLines .CountOfLines + 1, code
      End With
      n = n + 1
    Next c
  Next r
  VBA.UserForms.Add("UserForm1").Show
End Sub

Sub ShowForm()
  UserForm1.Show
End Sub

16

(4 ответов, оставленных в VBA)

Вот такой код вроде должен создать процедуру для Frame1_Click()..

Private Sub UserForm_Click() 
Dim vbpr
Dim Code As String
Dim NextLine As Long
Dim NewCtrl As Control
Set NewCtrl = Controls.Add("Forms.Frame.1", "Frame1")
NewCtrl.Left = 5
NewCtrl.top = 10
NewCtrl.Width = 15
NewCtrl.Height = 20
NewCtrl.Caption = ""
Set vbpr = Application.VBE.ActiveVBProject.VBComponents.Item("UserForm1")
Code = "Private Sub Frame1_Click()" & vbNewLine
Code = Code & "    Msgbox ""&#210;&#229;&#234;&#241;&#242;""" & vbNewLine
Code = Code & "    Stop" & vbNewLine
Code = Code & "End Sub"
NextLine = vbpr.CodeModule.CountOfLines + 1
vbpr.CodeModule.InsertLines NextLine, Code
End Sub 

Ну таки с этой ссылки начинал не я... Я сначала эту создал, потом ту нашел.. А надежда, она такая, умирает последней...  :D Ей даже отбой Александра Ривилиса нипочем. :D  К тому же, я ж писал, получилось объявить переменную из объектной модели ASD, передать в нее объект-примитив и прочитать свойства, характерные именно для этого класса объектов. То есть, по идее, должны быть и другие возможности, надо просто синтаксис выражений правильно выстроить... Мне просто знаний и умений не хватает, я так думаю.. Через тот же Lisp много чего можно прочитать (из базы данных рисунка - те же типы материалов (марки сталей), загруженные в чертеж). Единственное, что не получается, получить эти данные от конкретного объекта.. :|

LeonidSN пишет:

Хм, а где вы нашли такой примитив?

Какой? AcadDictionary - он же вроде в объектной модели Автокада имеется... А подключив библиотеки ASD, можно получить еще кучу объектов уже чисто ASD-шных, вот здесь эту проблемку тоже обсуждали https://www.caduser.ru/forum/topic46656.html

19

(6 ответов, оставленных в ObjectARX)

Да, но ведь получилось же объявить переменную ... As RbCSMdlProfile? И примитив в нее запихать, и свойства именно класса RbCSMdlProfile выцепить и использовать? И еще некоторые типы оказалось возможным объявить... Ощущение такое, что должна быть все-таки возможность через COM-интерфейс добраться... Ладно, Дамир вроде собирался с связаться с разработчиками на эту и другие темы...

20

(6 ответов, оставленных в ObjectARX)

Пытался рыть в этом направлении с помощью VBA... При подключении в References соответствующих библиотек - объектную модель ASD в Object browser можно увидеть, все классы объектов с методами/свойствами. Теоретически - значит можно работать с ней из под VBA, если знать как? Но на практике применить - видимо не хватает знаний. Элементарный пример: примитив ASD "Профиль" (в русской версии). В окне свойств Автокада по нему информации минимум: то, что имеется у всех примитивов (слой, вес линий и т.п.), немногим больше можно увидеть через (entget (car (entsel))), или применив в VBA

ThisDrawing.Utility.GetEntity obj, varPoint, "Выбери профиль..."
Stop

Можно определить, что объект в переменной obj принадлежит классу "IRbCSMdlProfile".
Но, если объявить "ASD-шную" переменную и "тупо" присвоить ей значение obj, то уже можно работать с ней, используя ее свойства, причем хотя в окне Locals этих свойств не видно, но в выпадающем списке после имени переменной с точкой (в редакторе кода VBA)они есть..(см. рисунок) http://forum.dwg.ru/attachment.php?attachmentid=22497&amp;d=1245389231

Dim RbCSM As RbCSMdlProfile
Set RbCSM = obj

Если бы у переменной класса RbCSMdlProfile были свойства, содержащие длину, массу, тип профиля (или какие-либо ссылки на них), то уже можно было бы их считывать программно. Но с нее удалось "выдоить" полезного - только координаты ключевых точек осевой линии .Coordinate да .GetBoundingBox (уже, конечно, что-то; используя эти свойства, написал утилитку, убивающую объекты-дубликаты ASD). Есть в объектной модели класс "RbCSDOProfile", там уже имеется свойство "Length", методы типа "GetUIMaterialName", но "...Dim RbCSM As RbCSDOProfile:Set RbCSM = obj..." выдает ошибку "несовпадение типов".
Вобщем, метод тыка мне в VBA, а Дамиру в Lisp пока больших успехов не принес. Может, посоветуете, куда двигаться?

У примитивов ASD (профилей, пластин и т.д.) в объектной модели VBA видны минимум свойств (слой, цвет и прочие общие свойства для всех автокадовских примитивов). А хотелось бы добыть свойства, в которых содержится информация о типе профиля, массе, длине и т.д.
Собственно, есть предположение, что все это зашито в AcadDictionary ...Я со словарями дела не имел, поэтому не представляю, как данные из словарей привязаны к объекту... И как их "изъять"?
Вот код:

Dim EDictionary As AcadDictionary
Dim obj As Object
Dim varPoint As Variant
Dim strPrompt As String
strPrompt = "Выбери объехт..."
ThisDrawing.Utility.GetEntity obj, varPoint, strPrompt
Set EDictionary = Obj.GetExtensionDictionary

По идее, должны  в EDictionary возвращаться словари, привязанные к объекту? Но при выборе ASD объектов EDictionary.count = 0
Может, кто подскажет, в каком направлении надо двигаться?

У меня масштабы начали плодиться, как кролики, после установки Project Studio и SPDS. Кто из них конкретно балуется, не знаю..

23

(14 ответов, оставленных в VBA)

SelectionSet - метод известный, им можно легко и быстро выбрать, к примеру, все полилинии с определенным цветом или слоем. А вот, к примеру, примитивы с наличием определенных расширенных данных, -можно? Или блоки с наличием определенных атрибутов?

P.S. Дарья, вовремя ты переключилась на C#... Автокад 2010 VBA уже не поддерживает, и все макросы, "нажитые непосильным трудом", бесполезны. Можно, правда, отдельно с сайта Автодеска подгрузить VBA-шный модуль, но тенденция очевидна... В будущем, видимо, поддержки VBA не будет вовсе (если, конечно, левая нога директора Автодеска не передумает  :D)

24

(5 ответов, оставленных в Architecture)

Согласен, что интерфейсина сия удобства не добавила. Мне так представляется, что она чем-то похожа на древний инструмент (автокада еще этак 10 версии) под названием "экранное меню", только вместо названий элементов меню - иконки кнопок,а принцип работы одинаковый - нажал на вкладку, перешел к командам этой вкладки. Я риббон этот прилепил в свернутом виде справа к экрану и использую для не очень часто используемых команд (благо на кучу вкладок можно повесить хоть все команды автокада). Еще интересно, что из панель управления из редактора блоков переместилась на вкладку риббона.

Вам сюда текст из справки скопировать? Нажмите F1, почитайте о создании дин. блоков...