Тема: PlanCad вопрос по API интерфейсу

Уважаемый Андрей, есть вопрос по применению объектной модели.
Не могу добавить векторный примитив в коллекцию.
Синтаксис PTVectors.Create дает ошибку Object doesn't support this action. Если глюк программы, то можно ли обойти. Вообще интересуют программная отрисовка (по координатам) объектов PTLand, PTBuildingPart. Через файл работает, но хотелось бы напрямую. Может можно программно принять координаты в PLine?

Re: PlanCad вопрос по API интерфейсу

На самом деле вы просто не там копали, там немного по другому.
Если котортко то надо так:
obj.Contours(0).RemoveAll
obj.Contours(0).Add pnt, bulge
...
Более подробный пример бросил на почту, если она правильная конечно

ПС. В наличии еще имеется скрипт для выгрузки координат выбранной полилинии в текстовый файл. Но он криптованный, так что понять что к чему не получиться. Если надо могу прислать.

Re: PlanCad вопрос по API интерфейсу

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

Re: PlanCad вопрос по API интерфейсу

Спасибо за помощь, принцип понял, но с примером будет лучше :)
Можно кинуть сюда voldir@mail.ru

Re: PlanCad вопрос по API интерфейсу

Есть проблема с контуром. Подробности кинул на Ваш E-mail, если конечно он рабочий.

Re: PlanCad вопрос по API интерфейсу

Все получил , сейчас пример сворганим и отправлю. Если не сложно продублируйте сюда вопрос чтобы , чтобы все видели о чем речь , вдруг еще кому понадобиться.

Re: PlanCad вопрос по API интерфейсу

Мы используем геоинформационную систему, накоплена большая (для нашего города) база объектов включая зем.участки, здания, сооружения (ЛЭП, ЖД и т.д.). Соответственно на эти объекты есть координаты, когда был AutoCad из базы брались координаты объекта и выгружались напрямую в AutoCad (без обменного файла примерно вот так: acadADoc.ModelSpace.AddLightWeightPolyline (dblCoordinats)). После выгрузки уже преобразовывались.
Хотелось бы и в ПланКаде получить такой же сервис. С вектором не получилось, Вы посоветовали через контур. Попытался сделать вот так:
obj – вновь созданный PTLand объект
    Dim Contours As PTContours
    Dim Contour As PTContour
       obj.Contours.RemoveAll
      Set Contour = obj.Contours.Create
        For i  To row
         Contour.Add String2Point(.Cells(i, 3).Formula), Bulge ‘добавим сегменты
          i = i + 1
     Next
В Contour  все накапливается, но в obj не попадает и, соответственно, в ПланКаде не прорисовывается. В чем ошибка? Если можно, подскажите куда копать.
Спасибо за совет, контур нужно возвратить на место obj.contours = contours. Щас буду пробовать.

Re: PlanCad вопрос по API интерфейсу

Как то совсем непонятно получилось:)Подразумевалось что отвечу я:)
Работать нужно примерно так:

Set contours = floor.contours
contours.RemoveAll

'  что-то делаем с contours
floor.contours = contours ' возвращаем на место


Рабочий пример отправки данных кинул на почту
Кстати в SDK есть пример Integration.xls, там тоже можно посмотреть как организовать запись, правда геометрию по моему там менять нельзя

Re: PlanCad вопрос по API интерфейсу

