Обучение программированию

Автор Alal, 26.03.16, 09:13:20

« предыдущая - следующая »

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

Sabahs

21.04.17, 08:49:09 #60 Последнее редактирование: 21.04.17, 09:11:48 от Sabahs
Попробовал иначе, результат неизменен. Свойство программно устанавливается, только от таблицы живёт отдельно.
PS. В СТП написал, посмотрим, что ответят, запрос SD#795404.

ТрындецЪ

Цитата: Sabahs от 21.04.17, 08:49:09
Свойство программно устанавливается, только от таблицы живёт отдельно.

Я тоже пробовал. И устанавливается и снимается без проблем, но не отображается в окне переменных. Подозрительно ещё то, что можно снять информационность у любой переменной, хотя если переменная зависима от другой она не может быть неинформационной (при работе с переменными стандартным способом свойство информационности таких переменных неактивно).
Подождем ответа СТП.

Николай

Вот ещё вопрос. Открываем программно эскиз с уже начерченными там двумя макроэлементами 1 и 2.
Производим некий расчёт радиуса R и строим, например окружность 3

ksDocument2D.ksCircle 0, 0, R, 1 'Наружный диаметр

Далее необходимо передвинуть макроэлемент 1 по X на -12мм и Yпо на -50мм, а макроэлемент 2 по X на +21мм и поjY на -50мм,
чтобы получилась картинка, как внизу.

Вот и вопрос: как программно двигать готовые макроэлементы?

Sabahs

Ошибку по запросу SD#795404 исправили, исправление войдёт в Компас-3D v17.1.

Sabahs

Цитата: Николай от 21.04.17, 12:07:33
Вот ещё вопрос. Открываем программно эскиз с уже начерченными там двумя макроэлементами 1 и 2.
Производим некий расчёт радиуса R и строим, например окружность 3

ksDocument2D.ksCircle 0, 0, R, 1 'Наружный диаметр


Далее необходимо передвинуть макроэлемент 1 по X на -12мм и Yпо на -50мм, а макроэлемент 2 по X на +21мм и поjY на -50мм,
чтобы получилась картинка, как внизу.

Вот и вопрос: как программно двигать готовые макроэлементы?

Может новую тему создать, а эту закрыть, т.к. тут куча вопросов и попробуйте в ней найти ответ на нужный.
IMacroObject.SetPlacement

ТрындецЪ

Цитата: Sabahs от 21.04.17, 12:12:57
Может новую тему создать, а эту закрыть, т.к. тут куча вопросов и попробуйте в ней найти ответ на нужный.

Ответы на вопросы всё равно через строку поиска ищутся, а поиску всё равно отдельная это ветка или нет.
Темы с одним-двумя ответами больше захламляют. Лучше подразделы ввести, наверное.

Возвращаясь к предыдущей проблеме с переменными: в соседней теме http://forum.ascon.ru/index.php/topic,30188.0.html с комментариями к переменным была аналогичная проблема.

Sabahs

Ответ СТП по прошлой проблеме был такой:"Нужно использовать функцию ksPart::GetFeature().VariableCollection.
Функция ksPart::VariableCollection предназначена только для изменения значений внешних переменных.
"

Но даже этот вариант не работал с ksVariable.Information, тут всё работает, можете убедится ответ на картинке, изменения отображаются в таблице после RebuildDocument.

pr0100

Цитата: Николай от 21.04.17, 12:07:33
Вот ещё вопрос. Открываем программно эскиз с уже начерченными там двумя макроэлементами 1 и 2.
Производим некий расчёт радиуса R и строим, например окружность 3

ksDocument2D.ksCircle 0, 0, R, 1 'Наружный диаметр

Далее необходимо передвинуть макроэлемент 1 по X на -12мм и Yпо на -50мм, а макроэлемент 2 по X на +21мм и поjY на -50мм,
чтобы получилась картинка, как внизу.

Вот и вопрос: как программно двигать готовые макроэлементы?



Вашу задачу со штангенциркулем возможно реализовать и без применения программирования.
Файл приложен.

Николай

А можно сохранить в 5 версии? Имеем официально 9, но даже в 14 не открывается, А Вьювер воспроизводит неподвижную картинку... ::)

pr0100

25.04.17, 10:00:07 #69 Последнее редактирование: 25.04.17, 10:42:02 от pr0100
Цитата: Николай от 25.04.17, 08:35:22
А можно сохранить в 5 версии? Имеем официально 9, но даже в 14 не открывается, А Вьювер воспроизводит неподвижную картинку... ::)

