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

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

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

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

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

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

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

Касательная к дуге по двум точкам

Автор detrin, 16.03.15, 22:45:00

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

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

detrin

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

obesov

 Установить касание двух дуг любым удобным способом.
R2 система определит сама.

YNA

Если параметризация не желательна то так.

detrin

Спасибо за ответы, но хотелось бы найти радиус второй дуги через API. Вручную нет никакого труда построить вторую дугу, а вот через API я не нашёл подобной функции.

Смотрите интерфейс IArc, способ построения - плавающий центр, вариант 1.
+ Благодарностей: 2

Sprinter500

Я же говорю, кроме Sabahs тут про API никто на форуме ничего не знает, ну или отказывается помогать. Sabahs - молодец мужик, наверно уже 1000 раз мне помог по API !!!!
+ Благодарностей: 1

Цитата: Sabahs от 17.03.15, 15:13:08
Смотрите интерфейс IArc, способ построения - плавающий центр, вариант 1.
Самое удивительное, что касательная кривой по 2 точкам записывается через лог Компас-Макро по методу ksDocument2D::ksArcByPoint.

некий центр дуги :?: и возможно радиус(r=Math.Sqrt(x*x+y*y))


detrin

Цитата: Sabahs от 17.03.15, 15:13:08
Смотрите интерфейс IArc, способ построения - плавающий центр, вариант 1.
Спасибо, но к сожалению API7 вообще не пользовался. И осваивание нового пока что не очень успешно идёт. Не получается построить даже простейший примитив(((
Как получить интерфейс IDrawingObject? На данный момент пришёл к такому коду, но он не работает т.к. pObj =nil.
var
  pDocs    : IDocuments;
  pDoc     : IKompasDocument;
  pDrawObj : IDrawingObject;
  Arc      : IArc;
  pObj     : IDispatch;

  num : Integer;
  buf : AnsiString;
  A1, B1, C1, D1 : Double;
  TempX1, TempX2, TempX3, TempX4, TempX5, TempX6, TempX7, TempX8 : Double;
  TempY1, TempY2, TempY3, TempY4, TempY5, TempY6, TempY7, TempY8 : Double;
begin
  GetNewKompasAPI;
  if( newKompasAPI <> nil ) then
  begin
  pDocs := newKompasAPI.Documents;
    if ( pDocs <> nil) then
    begin
    pDoc := pDocs.Add( ksDocumentFragment, TRUE );
    pDrawObj := pObj As IDrawingObject;
    if  pDrawObj = nil  then Exit;
    Arc := pDrawObj As IArc;
    Arc.X1:=TempX3;
    Arc.Y1:=TempY3;
    Arc.X2:=TempX4;
    Arc.Y2:=TempY4;
    Arc.X3:=TempX5;
    Arc.Y3:=TempY5;
....



Смотрите пример Step1_API7_2D в SDK.
c:\Program Files\ASCON\KOMPAS-3D V16\SDK\Pascal\Delphi\Step1_API7_2D\
+ Благодарностей: 1

detrin

Спасибо, разобрался в структуре API7.
Кстати, выяснилось, что есть ещё один способ построения дуги. "Способ построения - плавающий центр, вариант 1" указанный вами мне не совсем подходил, т.к. я не знал второй угол. В итоге задал 2 точки и угол на первую точку и компас норм отработал.

detrin

Sabahs, ещё немного не поможете? Нужно сделать эквидистанту к контуру, но не пойму как этот контур собрать.
Я так понял нужен интерфейс IDrawingContour, но как в него добавлять примитивы?

Интерфейс IEquidistant, ему нужна базовая кривая - IDrawingObject.
ЦитироватьЯ так понял нужен интерфейс IDrawingContour, но как в него добавлять примитивы?
IContour.AddSegment