• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Python

Автор Веталь, 11.12.11, 22:30:59

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

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

# -*- coding: cp1251 -*-
#|rr

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

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

iDocument2D = iKompasObject.ActiveDocument2D()
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)

q = iDocument2D.ksNewGroup (0)
obj=iDocument2D.ksLineSeg(30, 70, 80, 70, 1)
obj=iDocument2D.ksLineSeg(30, 70, 55, 113, 1)
obj=iDocument2D.ksLineSeg(55, 113, 105, 113, 1)
obj=iDocument2D.ksLineSeg(105, 113, 80, 70, 1)
obj=iDocument2D.ksPoint( 84, 140, 0)
obj=iDocument2D.ksLineSeg(84, 140, 30, 70, 1)
obj=iDocument2D.ksLineSeg(84, 140, 55, 113, 1)
obj=iDocument2D.ksLineSeg(84, 140, 105, 113, 1)
obj=iDocument2D.ksLineSeg(84, 140, 80, 70, 1)
iDocument2D.ksEndGroup()
iDocument2D.ksCopyObj (q, 0, 0, 50,0, 1, 0)
iDocument2D.ksCopyObj (q, 0, 0, 100,0, 1, 0)

У меня три получается.

chelkar

Упс :shu:

Виноват. Я ошибся в первом сообщении. Закрывать группу через iDocument2D.ksEndObj() неправильно, а правильно будет как написал Sabash, через iDocument2D.ksEndGroup() .
iDocument2D.ksEndObj() группу не закрывает, поэтому первая копия добавилась в группу, а вторая копия скопировала уже две пирамиды.

Второй вариант, с q = iDocument2D.ksNewGroup (1), будет работать если перед копией поставить такие строчки:
iDocument2D.ksEndGroup () #Завершаем группу
iDocument2D.ksStoreTmpGroup (q) #Ставим временную группу в модель документа


Веталь

Спасибо огромное... Я думаю вы поняли что я новичок в этом деле :) А не могли бы вы мне подсказать или прислать какой нибудь учебник по питону для чайников... вот мое мыло Whisper235@yandex.ru За ранее спасибо

Я на Питоне не программирую, поэтому у меня нет книг, но возможно кто-то Вам поможет с литературой.

Веталь

так а как вы всему этому учились?

SDK читал, книги по Delphi, разбор примеров которые идут с Компасом  в папке c:\Program Files\ASCON\KOMPAS-3D V...\SDK\

chelkar

Проблема разбивается, как минимум на две.
Собственно знание языка и использование API КОМПАС.
По первой части.
По Python'у много литературы как в интернете, так и в печатном виде.
Мне вот эта ссылка помогает http://ru.wikibooks.org/wiki/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA_Python_2.6
Следует учитывать что Python много эффективнее использовать под Linux, а в связке с КОМПАСом используется надстройка PythonWin. Поэтому обратившись куда-либо на форум разработчиков можете получить "отлуп". Не любят там Windows.
По API КОМПАС надо смотреть справку, пробовать примеры, спрашивать в форуме.

Веталь

А вот для чего вообще нужны макросы? Что дает то что я код прописываю, если поставить на запись макрос и самому чертить то код все равно будет прописываться, так в чем прикол?

Для повторения часто выполняемых действий.

Slaviation

ЦитироватьА вот для чего вообще нужны макросы?
Макросы могут оказаться полезными для начинающих прикладных разработчиков: разобрать и модифицировать код макроса создания объекта легче чем писать этот код с нуля.

klimvv

ЦитироватьСледует учитывать что Python много эффективнее использовать под Linux....
.... получить "отлуп". Не любят там Windows.

ну что за глупость, что Вы человека пугаете?! эффективность Питона не зависит от ОС, да и на нормальных сайтах, где люди обсуждают вопросы программирования, а не порожняка гоняют - Вам всегда помогут независимо от того какая Оська у вас стоит.

Веталь

а кто то что то может посоветовать по поводу программирования в 3D? Я 2D вроде бы понял, по какому принципу все делается а смотрю на 3D и просто нечего толком не могу понять

Читайте SDK, там описаны принципы программирования в 3D, там есть и примеры, правда не Python, но принцип понять можно.

chelkar

Хотел написать словами, потом подумал что лучше всего простой пример.
Собственно прикладываю. Измените расширение на m3m.
Комментарии по тексту макроса

PS. Не забывайте, макрос можно записать в КОМПАС-Макро и посмотреть что получилось в коде.
Для 3D это тоже работает.

EasyComeEasyGo

Цитата: Веталь от 31.01.12, 00:40:18А вот для чего вообще нужны макросы? Что дает то что я код прописываю, если поставить на запись макрос и самому чертить то код все равно будет прописываться, так в чем прикол?
Цитата: Sabahs от 31.01.12, 01:41:15Для повторения часто выполняемых действий.
Иначе говоря, для того, для чего, собственно, и нужно программирование - моделирование сущностей и процессов реального мира на языке абстракций (согласно алгоритмической теории информации). Обратите внимание - "и процессов", а даже вычисление "2+2" - это процесс, просто очень кратковременный. Компьютеры для того и были придуманы, чтобы всякие процессы автоматизировать.