СПАСИБО,все получилось, только есть нюансы (может кому пригодится). Не пугайтесь если на экране ничего нет, просто надо обновиться (Обновить или ptregen), пробовал программно .ExecuteScriptCommand ("/ptregen") - не хочет :( . И чтобы контур был замкнутым, последняя координатина должна продублировать первую иначе замыкается через начало координат (точка 0;0).

Re: PlanCad вопрос по API интерфейсу

Андрей Северинов пишет:

Как то совсем непонятно получилось Подразумевалось что отвечу я 
Работать нужно примерно так: ...

Прошу прощения, погарячился, но это от радости, что получилось :D

Re: PlanCad вопрос по API интерфейсу

По обновлению. Решение через зад :
Dim app
Set app = CreateObject("PlanCad.Application")
app.CommandLine.SendString "ptregen" + Chr(13)

Кстати.
Есть еще одна возможность сильно менять Планкад под себя.
От своего предка Spotlight в планкаде осталась возможность запуска криптованных скриптов.
В Spotlight очень серьезные средства по автоматизации.
Так вот любой скрипт написанный для Spotlight Pro версий 6.0 и выше .
можно прислать нам, мы его конвертируем и он начинает работать в Планкаде.

Тестовую версию Spotlight можно скачать тут www.rasterarts.ru SDK внутри дистрибутива

Re: PlanCad вопрос по API интерфейсу

Андрей Северинов пишет:

... app.CommandLine.SendString "ptregen" + Chr(13)...

К сожалению пользуюсь SDK сборки 978, а там этих команд нет, но совет понял, надо чаще через Object Browser просматирвать библиотеки.  По  Spotlight, надо сначало зарегистрироваться? А потом вышлите по E-mail, а сколько весит?
Спасибо.

Re: PlanCad вопрос по API интерфейсу

Весит 54 Мб
В регистрации ничего особо страшного нет:) Ребята которые подтверждают , сидят со мной в одной комнате.
Главное написать что нить разумное и все будет ОК

Re: PlanCad вопрос по API интерфейсу

Андрей, еще раз обращаюсь за помощью. Проблема такая, пытаюсь в EMF вывести контур этажа и помещения (удобно для кадастрового плана помещения),
применяя object.SaveEMF FileName, [IncBySemantics], [ExcBySemantics]. Не понятно как работают [IncBySemantics], [ExcBySemantics], если это коллекции объектов которые надо исключить или добавить, то ни чего не происходит. Тип этих значений Variant, но как им пользоваться? Или надо копать в другую сторону (создавать новые объекты, а в них скидывать контура имеющихся)?. Очень удобная функция "Подготовка помещения к печати" для формирования помещений и контуров, но можно и посредством API сразу внедрить в отчет (интерфейс БД - Access).

Re: PlanCad вопрос по API интерфейсу

Вот еще в догонку: метод Objects.Create(ptObjTypeFloor) для этажа не работает, это глюк или этаж создается по другому?

Re: PlanCad вопрос по API интерфейсу

Прошу прощения, за предыдущий вопрос, нашел. Аналогия с земельным участком т.е.     
Set pFloor= object.ObjectsByType(ptObjTypeFloor) и т.д. Плохо, что нет кнопки стереть предыдущее сообщение :D

Re: PlanCad вопрос по API интерфейсу

Может у нас разные SDK ( у меня 978) ?? . просто это как раз в документации описано

IncBySemantics
Включить объекты по семантике. Определяет использовать или нет контура привязанных к указанному объекту объектов.

