Работа с текстом

Автор koprus77, 23.02.16, 19:41:45

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

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

Дмитрий22

06.10.17, 17:24:40 #20 Последнее редактирование: 06.10.17, 18:58:30 от Дмитрий22
Не слабо. Я рассчитывал на что-то встроенное в Api Компаса. Но все равно спасибо.

Sabahs, я добил команду Assign.
Весь твой код можно заменить этой командой, но пришлось создать бутафорный объект спецификации, чтобы был инициализирован IText. Моя ошибка заключалась в том. что я пытался при IText MyText = null, выполнить команду Assign. MyText не должен быть null. Вот работающий код:

ISpecificationBaseObject NewBaseObject= pKompasDocument.SpecificationDescriptions.Active.BaseObjects.Add(20, 0);
NewBaseObject.Columns.get_Column(Kompas6Constants.ksSpecificationColumnTypeEnum.ksSColumnMark, 1, 0).Text.Assign((Text)ExistText);


+ Благодарностей: 1

Умка

Не знал в какую тему написать, как расположить через питон тех требования на расстоянии 10 мм над основной надписью и 5 мм от неё-же по горизонтали, может кто-то скрипт имеет? К V13, W XP, Питон 2.6.

Slaviation

import pythoncom
from win32com.client import Dispatch, gencache
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
drawing_document = kompas_api7_module.IDrawingDocument(kompas_document_2d)
technical_demand = drawing_document.TechnicalDemand
technical_demand.AutoPlacement = False
technical_demand.BlocksGabarits = (25.0, 75.0, 200.0, 263.0)
+ Благодарностей: 1

Умка

не запускается, добавил в начало

import pythoncom, re, sys, time, math, threading, win32gui, ctypes, win32con

и опять не запускается

Slaviation

Текст ошибки можно посмотреть?

ТрындецЪ

Цитата: Slaviation от 09.11.17, 10:05:30
Текст ошибки можно посмотреть?
Что-то у меня тоже не работает. Программа выполняется без ошибок, а результата нет.

Умка

аналогично ошибок нет

ТрындецЪ

09.11.17, 11:00:26 #27 Последнее редактирование: 09.11.17, 11:14:03 от ТрындецЪ
Добавил в конец:
technical_demand.Update()
iDocumentFrames = kompas_document.DocumentFrames
iDocumentFrame = iDocumentFrames.Item (0)
iDocumentFrame.RefreshWindow()

Но как-то непонятно работает. Не устанавливаются заданные габариты.

Upd: свойство AutoPlacement не принимает False

Slaviation

ЦитироватьЧто-то у меня тоже не работает. Программа выполняется без ошибок, а результата нет.
Как оказалось, причиной является ошибка в КОМПАС-3D. Ждем исправления.

ТрындецЪ

Цитата: Slaviation от 09.11.17, 12:14:49
Ждем исправления.
А через API5 не добраться?
Вот тут было что-то подобное.

Slaviation

ЦитироватьА через API5 не добраться?
Попробовал через API5, но тот же самый результат - безрезультатно :)
Похоже ошибка в КОМПАС-3D общая как для API5, так и для API7.

import pythoncom
from win32com.client import Dispatch, gencache
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
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))
technical_demand_param = kompas_object.GetParamStruct(kompas6_constants.ko_TechnicalDemandParam)
rect_param = kompas_object.GetParamStruct(kompas6_constants.ko_RectParam)
document_2d = kompas_object.ActiveDocument2D()
document_2d.ksOpenTechnicalDemand(None, 0)
technical_demand_reference = document_2d.ksCloseTechnicalDemand()
document_2d.ksGetObjParam(technical_demand_reference, technical_demand_param, -1)
p_gab = technical_demand_param.GetPGab()
p_gab.ksGetArrayItem(0, rect_param)
pBot = rect_param.GetpBot()
pBot.x = 25.0
pBot.y = 75.0
pTop = rect_param.GetpTop()
pTop.x = 200.0
pTop.y = 260.0
rect_param.SetpBot(pBot)
rect_param.SetpTop(pTop)
p_gab.ksSetArrayItem(0, rect_param)
technical_demand_param.SetPGab(p_gab)
document_2d.ksSetObjParam(technical_demand_reference, technical_demand_param, -1)
+ Благодарностей: 1

Умка

File "C:\Program Files\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 312, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Program Files\ASCON\тт.pyw", line 9, in <module>
    document_2d.ksOpenTechnicalDemand(None, 0)
AttributeError: 'NoneType' object has no attribute 'ksOpenTechnicalDemand'

Компас 13, W XP

Slaviation

ЦитироватьAttributeError: 'NoneType' object has no attribute 'ksOpenTechnicalDemand'
Запускать на активном чертеже

Умка


ТрындецЪ

У меня без ошибок запускается, но ничего не делает, как и говорилось.
К-16.0,  Py-2.6
У Умки вообще проблемный КОМПАС по части макросов. То всплывающие сообщения не работают, теперь вот  интерфейс document_2d не получает...

Slaviation

ЦитироватьКак оказалось, причиной является ошибка в КОМПАС-3D. Ждем исправления.
API7 - Исправление войдет в V17.1.5.
В API5 не реализовано и не планируется.

Умка

kompas_api7_module присутствует в Компасе 13, ждём исправления.

Какой смысл ждать исправление?
Компас V13 исправлять уже не будут.
+ Благодарностей: 1

Умка

я ждал исправленный скрипт

Исправленный скрипт на Компас V13, работать не будет.