Попробуйте, сохранил в 14.2. При сохранении в 5ю версию перестает работать.
Описание: в файле основного фрагмента создаемлокальный  фрагмент_1 и фрагмент_2, где начало координат каждого привязываем к размерным параметрам центра окружности. И с помощью переменных можем двигать фрагмент. Фрагмент в нашем случае аналогичен макро-элементу.

Николай

Хотя в версии 14.00 и не открылось, но, благодаря видео, принцип стал понятен, спасибо. А в качестве бонуса прикладываю чертёж этого штангенциркуля- может пригодиться. :)

ТрындецЪ

Как при сохранении фрагмента в формат *.dxf установить версию Автокада 2000.
iDocument2D.ksSaveToDXF (PathName) не даёт выбора версии.
Полагаю, что надо  через конвертер сохранять и настраивать ConverterParameters( long command), но где получить информацию от этих параметрах?

Sabahs

Только сохранением через конвертер, установить через визуальный диалог или разбираться с командами конвертера.

ТрындецЪ

Не могу докопаться до переменных через интерфейс iKompasDocument2D1.

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)

iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iKompasDocument2D1 = KAPI7.IKompasDocument2D1(iKompasDocument2D)

print "1: ", iKompasDocument2D1
print "2: ", iKompasDocument2D1.Variables
print "3: ", iKompasDocument2D1.VariablesCount

Результат:
1:  <Kompas10API7.IKompasDocument2D1 instance at 0x111656632>
2:  <bound method IKompasDocument2D1.Variables of <Kompas10API7.IKompasDocument2D1 instance at 0x111656632>>
3:  <bound method IKompasDocument2D1.VariablesCount of <Kompas10API7.IKompasDocument2D1 instance at 0x111656632>>

Не знаю какие переменные видит  iKompasDocument2D1, но мне нужен доступ к пользовательским переменные 2D документа.

IView.Variables дал мне доступ к системным переменным, но пользовательские он не видит.

Sabahs

Вы его получили?
pKompasDocument2D1 :=  pKompasDocument2D as iKompasDocument2D1;

IgorT

Цитата: pr0100 от 25.04.17, 10:00:07
Попробуйте, сохранил в 14.2. При сохранении в 5ю версию перестает работать.
Описание: в файле основного фрагмента создаемлокальный  фрагмент_1 и фрагмент_2, где начало координат каждого привязываем к размерным параметрам центра окружности. И с помощью переменных можем двигать фрагмент. Фрагмент в нашем случае аналогичен макро-элементу.


Как Вам удалось наложить зависимости на геометрию фрагмента? Можно поподробнее рассказать?
Мне не удается повторить. :(

О! Похоже фрагменты позволят привязаться только  к началу координат фрагмента. Я правильно понял?

ТрындецЪ

Цитата: Sabahs от 17.05.17, 13:03:44
Вы его получили?
pKompasDocument2D1 :=  pKompasDocument2D as iKompasDocument2D1;

Судя по записи "1:  <Kompas10API7.IKompasDocument2D1 instance at 0x111656632>" наверное получил.
А вот из него ничего не получить. Может его к какому-то ещё интерфейсу привести надо?

Sabahs

И равен нулю.
Откройте SDK и посмотрите, что iKompasDocument2D1 получают от iKompasDocument2D.

ТрындецЪ

Цитата: Sabahs от 17.05.17, 13:23:45
Откройте SDK и посмотрите, что iKompasDocument2D1 получают от iKompasDocument2D.

Я так и получаю.
Для проверки работоспособности интерфейса решил проверить дочерний интерфейс ISelectionManager.
iApplication = KAPI7.IApplication(iApplication)

iDocument = iApplication.ActiveDocument

iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iKompasDocument2D1 = KAPI7.IKompasDocument2D1(iKompasDocument2D)

SelectionManager = iKompasDocument2D1.SelectionManager
SelectionManager.UnselectAll()

iKompasDocument2D1.RebuildDocument()


Код работает, выделение с объектов снимается.

ТрындецЪ

17.05.17, 13:51:20 #79 Последнее редактирование: 17.05.17, 14:22:24 от ТрындецЪ
Напал на след!
Оказывается методу VariablesCount() нужен аргумент 0/1 (False/True), чтобы он показал кол-во либо всех пользовательских переменных, либо кол-во только внешних переменных. В справке нет про это ни слова.
VariablesCount = iKompasDocument2D1.VariablesCount(0)

Для Variables() также нужен аргумент.
1 (True) - формирует список ссылок на интерфейсы всех внешних переменных, если переменная одна, то вместо ссылки на интерфейс выдается значение этой переменной.
0 (False) - формирует список ссылок на интерфейсы всех переменных у которых не пустая ячейка в столбце "Выражение", если переменная одна, то вместо ссылки на интерфейс выдается значение этой переменной, если у неё не пустая ячейка в столбце "Выражение".