Возможности Компас 3Д для моделирования светораспределения светильников

Автор axeblack, 08.11.18, 16:14:16

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

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

axeblack

Здравствуйте, возникла идея написать библиотеку для трассировки лучей прямо в компасе, используя созданную модель. Это будет являтся темой магистерской дисертации. Цель получить светораспределение (КСС, фотометрическое тело, изолинии и т.п.). Вот в чём вопрос можно ли это реализовать по примеру как у солид воркса с модулем оптикс. Ранее уже был написан алгоритм на делфи с трасировкой, там использовалась траингуляционная модель. По возможности посоветуйте литературу для написания библиотек для компаса, я вообще в этом новичок.

Николай

А эти библиотеки не решают ваши вопросы?

—Библиотека проектирования оптики для КОМПАС V10 и выше
—Библиотека проектирования оптики для КОМПАС LT V10 и выше

axeblack

Нет, не подходят.
Нужно именно выполнить трассировку.
На рисунках показано, на плоскости считается сколько лучей упало в каждую ячейку, а потом в экселе диаграмма строится.
Надо сделать всё это в компасе, что бы модель светильника каждый раз не экспортировать.

Вы, начните, поможем, на чём у Вас, возникла первая проблема?
Вы не знаете, как читать SDK?
PS. В SolidWorks, я не работаю.

axeblack

как нарисовать пространсвенную ломанную линию? Надо отрезок нарисовать.
Как обратиться к интерфейсам?
Можно на примере ILineSeg3dParam и ksPolyLineDefinition.
Пишу прикладную библиотеку на дэлфи.

UPD:
Вроде разобрался. Вот только теперь вылетает компас и ничего не рисуется(
Первая попытка, тут понял что оно не для рисования.
procedure Line_3D;
var
ILineSeg3dParam1:ILineSeg3dParam;
wq:boolean;
x1,y1,z1,
x2,y2,z2:double;
begin
x1:=0.5;y1:=0.7;z1:=0.47;
x2:=5.4;y2:=7.6;z2:=74.9;

//ILineSeg3dParam1.GetPointFirst(x1, y1, z1);
//ILineSeg3dParam1.GetPointLast(x2, y2, z2);

wq:=ILineSeg3dParam1.GetPointFirst(x1, y1, z1);
wq:=ILineSeg3dParam1.GetPointLast(x2, y2, z2);

  ksMessage('нарисовали 1');

end;


А тут почему не работает не понятно
procedure Line_3D;
var
IPolygonalLineDefinition1,
IPolygonalLineDefinition2,
IPolygonalLineDefinition3:IPolygonalLineDefinition;
x1,y1,z1,
x2,y2,z2,
r1, r2:double;
begin
x1:=0.5;y1:=0.7;z1:=0.47;
x2:=5.4;y2:=7.6;z2:=74.9;
r1:=1;r2:=1;

IPolygonalLineDefinition1.AddVertex(x1,y1,z1,r1);
IPolygonalLineDefinition2.AddVertex(x2,y2,z2,r2);

  ksMessage('нарисовали 1');

end;



Slaviation

Ниже работающий код на Python. Наверное совершенно несложно преобразовать его в код на Delphi :)

# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache

#  Получи константы
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 7
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_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
auxiliary_geom_container = kompas_api7_module.IAuxiliaryGeomContainer(part7)
poly_lines = auxiliary_geom_container.PolyLines
poly_line = kompas_api7_module.IPolyLine(poly_lines.Add())

curve_vertex_param = poly_line.AddVertex(0)
curve_vertex_param.BuildingType = kompas6_constants_3d.ksLBTByPoint
curve_vertex_param.SetParamVertex(86.0, -46.0, 38.0, 0.0)
curve_vertex_param.Update()

curve_vertex_param = poly_line.AddVertex(1)
curve_vertex_param.BuildingType = kompas6_constants_3d.ksLBTByPoint
curve_vertex_param.SetParamVertex(-4.0, -26.0, 71.0, 0.0)
curve_vertex_param.Update()

poly_line.Name = "Ломаная:1"
poly_line.Closed = False
poly_line.VertexVisible = False
poly_line.Update()