Работа с разрывом вида через SDK

Автор akhmerov, 04.09.17, 12:48:42

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

akhmerov

Добрый день.

Ситуация следующая: есть системный слой (0) и созданный мной вид (1) в масштабе 1:5. В него я вставляю группу примитивов компаса в масштабе 1:1 (метод ksCopyObjEx()) c разрывом вида (1), указывая координаты разрыва с учетом того что я в нем нахожусь. При этом компас рисует разрыв опираясь не на координатную систему текущего вида (1), а на координаты системного вида (0) с учетом масштаба вида (1). В итоге разрыв рисуется не там где ожидается.


Как указать разрыву вида что я хочу использовать координаты внутри вида 1 с его текущим масштабом для отрисовки? Может есть какой-то параметр отвечающий за это? Или есть другие варианты?

Также прикладываю скрин с реализацией метода разрыва и чертеж с кривым разрывом.

ТрындецЪ

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

akhmerov

Цитата: ТрындецЪ от 04.09.17, 13:27:38
Получается нужно добавить координаты привязки вида 1 к координатам линий разрыва.
Ага, а как получить эти координаты? view->x у меня равен 0 (хотя по факту не равен)

Я думаю, что view у Вас, это системный вид, координаты линий разрыва должны задаваться в координатах вида.

akhmerov

Цитата: Sabahs от 04.09.17, 13:54:18
Я думаю, что view у Вас, это системный вид, координаты линий разрыва должны задаваться в координатах вида.
view - это вид 1 (его номер), который я создаю сам. Еще там есть системный (порядковый номер 0). Координаты линий разрыва должны задаваться в координатах вида - я так и задаю, но они слишком маленькие для 0 вида, потому разрыв рисуется слева. Например я говорю что разрыв должен начинаться на X = 90. В итоге он умножает 90 на 0.2 (скейл масштаба 1 к 5) и получается X ~= 20. А по факту в таком масштабе X нужен порядка 500.


akhmerov

Цитата: Sabahs от 04.09.17, 14:13:51
Так разделите координаты на масштаб.

К сожалению не поможет, на приложенном рисунке выделил красным. Разрыв требуется сделать на X=80 (умножим на масштаб будет 400), а при открытии файла в компасе таких значений и близко нет((
Значение 95 - X по системному слою,
478 - X по виду 1 с масштабом 1:5

ТрындецЪ

Итоговый чертеж прикрепите, не особо понятно.
Подозреваю, что вид 1 смещен на 15 мм по х относительно вида 0 (в координатах вида 0).

akhmerov

Цитата: ТрындецЪ от 04.09.17, 15:13:59
Итоговый чертеж прикрепите, не особо понятно.
Подозреваю, что вид 1 смещен на 15 мм по х относительно вида 0 (в координатах вида 0).

У Вас привязка вида где?
Посмотрите картинку, привязка должна быть там, где нужно и относительно неё чертится вид, тогда не надо пересчитывать, а так, как у Вас вид построен с неким смещением, вот его и нужно учитывать.

akhmerov

Цитата: Sabahs от 04.09.17, 15:51:25
У Вас привязка вида где?
Посмотрите картинку, привязка должна быть там, где нужно и относительно неё чертится вид, тогда не надо пересчитывать, а так, как у Вас вид построен с неким смещением, вот его и нужно учитывать.

А как его учитывать? Как можно получить координаты  вида по его номеру?

Смысл их Вам получать?
Они равны 0,0. Когда вид создаёте, то нужно сразу делать привязку в нужное место, а потом просто создаёте графику.
Масштаб нужно учитывать, проверено.
+ Благодарностей: 1

ТрындецЪ

Цитата: Sabahs от 04.09.17, 16:12:43
Масштаб нужно учитывать, проверено.
Мне для общего развития: в метод add передаются координаты вершин прямоугольника который задает вырезаемую область? И если set не задавать, то разрыв создастся с умолчательными параметрами?
Я всё пытался  разрывы создать, а мне часто окно выдавало, что заданы ошибочные параметры.

Да, координаты прямоугольника, заданные в СК вида, с учётом масштаба, причём 0 градусов, соответствует 90 на транспортире.
+ Благодарностей: 1

ТрындецЪ

Разрыв вида на Python
# -*- coding: cp1251 -*-

import pythoncom
from win32com.client import Dispatch, gencache
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object
#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application

iKompasDocument = application.ActiveDocument
iKompasDocument2D = kompas_api7_module.IKompasDocument2D(iKompasDocument._oleobj_.QueryInterface(kompas_api7_module.IKompasDocument2D.CLSID, pythoncom.IID_IDispatch))
iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager
Views = iViewsAndLayersManager.Views
View = Views.ActiveView
Scale = View.Scale
iBreakViewParam = kompas_api7_module.IBreakViewParam(View)
BreakLine = iBreakViewParam.AddBreakLine( 100/Scale, -100/Scale, 600/Scale, 100/Scale, 0)
View.Update()
+ Благодарностей: 1