ExcBySemantics
Исключить по семантике. Определяет включать или нет объекты, не привязанные к заданному объекту, но входящие в его контур (или в контура привязанных объектов, если установлен IncBySemantics, исключаются только те объекты, которые могут быть привязаны к заданному (т.е., например, окна/двери из этажа не исключаются).
это обычный boolean. true или false.
т.е. IncBySemantics определяет включать контура комнат для помещения или нет.

Re: PlanCad вопрос по API интерфейсу

Да кстати раз уж пошли такие танцы с бубнами.
чем использовать wmf по моему проще скачать Проплан. Внедрить его как ActiveX и показывать в отчете результат непосредственно через наш вьюер без конвертации в wmf

За одно и подредактировать можно будет частично перед печатью. Удалить лишние объекты например. которые получаются при работ команды вырезать фрагмент или подготовка помещения к печати.

Re: PlanCad вопрос по API интерфейсу

Дело в том, что в Access при работе с отчетами своя специфика, не буду вдаваться в подробности, но на сегодняшний день ни один стандартный ActiveX (именно в отчете Access) не функционирует, как хотелось бы. Т.е. в отчет нужно грубо давать файл определенного формата (либо использовать бинарный, но это заморочки). Так для распечатки автокадовских форматов, пока не поставил графический фильтр dxfimp32.flt, ни чего не получалось (пробовал разные вьюеры). Но это все предистория. Механизм ПланКад для осуществления моей задачи мне очень подходит, это и непосредственно выводить в отчет (без прогонки листа два раза, из разных программ) квартиру - как поэтажный план, так и контура - как кадастровый паспорт помещения. Только не хватает опыта работы с API.
По IncBySemantic и ExcBySemantics, разобрался (в одном из примеров), а вот что у меня в документации:

FileName    Обязательный. Значение String. Имя файла.
IncBySemantics    Необязательный. Значение Variant. Включить объекты по семантике.
Определяет использовать или нет контура привязанных к указанному объекту объектов.
ExcBySemantics    Необязательный. Значение Variant. Исключить по семантике.
Определяет включать или нет объекты, не привязанные к заданному объекту, но входящие в его контур (или в контура привязанных объектов, если установлен IncBySemantics, исключаются только те объекты, которые могут быть привязаны к заданному (т.е., например, окна/двери из этажа не исключаются).

Именно значение Variant меня и смутило. Но для вывода только контура этажа и помещения (квартиры) это не подошло. Попробовал реализовать проблему так (правда через зад  :)), берем из имеющегося документа контур этажа и контур помещения (квартиры). Создаем новый документ (из имеющегося документа  вывести только эти контура не получилось, наследуются все остальные объекты) и из него в EMF. Проблема встала в том, что у Floor нет свойства Create, а когда делаешь через Set pFloor= object.ObjectsByType(ptObjTypeFloor), то наследуются все объекты. Ну вобщем плаваю  :( . Как временный выход – сбрасываю контура данных типов в контура других типов и там уже SaveEMF. Для более оптимального решения нужен СОВЕТ.

Re: PlanCad вопрос по API интерфейсу

Сейчас подключу непосредственно программеров Планкад. Че нить придумаем.

Re: PlanCad вопрос по API интерфейсу

В Планкаде 1.7 действительно невозможно создать этаж через API. Это ошибка. В Планкаде 2.0 она была исправлена, а в 1.7 осталась. Спасибо за помощь! Для создания копии объекта в новом Планкаде есть метод Clone. В старом можно так:
[FONT=Courier]Dim floorCopy As PTFloor
Set floorCopy = ptApp.Objects.Create(ptObjTypeFloor)
floorCopy.Contours = floor.Contours
' копируем остальные свойства[/FONT]

Re: PlanCad вопрос по API интерфейсу

Спасибо за содействие. Когда выйдет Планкад 2.0? Будут ли внесены изменения в описание API?

ned пишет:

... В старом можно так:
Dim floorCopy As PTFloor
Set floorCopy = ptApp.Objects.Create(ptObjTypeFloor)
floorCopy.Contours = floor.Contours
' копируем остальные свойства

Как раз так и не работает. :(
Пробовал, вот что на выходе
Run-time error ‘-2147467259 (80004005)’:
Method ‘Create’ of object ‘IPTObjects’ failed
Думаю дождусь новой версии (а к стати, линейные объекты уже будут функционировать?).
Спасибо.

Re: PlanCad вопрос по API интерфейсу

Кинул в личку бету 2.0
Можете поглядеть что примерно получается.
Только пожалуйста, не надо ее использовать для реальных проектов, а то мало ли что пропустили
Функционал еще не весь.
Релиз кандидат планирую выпустить через пару недель .

Re: PlanCad вопрос по API интерфейсу

Андрей, написал Вам в личное собщение, если не трудно посмотрите.

Re: PlanCad вопрос по API интерфейсу

Ничего нет , повторите, либо лучше тогда на почту.