EasyComeEasyGo

Цитата: Веталь от 28.01.12, 21:19:56Спасибо огромное... Я думаю вы поняли что я новичок в этом деле :) А не могли бы вы мне подсказать или прислать какой нибудь учебник по питону для чайников... вот мое мыло Whisper235@yandex.ru За ранее спасибо
Цитата: Веталь от 28.01.12, 21:31:40
так а как вы всему этому учились?
Банальная математика, системология и семантика языков программирования. А всякие там API зазубривать нет смысла, их всегда в справочнике глянуть можно. Python лучше всего учить как синтаксический сахар над Lisp, а не над Delphi, но если как проще - то гуглить книжку самого Гвидо ван Россума, автора Питона.

Веталь

Здраствуйте, я в 3D создал пирамидку а как мне ее теперь розкопировать в количестве 10х10 вот код пирамидки... за ранее спасибо
# -*- coding: cp1251 -*-
#|3? ?????

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

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

iDocument3D = iKompasObject.ActiveDocument3D()

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOY)
iDefinition.SetPlane(iPlane)
iSketch.Create()

iDocument2D = iDefinition.BeginEdit()
iDefinition.EndEdit()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOZ)
iDefinition.SetPlane(iPlane)
iSketch.Create()

iDocument2D = iDefinition.BeginEdit()
iDefinition.EndEdit()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOZ)
iDefinition.SetPlane(iPlane)
iSketch.Create()

iDocument2D = iDefinition.BeginEdit()
iDocument2D.ksLineSeg(0.0, 0.0, 50.0, 0.0, 1)
iDocument2D.ksLineSeg(50.0, 0.0, 50.0, 50.0, 1)
iDocument2D.ksLineSeg(0.0, 0.0, 0.0, 50.0, 1)
iDocument2D.ksLineSeg(0.0, 50.0, 50.0, 50.0, 1)
iDefinition.EndEdit()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
obj = iPart.NewEntity(LDefin3D.o3d_planeOffset)
iDefinition = obj.GetDefinition()
iDefinition.direction = True
iDefinition.offset = 50.0
iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOZ)
iDefinition.SetPlane(iPlane)

obj.name = "????????? ?????????:1"
iColorParam = obj.ColorParam()
iColorParam.color = 16776960

obj.Create()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()
iCollection = iPart.EntityCollection(LDefin3D.o3d_planeOffset)
iCollection.SelectByPoint(0.0, 50.0, 0.0)
iPlane = iCollection.GetByIndex(0)
iDefinition.SetPlane(iPlane)
iSketch.Create()

iDocument2D = iDefinition.BeginEdit()

iDocument2D.ksPoint(25.0, 25.0, 0)
iDefinition.EndEdit()

iDocument2D = iDefinition.BeginEdit()
iDefinition.EndEdit()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
obj = iPart.NewEntity(LDefin3D.o3d_bossLoft)
iDefinition = obj.GetDefinition()
iSketches = iDefinition.Sketchs()
iDefinition.SetLoftParam(False, True, True)
iSketches.Add(iSketch)
iCollection = iPart.EntityCollection(LDefin3D.o3d_edge)
iCollection.SelectByPoint(25.0, 0.0, 0.0)
iEdge = iCollection.GetByIndex(0)
iEdgeDefinition = iEdge.GetDefinition()
iSketch = iEdgeDefinition.GetOwnerEntity()
iSketches.Add(iSketch)

iThinParam = iDefinition.ThinParam()
iThinParam.thin = False
iThinParam.normalThickness = 1.0
iThinParam.reverseThickness = 1.0
iThinParam.thinType = LDefin3D.dtNormal

obj.name = "???????? ?? ????????:1"
iColorParam = obj.ColorParam()
iColorParam.ambient = 0.5
iColorParam.color = 9474192
iColorParam.diffuse = 0.6
iColorParam.emission = 0.5
iColorParam.shininess = 0.8
iColorParam.specularity = 0.8
iColorParam.transparency = 1.0

obj.Create()

Веталь

И еще вопрос... Я создал одну пирамидку и создал ее копии 10 штук в горизонтальный ряд, потом я создал группу всего горизонтального ряда и собираюсь его копировать в верх... можно ли как то сделать что бы при каждом верхнем ряде добавлялось с каждой ст ороны по одной пирамидке, т.е что бы он розширялся?

chelkar

Конечно можно.
Можно даже и не копировать группу. Попробуем познакомиться с оператором for.
В прикреплении несколько модифицированный макрос.
Построение самой пирамиды определено в виде функции Pyramid с параметрами координат точки построения.
Теперь чтобы построить пирамиду нужно просто вызвать готовую функцию и передать ей нужные координаты.
Функцию вызываем в двойном цикле на операторе for.
Пирамидки размножаются с добавление справа и слева.

Администратор

Тему закрываю, т.к. она содержит слишком много разнородных вопросов, в результате её название неинформативно. Прошу далее для отдельных вопросов создавать темы с информативными названиями.

Спасибо за понимание!